From 57b09a8986668626c37055e431fa0ac6449d7214 Mon Sep 17 00:00:00 2001 From: Jay Kwak <82421531+jkwak-work@users.noreply.github.com> Date: Fri, 7 Feb 2025 18:27:23 -0800 Subject: Use and() and or() functions for logical-AND and OR (#6310) * Use and() and or() functions for logical-AND and OR With this commit, Slang will emit function calls to `and()` and `or()` for the logical-AND and logical-OR when the operands are non-scalar and the target profile is SM6.0 and above. This is required change from SM6.0. For WGSL, there is no operator overloadings of `&&` and `||` when the operands are non-scalar. Unlike HLSL, WGSL also don't have `and()` nor `or()`. Alternatively, we can use `select()`. --- source/slang/slang-ir.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'source/slang/slang-ir.cpp') diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp index 6cf7a1786..07e8b2742 100644 --- a/source/slang/slang-ir.cpp +++ b/source/slang/slang-ir.cpp @@ -6020,6 +6020,20 @@ IRInst* IRBuilder::emitShl(IRType* type, IRInst* left, IRInst* right) return inst; } +IRInst* IRBuilder::emitAnd(IRType* type, IRInst* left, IRInst* right) +{ + auto inst = createInst(this, kIROp_And, type, left, right); + addInst(inst); + return inst; +} + +IRInst* IRBuilder::emitOr(IRType* type, IRInst* left, IRInst* right) +{ + auto inst = createInst(this, kIROp_Or, type, left, right); + addInst(inst); + return inst; +} + IRInst* IRBuilder::emitGetNativePtr(IRInst* value) { auto valueType = value->getDataType(); -- cgit v1.2.3