summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir.cpp')
-rw-r--r--source/slang/slang-ir.cpp47
1 files changed, 46 insertions, 1 deletions
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp
index 7aa51f31b..1a8f20f1a 100644
--- a/source/slang/slang-ir.cpp
+++ b/source/slang/slang-ir.cpp
@@ -2029,6 +2029,19 @@ namespace Slang
}
}
+ void IRBuilder::setInsertAfter(IRInst* insertAfter)
+ {
+ auto next = insertAfter->getNextInst();
+ if(next)
+ {
+ setInsertBefore(next);
+ }
+ else
+ {
+ setInsertInto(insertAfter->parent);
+ }
+ }
+
IRConstant* IRBuilder::_findOrEmitConstant(
IRConstant& keyInst)
{
@@ -2853,6 +2866,15 @@ namespace Slang
operands);
}
+ IRGLSLOutputParameterGroupType* IRBuilder::getGLSLOutputParameterGroupType(IRType* elementType)
+ {
+ IRInst* operands[] = { elementType };
+ return (IRGLSLOutputParameterGroupType*) getType(
+ kIROp_GLSLOutputParameterGroupType,
+ 1,
+ operands);
+ }
+
IRConstExprRate* IRBuilder::getConstExprRate()
{
return (IRConstExprRate*)getType(kIROp_ConstExprRate);
@@ -5836,7 +5858,29 @@ namespace Slang
// _isTypeOperandEqual handles comparison of types so can defer to it
return _isTypeOperandEqual(a, b);
}
-
+
+ bool isIntegralType(IRType *t)
+ {
+ if(auto basic = as<IRBasicType>(t))
+ {
+ switch(basic->getBaseType())
+ {
+ case BaseType::Int8:
+ case BaseType::Int16:
+ case BaseType::Int:
+ case BaseType::Int64:
+ case BaseType::UInt8:
+ case BaseType::UInt16:
+ case BaseType::UInt:
+ case BaseType::UInt64:
+ return true;
+ default:
+ return false;
+ }
+ }
+ return false;
+ }
+
void findAllInstsBreadthFirst(IRInst* inst, List<IRInst*>& outInsts)
{
Index index = outInsts.getCount();
@@ -6275,6 +6319,7 @@ namespace Slang
case kIROp_FieldAddress:
case kIROp_getElement:
case kIROp_getElementPtr:
+ case kIROp_MeshOutputRef:
case kIROp_constructVectorFromScalar:
case kIROp_swizzle:
case kIROp_swizzleSet: // Doesn't actually "set" anything - just returns the resulting vector