mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-09 22:56:06 +00:00
I added the forcing of the "loop" attribute to all loops to address FXC failing on uniformity errors related to gradients in loops. Since then, Tint now implements UA and it recently became an error, so we no longer need this hack. As a result, FXC is now better able to cope with loops that it determines executes 0 times. Most e2e tests are affected because so many use loops, but 27 tests that were previously failing are now passing with this change: tint/bug/tint/1538.wgsl.expected.fxc.hlsl tint/bug/tint/1604.wgsl.expected.fxc.hlsl tint/bug/tint/1605.wgsl.expected.fxc.hlsl tint/unittest/reader/spirv/SpvParserCFGTest_ClassifyCFGEdges_LoopBreak_FromLoopHeader_SingleBlockLoop_TrueBranch.spvasm.expected.fxc.hlsl tint/unittest/reader/spirv/SpvParserCFGTest_ComputeBlockOrder_Loop_HeaderHasBreakUnless.spvasm.expected.fxc.hlsl tint/unittest/reader/spirv/SpvParserCFGTest_EmitBody_IfSelection_TrueBranch_LoopBreak.spvasm.expected.fxc.hlsl tint/unittest/reader/spirv/SpvParserCFGTest_FindIfSelectionInternalHeaders_TrueBranch_LoopBreak_Ok.spvasm.expected.fxc.hlsl tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_MultiBlockLoopIndex.spvasm.expected.fxc.hlsl tint/unittest/reader/spirv/SpvParserFunctionVarTest_EmitStatement_Phi_SingleBlockLoopIndex.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/similar-nested-ifs/0-opt.wgsl.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/spv-load-from-frag-color/1.wgsl.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/0.wgsl.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/0.wgsl.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-fragcoord-less-than-zero/1.wgsl.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/0-opt.wgsl.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.fxc.hlsl tint/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.fxc.hlsl Bug: tint:1522 Bug: tint:1538 Bug: tint:1604 Bug: tint:1605 Change-Id: I530b846b6b8df122ab351ff7b85d3e1c9ac11526 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/104121 Reviewed-by: Ben Clayton <bclayton@google.com> Commit-Queue: Antonio Maiorano <amaiorano@google.com> Kokoro: Kokoro <noreply+kokoro@google.com>
58 lines
1.9 KiB
HLSL
58 lines
1.9 KiB
HLSL
struct Inner {
|
|
int x;
|
|
};
|
|
|
|
cbuffer cbuffer_s : register(b0, space0) {
|
|
uint4 s[13];
|
|
};
|
|
|
|
float2x3 tint_symbol_7(uint4 buffer[13], uint offset) {
|
|
const uint scalar_offset = ((offset + 0u)) / 4;
|
|
const uint scalar_offset_1 = ((offset + 16u)) / 4;
|
|
return float2x3(asfloat(buffer[scalar_offset / 4].xyz), asfloat(buffer[scalar_offset_1 / 4].xyz));
|
|
}
|
|
|
|
float3x2 tint_symbol_8(uint4 buffer[13], uint offset) {
|
|
const uint scalar_offset_2 = ((offset + 0u)) / 4;
|
|
uint4 ubo_load = buffer[scalar_offset_2 / 4];
|
|
const uint scalar_offset_3 = ((offset + 8u)) / 4;
|
|
uint4 ubo_load_1 = buffer[scalar_offset_3 / 4];
|
|
const uint scalar_offset_4 = ((offset + 16u)) / 4;
|
|
uint4 ubo_load_2 = buffer[scalar_offset_4 / 4];
|
|
return float3x2(asfloat(((scalar_offset_2 & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_3 & 2) ? ubo_load_1.zw : ubo_load_1.xy)), asfloat(((scalar_offset_4 & 2) ? ubo_load_2.zw : ubo_load_2.xy)));
|
|
}
|
|
|
|
Inner tint_symbol_10(uint4 buffer[13], uint offset) {
|
|
const uint scalar_offset_5 = ((offset + 0u)) / 4;
|
|
const Inner tint_symbol_12 = {asint(buffer[scalar_offset_5 / 4][scalar_offset_5 % 4])};
|
|
return tint_symbol_12;
|
|
}
|
|
|
|
typedef Inner tint_symbol_11_ret[4];
|
|
tint_symbol_11_ret tint_symbol_11(uint4 buffer[13], uint offset) {
|
|
Inner arr[4] = (Inner[4])0;
|
|
{
|
|
for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
|
|
arr[i_1] = tint_symbol_10(buffer, (offset + (i_1 * 16u)));
|
|
}
|
|
}
|
|
return arr;
|
|
}
|
|
|
|
[numthreads(1, 1, 1)]
|
|
void main() {
|
|
const int3 a = asint(s[0].xyz);
|
|
const int b = asint(s[0].w);
|
|
const uint3 c = s[1].xyz;
|
|
const uint d = s[1].w;
|
|
const float3 e = asfloat(s[2].xyz);
|
|
const float f = asfloat(s[2].w);
|
|
const int2 g = asint(s[3].xy);
|
|
const int2 h = asint(s[3].zw);
|
|
const float2x3 i = tint_symbol_7(s, 64u);
|
|
const float3x2 j = tint_symbol_8(s, 96u);
|
|
const Inner k = tint_symbol_10(s, 128u);
|
|
const Inner l[4] = tint_symbol_11(s, 144u);
|
|
return;
|
|
}
|