diff options
| author | Anders Leino <aleino@nvidia.com> | 2024-11-11 19:26:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-11 09:26:55 -0800 |
| commit | 9aa7adb417cabfcb441035b415e80691332bcd1b (patch) | |
| tree | 9da3e643338e3870dbd1dab5d7f0dfd5c8a2c037 | |
| parent | c0d0611b7331bb19e8b0b39143e3be107db5925b (diff) | |
Transfer offset decorations when legalizing laid-out structs (#5525)
* Transfer offset decorations when legalizing laid-out structs
Struct legalization removing fields not representable in memory should transfer all
decorations in case the struct has already had offsets calculated.
Closes #5264.
* format code
---------
Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com>
Co-authored-by: Yong He <yonghe@outlook.com>
| -rw-r--r-- | source/slang/slang-legalize-types.cpp | 9 | ||||
| -rw-r--r-- | tests/autodiff/existential-1.slang | 1 | ||||
| -rw-r--r-- | tests/autodiff/existential-2.slang | 1 | ||||
| -rw-r--r-- | tests/autodiff/material/diff-bwd-falcor-material-system.slang | 1 | ||||
| -rw-r--r-- | tests/autodiff/material2/diff-bwd-falcor-material-system.slang | 1 | ||||
| -rw-r--r-- | tests/expected-failure-github.txt | 4 |
6 files changed, 7 insertions, 10 deletions
diff --git a/source/slang/slang-legalize-types.cpp b/source/slang/slang-legalize-types.cpp index 9c79e3167..6d827a412 100644 --- a/source/slang/slang-legalize-types.cpp +++ b/source/slang/slang-legalize-types.cpp @@ -487,8 +487,13 @@ struct TupleTypeBuilder fieldType = context->getBuilder()->getVoidType(); // TODO: shallow clone of modifiers, etc. - - builder->createStructField(ordinaryStructType, ee.fieldKey, fieldType); + IRStructField* originalField = findStructField(originalStructType, ee.fieldKey); + IRStructField* newField = + builder->createStructField(ordinaryStructType, ee.fieldKey, fieldType); + // In case the original struct had offset decorations attached, transfer those as + // well. The original offsets should still be valid, since we only skip fields of + // types that aren't representable in memory. + originalField->transferDecorationsTo(newField); } ordinaryType = LegalType::simple((IRType*)ordinaryStructType); diff --git a/tests/autodiff/existential-1.slang b/tests/autodiff/existential-1.slang index f60eb50e6..4f93dd04d 100644 --- a/tests/autodiff/existential-1.slang +++ b/tests/autodiff/existential-1.slang @@ -2,7 +2,6 @@ //TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type //TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-wgpu //TEST_INPUT:ubuffer(data=[0 0 0 0 0], stride=4):out,name=outputBuffer RWStructuredBuffer<float> outputBuffer; diff --git a/tests/autodiff/existential-2.slang b/tests/autodiff/existential-2.slang index 3bf988d75..dd68c2972 100644 --- a/tests/autodiff/existential-2.slang +++ b/tests/autodiff/existential-2.slang @@ -2,7 +2,6 @@ //TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type //TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-wgpu //TEST_INPUT:ubuffer(data=[0 0 0 0 0], stride=4):out,name=outputBuffer RWStructuredBuffer<float> outputBuffer; diff --git a/tests/autodiff/material/diff-bwd-falcor-material-system.slang b/tests/autodiff/material/diff-bwd-falcor-material-system.slang index df63b317a..6d4101d12 100644 --- a/tests/autodiff/material/diff-bwd-falcor-material-system.slang +++ b/tests/autodiff/material/diff-bwd-falcor-material-system.slang @@ -1,6 +1,5 @@ //TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-wgpu // outputBuffer is defined in IBSDF.slang //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0], stride=4):out,name=outputBuffer diff --git a/tests/autodiff/material2/diff-bwd-falcor-material-system.slang b/tests/autodiff/material2/diff-bwd-falcor-material-system.slang index 45387315e..bf57b8238 100644 --- a/tests/autodiff/material2/diff-bwd-falcor-material-system.slang +++ b/tests/autodiff/material2/diff-bwd-falcor-material-system.slang @@ -1,6 +1,5 @@ //TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type -//DISABLE_TEST(compute):COMPARE_COMPUTE_EX:-wgpu // outputBuffer is defined in IBSDF.slang //TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer diff --git a/tests/expected-failure-github.txt b/tests/expected-failure-github.txt index a7d0b6909..11dac66fe 100644 --- a/tests/expected-failure-github.txt +++ b/tests/expected-failure-github.txt @@ -6,10 +6,6 @@ tests/language-feature/saturated-cooperation/fuse.slang (vk) tests/bugs/byte-address-buffer-interlocked-add-f32.slang (vk) tests/serialization/obfuscated-serialized-module-test.slang.2 syn (mtl) tests/autodiff/custom-intrinsic.slang.2 syn (wgpu) -tests/autodiff/existential-1.slang.2 syn (wgpu) -tests/autodiff/existential-2.slang.2 syn (wgpu) -tests/autodiff/material/diff-bwd-falcor-material-system.slang.2 syn (wgpu) -tests/autodiff/material2/diff-bwd-falcor-material-system.slang.2 syn (wgpu) tests/bugs/atomic-coerce.slang.3 syn (wgpu) tests/bugs/buffer-swizzle-store.slang.3 syn (wgpu) tests/bugs/dxbc-double-problem.slang.6 syn (wgpu) |
