diff options
| author | Yong He <yonghe@outlook.com> | 2023-06-29 14:23:35 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-29 14:23:35 -0700 |
| commit | 47d0e8abe4f2fe3c2eede35079676210d1db0b1a (patch) | |
| tree | 32eedef9fa39875c9bd4f5014846d003a9695ff4 | |
| parent | 7f0c27a5ac40c1658daa05affd585c3dd0bbf415 (diff) | |
Small fixes to GLSL-legalize and func-property prop. (#2950)
Co-authored-by: Yong He <yhe@nvidia.com>
| -rw-r--r-- | source/slang/slang-ir-glsl-legalize.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-ir-propagate-func-properties.cpp | 1 | ||||
| -rw-r--r-- | tests/bugs/mutating/buffer-write-dce.slang | 28 | ||||
| -rw-r--r-- | tests/bugs/mutating/buffer-write-dce.slang.expected.txt | 1 |
4 files changed, 30 insertions, 2 deletions
diff --git a/source/slang/slang-ir-glsl-legalize.cpp b/source/slang/slang-ir-glsl-legalize.cpp index 216471d65..54eaa67a5 100644 --- a/source/slang/slang-ir-glsl-legalize.cpp +++ b/source/slang/slang-ir-glsl-legalize.cpp @@ -2807,7 +2807,7 @@ void legalizeConstantBufferLoadForGLSL(IRModule* module) builder.setInsertBefore(load); for (auto field : elementType->getFields()) { - auto fieldAddr = builder.emitFieldAddress(field->getFieldType(), load->getPtr(), field->getKey()); + auto fieldAddr = builder.emitFieldAddress(builder.getPtrType(field->getFieldType()), load->getPtr(), field->getKey()); auto fieldValue = builder.emitLoad(field->getFieldType(), fieldAddr); elements.add(fieldValue); } diff --git a/source/slang/slang-ir-propagate-func-properties.cpp b/source/slang/slang-ir-propagate-func-properties.cpp index f530e263d..df7869205 100644 --- a/source/slang/slang-ir-propagate-func-properties.cpp +++ b/source/slang/slang-ir-propagate-func-properties.cpp @@ -298,7 +298,6 @@ public: hasSideEffectCall = true; break; } - break; } } if (hasSideEffectCall) diff --git a/tests/bugs/mutating/buffer-write-dce.slang b/tests/bugs/mutating/buffer-write-dce.slang new file mode 100644 index 000000000..c784531d3 --- /dev/null +++ b/tests/bugs/mutating/buffer-write-dce.slang @@ -0,0 +1,28 @@ +//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj + +// Confirm that calling a mutating method to write to a buffer location doesn't +// get DCE'd. + +struct C +{ + int a; + [mutating] + void set(int val) + { + a = val; + } +} + +//TEST_INPUT:ubuffer(data=[0], stride=4):out, name outputBuffer +RWStructuredBuffer<C> outputBuffer; +void writeOutput(int tid) +{ + outputBuffer[tid].set(1); +} + +[numthreads(1, 1, 1)] +void computeMain(int3 dispatchThreadID : SV_DispatchThreadID) +{ + int tid = dispatchThreadID.x; + writeOutput(tid); +}
\ No newline at end of file diff --git a/tests/bugs/mutating/buffer-write-dce.slang.expected.txt b/tests/bugs/mutating/buffer-write-dce.slang.expected.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/tests/bugs/mutating/buffer-write-dce.slang.expected.txt @@ -0,0 +1 @@ +1 |
