diff options
Diffstat (limited to 'source/slang/vm.cpp')
| -rw-r--r-- | source/slang/vm.cpp | 27 |
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); |
