summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-ast-expr.h13
-rw-r--r--source/slang/slang-check-decl.cpp18
-rw-r--r--source/slang/slang-check-expr.cpp79
-rw-r--r--source/slang/slang-check-impl.h19
-rw-r--r--source/slang/slang-check-overload.cpp9
-rw-r--r--source/slang/slang-lower-to-ir.cpp46
-rw-r--r--tests/compute/logic-short-circuit-evaluation.slang28
-rw-r--r--tests/compute/logic-short-circuit-evaluation.slang.expected.txt16
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang192
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang192
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang192
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang132
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang192
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang130
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang114
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang122
-rw-r--r--tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang112
17 files changed, 908 insertions, 698 deletions
diff --git a/source/slang/slang-ast-expr.h b/source/slang/slang-ast-expr.h
index 9a7993937..fa1b27a04 100644
--- a/source/slang/slang-ast-expr.h
+++ b/source/slang/slang-ast-expr.h
@@ -431,6 +431,19 @@ class SelectExpr: public OperatorExpr
SLANG_AST_CLASS(SelectExpr)
};
+class LogicOperatorShortCircuitExpr: public OperatorExpr
+{
+ SLANG_AST_CLASS(LogicOperatorShortCircuitExpr)
+public:
+ enum Flavor
+ {
+ And, // &&
+ Or, // ||
+ };
+ Flavor flavor;
+};
+
+
class GenericAppExpr: public AppExprBase
{
SLANG_AST_CLASS(GenericAppExpr)
diff --git a/source/slang/slang-check-decl.cpp b/source/slang/slang-check-decl.cpp
index 4dfffc414..3596b7045 100644
--- a/source/slang/slang-check-decl.cpp
+++ b/source/slang/slang-check-decl.cpp
@@ -310,6 +310,7 @@ namespace Slang
void visitParamDecl(ParamDecl* paramDecl);
void visitAggTypeDecl(AggTypeDecl* aggTypeDecl);
+
};
template<typename VisitorType>
@@ -1814,11 +1815,18 @@ namespace Slang
{
if (auto initExpr = varDecl->initExpr)
{
- // If the variable has an explicit initial-value expression,
- // then we simply need to check that expression and coerce
- // it to the type of the variable.
- //
- initExpr = CheckTerm(initExpr);
+ // Disable the short-circuiting for static const variable init expression
+ bool isStaticConst = varDecl->hasModifier<HLSLStaticModifier>() &&
+ varDecl->hasModifier<ConstModifier>();
+
+ auto subVisitor = isStaticConst?
+ SemanticsVisitor(disableShortCircuitLogicalExpr()) : *this;
+ // If the variable has an explicit initial-value expression,
+ // then we simply need to check that expression and coerce
+ // it to the type of the variable.
+ //
+ initExpr = subVisitor.CheckTerm(initExpr);
+
initExpr = coerce(CoercionSite::Initializer, varDecl->type.Ptr(), initExpr);
varDecl->initExpr = initExpr;
diff --git a/source/slang/slang-check-expr.cpp b/source/slang/slang-check-expr.cpp
index 55ff90759..89a7373ee 100644
--- a/source/slang/slang-check-expr.cpp
+++ b/source/slang/slang-check-expr.cpp
@@ -1906,9 +1906,17 @@ namespace Slang
{
auto baseExpr = checkBaseForMemberExpr(subscriptExpr->baseExpression);
+ // If the base expression is a type, it means that this is an array declaration,
+ // then we should disable short-circuit in case there is logical expression in
+ // the subscript
+ auto baseType = baseExpr->type.Ptr();
+ auto baseTypeType = as<TypeType>(baseType);
+ auto subVisitor = (baseTypeType && m_shouldShortCircuitLogicExpr)?
+ SemanticsVisitor(disableShortCircuitLogicalExpr()) : *this;
+
for (auto& arg : subscriptExpr->indexExprs)
{
- arg = CheckTerm(arg);
+ arg = subVisitor.CheckTerm(arg);
}
// If anything went wrong in the base expression,
@@ -1920,8 +1928,7 @@ namespace Slang
// Otherwise, we need to look at the type of the base expression,
// to figure out how subscripting should work.
- auto baseType = baseExpr->type.Ptr();
- if (auto baseTypeType = as<TypeType>(baseType))
+ if (baseTypeType)
{
// We are trying to "index" into a type, so we have an expression like `float[2]`
// which should be interpreted as resolving to an array type.
@@ -2371,12 +2378,69 @@ namespace Slang
return result;
}
+ Expr* SemanticsExprVisitor::convertToLogicOperatorExpr(InvokeExpr* expr)
+ {
+ LogicOperatorShortCircuitExpr* newExpr = nullptr;
+
+ // If the logic expression is inside the generic parameter list, it cannot support short-circuit
+ // which will generate the ifelse branch.
+ if (!m_shouldShortCircuitLogicExpr)
+ {
+ return nullptr;
+ }
+
+ if (auto varExpr = as<VarExpr>(expr->functionExpr))
+ {
+ if ((varExpr->name->text == "&&") || (varExpr->name->text == "||"))
+ {
+ // We only use short-circuiting in scalar input, will fall back
+ // to non-short-circuiting in vector input.
+ bool shortCircuitSupport = true;
+ for (auto & arg : expr->arguments)
+ {
+ if(!as<BasicExpressionType>(arg->type.type))
+ {
+ shortCircuitSupport = false;
+ }
+ }
+
+ if (!shortCircuitSupport)
+ {
+ return nullptr;
+ }
+
+ // We do the cast in the 2nd pass because we want to leave it for 'visitInvokeExpr'
+ // to handle if this expression doesn't support short-circuiting.
+ for (auto & arg : expr->arguments)
+ {
+ arg = coerce(CoercionSite::Argument, m_astBuilder->getBoolType(), arg);
+ }
+
+ expr->functionExpr = CheckTerm(expr->functionExpr);
+ newExpr = m_astBuilder->create<LogicOperatorShortCircuitExpr>();
+ if (varExpr->name->text == "&&")
+ {
+ newExpr->flavor = LogicOperatorShortCircuitExpr::Flavor::And;
+ }
+ else
+ {
+ newExpr->flavor = LogicOperatorShortCircuitExpr::Flavor::Or;
+ }
+ newExpr->loc = expr->loc;
+ newExpr->functionExpr = expr->functionExpr;
+ newExpr->type = m_astBuilder->getBoolType();
+ newExpr->arguments = expr->arguments;
+ }
+ }
+
+ return newExpr;
+ }
+
Expr* SemanticsExprVisitor::visitInvokeExpr(InvokeExpr* expr)
{
// check the base expression first
if (!expr->originalFunctionExpr)
expr->originalFunctionExpr = expr->functionExpr;
- expr->functionExpr = CheckTerm(expr->functionExpr);
auto treatAsDifferentiableExpr = m_treatAsDifferentiableExpr;
m_treatAsDifferentiableExpr = nullptr;
// Next check the argument expressions
@@ -2384,6 +2448,13 @@ namespace Slang
{
arg = CheckTerm(arg);
}
+
+ // if the expression is '&&' or '||', we will convert it
+ // to use short-circuit evaluation.
+ if (auto newExpr = convertToLogicOperatorExpr(expr))
+ return newExpr;
+
+ expr->functionExpr = CheckTerm(expr->functionExpr);
m_treatAsDifferentiableExpr = treatAsDifferentiableExpr;
// If we are in a differentiable function, register differential witness tables involved in
diff --git a/source/slang/slang-check-impl.h b/source/slang/slang-check-impl.h
index eb3f9486c..a209d96d9 100644
--- a/source/slang/slang-check-impl.h
+++ b/source/slang/slang-check-impl.h
@@ -848,6 +848,15 @@ namespace Slang
return result;
}
+ // Setup the flag to indicate disabling the short-circuiting evaluation
+ // for the logical expressions associted with the subcontext
+ SemanticsContext disableShortCircuitLogicalExpr()
+ {
+ SemanticsContext result(*this);
+ result.m_shouldShortCircuitLogicExpr = false;
+ return result;
+ }
+
TryClauseType getEnclosingTryClauseType() { return m_enclosingTryClauseType; }
SemanticsContext withEnclosingTryClauseType(TryClauseType tryClauseType)
@@ -945,6 +954,13 @@ namespace Slang
ASTBuilder* m_astBuilder = nullptr;
Scope* m_outerScope = nullptr;
+
+ // By default, we will support short-circuit evaluation for the logic expression.
+ // However, there are few exceptions where we will disable it:
+ // 1. the logic expression is inside the generic parameter list.
+ // 2. the logic expression is in the init expression of a static const variable.
+ // 3. the logic expression is in an array size declaration.
+ bool m_shouldShortCircuitLogicExpr = true;
};
struct OuterScopeContextRAII
@@ -2589,6 +2605,9 @@ namespace Slang
/// Perform semantic checking on a `modifier` that is being applied to the given `type`
Val* checkTypeModifier(Modifier* modifier, Type* type);
+ private:
+ // Convert the logic operator expression to not use 'InvokeExpr' type
+ Expr* convertToLogicOperatorExpr(InvokeExpr* expr);
};
diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp
index c6e6677b3..84c005f28 100644
--- a/source/slang/slang-check-overload.cpp
+++ b/source/slang/slang-check-overload.cpp
@@ -2113,6 +2113,15 @@ namespace Slang
Expr* SemanticsExprVisitor::visitGenericAppExpr(GenericAppExpr* genericAppExpr)
{
// Start by checking the base expression and arguments.
+
+ // Disable the short-circuiting logic expression when the experssion is in
+ // the generic parameter.
+ if (this->m_shouldShortCircuitLogicExpr)
+ {
+ auto subContext = disableShortCircuitLogicalExpr();
+ return dispatchExpr(genericAppExpr, subContext);
+ }
+
auto& baseExpr = genericAppExpr->functionExpr;
baseExpr = CheckTerm(baseExpr);
auto& args = genericAppExpr->arguments;
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index 5e35bf165..409cd65ee 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -4575,6 +4575,46 @@ struct ExprLoweringVisitorBase : public ExprVisitor<Derived, LoweredValInfo>
return LoweredValInfo::simple(result);
}
+ LoweredValInfo visitLogicOperatorShortCircuitExpr(LogicOperatorShortCircuitExpr* expr)
+ {
+ auto builder = context->irBuilder;
+ auto thenBlock = builder->createBlock();
+ auto elseBlock = builder->createBlock();
+ auto afterBlock = builder->createBlock();
+ auto irCond = getSimpleVal(context, lowerRValueExpr(context, expr->arguments[0]));
+
+ // ifElse(<first param>, %true-block, %false-block, %after-block)
+ builder->emitIfElse(irCond, thenBlock, elseBlock, afterBlock);
+
+ // true-block: nonconditionalBranch(%after-block, <second param> : Bool)
+ // true-block: nonconditionalBranch(%after-block, true) for ||
+ builder->insertBlock(thenBlock);
+ builder->setInsertInto(thenBlock);
+ auto trueVal = expr->flavor == LogicOperatorShortCircuitExpr::Flavor::And ?
+ getSimpleVal(context, lowerRValueExpr(context, expr->arguments[1])) :
+ LoweredValInfo::simple(context->irBuilder->getBoolValue(true)).val;
+
+ builder->emitBranch(afterBlock, 1, &trueVal);
+
+ // false-block: nonconditionalBranch(%after-block, false) for &&
+ // false-block: nonconditionalBranch(%after-block, <second param>: Bool) for ||
+ builder->insertBlock(elseBlock);
+ builder->setInsertInto(elseBlock);
+ auto falseVal = expr->flavor == LogicOperatorShortCircuitExpr::Flavor::And ?
+ LoweredValInfo::simple(context->irBuilder->getBoolValue(false)).val :
+ getSimpleVal(context, lowerRValueExpr(context, expr->arguments[1]));
+
+ builder->emitBranch(afterBlock, 1, &falseVal);
+
+ // after-block: return input parameter
+ builder->insertBlock(afterBlock);
+ builder->setInsertInto(afterBlock);
+ auto paramType = lowerType(context, expr->type.type);
+ auto result = builder->emitParam(paramType);
+
+ return LoweredValInfo::simple(result);
+ }
+
LoweredValInfo visitInvokeExpr(InvokeExpr* expr)
{
return sharedLoweringContext.visitInvokeExprImpl(expr, LoweredValInfo(), TryClauseEnvironment());
@@ -5197,6 +5237,12 @@ struct DestinationDrivenRValueExprLoweringVisitor
assign(context, destination, rValue);
}
+ void visitLogicOperatorShortCircuitExpr(LogicOperatorShortCircuitExpr* expr)
+ {
+ auto rValue = lowerRValueExpr(context, expr);
+ assign(context, destination, rValue);
+ }
+
void visitInvokeExpr(InvokeExpr* expr)
{
LoweredValInfo resultRVal;
diff --git a/tests/compute/logic-short-circuit-evaluation.slang b/tests/compute/logic-short-circuit-evaluation.slang
new file mode 100644
index 000000000..585a04770
--- /dev/null
+++ b/tests/compute/logic-short-circuit-evaluation.slang
@@ -0,0 +1,28 @@
+//TEST(compute):COMPARE_COMPUTE:-dx12 -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE:-vk -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-cuda -compute -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-cpu -compute -compile-arg -O3 -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj
+
+// Test doing vector comparisons
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+bool assignFunc(int index)
+{
+ outputBuffer[index] = 1;
+ return true;
+}
+
+[numthreads(16, 1, 1)]
+void computeMain(int3 dispatchThreadID : SV_DispatchThreadID)
+{
+ int index = dispatchThreadID.x;
+
+ // Only the first 4 elements will be 1
+ (index < 4) && assignFunc(index);
+
+ // Only the last 4 elements will be 1.
+ (index < 12) || assignFunc(index);
+}
diff --git a/tests/compute/logic-short-circuit-evaluation.slang.expected.txt b/tests/compute/logic-short-circuit-evaluation.slang.expected.txt
new file mode 100644
index 000000000..945f08f2c
--- /dev/null
+++ b/tests/compute/logic-short-circuit-evaluation.slang.expected.txt
@@ -0,0 +1,16 @@
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang
index 7bfc4d886..ad4dd1535 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Exclusive.slang
@@ -31,9 +31,9 @@ __generic<T : __BuiltinLogicalType>
bool test1Logical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupExclusiveAnd(T(1)) == T(1)
- && subgroupExclusiveOr(T(1)) == T(1)
- && subgroupExclusiveXor(T(1)) == T(1)
+ & subgroupExclusiveAnd(T(1)) == T(1)
+ & subgroupExclusiveOr(T(1)) == T(1)
+ & subgroupExclusiveXor(T(1)) == T(1)
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
@@ -44,61 +44,61 @@ bool testVLogical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupExclusiveAnd(gvec(T(1))) == gvec(T(1))
- && subgroupExclusiveOr(gvec(T(1))) == gvec(T(1))
- && subgroupExclusiveXor(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveAnd(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveOr(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveXor(gvec(T(1))) == gvec(T(1))
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
bool testLogical() {
return true
- && test1Logical<int>()
- && testVLogical<int, 2>()
- && testVLogical<int, 3>()
- && testVLogical<int, 4>()
- && test1Logical<int8_t>()
- && testVLogical<int8_t, 2>()
- && testVLogical<int8_t, 3>()
- && testVLogical<int8_t, 4>()
- && test1Logical<int16_t>()
- && testVLogical<int16_t, 2>()
- && testVLogical<int16_t, 3>()
- && testVLogical<int16_t, 4>()
- && test1Logical<int64_t>()
- && testVLogical<int64_t, 2>()
- && testVLogical<int64_t, 3>()
- && testVLogical<int64_t, 4>()
- && test1Logical<uint>()
- && testVLogical<uint, 2>()
- && testVLogical<uint, 3>()
- && testVLogical<uint, 4>()
- && test1Logical<uint8_t>()
- && testVLogical<uint8_t, 2>()
- && testVLogical<uint8_t, 3>()
- && testVLogical<uint8_t, 4>()
- && test1Logical<uint16_t>()
- && testVLogical<uint16_t, 2>()
- && testVLogical<uint16_t, 3>()
- && testVLogical<uint16_t, 4>()
- && test1Logical<uint64_t>()
- && testVLogical<uint64_t, 2>()
- && testVLogical<uint64_t, 3>()
- && testVLogical<uint64_t, 4>()
- && test1Logical<bool>()
- && testVLogical<bool, 2>()
- && testVLogical<bool, 3>()
- && testVLogical<bool, 4>()
+ & test1Logical<int>()
+ & testVLogical<int, 2>()
+ & testVLogical<int, 3>()
+ & testVLogical<int, 4>()
+ & test1Logical<int8_t>()
+ & testVLogical<int8_t, 2>()
+ & testVLogical<int8_t, 3>()
+ & testVLogical<int8_t, 4>()
+ & test1Logical<int16_t>()
+ & testVLogical<int16_t, 2>()
+ & testVLogical<int16_t, 3>()
+ & testVLogical<int16_t, 4>()
+ & test1Logical<int64_t>()
+ & testVLogical<int64_t, 2>()
+ & testVLogical<int64_t, 3>()
+ & testVLogical<int64_t, 4>()
+ & test1Logical<uint>()
+ & testVLogical<uint, 2>()
+ & testVLogical<uint, 3>()
+ & testVLogical<uint, 4>()
+ & test1Logical<uint8_t>()
+ & testVLogical<uint8_t, 2>()
+ & testVLogical<uint8_t, 3>()
+ & testVLogical<uint8_t, 4>()
+ & test1Logical<uint16_t>()
+ & testVLogical<uint16_t, 2>()
+ & testVLogical<uint16_t, 3>()
+ & testVLogical<uint16_t, 4>()
+ & test1Logical<uint64_t>()
+ & testVLogical<uint64_t, 2>()
+ & testVLogical<uint64_t, 3>()
+ & testVLogical<uint64_t, 4>()
+ & test1Logical<bool>()
+ & testVLogical<bool, 2>()
+ & testVLogical<bool, 3>()
+ & testVLogical<bool, 4>()
;
}
__generic<T : __BuiltinArithmeticType>
bool test1Arithmetic() {
return true
- && subgroupExclusiveAdd(T(1)) == T(3)
- && subgroupExclusiveMul(T(1)) == T(1)
- && subgroupExclusiveMin(T(1)) == T(1)
- && subgroupExclusiveMax(T(1)) == T(1)
+ & subgroupExclusiveAdd(T(1)) == T(3)
+ & subgroupExclusiveMul(T(1)) == T(1)
+ & subgroupExclusiveMin(T(1)) == T(1)
+ & subgroupExclusiveMax(T(1)) == T(1)
;
}
__generic<T : __BuiltinArithmeticType, let N : int>
@@ -106,59 +106,59 @@ bool testVArithmetic() {
typealias gvec = vector<T, N>;
return true
- && subgroupExclusiveAdd(gvec(T(1))) == gvec(T(3))
- && subgroupExclusiveMul(gvec(T(1))) == gvec(T(1))
- && subgroupExclusiveMin(gvec(T(1))) == gvec(T(1))
- && subgroupExclusiveMax(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveAdd(gvec(T(1))) == gvec(T(3))
+ & subgroupExclusiveMul(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveMin(gvec(T(1))) == gvec(T(1))
+ & subgroupExclusiveMax(gvec(T(1))) == gvec(T(1))
;
}
bool testArithmetic() {
return true
- && test1Arithmetic<float>()
- && testVArithmetic<float, 2>()
- && testVArithmetic<float, 3>()
- && testVArithmetic<float, 4>()
- && test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
- && testVArithmetic<double, 2>()
- && testVArithmetic<double, 3>()
- && testVArithmetic<double, 4>()
- && test1Arithmetic<half>()
- && testVArithmetic<half, 2>()
- && testVArithmetic<half, 3>()
- && testVArithmetic<half, 4>()
- && test1Arithmetic<int>()
- && testVArithmetic<int, 2>()
- && testVArithmetic<int, 3>()
- && testVArithmetic<int, 4>()
- && test1Arithmetic<int8_t>()
- && testVArithmetic<int8_t, 2>()
- && testVArithmetic<int8_t, 3>()
- && testVArithmetic<int8_t, 4>()
- && test1Arithmetic<int16_t>()
- && testVArithmetic<int16_t, 2>()
- && testVArithmetic<int16_t, 3>()
- && testVArithmetic<int16_t, 4>()
- && test1Arithmetic<int64_t>()
- && testVArithmetic<int64_t, 2>()
- && testVArithmetic<int64_t, 3>()
- && testVArithmetic<int64_t, 4>()
- && test1Arithmetic<uint>()
- && testVArithmetic<uint, 2>()
- && testVArithmetic<uint, 3>()
- && testVArithmetic<uint, 4>()
- && test1Arithmetic<uint8_t>()
- && testVArithmetic<uint8_t, 2>()
- && testVArithmetic<uint8_t, 3>()
- && testVArithmetic<uint8_t, 4>()
- && test1Arithmetic<uint16_t>()
- && testVArithmetic<uint16_t, 2>()
- && testVArithmetic<uint16_t, 3>()
- && testVArithmetic<uint16_t, 4>()
- && test1Arithmetic<uint64_t>()
- && testVArithmetic<uint64_t, 2>()
- && testVArithmetic<uint64_t, 3>()
- && testVArithmetic<uint64_t, 4>()
+ & test1Arithmetic<float>()
+ & testVArithmetic<float, 2>()
+ & testVArithmetic<float, 3>()
+ & testVArithmetic<float, 4>()
+ & test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
+ & testVArithmetic<double, 2>()
+ & testVArithmetic<double, 3>()
+ & testVArithmetic<double, 4>()
+ & test1Arithmetic<half>()
+ & testVArithmetic<half, 2>()
+ & testVArithmetic<half, 3>()
+ & testVArithmetic<half, 4>()
+ & test1Arithmetic<int>()
+ & testVArithmetic<int, 2>()
+ & testVArithmetic<int, 3>()
+ & testVArithmetic<int, 4>()
+ & test1Arithmetic<int8_t>()
+ & testVArithmetic<int8_t, 2>()
+ & testVArithmetic<int8_t, 3>()
+ & testVArithmetic<int8_t, 4>()
+ & test1Arithmetic<int16_t>()
+ & testVArithmetic<int16_t, 2>()
+ & testVArithmetic<int16_t, 3>()
+ & testVArithmetic<int16_t, 4>()
+ & test1Arithmetic<int64_t>()
+ & testVArithmetic<int64_t, 2>()
+ & testVArithmetic<int64_t, 3>()
+ & testVArithmetic<int64_t, 4>()
+ & test1Arithmetic<uint>()
+ & testVArithmetic<uint, 2>()
+ & testVArithmetic<uint, 3>()
+ & testVArithmetic<uint, 4>()
+ & test1Arithmetic<uint8_t>()
+ & testVArithmetic<uint8_t, 2>()
+ & testVArithmetic<uint8_t, 3>()
+ & testVArithmetic<uint8_t, 4>()
+ & test1Arithmetic<uint16_t>()
+ & testVArithmetic<uint16_t, 2>()
+ & testVArithmetic<uint16_t, 3>()
+ & testVArithmetic<uint16_t, 4>()
+ & test1Arithmetic<uint64_t>()
+ & testVArithmetic<uint64_t, 2>()
+ & testVArithmetic<uint64_t, 3>()
+ & testVArithmetic<uint64_t, 4>()
;
}
@@ -166,11 +166,11 @@ void computeMain()
{
bool res0 = true
- && testLogical()
+ & testLogical()
;
bool res1 = true
- && testArithmetic()
+ & testArithmetic()
;
if (gl_LocalInvocationID.x == 3) {
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang
index 09c6bdbdf..4d6dd9c2f 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_Inclusive.slang
@@ -31,9 +31,9 @@ __generic<T : __BuiltinLogicalType>
bool test1Logical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupInclusiveAnd(T(1)) == T(1)
- && subgroupInclusiveOr(T(1)) == T(1)
- && subgroupInclusiveXor(T(1)) == T(0)
+ & subgroupInclusiveAnd(T(1)) == T(1)
+ & subgroupInclusiveOr(T(1)) == T(1)
+ & subgroupInclusiveXor(T(1)) == T(0)
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
@@ -44,61 +44,61 @@ bool testVLogical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupInclusiveAnd(gvec(T(1))) == gvec(T(1))
- && subgroupInclusiveOr(gvec(T(1))) == gvec(T(1))
- && subgroupInclusiveXor(gvec(T(1))) == gvec(T(0))
+ & subgroupInclusiveAnd(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveOr(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveXor(gvec(T(1))) == gvec(T(0))
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
bool testLogical() {
return true
- && test1Logical<int>()
- && testVLogical<int, 2>()
- && testVLogical<int, 3>()
- && testVLogical<int, 4>()
- && test1Logical<int8_t>()
- && testVLogical<int8_t, 2>()
- && testVLogical<int8_t, 3>()
- && testVLogical<int8_t, 4>()
- && test1Logical<int16_t>()
- && testVLogical<int16_t, 2>()
- && testVLogical<int16_t, 3>()
- && testVLogical<int16_t, 4>()
- && test1Logical<int64_t>()
- && testVLogical<int64_t, 2>()
- && testVLogical<int64_t, 3>()
- && testVLogical<int64_t, 4>()
- && test1Logical<uint>()
- && testVLogical<uint, 2>()
- && testVLogical<uint, 3>()
- && testVLogical<uint, 4>()
- && test1Logical<uint8_t>()
- && testVLogical<uint8_t, 2>()
- && testVLogical<uint8_t, 3>()
- && testVLogical<uint8_t, 4>()
- && test1Logical<uint16_t>()
- && testVLogical<uint16_t, 2>()
- && testVLogical<uint16_t, 3>()
- && testVLogical<uint16_t, 4>()
- && test1Logical<uint64_t>()
- && testVLogical<uint64_t, 2>()
- && testVLogical<uint64_t, 3>()
- && testVLogical<uint64_t, 4>()
- && test1Logical<bool>()
- && testVLogical<bool, 2>()
- && testVLogical<bool, 3>()
- && testVLogical<bool, 4>()
+ & test1Logical<int>()
+ & testVLogical<int, 2>()
+ & testVLogical<int, 3>()
+ & testVLogical<int, 4>()
+ & test1Logical<int8_t>()
+ & testVLogical<int8_t, 2>()
+ & testVLogical<int8_t, 3>()
+ & testVLogical<int8_t, 4>()
+ & test1Logical<int16_t>()
+ & testVLogical<int16_t, 2>()
+ & testVLogical<int16_t, 3>()
+ & testVLogical<int16_t, 4>()
+ & test1Logical<int64_t>()
+ & testVLogical<int64_t, 2>()
+ & testVLogical<int64_t, 3>()
+ & testVLogical<int64_t, 4>()
+ & test1Logical<uint>()
+ & testVLogical<uint, 2>()
+ & testVLogical<uint, 3>()
+ & testVLogical<uint, 4>()
+ & test1Logical<uint8_t>()
+ & testVLogical<uint8_t, 2>()
+ & testVLogical<uint8_t, 3>()
+ & testVLogical<uint8_t, 4>()
+ & test1Logical<uint16_t>()
+ & testVLogical<uint16_t, 2>()
+ & testVLogical<uint16_t, 3>()
+ & testVLogical<uint16_t, 4>()
+ & test1Logical<uint64_t>()
+ & testVLogical<uint64_t, 2>()
+ & testVLogical<uint64_t, 3>()
+ & testVLogical<uint64_t, 4>()
+ & test1Logical<bool>()
+ & testVLogical<bool, 2>()
+ & testVLogical<bool, 3>()
+ & testVLogical<bool, 4>()
;
}
__generic<T : __BuiltinArithmeticType>
bool test1Arithmetic() {
return true
- && subgroupInclusiveAdd(T(1)) == T(4)
- && subgroupInclusiveMul(T(1)) == T(1)
- && subgroupInclusiveMin(T(1)) == T(1)
- && subgroupInclusiveMax(T(1)) == T(1)
+ & subgroupInclusiveAdd(T(1)) == T(4)
+ & subgroupInclusiveMul(T(1)) == T(1)
+ & subgroupInclusiveMin(T(1)) == T(1)
+ & subgroupInclusiveMax(T(1)) == T(1)
;
}
__generic<T : __BuiltinArithmeticType, let N : int>
@@ -106,59 +106,59 @@ bool testVArithmetic() {
typealias gvec = vector<T, N>;
return true
- && subgroupInclusiveAdd(gvec(T(1))) == gvec(T(4))
- && subgroupInclusiveMul(gvec(T(1))) == gvec(T(1))
- && subgroupInclusiveMin(gvec(T(1))) == gvec(T(1))
- && subgroupInclusiveMax(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveAdd(gvec(T(1))) == gvec(T(4))
+ & subgroupInclusiveMul(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveMin(gvec(T(1))) == gvec(T(1))
+ & subgroupInclusiveMax(gvec(T(1))) == gvec(T(1))
;
}
bool testArithmetic() {
return true
- && test1Arithmetic<float>()
- && testVArithmetic<float, 2>()
- && testVArithmetic<float, 3>()
- && testVArithmetic<float, 4>()
- && test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
- && testVArithmetic<double, 2>()
- && testVArithmetic<double, 3>()
- && testVArithmetic<double, 4>()
- && test1Arithmetic<half>()
- && testVArithmetic<half, 2>()
- && testVArithmetic<half, 3>()
- && testVArithmetic<half, 4>()
- && test1Arithmetic<int>()
- && testVArithmetic<int, 2>()
- && testVArithmetic<int, 3>()
- && testVArithmetic<int, 4>()
- && test1Arithmetic<int8_t>()
- && testVArithmetic<int8_t, 2>()
- && testVArithmetic<int8_t, 3>()
- && testVArithmetic<int8_t, 4>()
- && test1Arithmetic<int16_t>()
- && testVArithmetic<int16_t, 2>()
- && testVArithmetic<int16_t, 3>()
- && testVArithmetic<int16_t, 4>()
- && test1Arithmetic<int64_t>()
- && testVArithmetic<int64_t, 2>()
- && testVArithmetic<int64_t, 3>()
- && testVArithmetic<int64_t, 4>()
- && test1Arithmetic<uint>()
- && testVArithmetic<uint, 2>()
- && testVArithmetic<uint, 3>()
- && testVArithmetic<uint, 4>()
- && test1Arithmetic<uint8_t>()
- && testVArithmetic<uint8_t, 2>()
- && testVArithmetic<uint8_t, 3>()
- && testVArithmetic<uint8_t, 4>()
- && test1Arithmetic<uint16_t>()
- && testVArithmetic<uint16_t, 2>()
- && testVArithmetic<uint16_t, 3>()
- && testVArithmetic<uint16_t, 4>()
- && test1Arithmetic<uint64_t>()
- && testVArithmetic<uint64_t, 2>()
- && testVArithmetic<uint64_t, 3>()
- && testVArithmetic<uint64_t, 4>()
+ & test1Arithmetic<float>()
+ & testVArithmetic<float, 2>()
+ & testVArithmetic<float, 3>()
+ & testVArithmetic<float, 4>()
+ & test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
+ & testVArithmetic<double, 2>()
+ & testVArithmetic<double, 3>()
+ & testVArithmetic<double, 4>()
+ & test1Arithmetic<half>()
+ & testVArithmetic<half, 2>()
+ & testVArithmetic<half, 3>()
+ & testVArithmetic<half, 4>()
+ & test1Arithmetic<int>()
+ & testVArithmetic<int, 2>()
+ & testVArithmetic<int, 3>()
+ & testVArithmetic<int, 4>()
+ & test1Arithmetic<int8_t>()
+ & testVArithmetic<int8_t, 2>()
+ & testVArithmetic<int8_t, 3>()
+ & testVArithmetic<int8_t, 4>()
+ & test1Arithmetic<int16_t>()
+ & testVArithmetic<int16_t, 2>()
+ & testVArithmetic<int16_t, 3>()
+ & testVArithmetic<int16_t, 4>()
+ & test1Arithmetic<int64_t>()
+ & testVArithmetic<int64_t, 2>()
+ & testVArithmetic<int64_t, 3>()
+ & testVArithmetic<int64_t, 4>()
+ & test1Arithmetic<uint>()
+ & testVArithmetic<uint, 2>()
+ & testVArithmetic<uint, 3>()
+ & testVArithmetic<uint, 4>()
+ & test1Arithmetic<uint8_t>()
+ & testVArithmetic<uint8_t, 2>()
+ & testVArithmetic<uint8_t, 3>()
+ & testVArithmetic<uint8_t, 4>()
+ & test1Arithmetic<uint16_t>()
+ & testVArithmetic<uint16_t, 2>()
+ & testVArithmetic<uint16_t, 3>()
+ & testVArithmetic<uint16_t, 4>()
+ & test1Arithmetic<uint64_t>()
+ & testVArithmetic<uint64_t, 2>()
+ & testVArithmetic<uint64_t, 3>()
+ & testVArithmetic<uint64_t, 4>()
;
}
@@ -166,11 +166,11 @@ void computeMain()
{
bool res0 = true
- && testLogical()
+ & testLogical()
;
bool res1 = true
- && testArithmetic()
+ & testArithmetic()
;
if (gl_LocalInvocationID.x == 3) {
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang
index 5300e6796..a1718bc9b 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-arithmetic_None.slang
@@ -31,9 +31,9 @@ __generic<T : __BuiltinLogicalType>
bool test1Logical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupAnd(T(1)) == T(1)
- && subgroupOr(T(1)) == T(1)
- && subgroupXor(T(1)) == T(0)
+ & subgroupAnd(T(1)) == T(1)
+ & subgroupOr(T(1)) == T(1)
+ & subgroupXor(T(1)) == T(0)
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
@@ -44,61 +44,61 @@ bool testVLogical() {
return true
#if defined(TEST_when_logical_operators_are_implemented)
- && subgroupAnd(gvec(T(1))) == gvec(T(1))
- && subgroupOr(gvec(T(1))) == gvec(T(1))
- && subgroupXor(gvec(T(1))) == gvec(T(0))
+ & subgroupAnd(gvec(T(1))) == gvec(T(1))
+ & subgroupOr(gvec(T(1))) == gvec(T(1))
+ & subgroupXor(gvec(T(1))) == gvec(T(0))
#endif // #if defined(TEST_when_logical_operators_are_implemented)
;
}
bool testLogical() {
return true
- && test1Logical<int>()
- && testVLogical<int, 2>()
- && testVLogical<int, 3>()
- && testVLogical<int, 4>()
- && test1Logical<int8_t>()
- && testVLogical<int8_t, 2>()
- && testVLogical<int8_t, 3>()
- && testVLogical<int8_t, 4>()
- && test1Logical<int16_t>()
- && testVLogical<int16_t, 2>()
- && testVLogical<int16_t, 3>()
- && testVLogical<int16_t, 4>()
- && test1Logical<int64_t>()
- && testVLogical<int64_t, 2>()
- && testVLogical<int64_t, 3>()
- && testVLogical<int64_t, 4>()
- && test1Logical<uint>()
- && testVLogical<uint, 2>()
- && testVLogical<uint, 3>()
- && testVLogical<uint, 4>()
- && test1Logical<uint8_t>()
- && testVLogical<uint8_t, 2>()
- && testVLogical<uint8_t, 3>()
- && testVLogical<uint8_t, 4>()
- && test1Logical<uint16_t>()
- && testVLogical<uint16_t, 2>()
- && testVLogical<uint16_t, 3>()
- && testVLogical<uint16_t, 4>()
- && test1Logical<uint64_t>()
- && testVLogical<uint64_t, 2>()
- && testVLogical<uint64_t, 3>()
- && testVLogical<uint64_t, 4>()
- && test1Logical<bool>()
- && testVLogical<bool, 2>()
- && testVLogical<bool, 3>()
- && testVLogical<bool, 4>()
+ & test1Logical<int>()
+ & testVLogical<int, 2>()
+ & testVLogical<int, 3>()
+ & testVLogical<int, 4>()
+ & test1Logical<int8_t>()
+ & testVLogical<int8_t, 2>()
+ & testVLogical<int8_t, 3>()
+ & testVLogical<int8_t, 4>()
+ & test1Logical<int16_t>()
+ & testVLogical<int16_t, 2>()
+ & testVLogical<int16_t, 3>()
+ & testVLogical<int16_t, 4>()
+ & test1Logical<int64_t>()
+ & testVLogical<int64_t, 2>()
+ & testVLogical<int64_t, 3>()
+ & testVLogical<int64_t, 4>()
+ & test1Logical<uint>()
+ & testVLogical<uint, 2>()
+ & testVLogical<uint, 3>()
+ & testVLogical<uint, 4>()
+ & test1Logical<uint8_t>()
+ & testVLogical<uint8_t, 2>()
+ & testVLogical<uint8_t, 3>()
+ & testVLogical<uint8_t, 4>()
+ & test1Logical<uint16_t>()
+ & testVLogical<uint16_t, 2>()
+ & testVLogical<uint16_t, 3>()
+ & testVLogical<uint16_t, 4>()
+ & test1Logical<uint64_t>()
+ & testVLogical<uint64_t, 2>()
+ & testVLogical<uint64_t, 3>()
+ & testVLogical<uint64_t, 4>()
+ & test1Logical<bool>()
+ & testVLogical<bool, 2>()
+ & testVLogical<bool, 3>()
+ & testVLogical<bool, 4>()
;
}
__generic<T : __BuiltinArithmeticType>
bool test1Arithmetic() {
return true
- && subgroupAdd(T(1)) == T(local_size_x_v) // 32
- && subgroupMul(T(1)) == T(1)
- && subgroupMin(T(1)) == T(1)
- && subgroupMax(T(1)) == T(1)
+ & subgroupAdd(T(1)) == T(local_size_x_v) // 32
+ & subgroupMul(T(1)) == T(1)
+ & subgroupMin(T(1)) == T(1)
+ & subgroupMax(T(1)) == T(1)
;
}
__generic<T : __BuiltinArithmeticType, let N : int>
@@ -106,59 +106,59 @@ bool testVArithmetic() {
typealias gvec = vector<T, N>;
return true
- && subgroupAdd(gvec(T(1))) == gvec(T(local_size_x_v)) // 32
- && subgroupMul(gvec(T(1))) == gvec(T(1))
- && subgroupMin(gvec(T(1))) == gvec(T(1))
- && subgroupMax(gvec(T(1))) == gvec(T(1))
+ & subgroupAdd(gvec(T(1))) == gvec(T(local_size_x_v)) // 32
+ & subgroupMul(gvec(T(1))) == gvec(T(1))
+ & subgroupMin(gvec(T(1))) == gvec(T(1))
+ & subgroupMax(gvec(T(1))) == gvec(T(1))
;
}
bool testArithmetic() {
return true
- && test1Arithmetic<float>()
- && testVArithmetic<float, 2>()
- && testVArithmetic<float, 3>()
- && testVArithmetic<float, 4>()
- && test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
- && testVArithmetic<double, 2>()
- && testVArithmetic<double, 3>()
- && testVArithmetic<double, 4>()
- && test1Arithmetic<half>()
- && testVArithmetic<half, 2>()
- && testVArithmetic<half, 3>()
- && testVArithmetic<half, 4>()
- && test1Arithmetic<int>()
- && testVArithmetic<int, 2>()
- && testVArithmetic<int, 3>()
- && testVArithmetic<int, 4>()
- && test1Arithmetic<int8_t>()
- && testVArithmetic<int8_t, 2>()
- && testVArithmetic<int8_t, 3>()
- && testVArithmetic<int8_t, 4>()
- && test1Arithmetic<int16_t>()
- && testVArithmetic<int16_t, 2>()
- && testVArithmetic<int16_t, 3>()
- && testVArithmetic<int16_t, 4>()
- && test1Arithmetic<int64_t>()
- && testVArithmetic<int64_t, 2>()
- && testVArithmetic<int64_t, 3>()
- && testVArithmetic<int64_t, 4>()
- && test1Arithmetic<uint>()
- && testVArithmetic<uint, 2>()
- && testVArithmetic<uint, 3>()
- && testVArithmetic<uint, 4>()
- && test1Arithmetic<uint8_t>()
- && testVArithmetic<uint8_t, 2>()
- && testVArithmetic<uint8_t, 3>()
- && testVArithmetic<uint8_t, 4>()
- && test1Arithmetic<uint16_t>()
- && testVArithmetic<uint16_t, 2>()
- && testVArithmetic<uint16_t, 3>()
- && testVArithmetic<uint16_t, 4>()
- && test1Arithmetic<uint64_t>()
- && testVArithmetic<uint64_t, 2>()
- && testVArithmetic<uint64_t, 3>()
- && testVArithmetic<uint64_t, 4>()
+ & test1Arithmetic<float>()
+ & testVArithmetic<float, 2>()
+ & testVArithmetic<float, 3>()
+ & testVArithmetic<float, 4>()
+ & test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
+ & testVArithmetic<double, 2>()
+ & testVArithmetic<double, 3>()
+ & testVArithmetic<double, 4>()
+ & test1Arithmetic<half>()
+ & testVArithmetic<half, 2>()
+ & testVArithmetic<half, 3>()
+ & testVArithmetic<half, 4>()
+ & test1Arithmetic<int>()
+ & testVArithmetic<int, 2>()
+ & testVArithmetic<int, 3>()
+ & testVArithmetic<int, 4>()
+ & test1Arithmetic<int8_t>()
+ & testVArithmetic<int8_t, 2>()
+ & testVArithmetic<int8_t, 3>()
+ & testVArithmetic<int8_t, 4>()
+ & test1Arithmetic<int16_t>()
+ & testVArithmetic<int16_t, 2>()
+ & testVArithmetic<int16_t, 3>()
+ & testVArithmetic<int16_t, 4>()
+ & test1Arithmetic<int64_t>()
+ & testVArithmetic<int64_t, 2>()
+ & testVArithmetic<int64_t, 3>()
+ & testVArithmetic<int64_t, 4>()
+ & test1Arithmetic<uint>()
+ & testVArithmetic<uint, 2>()
+ & testVArithmetic<uint, 3>()
+ & testVArithmetic<uint, 4>()
+ & test1Arithmetic<uint8_t>()
+ & testVArithmetic<uint8_t, 2>()
+ & testVArithmetic<uint8_t, 3>()
+ & testVArithmetic<uint8_t, 4>()
+ & test1Arithmetic<uint16_t>()
+ & testVArithmetic<uint16_t, 2>()
+ & testVArithmetic<uint16_t, 3>()
+ & testVArithmetic<uint16_t, 4>()
+ & test1Arithmetic<uint64_t>()
+ & testVArithmetic<uint64_t, 2>()
+ & testVArithmetic<uint64_t, 3>()
+ & testVArithmetic<uint64_t, 4>()
;
}
@@ -166,11 +166,11 @@ void computeMain()
{
bool res0 = true
- && testLogical()
+ & testLogical()
;
bool res1 = true
- && testArithmetic()
+ & testArithmetic()
;
if (gl_LocalInvocationID.x == 3) {
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang
index 8bbd60689..d6947d2d4 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-ballot.slang
@@ -25,8 +25,8 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1BroadcastX() {
return true
- && subgroupBroadcast(T(1), 0) == T(1)
- && subgroupBroadcastFirst(T(1)) == T(1)
+ & subgroupBroadcast(T(1), 0) == T(1)
+ & subgroupBroadcastFirst(T(1)) == T(1)
;
}
__generic<T : __BuiltinLogicalType, let N : int>
@@ -34,16 +34,16 @@ bool testVBroadcastX() {
typealias gvec = vector<T, N>;
return true
- && subgroupBroadcast(gvec(T(1)), 0) == gvec(T(1))
- && subgroupBroadcastFirst(gvec(T(1))) == gvec(T(1))
+ & subgroupBroadcast(gvec(T(1)), 0) == gvec(T(1))
+ & subgroupBroadcastFirst(gvec(T(1))) == gvec(T(1))
;
}
__generic<T : __BuiltinFloatingPointType>
bool test1BroadcastX() {
return true
- && subgroupBroadcast(T(1), 0) == T(1)
- && subgroupBroadcastFirst(T(1)) == T(1)
+ & subgroupBroadcast(T(1), 0) == T(1)
+ & subgroupBroadcastFirst(T(1)) == T(1)
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -51,85 +51,85 @@ bool testVBroadcastX() {
typealias gvec = vector<T, N>;
return true
- && subgroupBroadcast(gvec(T(1)), 0) == gvec(T(1))
- && subgroupBroadcastFirst(gvec(T(1))) == gvec(T(1))
+ & subgroupBroadcast(gvec(T(1)), 0) == gvec(T(1))
+ & subgroupBroadcastFirst(gvec(T(1))) == gvec(T(1))
;
}
bool testBroadcastX() {
return true
- && test1BroadcastX<float>()
- && testVBroadcastX<float, 2>()
- && testVBroadcastX<float, 3>()
- && testVBroadcastX<float, 4>()
- && test1BroadcastX<double>() // WARNING: intel GPU's lack FP64 support
- && testVBroadcastX<double, 2>()
- && testVBroadcastX<double, 3>()
- && testVBroadcastX<double, 4>()
- && test1BroadcastX<half>()
- && testVBroadcastX<half, 2>()
- && testVBroadcastX<half, 3>()
- && testVBroadcastX<half, 4>()
- && test1BroadcastX<int>()
- && testVBroadcastX<int, 2>()
- && testVBroadcastX<int, 3>()
- && testVBroadcastX<int, 4>()
- && test1BroadcastX<int8_t>()
- && testVBroadcastX<int8_t, 2>()
- && testVBroadcastX<int8_t, 3>()
- && testVBroadcastX<int8_t, 4>()
- && test1BroadcastX<int16_t>()
- && testVBroadcastX<int16_t, 2>()
- && testVBroadcastX<int16_t, 3>()
- && testVBroadcastX<int16_t, 4>()
- && test1BroadcastX<int64_t>()
- && testVBroadcastX<int64_t, 2>()
- && testVBroadcastX<int64_t, 3>()
- && testVBroadcastX<int64_t, 4>()
- && test1BroadcastX<uint>()
- && testVBroadcastX<uint, 2>()
- && testVBroadcastX<uint, 3>()
- && testVBroadcastX<uint, 4>()
- && test1BroadcastX<uint8_t>()
- && testVBroadcastX<uint8_t, 2>()
- && testVBroadcastX<uint8_t, 3>()
- && testVBroadcastX<uint8_t, 4>()
- && test1BroadcastX<uint16_t>()
- && testVBroadcastX<uint16_t, 2>()
- && testVBroadcastX<uint16_t, 3>()
- && testVBroadcastX<uint16_t, 4>()
- && test1BroadcastX<uint64_t>()
- && testVBroadcastX<uint64_t, 2>()
- && testVBroadcastX<uint64_t, 3>()
- && testVBroadcastX<uint64_t, 4>()
- && test1BroadcastX<bool>()
- && testVBroadcastX<bool, 2>()
- && testVBroadcastX<bool, 3>()
- && testVBroadcastX<bool, 4>()
+ & test1BroadcastX<float>()
+ & testVBroadcastX<float, 2>()
+ & testVBroadcastX<float, 3>()
+ & testVBroadcastX<float, 4>()
+ & test1BroadcastX<double>() // WARNING: intel GPU's lack FP64 support
+ & testVBroadcastX<double, 2>()
+ & testVBroadcastX<double, 3>()
+ & testVBroadcastX<double, 4>()
+ & test1BroadcastX<half>()
+ & testVBroadcastX<half, 2>()
+ & testVBroadcastX<half, 3>()
+ & testVBroadcastX<half, 4>()
+ & test1BroadcastX<int>()
+ & testVBroadcastX<int, 2>()
+ & testVBroadcastX<int, 3>()
+ & testVBroadcastX<int, 4>()
+ & test1BroadcastX<int8_t>()
+ & testVBroadcastX<int8_t, 2>()
+ & testVBroadcastX<int8_t, 3>()
+ & testVBroadcastX<int8_t, 4>()
+ & test1BroadcastX<int16_t>()
+ & testVBroadcastX<int16_t, 2>()
+ & testVBroadcastX<int16_t, 3>()
+ & testVBroadcastX<int16_t, 4>()
+ & test1BroadcastX<int64_t>()
+ & testVBroadcastX<int64_t, 2>()
+ & testVBroadcastX<int64_t, 3>()
+ & testVBroadcastX<int64_t, 4>()
+ & test1BroadcastX<uint>()
+ & testVBroadcastX<uint, 2>()
+ & testVBroadcastX<uint, 3>()
+ & testVBroadcastX<uint, 4>()
+ & test1BroadcastX<uint8_t>()
+ & testVBroadcastX<uint8_t, 2>()
+ & testVBroadcastX<uint8_t, 3>()
+ & testVBroadcastX<uint8_t, 4>()
+ & test1BroadcastX<uint16_t>()
+ & testVBroadcastX<uint16_t, 2>()
+ & testVBroadcastX<uint16_t, 3>()
+ & testVBroadcastX<uint16_t, 4>()
+ & test1BroadcastX<uint64_t>()
+ & testVBroadcastX<uint64_t, 2>()
+ & testVBroadcastX<uint64_t, 3>()
+ & testVBroadcastX<uint64_t, 4>()
+ & test1BroadcastX<bool>()
+ & testVBroadcastX<bool, 2>()
+ & testVBroadcastX<bool, 3>()
+ & testVBroadcastX<bool, 4>()
;
}
bool testBallot() {
return true
- && (subgroupBallot(true).x == 0xFFFFFFFF)
- && (subgroupInverseBallot(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == true)
- && (subgroupBallotBitExtract(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), 0) == true)
- && (subgroupBallotBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 32)
- && (subgroupBallotInclusiveBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) != 0)
+ & (subgroupBallot(true).x == 0xFFFFFFFF)
+ & (subgroupInverseBallot(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == true)
+ & (subgroupBallotBitExtract(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF), 0) == true)
+ & (subgroupBallotBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 32)
+ & (subgroupBallotInclusiveBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) != 0)
#ifdef TEST_when_glsl_subgroupBallotExclusiveBitCount_is_not_bugged
- && (subgroupBallotExclusiveBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) != 0)
+ & (subgroupBallotExclusiveBitCount(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) != 0)
#endif
- && (subgroupBallotFindLSB(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 0)
- && (subgroupBallotFindMSB(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 31)
+ & (subgroupBallotFindLSB(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 0)
+ & (subgroupBallotFindMSB(uvec4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF)) == 31)
;
}
void computeMain()
{
outputBuffer.data[0] = true
- && testBroadcastX()
+ & testBroadcastX()
;
outputBuffer.data[1] = true
- && testBallot()
+ & testBallot()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang
index 9e9b089d2..c40421aa1 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-clustered.slang
@@ -23,9 +23,9 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1Logical() {
return true
- && subgroupClusteredAnd(T(1), 1) == T(1)
- && subgroupClusteredOr(T(1), 1) == T(1)
- && subgroupClusteredXor(T(1), 1) == T(1)
+ & subgroupClusteredAnd(T(1), 1) == T(1)
+ & subgroupClusteredOr(T(1), 1) == T(1)
+ & subgroupClusteredXor(T(1), 1) == T(1)
;
}
@@ -34,60 +34,60 @@ bool testVLogical() {
typealias gvec = vector<T, N>;
return true
- && subgroupClusteredAnd(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredOr(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredXor(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredAnd(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredOr(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredXor(gvec(T(1)), 1) == gvec(T(1))
;
}
bool testLogical() {
return true
- && test1Logical<int>()
- && testVLogical<int, 2>()
- && testVLogical<int, 3>()
- && testVLogical<int, 4>()
- && test1Logical<int8_t>()
- && testVLogical<int8_t, 2>()
- && testVLogical<int8_t, 3>()
- && testVLogical<int8_t, 4>()
- && test1Logical<int16_t>()
- && testVLogical<int16_t, 2>()
- && testVLogical<int16_t, 3>()
- && testVLogical<int16_t, 4>()
- && test1Logical<int64_t>()
- && testVLogical<int64_t, 2>()
- && testVLogical<int64_t, 3>()
- && testVLogical<int64_t, 4>()
- && test1Logical<uint>()
- && testVLogical<uint, 2>()
- && testVLogical<uint, 3>()
- && testVLogical<uint, 4>()
- && test1Logical<uint8_t>()
- && testVLogical<uint8_t, 2>()
- && testVLogical<uint8_t, 3>()
- && testVLogical<uint8_t, 4>()
- && test1Logical<uint16_t>()
- && testVLogical<uint16_t, 2>()
- && testVLogical<uint16_t, 3>()
- && testVLogical<uint16_t, 4>()
- && test1Logical<uint64_t>()
- && testVLogical<uint64_t, 2>()
- && testVLogical<uint64_t, 3>()
- && testVLogical<uint64_t, 4>()
- && test1Logical<bool>()
- && testVLogical<bool, 2>()
- && testVLogical<bool, 3>()
- && testVLogical<bool, 4>()
+ & test1Logical<int>()
+ & testVLogical<int, 2>()
+ & testVLogical<int, 3>()
+ & testVLogical<int, 4>()
+ & test1Logical<int8_t>()
+ & testVLogical<int8_t, 2>()
+ & testVLogical<int8_t, 3>()
+ & testVLogical<int8_t, 4>()
+ & test1Logical<int16_t>()
+ & testVLogical<int16_t, 2>()
+ & testVLogical<int16_t, 3>()
+ & testVLogical<int16_t, 4>()
+ & test1Logical<int64_t>()
+ & testVLogical<int64_t, 2>()
+ & testVLogical<int64_t, 3>()
+ & testVLogical<int64_t, 4>()
+ & test1Logical<uint>()
+ & testVLogical<uint, 2>()
+ & testVLogical<uint, 3>()
+ & testVLogical<uint, 4>()
+ & test1Logical<uint8_t>()
+ & testVLogical<uint8_t, 2>()
+ & testVLogical<uint8_t, 3>()
+ & testVLogical<uint8_t, 4>()
+ & test1Logical<uint16_t>()
+ & testVLogical<uint16_t, 2>()
+ & testVLogical<uint16_t, 3>()
+ & testVLogical<uint16_t, 4>()
+ & test1Logical<uint64_t>()
+ & testVLogical<uint64_t, 2>()
+ & testVLogical<uint64_t, 3>()
+ & testVLogical<uint64_t, 4>()
+ & test1Logical<bool>()
+ & testVLogical<bool, 2>()
+ & testVLogical<bool, 3>()
+ & testVLogical<bool, 4>()
;
}
__generic<T : __BuiltinArithmeticType>
bool test1Arithmetic() {
return true
- && subgroupClusteredAdd(T(1), 1) == T(1)
- && subgroupClusteredMul(T(1), 1) == T(1)
- && subgroupClusteredMin(T(1), 1) == T(1)
- && subgroupClusteredMax(T(1), 1) == T(1)
+ & subgroupClusteredAdd(T(1), 1) == T(1)
+ & subgroupClusteredMul(T(1), 1) == T(1)
+ & subgroupClusteredMin(T(1), 1) == T(1)
+ & subgroupClusteredMax(T(1), 1) == T(1)
;
}
@@ -96,69 +96,69 @@ bool testVArithmetic() {
typealias gvec = vector<T, N>;
return true
- && subgroupClusteredAdd(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredMul(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredMin(gvec(T(1)), 1) == gvec(T(1))
- && subgroupClusteredMax(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredAdd(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredMul(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredMin(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupClusteredMax(gvec(T(1)), 1) == gvec(T(1))
;
}
bool testArithmetic() {
return true
- && test1Arithmetic<float>()
- && testVArithmetic<float, 2>()
- && testVArithmetic<float, 3>()
- && testVArithmetic<float, 4>()
- && test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
- && testVArithmetic<double, 2>()
- && testVArithmetic<double, 3>()
- && testVArithmetic<double, 4>()
- && test1Arithmetic<half>()
- && testVArithmetic<half, 2>()
- && testVArithmetic<half, 3>()
- && testVArithmetic<half, 4>()
- && test1Arithmetic<int>()
- && testVArithmetic<int, 2>()
- && testVArithmetic<int, 3>()
- && testVArithmetic<int, 4>()
- && test1Arithmetic<int8_t>()
- && testVArithmetic<int8_t, 2>()
- && testVArithmetic<int8_t, 3>()
- && testVArithmetic<int8_t, 4>()
- && test1Arithmetic<int16_t>()
- && testVArithmetic<int16_t, 2>()
- && testVArithmetic<int16_t, 3>()
- && testVArithmetic<int16_t, 4>()
- && test1Arithmetic<int64_t>()
- && testVArithmetic<int64_t, 2>()
- && testVArithmetic<int64_t, 3>()
- && testVArithmetic<int64_t, 4>()
- && test1Arithmetic<uint>()
- && testVArithmetic<uint, 2>()
- && testVArithmetic<uint, 3>()
- && testVArithmetic<uint, 4>()
- && test1Arithmetic<uint8_t>()
- && testVArithmetic<uint8_t, 2>()
- && testVArithmetic<uint8_t, 3>()
- && testVArithmetic<uint8_t, 4>()
- && test1Arithmetic<uint16_t>()
- && testVArithmetic<uint16_t, 2>()
- && testVArithmetic<uint16_t, 3>()
- && testVArithmetic<uint16_t, 4>()
- && test1Arithmetic<uint64_t>()
- && testVArithmetic<uint64_t, 2>()
- && testVArithmetic<uint64_t, 3>()
- && testVArithmetic<uint64_t, 4>()
+ & test1Arithmetic<float>()
+ & testVArithmetic<float, 2>()
+ & testVArithmetic<float, 3>()
+ & testVArithmetic<float, 4>()
+ & test1Arithmetic<double>() // WARNING: intel GPU's lack FP64 support
+ & testVArithmetic<double, 2>()
+ & testVArithmetic<double, 3>()
+ & testVArithmetic<double, 4>()
+ & test1Arithmetic<half>()
+ & testVArithmetic<half, 2>()
+ & testVArithmetic<half, 3>()
+ & testVArithmetic<half, 4>()
+ & test1Arithmetic<int>()
+ & testVArithmetic<int, 2>()
+ & testVArithmetic<int, 3>()
+ & testVArithmetic<int, 4>()
+ & test1Arithmetic<int8_t>()
+ & testVArithmetic<int8_t, 2>()
+ & testVArithmetic<int8_t, 3>()
+ & testVArithmetic<int8_t, 4>()
+ & test1Arithmetic<int16_t>()
+ & testVArithmetic<int16_t, 2>()
+ & testVArithmetic<int16_t, 3>()
+ & testVArithmetic<int16_t, 4>()
+ & test1Arithmetic<int64_t>()
+ & testVArithmetic<int64_t, 2>()
+ & testVArithmetic<int64_t, 3>()
+ & testVArithmetic<int64_t, 4>()
+ & test1Arithmetic<uint>()
+ & testVArithmetic<uint, 2>()
+ & testVArithmetic<uint, 3>()
+ & testVArithmetic<uint, 4>()
+ & test1Arithmetic<uint8_t>()
+ & testVArithmetic<uint8_t, 2>()
+ & testVArithmetic<uint8_t, 3>()
+ & testVArithmetic<uint8_t, 4>()
+ & test1Arithmetic<uint16_t>()
+ & testVArithmetic<uint16_t, 2>()
+ & testVArithmetic<uint16_t, 3>()
+ & testVArithmetic<uint16_t, 4>()
+ & test1Arithmetic<uint64_t>()
+ & testVArithmetic<uint64_t, 2>()
+ & testVArithmetic<uint64_t, 3>()
+ & testVArithmetic<uint64_t, 4>()
;
}
void computeMain()
{
outputBuffer.data[0] = true
- && testLogical()
+ & testLogical()
;
outputBuffer.data[1] = true
- && testArithmetic()
+ & testArithmetic()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang
index 5ed6398b2..3465f1b26 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-quad.slang
@@ -22,10 +22,10 @@ layout(local_size_x = 4) in;
__generic<T : __BuiltinLogicalType>
bool test1QuadX() {
return true
- && subgroupQuadSwapHorizontal(T(2)) == T(2)
- && subgroupQuadSwapVertical(T(2)) == T(2)
- && subgroupQuadSwapDiagonal(T(3)) == T(3)
- && subgroupQuadBroadcast(T(1), 1) == T(1)
+ & subgroupQuadSwapHorizontal(T(2)) == T(2)
+ & subgroupQuadSwapVertical(T(2)) == T(2)
+ & subgroupQuadSwapDiagonal(T(3)) == T(3)
+ & subgroupQuadBroadcast(T(1), 1) == T(1)
;
}
__generic<T : __BuiltinLogicalType, let N : int>
@@ -33,20 +33,20 @@ bool testVQuadX() {
typealias gvec = vector<T, N>;
return true
- && subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
- && subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
- && subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
- && subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
+ & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
+ & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
+ & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
;
}
__generic<T : __BuiltinFloatingPointType>
bool test1QuadX() {
return true
- && subgroupQuadSwapHorizontal(T(2)) == T(2)
- && subgroupQuadSwapVertical(T(2)) == T(2)
- && subgroupQuadSwapDiagonal(T(3)) == T(3)
- && subgroupQuadBroadcast(T(1), 1) == T(1)
+ & subgroupQuadSwapHorizontal(T(2)) == T(2)
+ & subgroupQuadSwapVertical(T(2)) == T(2)
+ & subgroupQuadSwapDiagonal(T(3)) == T(3)
+ & subgroupQuadBroadcast(T(1), 1) == T(1)
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -54,62 +54,62 @@ bool testVQuadX() {
typealias gvec = vector<T, N>;
return true
- && subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
- && subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
- && subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
- && subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupQuadSwapHorizontal(gvec(T(2))) == gvec(T(2))
+ & subgroupQuadSwapVertical(gvec(T(2))) == gvec(T(2))
+ & subgroupQuadSwapDiagonal(gvec(T(3))) == gvec(T(3))
+ & subgroupQuadBroadcast(gvec(T(1)), 1) == gvec(T(1))
;
}
bool testQuadSwapX() {
return true
- && test1QuadX<float>()
- && testVQuadX<float, 2>()
- && testVQuadX<float, 3>()
- && testVQuadX<float, 4>()
- && test1QuadX<double>() // WARNING: intel GPU's lack FP64 support
- && testVQuadX<double, 2>()
- && testVQuadX<double, 3>()
- && testVQuadX<double, 4>()
- && test1QuadX<half>()
- && testVQuadX<half, 2>()
- && testVQuadX<half, 3>()
- && testVQuadX<half, 4>()
- && test1QuadX<int>()
- && testVQuadX<int, 2>()
- && testVQuadX<int, 3>()
- && testVQuadX<int, 4>()
- && test1QuadX<int8_t>()
- && testVQuadX<int8_t, 2>()
- && testVQuadX<int8_t, 3>()
- && testVQuadX<int8_t, 4>()
- && test1QuadX<int16_t>()
- && testVQuadX<int16_t, 2>()
- && testVQuadX<int16_t, 3>()
- && testVQuadX<int16_t, 4>()
- && test1QuadX<int64_t>()
- && testVQuadX<int64_t, 2>()
- && testVQuadX<int64_t, 3>()
- && testVQuadX<int64_t, 4>()
- && test1QuadX<uint>()
- && testVQuadX<uint, 2>()
- && testVQuadX<uint, 3>()
- && testVQuadX<uint, 4>()
- && test1QuadX<uint8_t>()
- && testVQuadX<uint8_t, 2>()
- && testVQuadX<uint8_t, 3>()
- && testVQuadX<uint8_t, 4>()
- && test1QuadX<uint16_t>()
- && testVQuadX<uint16_t, 2>()
- && testVQuadX<uint16_t, 3>()
- && testVQuadX<uint16_t, 4>()
- && test1QuadX<uint64_t>()
- && testVQuadX<uint64_t, 2>()
- && testVQuadX<uint64_t, 3>()
- && testVQuadX<uint64_t, 4>()
- && test1QuadX<bool>()
- && testVQuadX<bool, 2>()
- && testVQuadX<bool, 3>()
- && testVQuadX<bool, 4>()
+ & test1QuadX<float>()
+ & testVQuadX<float, 2>()
+ & testVQuadX<float, 3>()
+ & testVQuadX<float, 4>()
+ & test1QuadX<double>() // WARNING: intel GPU's lack FP64 support
+ & testVQuadX<double, 2>()
+ & testVQuadX<double, 3>()
+ & testVQuadX<double, 4>()
+ & test1QuadX<half>()
+ & testVQuadX<half, 2>()
+ & testVQuadX<half, 3>()
+ & testVQuadX<half, 4>()
+ & test1QuadX<int>()
+ & testVQuadX<int, 2>()
+ & testVQuadX<int, 3>()
+ & testVQuadX<int, 4>()
+ & test1QuadX<int8_t>()
+ & testVQuadX<int8_t, 2>()
+ & testVQuadX<int8_t, 3>()
+ & testVQuadX<int8_t, 4>()
+ & test1QuadX<int16_t>()
+ & testVQuadX<int16_t, 2>()
+ & testVQuadX<int16_t, 3>()
+ & testVQuadX<int16_t, 4>()
+ & test1QuadX<int64_t>()
+ & testVQuadX<int64_t, 2>()
+ & testVQuadX<int64_t, 3>()
+ & testVQuadX<int64_t, 4>()
+ & test1QuadX<uint>()
+ & testVQuadX<uint, 2>()
+ & testVQuadX<uint, 3>()
+ & testVQuadX<uint, 4>()
+ & test1QuadX<uint8_t>()
+ & testVQuadX<uint8_t, 2>()
+ & testVQuadX<uint8_t, 3>()
+ & testVQuadX<uint8_t, 4>()
+ & test1QuadX<uint16_t>()
+ & testVQuadX<uint16_t, 2>()
+ & testVQuadX<uint16_t, 3>()
+ & testVQuadX<uint16_t, 4>()
+ & test1QuadX<uint64_t>()
+ & testVQuadX<uint64_t, 2>()
+ & testVQuadX<uint64_t, 3>()
+ & testVQuadX<uint64_t, 4>()
+ & test1QuadX<bool>()
+ & testVQuadX<bool, 2>()
+ & testVQuadX<bool, 3>()
+ & testVQuadX<bool, 4>()
;
}
@@ -117,7 +117,7 @@ void computeMain()
{
outputBuffer.data[0] = true
- && testQuadSwapX()
+ & testQuadSwapX()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang
index 0e187c568..ea4331dbe 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle-relative.slang
@@ -23,8 +23,8 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1ShuffleX() {
return true
- && subgroupShuffleUp(T(1), 1) == T(1)
- && subgroupShuffleDown(T(1), 1) == T(1)
+ & subgroupShuffleUp(T(1), 1) == T(1)
+ & subgroupShuffleDown(T(1), 1) == T(1)
;
}
__generic<T : __BuiltinLogicalType, let N : int>
@@ -32,16 +32,16 @@ bool testVShuffleX() {
typealias gvec = vector<T, N>;
return true
- && subgroupShuffleUp(gvec(T(1)), 1) == gvec(T(1))
- && subgroupShuffleDown(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleUp(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleDown(gvec(T(1)), 1) == gvec(T(1))
;
}
__generic<T : __BuiltinFloatingPointType>
bool test1ShuffleX() {
return true
- && subgroupShuffleUp(T(1), 1) == T(1)
- && subgroupShuffleDown(T(1), 1) == T(1)
+ & subgroupShuffleUp(T(1), 1) == T(1)
+ & subgroupShuffleDown(T(1), 1) == T(1)
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -49,67 +49,67 @@ bool testVShuffleX() {
typealias gvec = vector<T, N>;
return true
- && subgroupShuffleUp(gvec(T(1)), 1) == gvec(T(1))
- && subgroupShuffleDown(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleUp(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleDown(gvec(T(1)), 1) == gvec(T(1))
;
}
bool testShuffleX() {
return true
- && test1ShuffleX<float>()
- && testVShuffleX<float, 2>()
- && testVShuffleX<float, 3>()
- && testVShuffleX<float, 4>()
- && test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support
- && testVShuffleX<double, 2>()
- && testVShuffleX<double, 3>()
- && testVShuffleX<double, 4>()
- && test1ShuffleX<half>()
- && testVShuffleX<half, 2>()
- && testVShuffleX<half, 3>()
- && testVShuffleX<half, 4>()
- && test1ShuffleX<int>()
- && testVShuffleX<int, 2>()
- && testVShuffleX<int, 3>()
- && testVShuffleX<int, 4>()
- && test1ShuffleX<int8_t>()
- && testVShuffleX<int8_t, 2>()
- && testVShuffleX<int8_t, 3>()
- && testVShuffleX<int8_t, 4>()
- && test1ShuffleX<int16_t>()
- && testVShuffleX<int16_t, 2>()
- && testVShuffleX<int16_t, 3>()
- && testVShuffleX<int16_t, 4>()
- && test1ShuffleX<int64_t>()
- && testVShuffleX<int64_t, 2>()
- && testVShuffleX<int64_t, 3>()
- && testVShuffleX<int64_t, 4>()
- && test1ShuffleX<uint>()
- && testVShuffleX<uint, 2>()
- && testVShuffleX<uint, 3>()
- && testVShuffleX<uint, 4>()
- && test1ShuffleX<uint8_t>()
- && testVShuffleX<uint8_t, 2>()
- && testVShuffleX<uint8_t, 3>()
- && testVShuffleX<uint8_t, 4>()
- && test1ShuffleX<uint16_t>()
- && testVShuffleX<uint16_t, 2>()
- && testVShuffleX<uint16_t, 3>()
- && testVShuffleX<uint16_t, 4>()
- && test1ShuffleX<uint64_t>()
- && testVShuffleX<uint64_t, 2>()
- && testVShuffleX<uint64_t, 3>()
- && testVShuffleX<uint64_t, 4>()
- && test1ShuffleX<bool>()
- && testVShuffleX<bool, 2>()
- && testVShuffleX<bool, 3>()
- && testVShuffleX<bool, 4>()
+ & test1ShuffleX<float>()
+ & testVShuffleX<float, 2>()
+ & testVShuffleX<float, 3>()
+ & testVShuffleX<float, 4>()
+ & test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support
+ & testVShuffleX<double, 2>()
+ & testVShuffleX<double, 3>()
+ & testVShuffleX<double, 4>()
+ & test1ShuffleX<half>()
+ & testVShuffleX<half, 2>()
+ & testVShuffleX<half, 3>()
+ & testVShuffleX<half, 4>()
+ & test1ShuffleX<int>()
+ & testVShuffleX<int, 2>()
+ & testVShuffleX<int, 3>()
+ & testVShuffleX<int, 4>()
+ & test1ShuffleX<int8_t>()
+ & testVShuffleX<int8_t, 2>()
+ & testVShuffleX<int8_t, 3>()
+ & testVShuffleX<int8_t, 4>()
+ & test1ShuffleX<int16_t>()
+ & testVShuffleX<int16_t, 2>()
+ & testVShuffleX<int16_t, 3>()
+ & testVShuffleX<int16_t, 4>()
+ & test1ShuffleX<int64_t>()
+ & testVShuffleX<int64_t, 2>()
+ & testVShuffleX<int64_t, 3>()
+ & testVShuffleX<int64_t, 4>()
+ & test1ShuffleX<uint>()
+ & testVShuffleX<uint, 2>()
+ & testVShuffleX<uint, 3>()
+ & testVShuffleX<uint, 4>()
+ & test1ShuffleX<uint8_t>()
+ & testVShuffleX<uint8_t, 2>()
+ & testVShuffleX<uint8_t, 3>()
+ & testVShuffleX<uint8_t, 4>()
+ & test1ShuffleX<uint16_t>()
+ & testVShuffleX<uint16_t, 2>()
+ & testVShuffleX<uint16_t, 3>()
+ & testVShuffleX<uint16_t, 4>()
+ & test1ShuffleX<uint64_t>()
+ & testVShuffleX<uint64_t, 2>()
+ & testVShuffleX<uint64_t, 3>()
+ & testVShuffleX<uint64_t, 4>()
+ & test1ShuffleX<bool>()
+ & testVShuffleX<bool, 2>()
+ & testVShuffleX<bool, 3>()
+ & testVShuffleX<bool, 4>()
;
}
void computeMain()
{
outputBuffer.data[0] = true
- && testShuffleX()
+ & testShuffleX()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang
index 5dca1a588..ff3baf267 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-shuffle.slang
@@ -31,9 +31,9 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1ShuffleX() {
return true
- && subgroupShuffle(T(1), 1) == T(1)
+ & subgroupShuffle(T(1), 1) == T(1)
#ifdef TEST_when_subgroupShuffleXor_is_implemented
- && subgroupShuffleXor(T(1), 1) == T(1)
+ & subgroupShuffleXor(T(1), 1) == T(1)
#endif // #ifdef TEST_when_subgroupShuffleXor_is_implemented
;
}
@@ -42,9 +42,9 @@ bool testVShuffleX() {
typealias gvec = vector<T, N>;
return true
- && subgroupShuffle(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffle(gvec(T(1)), 1) == gvec(T(1))
#ifdef TEST_when_subgroupShuffleXor_is_implemented
- && subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1))
+ & subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1))
#endif // #ifdef TEST_when_subgroupShuffleXor_is_implemented
;
}
@@ -52,10 +52,10 @@ bool testVShuffleX() {
__generic<T : __BuiltinFloatingPointType>
bool test1ShuffleX() {
return true
- && subgroupShuffle(T(1), 1) == T(1)
-#if !defined(TARGET_CUDA) && !defined(TARGET_HLSL)
- && subgroupShuffleXor(T(1), 1) == T(1)
-#endif // #if !defined(TARGET_CUDA) && !defined(TARGET_HLSL)
+ & subgroupShuffle(T(1), 1) == T(1)
+#if !defined(TARGET_CUDA) & !defined(TARGET_HLSL)
+ & subgroupShuffleXor(T(1), 1) == T(1)
+#endif // #if !defined(TARGET_CUDA) & !defined(TARGET_HLSL)
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -63,62 +63,62 @@ bool testVShuffleX() {
typealias gvec = vector<T, N>;
return true
- && subgroupShuffle(gvec(T(1)), 1) == gvec(T(1))
-#if !defined(TARGET_CUDA) && !defined(TARGET_HLSL)
- && subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1))
-#endif // #if !defined(TARGET_CUDA) && !defined(TARGET_HLSL)
+ & subgroupShuffle(gvec(T(1)), 1) == gvec(T(1))
+#if !defined(TARGET_CUDA) & !defined(TARGET_HLSL)
+ & subgroupShuffleXor(gvec(T(1)), 1) == gvec(T(1))
+#endif // #if !defined(TARGET_CUDA) & !defined(TARGET_HLSL)
;
}
bool testShuffleX() {
return true
- && test1ShuffleX<float>()
- && testVShuffleX<float, 2>()
- && testVShuffleX<float, 3>()
- && testVShuffleX<float, 4>()
- && test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support
- && testVShuffleX<double, 2>()
- && testVShuffleX<double, 3>()
- && testVShuffleX<double, 4>()
- && test1ShuffleX<half>()
- && testVShuffleX<half, 2>()
- && testVShuffleX<half, 3>()
- && testVShuffleX<half, 4>()
- && test1ShuffleX<int>()
- && testVShuffleX<int, 2>()
- && testVShuffleX<int, 3>()
- && testVShuffleX<int, 4>()
- && test1ShuffleX<int8_t>()
- && testVShuffleX<int8_t, 2>()
- && testVShuffleX<int8_t, 3>()
- && testVShuffleX<int8_t, 4>()
- && test1ShuffleX<int16_t>()
- && testVShuffleX<int16_t, 2>()
- && testVShuffleX<int16_t, 3>()
- && testVShuffleX<int16_t, 4>()
- && test1ShuffleX<int64_t>()
- && testVShuffleX<int64_t, 2>()
- && testVShuffleX<int64_t, 3>()
- && testVShuffleX<int64_t, 4>()
- && test1ShuffleX<uint>()
- && testVShuffleX<uint, 2>()
- && testVShuffleX<uint, 3>()
- && testVShuffleX<uint, 4>()
- && test1ShuffleX<uint8_t>()
- && testVShuffleX<uint8_t, 2>()
- && testVShuffleX<uint8_t, 3>()
- && testVShuffleX<uint8_t, 4>()
- && test1ShuffleX<uint16_t>()
- && testVShuffleX<uint16_t, 2>()
- && testVShuffleX<uint16_t, 3>()
- && testVShuffleX<uint16_t, 4>()
- && test1ShuffleX<uint64_t>()
- && testVShuffleX<uint64_t, 2>()
- && testVShuffleX<uint64_t, 3>()
- && testVShuffleX<uint64_t, 4>()
- && test1ShuffleX<bool>()
- && testVShuffleX<bool, 2>()
- && testVShuffleX<bool, 3>()
- && testVShuffleX<bool, 4>()
+ & test1ShuffleX<float>()
+ & testVShuffleX<float, 2>()
+ & testVShuffleX<float, 3>()
+ & testVShuffleX<float, 4>()
+ & test1ShuffleX<double>() // WARNING: intel GPU's lack FP64 support
+ & testVShuffleX<double, 2>()
+ & testVShuffleX<double, 3>()
+ & testVShuffleX<double, 4>()
+ & test1ShuffleX<half>()
+ & testVShuffleX<half, 2>()
+ & testVShuffleX<half, 3>()
+ & testVShuffleX<half, 4>()
+ & test1ShuffleX<int>()
+ & testVShuffleX<int, 2>()
+ & testVShuffleX<int, 3>()
+ & testVShuffleX<int, 4>()
+ & test1ShuffleX<int8_t>()
+ & testVShuffleX<int8_t, 2>()
+ & testVShuffleX<int8_t, 3>()
+ & testVShuffleX<int8_t, 4>()
+ & test1ShuffleX<int16_t>()
+ & testVShuffleX<int16_t, 2>()
+ & testVShuffleX<int16_t, 3>()
+ & testVShuffleX<int16_t, 4>()
+ & test1ShuffleX<int64_t>()
+ & testVShuffleX<int64_t, 2>()
+ & testVShuffleX<int64_t, 3>()
+ & testVShuffleX<int64_t, 4>()
+ & test1ShuffleX<uint>()
+ & testVShuffleX<uint, 2>()
+ & testVShuffleX<uint, 3>()
+ & testVShuffleX<uint, 4>()
+ & test1ShuffleX<uint8_t>()
+ & testVShuffleX<uint8_t, 2>()
+ & testVShuffleX<uint8_t, 3>()
+ & testVShuffleX<uint8_t, 4>()
+ & test1ShuffleX<uint16_t>()
+ & testVShuffleX<uint16_t, 2>()
+ & testVShuffleX<uint16_t, 3>()
+ & testVShuffleX<uint16_t, 4>()
+ & test1ShuffleX<uint64_t>()
+ & testVShuffleX<uint64_t, 2>()
+ & testVShuffleX<uint64_t, 3>()
+ & testVShuffleX<uint64_t, 4>()
+ & test1ShuffleX<bool>()
+ & testVShuffleX<bool, 2>()
+ & testVShuffleX<bool, 3>()
+ & testVShuffleX<bool, 4>()
;
}
@@ -127,7 +127,7 @@ void computeMain()
{
outputBuffer.data[0] = true
- && testShuffleX()
+ & testShuffleX()
;
// CHECK_GLSL: void main(
diff --git a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang
index bcd4aeb56..3c700d6d8 100644
--- a/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang
+++ b/tests/glsl-intrinsic/shader-subgroup/shader-subgroup-vote.slang
@@ -28,8 +28,8 @@ layout(local_size_x = 32) in;
__generic<T : __BuiltinLogicalType>
bool test1AllEqual() {
return true
- && subgroupAllEqual(T(1)) == true
- && subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
+ & subgroupAllEqual(T(1)) == true
+ & subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
;
}
__generic<T : __BuiltinLogicalType, let N : int>
@@ -37,16 +37,16 @@ bool testVAllEqual() {
typealias gvec = vector<T, N>;
return true
- && subgroupAllEqual(gvec(T(1))) == true
- && subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
+ & subgroupAllEqual(gvec(T(1))) == true
+ & subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
;
}
__generic<T : __BuiltinFloatingPointType>
bool test1AllEqual() {
return true
- && subgroupAllEqual(T(1)) == true
- && subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
+ & subgroupAllEqual(T(1)) == true
+ & subgroupAllEqual(T(gl_GlobalInvocationID.x)) == false
;
}
__generic<T : __BuiltinFloatingPointType, let N : int>
@@ -54,60 +54,60 @@ bool testVAllEqual() {
typealias gvec = vector<T, N>;
return true
- && subgroupAllEqual(gvec(T(1))) == true
- && subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
+ & subgroupAllEqual(gvec(T(1))) == true
+ & subgroupAllEqual(gvec(T(gl_GlobalInvocationID.x))) == false
;
}
bool testAllEqual() {
return true
- && test1AllEqual<float>()
- && testVAllEqual<float, 2>()
- && testVAllEqual<float, 3>()
- && testVAllEqual<float, 4>()
- && test1AllEqual<double>() // WARNING: intel GPU's lack FP64 support
- && testVAllEqual<double, 2>()
- && testVAllEqual<double, 3>()
- && testVAllEqual<double, 4>()
- && test1AllEqual<half>()
- && testVAllEqual<half, 2>()
- && testVAllEqual<half, 3>()
- && testVAllEqual<half, 4>()
- && test1AllEqual<int>()
- && testVAllEqual<int, 2>()
- && testVAllEqual<int, 3>()
- && testVAllEqual<int, 4>()
- && test1AllEqual<int8_t>()
- && testVAllEqual<int8_t, 2>()
- && testVAllEqual<int8_t, 3>()
- && testVAllEqual<int8_t, 4>()
- && test1AllEqual<int16_t>()
- && testVAllEqual<int16_t, 2>()
- && testVAllEqual<int16_t, 3>()
- && testVAllEqual<int16_t, 4>()
- && test1AllEqual<int64_t>()
- && testVAllEqual<int64_t, 2>()
- && testVAllEqual<int64_t, 3>()
- && testVAllEqual<int64_t, 4>()
- && test1AllEqual<uint>()
- && testVAllEqual<uint, 2>()
- && testVAllEqual<uint, 3>()
- && testVAllEqual<uint, 4>()
- && test1AllEqual<uint8_t>()
- && testVAllEqual<uint8_t, 2>()
- && testVAllEqual<uint8_t, 3>()
- && testVAllEqual<uint8_t, 4>()
- && test1AllEqual<uint16_t>()
- && testVAllEqual<uint16_t, 2>()
- && testVAllEqual<uint16_t, 3>()
- && testVAllEqual<uint16_t, 4>()
- && test1AllEqual<uint64_t>()
- && testVAllEqual<uint64_t, 2>()
- && testVAllEqual<uint64_t, 3>()
- && testVAllEqual<uint64_t, 4>()
- && test1AllEqual<bool>()
- && testVAllEqual<bool, 2>()
- && testVAllEqual<bool, 3>()
- && testVAllEqual<bool, 4>()
+ & test1AllEqual<float>()
+ & testVAllEqual<float, 2>()
+ & testVAllEqual<float, 3>()
+ & testVAllEqual<float, 4>()
+ & test1AllEqual<double>() // WARNING: intel GPU's lack FP64 support
+ & testVAllEqual<double, 2>()
+ & testVAllEqual<double, 3>()
+ & testVAllEqual<double, 4>()
+ & test1AllEqual<half>()
+ & testVAllEqual<half, 2>()
+ & testVAllEqual<half, 3>()
+ & testVAllEqual<half, 4>()
+ & test1AllEqual<int>()
+ & testVAllEqual<int, 2>()
+ & testVAllEqual<int, 3>()
+ & testVAllEqual<int, 4>()
+ & test1AllEqual<int8_t>()
+ & testVAllEqual<int8_t, 2>()
+ & testVAllEqual<int8_t, 3>()
+ & testVAllEqual<int8_t, 4>()
+ & test1AllEqual<int16_t>()
+ & testVAllEqual<int16_t, 2>()
+ & testVAllEqual<int16_t, 3>()
+ & testVAllEqual<int16_t, 4>()
+ & test1AllEqual<int64_t>()
+ & testVAllEqual<int64_t, 2>()
+ & testVAllEqual<int64_t, 3>()
+ & testVAllEqual<int64_t, 4>()
+ & test1AllEqual<uint>()
+ & testVAllEqual<uint, 2>()
+ & testVAllEqual<uint, 3>()
+ & testVAllEqual<uint, 4>()
+ & test1AllEqual<uint8_t>()
+ & testVAllEqual<uint8_t, 2>()
+ & testVAllEqual<uint8_t, 3>()
+ & testVAllEqual<uint8_t, 4>()
+ & test1AllEqual<uint16_t>()
+ & testVAllEqual<uint16_t, 2>()
+ & testVAllEqual<uint16_t, 3>()
+ & testVAllEqual<uint16_t, 4>()
+ & test1AllEqual<uint64_t>()
+ & testVAllEqual<uint64_t, 2>()
+ & testVAllEqual<uint64_t, 3>()
+ & testVAllEqual<uint64_t, 4>()
+ & test1AllEqual<bool>()
+ & testVAllEqual<bool, 2>()
+ & testVAllEqual<bool, 3>()
+ & testVAllEqual<bool, 4>()
;
}