microsoft / DirectXShaderCompiler

This repo hosts the source for the DirectX Shader Compiler which is based on LLVM/Clang.
Other
3.05k stars 677 forks source link

Erroneous gradients warning when indexing to an array of textures #6587

Open godlikepanos opened 4 months ago

godlikepanos commented 4 months ago

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

devshgraphicsprogramming commented 4 months ago

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.

llvm-beanz commented 4 months ago

Looks like a bug in the diagnostic. Godbolt link.

sixzone11 commented 2 months ago

I also have met the same problem.

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

llvm-beanz commented 2 months ago

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