HLSL compiled to DXIL won't load in DirectX11
CallumCVM opened this issue · comments
Describe the bug
A HLSL vertex shader I am compiling to DXIL refuses to be created via ID3D11Device::CreateVertexShader due to the following error code:
D3D11 ERROR: ID3D11Device::CreateVertexShader: Vertex Shader is corrupt or in an unrecognized format. [ STATE_CREATION ERROR #166: CREATEVERTEXSHADER_INVALIDSHADERBYTECODE]
D3D11 ERROR: ID3D11Device::CreateVertexShader: Shader is corrupt or in an unrecognized format. [ STATE_CREATION ERROR #166: CREATEVERTEXSHADER_INVALIDSHADERBYTECODE]
To Reproduce
Shaders.zip
Steps to reproduce the behavior:
- Input shader attached [Mesh.vs], I have also attached the compiled vso [Compiled/Mesh.vso]
- Full parameters:
`Compiler::ResultDesc CompileShader(const std::string& data, ShaderStage stage)
{
Compiler::SourceDesc sourceDesc{};
Compiler::TargetDesc targetDesc{};
sourceDesc.source = data.c_str();
sourceDesc.stage = stage;
sourceDesc.entryPoint = "ShaderMain";
sourceDesc.numDefines = 0;
sourceDesc.defines = nullptr;
sourceDesc.loadIncludeCallback = LoadInclude;
Compiler::Options opts;
opts.optimizationLevel = 0;
targetDesc.asModule = false;
targetDesc.language = ShadingLanguage::Dxil;
targetDesc.version = nullptr;
auto result = Compiler::Compile(sourceDesc, {}, targetDesc);
return result;
}`
You may note that the constant buffer is commented out, this is due to another bug I have reported with the Dx shader compiler here: microsoft/DirectXShaderCompiler#3511
Expected behavior
I should be able to compile to DXIL, and load with Dx11.
No, D3D11 doesn't support DXIL. It's a by design behavior of DXC. Check microsoft/DirectXShaderCompiler#621.