2

プロジェクト内の.hlslファイルをC++DirectX11プロジェクト用にコンパイル済み/オフライン/ビルドタイムにしようとしています。Visual Studioは、.hlslファイルを.csoファイルにコンパイルします。SM 5.0の.csoファイルをプログラムに読み込んで、シェーダーを作成するのに問題があります。

プリコンパイルされた.csoファイルからピクセルシェーダーを作成する必要があるコードは次のとおりです。

ID3D11VertexShader* PS;
ID3DBlob* PS_Buffer;

D3DReadFileToBlob(L"PixelShader.cso", &PS_Buffer);
d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(), NULL, &PS);
d3d11DevCon->PSSetShader(PS, 0, 0);

ピクセルシェーダーは、単に青いピクセルを返すことになっています。Visual Studio 11でコンパイル設定を変更することにより、Shader Model 5.0にコンパイルされました。ただし、プログラムを実行すると、ビルドまたは実行時のエラーメッセージが表示されないにもかかわらず、レンダリングしようとしている三角形が表示されません。

実行時に以下を使用してコンパイルする場合:

D3DCompileFromFile(L"PixelSHader.hlsl", 0, 0, "main", "ps_5_0", 0, 0, &PS_Buffer, 0);

D3DReadFileToBlob(..)の代わりに、三角形はまだレンダリングされていません。

ただし、Shader Model 4.0を使用する場合、ビルド時またはランタイムのコンパイルに関係なく、青い三角形はそれが機能することを示します。

これが私のPixelShader.hlslファイルのコードです。万が一、Shader Model 5.0には古すぎて、私の問題の原因になる可能性がありますか?

float4 main() : SV_TARGET
{
    return float4(0.0f, 0.0f, 1.0f, 1.0f);
}

2010年6月のDirectXSDKではなく、WindowsSDKライブラリを使用しています。私のグラフィックカードはnVidia8800GTSです。

4

1 に答える 1

2

Shaderモデル5は、GeForce 400シリーズ以降のnVidiaカード、およびRadeon5000シリーズ以降のAMDカードでサポートされています。GeForce 8800はシェーダーモデル4のみをサポートしているため、シェーダーは実行されません。これを回避するには、(D3D_DRIVER_TYPE_REFERENCEを使用して)参照デバイスを使用できますが、これは非常に遅くなります。さらに、Windows 8プレビュー(D3D_FEATURE_LEVEL_11_0のWARPサポートを追加)がある場合は、WARPデバイスを使用できます。これは、参照デバイスよりもパフォーマンスが優れていますが、ハードウェアデバイスでの実行にはほど遠いものです。

于 2012-05-30T19:59:07.977 に答える