dawn-cmake/test/tint/buffer/storage/static_index/write.wgsl.expected.fxc.hlsl

116 lines
4.2 KiB
HLSL
Raw Normal View History

struct Inner {
int scalar_i32;
float scalar_f32;
};
RWByteAddressBuffer sb : register(u0, space0);
transform: Fixes for DecomposeMemoryAccess CloneContext::Replace(T* what, T* with) is bug-prone, as complex transforms may want to clone `what` multiple times, or not at all. In both cases, this will likely result in an ICE as either the replacement will be reachable multiple times, or not at all. The CTS test: webgpu:shader,execution,robust_access:linear_memory:storageClass="storage";storageMode="read_write";access="read";atomic=true;baseType="i32" Was triggering this brokenness with DecomposeMemoryAccess's use of CloneContext::Replace(T*, T*). Switch the usage of CloneContext::Replace(T*, T*) to the new function form. As std::function is copyable, it cannot hold a captured std::unique_ptr. This prevented the Replace() lambdas from capturing the necessary `BufferAccess` data, as this held a `std::unique_ptr<Offset>`. To fix this, use a `BlockAllocator` for Offsets, and use raw pointers instead. Because the function passed to Replace() is called just before the node is cloned, insertion of new functions will occur just before the currently evaluated module-scope entity. This allows us to remove the "insert_after" arguments to LoadFunc(), StoreFunc(), and AtomicFunc(). We can also kill the icky InsertGlobal() and TypeDeclOf() helpers. Bug: tint:993 Change-Id: I60972bc13a2fa819a163ee2671f61e82d0e68d2a Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/58222 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com> Commit-Queue: Ben Clayton <bclayton@google.com>
2021-07-15 20:29:09 +00:00
void tint_symbol_12(RWByteAddressBuffer buffer, uint offset, float2x2 value) {
buffer.Store2((offset + 0u), asuint(value[0u]));
buffer.Store2((offset + 8u), asuint(value[1u]));
}
void tint_symbol_13(RWByteAddressBuffer buffer, uint offset, float2x3 value) {
buffer.Store3((offset + 0u), asuint(value[0u]));
buffer.Store3((offset + 16u), asuint(value[1u]));
}
void tint_symbol_14(RWByteAddressBuffer buffer, uint offset, float2x4 value) {
buffer.Store4((offset + 0u), asuint(value[0u]));
buffer.Store4((offset + 16u), asuint(value[1u]));
}
void tint_symbol_15(RWByteAddressBuffer buffer, uint offset, float3x2 value) {
buffer.Store2((offset + 0u), asuint(value[0u]));
buffer.Store2((offset + 8u), asuint(value[1u]));
buffer.Store2((offset + 16u), asuint(value[2u]));
}
void tint_symbol_16(RWByteAddressBuffer buffer, uint offset, float3x3 value) {
buffer.Store3((offset + 0u), asuint(value[0u]));
buffer.Store3((offset + 16u), asuint(value[1u]));
buffer.Store3((offset + 32u), asuint(value[2u]));
}
void tint_symbol_17(RWByteAddressBuffer buffer, uint offset, float3x4 value) {
buffer.Store4((offset + 0u), asuint(value[0u]));
buffer.Store4((offset + 16u), asuint(value[1u]));
buffer.Store4((offset + 32u), asuint(value[2u]));
}
void tint_symbol_18(RWByteAddressBuffer buffer, uint offset, float4x2 value) {
buffer.Store2((offset + 0u), asuint(value[0u]));
buffer.Store2((offset + 8u), asuint(value[1u]));
buffer.Store2((offset + 16u), asuint(value[2u]));
buffer.Store2((offset + 24u), asuint(value[3u]));
}
void tint_symbol_19(RWByteAddressBuffer buffer, uint offset, float4x3 value) {
buffer.Store3((offset + 0u), asuint(value[0u]));
buffer.Store3((offset + 16u), asuint(value[1u]));
buffer.Store3((offset + 32u), asuint(value[2u]));
buffer.Store3((offset + 48u), asuint(value[3u]));
}
void tint_symbol_20(RWByteAddressBuffer buffer, uint offset, float4x4 value) {
buffer.Store4((offset + 0u), asuint(value[0u]));
buffer.Store4((offset + 16u), asuint(value[1u]));
buffer.Store4((offset + 32u), asuint(value[2u]));
buffer.Store4((offset + 48u), asuint(value[3u]));
}
void tint_symbol_21(RWByteAddressBuffer buffer, uint offset, float3 value[2]) {
float3 array_1[2] = value;
{
for(uint i = 0u; (i < 2u); i = (i + 1u)) {
buffer.Store3((offset + (i * 16u)), asuint(array_1[i]));
}
}
}
void tint_symbol_22(RWByteAddressBuffer buffer, uint offset, Inner value) {
buffer.Store((offset + 0u), asuint(value.scalar_i32));
buffer.Store((offset + 4u), asuint(value.scalar_f32));
}
void tint_symbol_23(RWByteAddressBuffer buffer, uint offset, Inner value[4]) {
Inner array_2[4] = value;
{
tint/hlsl: remove [loop] attribute on all loops 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>
2022-09-29 16:53:58 +00:00
for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
tint_symbol_22(buffer, (offset + (i_1 * 8u)), array_2[i_1]);
}
}
}
[numthreads(1, 1, 1)]
void main() {
sb.Store(0u, asuint(0.0f));
sb.Store(4u, asuint(0));
sb.Store(8u, asuint(0u));
sb.Store2(16u, asuint((0.0f).xx));
sb.Store2(24u, asuint((0).xx));
sb.Store2(32u, asuint((0u).xx));
sb.Store3(48u, asuint((0.0f).xxx));
sb.Store3(64u, asuint((0).xxx));
sb.Store3(80u, asuint((0u).xxx));
sb.Store4(96u, asuint((0.0f).xxxx));
sb.Store4(112u, asuint((0).xxxx));
sb.Store4(128u, asuint((0u).xxxx));
tint_symbol_12(sb, 144u, float2x2((0.0f).xx, (0.0f).xx));
tint_symbol_13(sb, 160u, float2x3((0.0f).xxx, (0.0f).xxx));
tint_symbol_14(sb, 192u, float2x4((0.0f).xxxx, (0.0f).xxxx));
tint_symbol_15(sb, 224u, float3x2((0.0f).xx, (0.0f).xx, (0.0f).xx));
tint_symbol_16(sb, 256u, float3x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx));
tint_symbol_17(sb, 304u, float3x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx));
tint_symbol_18(sb, 352u, float4x2((0.0f).xx, (0.0f).xx, (0.0f).xx, (0.0f).xx));
tint_symbol_19(sb, 384u, float4x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx, (0.0f).xxx));
tint_symbol_20(sb, 448u, float4x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx));
const float3 tint_symbol_24[2] = (float3[2])0;
tint_symbol_21(sb, 512u, tint_symbol_24);
const Inner tint_symbol_25 = (Inner)0;
tint_symbol_22(sb, 544u, tint_symbol_25);
const Inner tint_symbol_26[4] = (Inner[4])0;
tint_symbol_23(sb, 552u, tint_symbol_26);
return;
}