diff options
Diffstat (limited to 'source/slang/slang-lower-to-ir.cpp')
| -rw-r--r-- | source/slang/slang-lower-to-ir.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index 854485185..1b97414fb 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -3263,11 +3263,10 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> { if(operand.token.type == TokenType::IntegerLiteral) { - const auto v = getIntegerLiteralValue(operand.token); // TODO: we should sign-extend these where appropriate, // difficult because it requires information on usage... return builder->emitSPIRVAsmOperandLiteral( - builder->getIntValue(builder->getUIntType(), v)); + builder->getIntValue(builder->getUIntType(), operand.knownValue)); } else if(operand.token.type == TokenType::StringLiteral) { @@ -3283,11 +3282,18 @@ struct ExprLoweringVisitorBase : ExprVisitor<Derived, LoweredValInfo> return builder->emitSPIRVAsmOperandId( builder->getStringValue(id)); } + case SPIRVAsmOperand::ResultMarker: + { + return builder->emitSPIRVAsmOperandResult(); + } case SPIRVAsmOperand::NamedValue: { - const auto id = operand.token.getContent(); - return builder->emitSPIRVAsmOperandEnum( - builder->getStringValue(id)); + const auto v = operand.knownValue; + const auto i = builder->getIntValue(builder->getIntType(), v); + if(operand.wrapInId) + return builder->emitSPIRVAsmOperandEnum(i, builder->getIntType()); + else + return builder->emitSPIRVAsmOperandEnum(i); } case SPIRVAsmOperand::SlangValue: { |
