mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-05-15 20:01:22 +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>
71 lines
1.8 KiB
HLSL
71 lines
1.8 KiB
HLSL
[numthreads(1, 1, 1)]
|
|
void unused_entry_point() {
|
|
return;
|
|
}
|
|
|
|
struct S {
|
|
int4 arr[4];
|
|
};
|
|
|
|
static int4 src_private[4] = (int4[4])0;
|
|
groupshared int4 src_workgroup[4];
|
|
cbuffer cbuffer_src_uniform : register(b0, space0) {
|
|
uint4 src_uniform[4];
|
|
};
|
|
RWByteAddressBuffer src_storage : register(u1, space0);
|
|
|
|
typedef int4 ret_arr_ret[4];
|
|
ret_arr_ret ret_arr() {
|
|
const int4 tint_symbol_6[4] = (int4[4])0;
|
|
return tint_symbol_6;
|
|
}
|
|
|
|
S ret_struct_arr() {
|
|
const S tint_symbol_7 = (S)0;
|
|
return tint_symbol_7;
|
|
}
|
|
|
|
typedef int4 tint_symbol_2_ret[4];
|
|
tint_symbol_2_ret tint_symbol_2(uint4 buffer[4], uint offset) {
|
|
int4 arr_1[4] = (int4[4])0;
|
|
{
|
|
for(uint i = 0u; (i < 4u); i = (i + 1u)) {
|
|
const uint scalar_offset = ((offset + (i * 16u))) / 4;
|
|
arr_1[i] = asint(buffer[scalar_offset / 4]);
|
|
}
|
|
}
|
|
return arr_1;
|
|
}
|
|
|
|
typedef int4 tint_symbol_4_ret[4];
|
|
tint_symbol_4_ret tint_symbol_4(RWByteAddressBuffer buffer, uint offset) {
|
|
int4 arr_2[4] = (int4[4])0;
|
|
{
|
|
for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
|
|
arr_2[i_1] = asint(buffer.Load4((offset + (i_1 * 16u))));
|
|
}
|
|
}
|
|
return arr_2;
|
|
}
|
|
|
|
void foo(int4 src_param[4]) {
|
|
int4 src_function[4] = (int4[4])0;
|
|
int4 tint_symbol[4] = (int4[4])0;
|
|
const int4 tint_symbol_8[4] = {(1).xxxx, (2).xxxx, (3).xxxx, (3).xxxx};
|
|
tint_symbol = tint_symbol_8;
|
|
tint_symbol = src_param;
|
|
tint_symbol = ret_arr();
|
|
const int4 src_let[4] = (int4[4])0;
|
|
tint_symbol = src_let;
|
|
tint_symbol = src_function;
|
|
tint_symbol = src_private;
|
|
tint_symbol = src_workgroup;
|
|
const S tint_symbol_1 = ret_struct_arr();
|
|
tint_symbol = tint_symbol_1.arr;
|
|
tint_symbol = tint_symbol_2(src_uniform, 0u);
|
|
tint_symbol = tint_symbol_4(src_storage, 0u);
|
|
int dst_nested[4][3][2] = (int[4][3][2])0;
|
|
int src_nested[4][3][2] = (int[4][3][2])0;
|
|
dst_nested = src_nested;
|
|
}
|