2012-05-25 2 views
2

내 C++ DirectX 11 프로젝트 용으로 컴파일 된 .hlsl 파일을 pre/offline/buildtime에 컴파일하려고합니다. Visual Studio는 .hlsl 파일을 .cso 파일로 컴파일합니다. 이제는 SM 5.0의 .cso 파일을 내 프로그램으로 읽어서 셰이더를 만드는 데 문제가 있습니다.Visual Studio 11에서 Shader Model 5.0 컴파일 된 쉐이더는 어떻게 사용합니까?

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); 

픽셀 쉐이더가 단순히 파란색 픽셀을 반환하도록되어 : 여기

내가 미리 컴파일 된 .cso 파일에서 픽셀 쉐이더를 작성해야하는 코드입니다. Visual Studio 11에서 컴파일 설정을 변경하여 Shader Model 5.0으로 컴파일되었습니다. 그러나 프로그램을 실행하면 렌더링하려고하는 삼각형이 빌드 또는 런타임 오류 메시지가 표시되지 않더라도 표시되지 않습니다.

사용하여 런타임 컴파일 대신 D3DReadFileToBlob (...)의
D3DCompileFromFile(L"PixelSHader.hlsl", 0, 0, "main", "ps_5_0", 0, 0, &PS_Buffer, 0); 

는 여전히 렌더링에는 삼각형 없다.

그러나 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 월 DirectX SDK가 아닌 Windows SDK 라이브러리를 사용하고 있습니다. 내 그래픽 카드는 nVidia 8800 GTS입니다.

+0

8800GTS는 쉐이더 모델 4 만 지원합니다. 400 시리즈는 SM5를 지원합니다. –

+0

감사합니다. 구식 카드에서 SM 5.0을 테스트하려는 사람은 Device and Swapchain을 만들 때 D3D_DRIVER_TYPE을 D3D_DRIVER_TYPE_REFERENCE로 설정하십시오. 그러나 매우 느려질 수 : 'D3D11CreateDeviceAndSwapChain (NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, D3D_FEATURE_LEVEL_11_1, 1, D3D11_SDK_VERSION, swapchaindesc, swapchain_, 장치 _, NULL, & devicecontext _); ' – gundamb2

답변

2

셰이더 모델 5는 GeForce 400 시리즈 이상에서 지원되며 nVidia 카드 및 Radeon 5000 시리즈 이상에서는 AMD 카드 용입니다. GeForce 8800은 셰이더 모델 4 만 지원하므로 셰이더가 실행되지 않습니다. 이 문제를 해결하려면 (D3D_DRIVER_TYPE_REFERENCE를 사용하여) 참조 장치를 사용할 수 있지만 상당히 느릴 수 있습니다. 또한 Windows 8 미리보기 (D3D_FEATURE_LEVEL_11_0에 대한 WARP 지원 추가)가있는 경우 WARP 장치를 사용할 수 있습니다. 이는 참조 장치보다 성능이 좋지만 하드웨어 장치에서 거의 실행되지 않습니다.