DirectXShaderCompiler
DirectXShaderCompiler copied to clipboard
Erroneous gradients warning when indexing to an array of textures
Description
Getting the following warning which I think it's incorrect warning: Gradient operations are not affected by wave-sensitive data or control flow. [-Winline-asm]
Steps to Reproduce
Following was built with -T ps_6_6 -E PSMain
struct PSInput
{
nointerpolation int dynamicallyUniformIndex : IDX; // Same value for the whole drawcall
float2 uv : UV;
};
Texture2D texes[100];
SamplerState sam;
float4 PSMain(PSInput input) : SV_Target0
{
int idx = WaveReadLaneFirst(input.dynamicallyUniformIndex); // Scalarize
float4 val = texes[idx].Sample(sam, input.uv);
return val;
}
Actual Behavior The idx is used to select a texture and it shouldn't affect the gradients. I don't think the warning is correct.
Environment
- DXC version: DXC trunk & 1.8.2403
- Host Operating System: Any
You are indeed correct that the UV is the same, ergo the derivatives should be too, also that a shading quad needs to have the same subgroup.
However, due to HLSL's syntax, you have a reference to a texture constructed first, and then the Sample is the method. So it might be quite difficult to make the compiler catch up on what you're doing and thats its safe here.
Looks like a bug in the diagnostic. Godbolt link.
I also have met the same problem.
Is there any plans to resolve this in the near future?
@sixzone11, no this has been screened as dormant (see: dormant milestone).