diff options
| author | Yong He <yonghe@outlook.com> | 2023-08-15 13:01:31 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-15 13:01:31 -0700 |
| commit | e34b005c47d265105e7bba509cadaa3e225237af (patch) | |
| tree | 6b31e951eba7080526db2247ca05124967ab8e5b | |
| parent | 134f27df2695de086472ce70b1197b622fabc147 (diff) | |
Fix ByteAddressBuffer array legalization. (#3106)
Co-authored-by: Yong He <yhe@nvidia.com>
3 files changed, 18 insertions, 1 deletions
diff --git a/source/slang/slang-ir-byte-address-legalize.cpp b/source/slang/slang-ir-byte-address-legalize.cpp index a6d0acee7..b3260c8c7 100644 --- a/source/slang/slang-ir-byte-address-legalize.cpp +++ b/source/slang/slang-ir-byte-address-legalize.cpp @@ -74,6 +74,8 @@ struct ByteAddressBufferLegalizationContext void processGetEquivalentStructuredBuffer(IRInst* inst) { + m_builder.setInsertBefore(inst); + // We need to see what type it is to be interpreted as. auto type = inst->getDataType(); @@ -83,7 +85,6 @@ struct ByteAddressBufferLegalizationContext // The buffer is operand 0 auto buffer = inst->getOperand(0); - // Get the equivalent structured buffer for the buffer. if( auto structuredBuffer = getEquivalentStructuredBuffer(elementType, buffer) ) { diff --git a/tests/bugs/byte-address-buffer-interlocked-add-f32.slang b/tests/bugs/byte-address-buffer-interlocked-add-f32.slang new file mode 100644 index 000000000..f1fccdcf3 --- /dev/null +++ b/tests/bugs/byte-address-buffer-interlocked-add-f32.slang @@ -0,0 +1,14 @@ +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type + +//TEST_INPUT: set buffer = [ubuffer(data=[0]), ubuffer(data=[1])] +RWByteAddressBuffer buffer[2]; + +//TEST_INPUT:ubuffer(data=[0], stride=4):out,name outputBuffer +RWStructuredBuffer<float> outputBuffer; + +[numthreads(1,1,1)] +void computeMain( uint2 dispatchThreadID : SV_DispatchThreadID ) +{ + buffer[0].InterlockedAddF32(0, 1.0f); + outputBuffer[dispatchThreadID.x] = buffer[0].Load<float>(0); +}
\ No newline at end of file diff --git a/tests/bugs/byte-address-buffer-interlocked-add-f32.slang.expected.txt b/tests/bugs/byte-address-buffer-interlocked-add-f32.slang.expected.txt new file mode 100644 index 000000000..f49a13c3e --- /dev/null +++ b/tests/bugs/byte-address-buffer-interlocked-add-f32.slang.expected.txt @@ -0,0 +1,2 @@ +type: float +1.0 |
