summaryrefslogtreecommitdiffstats
path: root/source/slang/vm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/vm.cpp')
-rw-r--r--source/slang/vm.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/source/slang/vm.cpp b/source/slang/vm.cpp
index d795a841b..ffc455232 100644
--- a/source/slang/vm.cpp
+++ b/source/slang/vm.cpp
@@ -877,6 +877,33 @@ void resumeThread(
memcpy(elementData, srcPtr, size);
}
break;
+
+ case kIROp_BufferElementRef:
+ {
+ VMType ptrType = decodeType(frame, &ip);
+ VMType type = ((VMPtrTypeImpl*)ptrType.getImpl())->base;
+
+ UInt argCount = decodeUInt(&ip);
+ void* argPtrs[16] = { 0 };
+ for( UInt aa = 0; aa < argCount; ++aa )
+ {
+ void* argPtr = decodeOperandPtr<void>(frame, &ip);
+ argPtrs[aa] = argPtr;
+ }
+
+ void* dest = decodeOperandPtr<void>(frame, &ip);
+
+ char* bufferData = *(char**)argPtrs[0];
+ uint32_t index = *(uint32_t*)argPtrs[1];
+
+ auto size = type.getSize();
+ char* elementData = bufferData + index*size;
+
+ *(void**)dest = elementData;
+ }
+ break;
+
+
case kIROp_Call:
{
VMType type = decodeType(frame, &ip);