From ebe8ddefc48478307d5f206cd3e40c41d28a36e3 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 26 Sep 2023 23:56:06 -0700 Subject: Various SPIRV fixes. (#3231) * Various SPIRV fixes. - Geometry shader support (WIP). - Fix texture get dimension and load. - Fold global GetElement(MakeArray/MakeVector) insts. - Call spvopt to inline all functions. - Translate OpImageSubscript. - Emit struct member names and global variable names. - Fix lowering of OpBitNot -> OpNot, instead of OpBitReverse. * Fix test. * Fix geometry shader. * Fix geometry shader emit. * Add atomic Image access test. * Fix tests. * don't fail if spirv-opt fails. * Update comments. * Fix test. * Cleanups. * indentation --------- Co-authored-by: Yong He Co-authored-by: Ellie Hermaszewska --- source/slang/slang-ir.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'source/slang/slang-ir.cpp') diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp index ff6c8c39e..5fa558e15 100644 --- a/source/slang/slang-ir.cpp +++ b/source/slang/slang-ir.cpp @@ -4708,7 +4708,12 @@ namespace Slang IRInst* base, IRInst* index) { - auto inst = createInst( + if (auto vectorFromScalar = as(base)) + return vectorFromScalar->getOperand(0); + if (base->getOp() == kIROp_MakeArrayFromElement) + return base->getOperand(0); + + auto inst = createInst( this, kIROp_GetElement, type, @@ -4737,15 +4742,8 @@ namespace Slang type = getVectorType(matrixType->getElementType(), matrixType->getColumnCount()); } SLANG_RELEASE_ASSERT(type); - auto inst = createInst( - this, - kIROp_GetElement, - type, - base, - index); - addInst(inst); - return inst; + return emitElementExtract(type, base, index); } IRInst* IRBuilder::emitElementExtract( -- cgit v1.2.3