summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-03-19 17:02:02 -0700
committerGitHub <noreply@github.com>2024-03-19 17:02:02 -0700
commit05f403be96f0d991a3ef949e5a6a6fb3b416e1ff (patch)
tree736a0d352ddea742ab77401091ab9134e60f23e2
parent2b55de9263dc594fd2b037b7f3e3727f9a3ce9fd (diff)
Fix regression on pointer address space handling. (#3797)
-rw-r--r--source/slang/slang-ir-lower-buffer-element-type.cpp8
-rw-r--r--tests/bugs/gh-3795.slang24
2 files changed, 28 insertions, 4 deletions
diff --git a/source/slang/slang-ir-lower-buffer-element-type.cpp b/source/slang/slang-ir-lower-buffer-element-type.cpp
index eb5fba6a9..7deb5f151 100644
--- a/source/slang/slang-ir-lower-buffer-element-type.cpp
+++ b/source/slang/slang-ir-lower-buffer-element-type.cpp
@@ -651,7 +651,7 @@ namespace Slang
for (UInt i = 0; i < user->getOperandCount(); i++)
args.add(user->getOperand(i));
auto newArrayPtrVal = builder.emitFieldAddress(
- builder.getPtrType(loweredElementTypeInfo.loweredInnerArrayType),
+ getLoweredPtrLikeType(ptrVal->getDataType(), loweredElementTypeInfo.loweredInnerArrayType),
ptrVal,
loweredElementTypeInfo.loweredInnerStructKey);
builder.replaceOperand(use, newArrayPtrVal);
@@ -745,7 +745,7 @@ namespace Slang
{
IRInst* resultInst = nullptr;
auto dataPtr = builder.emitFieldAddress(
- builder.getPtrType(matrixTypeInfo->loweredInnerArrayType),
+ getLoweredPtrLikeType(majorAddr->getDataType(), matrixTypeInfo->loweredInnerArrayType),
majorGEP->getBase(),
matrixTypeInfo->loweredInnerStructKey);
if (getIntVal(matrixType->getLayout()) == SLANG_MATRIX_LAYOUT_COLUMN_MAJOR)
@@ -774,7 +774,7 @@ namespace Slang
if (storeInst->getOperand(0) != majorAddr)
break;
auto dataPtr = builder.emitFieldAddress(
- builder.getPtrType(matrixTypeInfo->loweredInnerArrayType),
+ getLoweredPtrLikeType(majorAddr->getDataType(), matrixTypeInfo->loweredInnerArrayType),
majorGEP->getBase(),
matrixTypeInfo->loweredInnerStructKey);
if (getIntVal(matrixType->getLayout()) == SLANG_MATRIX_LAYOUT_COLUMN_MAJOR)
@@ -804,7 +804,7 @@ namespace Slang
Swap(rowIndex, colIndex);
}
auto dataPtr = builder.emitFieldAddress(
- builder.getPtrType(matrixTypeInfo->loweredInnerArrayType),
+ getLoweredPtrLikeType(majorAddr->getDataType(), matrixTypeInfo->loweredInnerArrayType),
majorGEP->getBase(),
matrixTypeInfo->loweredInnerStructKey);
auto vectorAddr = builder.emitElementAddress(dataPtr, rowIndex);
diff --git a/tests/bugs/gh-3795.slang b/tests/bugs/gh-3795.slang
new file mode 100644
index 000000000..4030c565a
--- /dev/null
+++ b/tests/bugs/gh-3795.slang
@@ -0,0 +1,24 @@
+//TEST:SIMPLE(filecheck=CHECK): -target spirv -emit-spirv-directly
+
+// CHECK: OpEntryPoint
+
+struct Tester
+{
+ uint values[2];
+};
+
+struct TestPush
+{
+ Tester* src;
+ uint* dst;
+};
+
+[[vk::push_constant]] TestPush test_p;
+
+[shader("compute")]
+[numthreads(1,1,1)]
+void main(uint3 dtid : SV_DispatchThreadID)
+{
+ uint value = test_p.src.values[0];
+ *test_p.dst = value;
+}