2021-07-13 12:18:13 +00:00
|
|
|
struct Inner {
|
2022-11-30 02:47:27 +00:00
|
|
|
int scalar_i32;
|
|
|
|
float scalar_f32;
|
2021-07-13 12:18:13 +00:00
|
|
|
};
|
|
|
|
|
2023-03-31 17:55:19 +00:00
|
|
|
RWByteAddressBuffer sb : register(u0);
|
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
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_12(uint offset, float2x2 value) {
|
|
|
|
sb.Store2((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store2((offset + 8u), asuint(value[1u]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_13(uint offset, float2x3 value) {
|
|
|
|
sb.Store3((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store3((offset + 16u), asuint(value[1u]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_14(uint offset, float2x4 value) {
|
|
|
|
sb.Store4((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store4((offset + 16u), asuint(value[1u]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_15(uint offset, float3x2 value) {
|
|
|
|
sb.Store2((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store2((offset + 8u), asuint(value[1u]));
|
|
|
|
sb.Store2((offset + 16u), asuint(value[2u]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_16(uint offset, float3x3 value) {
|
|
|
|
sb.Store3((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store3((offset + 16u), asuint(value[1u]));
|
|
|
|
sb.Store3((offset + 32u), asuint(value[2u]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_17(uint offset, float3x4 value) {
|
|
|
|
sb.Store4((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store4((offset + 16u), asuint(value[1u]));
|
|
|
|
sb.Store4((offset + 32u), asuint(value[2u]));
|
2021-07-13 12:18:13 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_18(uint offset, float4x2 value) {
|
|
|
|
sb.Store2((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store2((offset + 8u), asuint(value[1u]));
|
|
|
|
sb.Store2((offset + 16u), asuint(value[2u]));
|
|
|
|
sb.Store2((offset + 24u), asuint(value[3u]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_19(uint offset, float4x3 value) {
|
|
|
|
sb.Store3((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store3((offset + 16u), asuint(value[1u]));
|
|
|
|
sb.Store3((offset + 32u), asuint(value[2u]));
|
|
|
|
sb.Store3((offset + 48u), asuint(value[3u]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_20(uint offset, float4x4 value) {
|
|
|
|
sb.Store4((offset + 0u), asuint(value[0u]));
|
|
|
|
sb.Store4((offset + 16u), asuint(value[1u]));
|
|
|
|
sb.Store4((offset + 32u), asuint(value[2u]));
|
|
|
|
sb.Store4((offset + 48u), asuint(value[3u]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_21(uint offset, float3 value[2]) {
|
2023-02-14 13:52:43 +00:00
|
|
|
float3 array_1[2] = value;
|
2022-11-30 02:47:27 +00:00
|
|
|
{
|
|
|
|
for(uint i = 0u; (i < 2u); i = (i + 1u)) {
|
2023-02-24 17:16:55 +00:00
|
|
|
sb.Store3((offset + (i * 16u)), asuint(array_1[i]));
|
2022-11-30 02:47:27 +00:00
|
|
|
}
|
|
|
|
}
|
2021-07-13 12:18:13 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_22(uint offset, Inner value) {
|
|
|
|
sb.Store((offset + 0u), asuint(value.scalar_i32));
|
|
|
|
sb.Store((offset + 4u), asuint(value.scalar_f32));
|
2021-07-13 12:18:13 +00:00
|
|
|
}
|
|
|
|
|
2023-02-24 17:16:55 +00:00
|
|
|
void sb_store_23(uint offset, Inner value[4]) {
|
2023-02-14 13:52:43 +00:00
|
|
|
Inner array_2[4] = value;
|
2021-07-16 19:47:44 +00:00
|
|
|
{
|
2022-09-29 16:53:58 +00:00
|
|
|
for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
|
2023-02-24 17:16:55 +00:00
|
|
|
sb_store_22((offset + (i_1 * 8u)), array_2[i_1]);
|
2021-07-16 19:47:44 +00:00
|
|
|
}
|
|
|
|
}
|
2021-07-13 12:18:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[numthreads(1, 1, 1)]
|
|
|
|
void main() {
|
2022-11-30 02:47:27 +00:00
|
|
|
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));
|
2023-02-24 17:16:55 +00:00
|
|
|
sb_store_12(144u, float2x2((0.0f).xx, (0.0f).xx));
|
|
|
|
sb_store_13(160u, float2x3((0.0f).xxx, (0.0f).xxx));
|
|
|
|
sb_store_14(192u, float2x4((0.0f).xxxx, (0.0f).xxxx));
|
|
|
|
sb_store_15(224u, float3x2((0.0f).xx, (0.0f).xx, (0.0f).xx));
|
|
|
|
sb_store_16(256u, float3x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx));
|
|
|
|
sb_store_17(304u, float3x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx));
|
|
|
|
sb_store_18(352u, float4x2((0.0f).xx, (0.0f).xx, (0.0f).xx, (0.0f).xx));
|
|
|
|
sb_store_19(384u, float4x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx, (0.0f).xxx));
|
|
|
|
sb_store_20(448u, float4x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx));
|
|
|
|
const float3 tint_symbol[2] = (float3[2])0;
|
|
|
|
sb_store_21(512u, tint_symbol);
|
|
|
|
const Inner tint_symbol_1 = (Inner)0;
|
|
|
|
sb_store_22(544u, tint_symbol_1);
|
|
|
|
const Inner tint_symbol_2[4] = (Inner[4])0;
|
|
|
|
sb_store_23(552u, tint_symbol_2);
|
2021-07-13 12:18:13 +00:00
|
|
|
return;
|
|
|
|
}
|