DirectXShaderCompiler icon indicating copy to clipboard operation
DirectXShaderCompiler copied to clipboard

Erroneous gradients warning when indexing to an array of textures

Open godlikepanos opened this issue 1 year ago • 3 comments

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

godlikepanos avatar May 06 '24 08:05 godlikepanos

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.

llvm-beanz avatar May 07 '24 17:05 llvm-beanz

I also have met the same problem.

Is there any plans to resolve this in the near future?

sixzone11 avatar Jul 01 '24 10:07 sixzone11

@sixzone11, no this has been screened as dormant (see: dormant milestone).

llvm-beanz avatar Jul 11 '24 00:07 llvm-beanz