microsoft / microsoft/DirectXShaderCompiler
ddx/ddy fails to compile when passed a double literal
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 3.7k
- Forks
- 900
- Avg merge
- 2d 11h
- Merged PRs (30d)
- 44
Description
Description
Shaders that pass a constant double literal to a pixel derivative instruction fail to compile.
The example uses ddx but it also happens for ddy, ddx_fine, ddy_fine, ddx_coarse, ddy_coarse and fwidth.
Steps to Reproduce
Shader:
[shader("pixel")]
void PSMain() {
if (ddx(7.5) != 0.0) discard;
}
Command: dxc.exe ddx_constant.hlsl -T ps_6_6 -E PSMain
Actual Behavior
error: validation errors
ddx_constant.hlsl:7:9: error: DXIL intrinsic overload must be valid.
note: at '%1 = call double @dx.op.unary.f64(i32 83, double 7.500000e+00)' in block '#0' of function 'PSMain'.
Validation failed.
I would expect this to work - works fine with FXC. Or at least a better error message.
The program compiles fine if you change the 7.5 to 7.5f.
Environment
dxcompiler.dll: 1.9(5184-21d28f72)(1.9.2602.17) - 1.9.2602.17 (21d28f727)- Windows 10
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the issue with ddx_constant.hlsl, entry point PSMain, and dxc.exe ddx_constant.hlsl -T ps_6_6 -E PSMain. Trace how the compiler handles the listed pixel derivative intrinsics when given a double literal versus a float literal. Done means the shader compiles successfully, or reports a clearer diagnostic, for ddx, ddy, the fine and coarse variants, and fwidth.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100