diff --git a/spirv_glsl.cpp b/spirv_glsl.cpp index 4fc2f4e3..09eadc56 100644 --- a/spirv_glsl.cpp +++ b/spirv_glsl.cpp @@ -2500,48 +2500,48 @@ string CompilerGLSL::constant_op_expression(const SPIRConstantOp &cop) op = type_to_glsl_constructor(type); break; -#define BOP(opname, x) \ - case Op##opname: \ - binary = true; \ - op = x; \ +#define GLSL_BOP(opname, x) \ + case Op##opname: \ + binary = true; \ + op = x; \ break -#define UOP(opname, x) \ - case Op##opname: \ - unary = true; \ - op = x; \ +#define GLSL_UOP(opname, x) \ + case Op##opname: \ + unary = true; \ + op = x; \ break - UOP(SNegate, "-"); - UOP(Not, "~"); - BOP(IAdd, "+"); - BOP(ISub, "-"); - BOP(IMul, "*"); - BOP(SDiv, "/"); - BOP(UDiv, "/"); - BOP(UMod, "%"); - BOP(SMod, "%"); - BOP(ShiftRightLogical, ">>"); - BOP(ShiftRightArithmetic, ">>"); - BOP(ShiftLeftLogical, "<<"); - BOP(BitwiseOr, "|"); - BOP(BitwiseXor, "^"); - BOP(BitwiseAnd, "&"); - BOP(LogicalOr, "||"); - BOP(LogicalAnd, "&&"); - UOP(LogicalNot, "!"); - BOP(LogicalEqual, "=="); - BOP(LogicalNotEqual, "!="); - BOP(IEqual, "=="); - BOP(INotEqual, "!="); - BOP(ULessThan, "<"); - BOP(SLessThan, "<"); - BOP(ULessThanEqual, "<="); - BOP(SLessThanEqual, "<="); - BOP(UGreaterThan, ">"); - BOP(SGreaterThan, ">"); - BOP(UGreaterThanEqual, ">="); - BOP(SGreaterThanEqual, ">="); + GLSL_UOP(SNegate, "-"); + GLSL_UOP(Not, "~"); + GLSL_BOP(IAdd, "+"); + GLSL_BOP(ISub, "-"); + GLSL_BOP(IMul, "*"); + GLSL_BOP(SDiv, "/"); + GLSL_BOP(UDiv, "/"); + GLSL_BOP(UMod, "%"); + GLSL_BOP(SMod, "%"); + GLSL_BOP(ShiftRightLogical, ">>"); + GLSL_BOP(ShiftRightArithmetic, ">>"); + GLSL_BOP(ShiftLeftLogical, "<<"); + GLSL_BOP(BitwiseOr, "|"); + GLSL_BOP(BitwiseXor, "^"); + GLSL_BOP(BitwiseAnd, "&"); + GLSL_BOP(LogicalOr, "||"); + GLSL_BOP(LogicalAnd, "&&"); + GLSL_UOP(LogicalNot, "!"); + GLSL_BOP(LogicalEqual, "=="); + GLSL_BOP(LogicalNotEqual, "!="); + GLSL_BOP(IEqual, "=="); + GLSL_BOP(INotEqual, "!="); + GLSL_BOP(ULessThan, "<"); + GLSL_BOP(SLessThan, "<"); + GLSL_BOP(ULessThanEqual, "<="); + GLSL_BOP(SLessThanEqual, "<="); + GLSL_BOP(UGreaterThan, ">"); + GLSL_BOP(SGreaterThan, ">"); + GLSL_BOP(UGreaterThanEqual, ">="); + GLSL_BOP(SGreaterThanEqual, ">="); case OpSelect: { @@ -2620,8 +2620,8 @@ string CompilerGLSL::constant_op_expression(const SPIRConstantOp &cop) break; } -#undef BOP -#undef UOP +#undef GLSL_BOP +#undef GLSL_UOP if (binary) { if (cop.arguments.size() < 2) @@ -3509,7 +3509,7 @@ string CompilerGLSL::legacy_tex_op(const std::string &op, const SPIRType &imgtyp require_extension_internal("GL_EXT_gpu_shader4"); } - // GLES has very limited support for shadow samplers. + // GLES has very limited support for shadow samplers. // Basically shadow2D and shadow2DProj work through EXT_shadow_samplers, // everything else can just throw if (imgtype.image.depth && is_legacy_es()) @@ -3551,7 +3551,8 @@ string CompilerGLSL::legacy_tex_op(const std::string &op, const SPIRType &imgtyp return join(type_prefix, type); } else if (op == "textureProjGrad") - return join(type_prefix, type, is_legacy_es() ? "ProjGradEXT" : is_legacy_desktop() ? "ProjGradARB" : "ProjGrad"); + return join(type_prefix, type, + is_legacy_es() ? "ProjGradEXT" : is_legacy_desktop() ? "ProjGradARB" : "ProjGrad"); else if (op == "textureProjLodOffset") { if (use_explicit_lod) @@ -4810,7 +4811,7 @@ void CompilerGLSL::emit_subgroup_op(const Instruction &i) break; // clang-format off -#define GROUP_OP(op, glsl_op) \ +#define GLSL_GROUP_OP(op, glsl_op) \ case OpGroupNonUniform##op: \ { \ auto operation = static_cast(ops[3]); \ @@ -4826,20 +4827,20 @@ case OpGroupNonUniform##op: \ SPIRV_CROSS_THROW("Invalid group operation."); \ break; \ } - GROUP_OP(FAdd, Add) - GROUP_OP(FMul, Mul) - GROUP_OP(FMin, Min) - GROUP_OP(FMax, Max) - GROUP_OP(IAdd, Add) - GROUP_OP(IMul, Mul) - GROUP_OP(SMin, Min) - GROUP_OP(SMax, Max) - GROUP_OP(UMin, Min) - GROUP_OP(UMax, Max) - GROUP_OP(BitwiseAnd, And) - GROUP_OP(BitwiseOr, Or) - GROUP_OP(BitwiseXor, Xor) -#undef GROUP_OP + GLSL_GROUP_OP(FAdd, Add) + GLSL_GROUP_OP(FMul, Mul) + GLSL_GROUP_OP(FMin, Min) + GLSL_GROUP_OP(FMax, Max) + GLSL_GROUP_OP(IAdd, Add) + GLSL_GROUP_OP(IMul, Mul) + GLSL_GROUP_OP(SMin, Min) + GLSL_GROUP_OP(SMax, Max) + GLSL_GROUP_OP(UMin, Min) + GLSL_GROUP_OP(UMax, Max) + GLSL_GROUP_OP(BitwiseAnd, And) + GLSL_GROUP_OP(BitwiseOr, Or) + GLSL_GROUP_OP(BitwiseXor, Xor) +#undef GLSL_GROUP_OP // clang-format on case OpGroupNonUniformQuadSwap: @@ -6082,17 +6083,17 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) auto opcode = static_cast(instruction.op); uint32_t length = instruction.length; -#define BOP(op) emit_binary_op(ops[0], ops[1], ops[2], ops[3], #op) -#define BOP_CAST(op, type) \ +#define GLSL_BOP(op) emit_binary_op(ops[0], ops[1], ops[2], ops[3], #op) +#define GLSL_BOP_CAST(op, type) \ emit_binary_op_cast(ops[0], ops[1], ops[2], ops[3], #op, type, glsl_opcode_is_sign_invariant(opcode)) -#define UOP(op) emit_unary_op(ops[0], ops[1], ops[2], #op) -#define QFOP(op) emit_quaternary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], ops[5], #op) -#define TFOP(op) emit_trinary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], #op) -#define BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) -#define BFOP_CAST(op, type) \ +#define GLSL_UOP(op) emit_unary_op(ops[0], ops[1], ops[2], #op) +#define GLSL_QFOP(op) emit_quaternary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], ops[5], #op) +#define GLSL_TFOP(op) emit_trinary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], #op) +#define GLSL_BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) +#define GLSL_BFOP_CAST(op, type) \ emit_binary_func_op_cast(ops[0], ops[1], ops[2], ops[3], #op, type, glsl_opcode_is_sign_invariant(opcode)) -#define BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) -#define UFOP(op) emit_unary_func_op(ops[0], ops[1], ops[2], #op) +#define GLSL_BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) +#define GLSL_UFOP(op) emit_unary_func_op(ops[0], ops[1], ops[2], #op) switch (opcode) { @@ -6625,45 +6626,45 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) // ALU case OpIsNan: - UFOP(isnan); + GLSL_UFOP(isnan); break; case OpIsInf: - UFOP(isinf); + GLSL_UFOP(isinf); break; case OpSNegate: case OpFNegate: - UOP(-); + GLSL_UOP(-); break; case OpIAdd: { // For simple arith ops, prefer the output type if there's a mismatch to avoid extra bitcasts. auto type = get(ops[0]).basetype; - BOP_CAST(+, type); + GLSL_BOP_CAST(+, type); break; } case OpFAdd: - BOP(+); + GLSL_BOP(+); break; case OpISub: { auto type = get(ops[0]).basetype; - BOP_CAST(-, type); + GLSL_BOP_CAST(-, type); break; } case OpFSub: - BOP(-); + GLSL_BOP(-); break; case OpIMul: { auto type = get(ops[0]).basetype; - BOP_CAST(*, type); + GLSL_BOP_CAST(*, type); break; } @@ -6679,7 +6680,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) e->need_transpose = true; } else - BOP(*); + GLSL_BOP(*); break; } @@ -6687,19 +6688,19 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) case OpMatrixTimesScalar: case OpVectorTimesScalar: case OpMatrixTimesMatrix: - BOP(*); + GLSL_BOP(*); break; case OpOuterProduct: - BFOP(outerProduct); + GLSL_BFOP(outerProduct); break; case OpDot: - BFOP(dot); + GLSL_BFOP(dot); break; case OpTranspose: - UFOP(transpose); + GLSL_UFOP(transpose); break; case OpSRem: @@ -6721,67 +6722,67 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) } case OpSDiv: - BOP_CAST(/, SPIRType::Int); + GLSL_BOP_CAST(/, SPIRType::Int); break; case OpUDiv: - BOP_CAST(/, SPIRType::UInt); + GLSL_BOP_CAST(/, SPIRType::UInt); break; case OpFDiv: - BOP(/); + GLSL_BOP(/); break; case OpShiftRightLogical: - BOP_CAST(>>, SPIRType::UInt); + GLSL_BOP_CAST(>>, SPIRType::UInt); break; case OpShiftRightArithmetic: - BOP_CAST(>>, SPIRType::Int); + GLSL_BOP_CAST(>>, SPIRType::Int); break; case OpShiftLeftLogical: { auto type = get(ops[0]).basetype; - BOP_CAST(<<, type); + GLSL_BOP_CAST(<<, type); break; } case OpBitwiseOr: { auto type = get(ops[0]).basetype; - BOP_CAST(|, type); + GLSL_BOP_CAST(|, type); break; } case OpBitwiseXor: { auto type = get(ops[0]).basetype; - BOP_CAST(^, type); + GLSL_BOP_CAST (^, type); break; } case OpBitwiseAnd: { auto type = get(ops[0]).basetype; - BOP_CAST(&, type); + GLSL_BOP_CAST(&, type); break; } case OpNot: - UOP(~); + GLSL_UOP(~); break; case OpUMod: - BOP_CAST(%, SPIRType::UInt); + GLSL_BOP_CAST(%, SPIRType::UInt); break; case OpSMod: - BOP_CAST(%, SPIRType::Int); + GLSL_BOP_CAST(%, SPIRType::Int); break; case OpFMod: - BFOP(mod); + GLSL_BFOP(mod); break; case OpFRem: @@ -6808,11 +6809,11 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) // Relational case OpAny: - UFOP(any); + GLSL_UFOP(any); break; case OpAll: - UFOP(all); + GLSL_UFOP(all); break; case OpSelect: @@ -6829,7 +6830,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) if (type.vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "||"); else - BOP(||); + GLSL_BOP(||); break; } @@ -6843,7 +6844,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) if (type.vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "&&"); else - BOP(&&); + GLSL_BOP(&&); break; } @@ -6851,18 +6852,18 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { auto &type = get(ops[0]); if (type.vecsize > 1) - UFOP(not); + GLSL_UFOP(not); else - UOP(!); + GLSL_UOP(!); break; } case OpIEqual: { if (expression_type(ops[2]).vecsize > 1) - BFOP_CAST(equal, SPIRType::Int); + GLSL_BFOP_CAST(equal, SPIRType::Int); else - BOP_CAST(==, SPIRType::Int); + GLSL_BOP_CAST(==, SPIRType::Int); break; } @@ -6870,18 +6871,18 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) case OpFOrdEqual: { if (expression_type(ops[2]).vecsize > 1) - BFOP(equal); + GLSL_BFOP(equal); else - BOP(==); + GLSL_BOP(==); break; } case OpINotEqual: { if (expression_type(ops[2]).vecsize > 1) - BFOP_CAST(notEqual, SPIRType::Int); + GLSL_BFOP_CAST(notEqual, SPIRType::Int); else - BOP_CAST(!=, SPIRType::Int); + GLSL_BOP_CAST(!=, SPIRType::Int); break; } @@ -6889,9 +6890,9 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) case OpFOrdNotEqual: { if (expression_type(ops[2]).vecsize > 1) - BFOP(notEqual); + GLSL_BFOP(notEqual); else - BOP(!=); + GLSL_BOP(!=); break; } @@ -6900,18 +6901,18 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { auto type = opcode == OpUGreaterThan ? SPIRType::UInt : SPIRType::Int; if (expression_type(ops[2]).vecsize > 1) - BFOP_CAST(greaterThan, type); + GLSL_BFOP_CAST(greaterThan, type); else - BOP_CAST(>, type); + GLSL_BOP_CAST(>, type); break; } case OpFOrdGreaterThan: { if (expression_type(ops[2]).vecsize > 1) - BFOP(greaterThan); + GLSL_BFOP(greaterThan); else - BOP(>); + GLSL_BOP(>); break; } @@ -6920,18 +6921,18 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { auto type = opcode == OpUGreaterThanEqual ? SPIRType::UInt : SPIRType::Int; if (expression_type(ops[2]).vecsize > 1) - BFOP_CAST(greaterThanEqual, type); + GLSL_BFOP_CAST(greaterThanEqual, type); else - BOP_CAST(>=, type); + GLSL_BOP_CAST(>=, type); break; } case OpFOrdGreaterThanEqual: { if (expression_type(ops[2]).vecsize > 1) - BFOP(greaterThanEqual); + GLSL_BFOP(greaterThanEqual); else - BOP(>=); + GLSL_BOP(>=); break; } @@ -6940,18 +6941,18 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { auto type = opcode == OpULessThan ? SPIRType::UInt : SPIRType::Int; if (expression_type(ops[2]).vecsize > 1) - BFOP_CAST(lessThan, type); + GLSL_BFOP_CAST(lessThan, type); else - BOP_CAST(<, type); + GLSL_BOP_CAST(<, type); break; } case OpFOrdLessThan: { if (expression_type(ops[2]).vecsize > 1) - BFOP(lessThan); + GLSL_BFOP(lessThan); else - BOP(<); + GLSL_BOP(<); break; } @@ -6960,18 +6961,18 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { auto type = opcode == OpULessThanEqual ? SPIRType::UInt : SPIRType::Int; if (expression_type(ops[2]).vecsize > 1) - BFOP_CAST(lessThanEqual, type); + GLSL_BFOP_CAST(lessThanEqual, type); else - BOP_CAST(<=, type); + GLSL_BOP_CAST(<=, type); break; } case OpFOrdLessThanEqual: { if (expression_type(ops[2]).vecsize > 1) - BFOP(lessThanEqual); + GLSL_BFOP(lessThanEqual); else - BOP(<=); + GLSL_BOP(<=); break; } @@ -7045,21 +7046,21 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) // Derivatives case OpDPdx: - UFOP(dFdx); + GLSL_UFOP(dFdx); if (is_legacy_es()) require_extension_internal("GL_OES_standard_derivatives"); register_control_dependent_expression(ops[1]); break; case OpDPdy: - UFOP(dFdy); + GLSL_UFOP(dFdy); if (is_legacy_es()) require_extension_internal("GL_OES_standard_derivatives"); register_control_dependent_expression(ops[1]); break; case OpDPdxFine: - UFOP(dFdxFine); + GLSL_UFOP(dFdxFine); if (options.es) { SPIRV_CROSS_THROW("GL_ARB_derivative_control is unavailable in OpenGL ES."); @@ -7070,7 +7071,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) break; case OpDPdyFine: - UFOP(dFdyFine); + GLSL_UFOP(dFdyFine); if (options.es) { SPIRV_CROSS_THROW("GL_ARB_derivative_control is unavailable in OpenGL ES."); @@ -7085,14 +7086,14 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { SPIRV_CROSS_THROW("GL_ARB_derivative_control is unavailable in OpenGL ES."); } - UFOP(dFdxCoarse); + GLSL_UFOP(dFdxCoarse); if (options.version < 450) require_extension_internal("GL_ARB_derivative_control"); register_control_dependent_expression(ops[1]); break; case OpDPdyCoarse: - UFOP(dFdyCoarse); + GLSL_UFOP(dFdyCoarse); if (options.es) { SPIRV_CROSS_THROW("GL_ARB_derivative_control is unavailable in OpenGL ES."); @@ -7103,14 +7104,14 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) break; case OpFwidth: - UFOP(fwidth); + GLSL_UFOP(fwidth); if (is_legacy_es()) require_extension_internal("GL_OES_standard_derivatives"); register_control_dependent_expression(ops[1]); break; case OpFwidthCoarse: - UFOP(fwidthCoarse); + GLSL_UFOP(fwidthCoarse); if (options.es) { SPIRV_CROSS_THROW("GL_ARB_derivative_control is unavailable in OpenGL ES."); @@ -7121,7 +7122,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) break; case OpFwidthFine: - UFOP(fwidthFine); + GLSL_UFOP(fwidthFine); if (options.es) { SPIRV_CROSS_THROW("GL_ARB_derivative_control is unavailable in OpenGL ES."); @@ -7134,21 +7135,21 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) // Bitfield case OpBitFieldInsert: // TODO: The signedness of inputs is strict in GLSL, but not in SPIR-V, bitcast if necessary. - QFOP(bitfieldInsert); + GLSL_QFOP(bitfieldInsert); break; case OpBitFieldSExtract: case OpBitFieldUExtract: // TODO: The signedness of inputs is strict in GLSL, but not in SPIR-V, bitcast if necessary. - TFOP(bitfieldExtract); + GLSL_TFOP(bitfieldExtract); break; case OpBitReverse: - UFOP(bitfieldReverse); + GLSL_UFOP(bitfieldReverse); break; case OpBitCount: - UFOP(bitCount); + GLSL_UFOP(bitCount); break; // Atomics @@ -7185,7 +7186,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) flush_all_atomic_capable_variables(); // FIXME: Image? // OpAtomicLoad seems to only be relevant for atomic counters. - UFOP(atomicCounter); + GLSL_UFOP(atomicCounter); register_read(ops[1], ops[2], should_forward(ops[2])); break; @@ -7195,7 +7196,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) case OpAtomicIIncrement: forced_temporaries.insert(ops[1]); // FIXME: Image? - UFOP(atomicCounterIncrement); + GLSL_UFOP(atomicCounterIncrement); flush_all_atomic_capable_variables(); register_read(ops[1], ops[2], should_forward(ops[2])); break; @@ -7203,7 +7204,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) case OpAtomicIDecrement: forced_temporaries.insert(ops[1]); // FIXME: Image? - UFOP(atomicCounterDecrement); + GLSL_UFOP(atomicCounterDecrement); flush_all_atomic_capable_variables(); register_read(ops[1], ops[2], should_forward(ops[2])); break; @@ -7334,12 +7335,12 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { require_extension_internal("GL_ARB_texture_query_lod"); // For some reason, the ARB spec is all-caps. - BFOP(textureQueryLOD); + GLSL_BFOP(textureQueryLOD); } else if (options.es) SPIRV_CROSS_THROW("textureQueryLod not supported in ES profile."); else - BFOP(textureQueryLod); + GLSL_BFOP(textureQueryLod); register_control_dependent_expression(ops[1]); break; } diff --git a/spirv_hlsl.cpp b/spirv_hlsl.cpp index 35d86552..16457905 100644 --- a/spirv_hlsl.cpp +++ b/spirv_hlsl.cpp @@ -3766,7 +3766,7 @@ void CompilerHLSL::emit_subgroup_op(const Instruction &i) } // clang-format off -#define GROUP_OP(op, hlsl_op, supports_scan) \ +#define HLSL_GROUP_OP(op, hlsl_op, supports_scan) \ case OpGroupNonUniform##op: \ { \ auto operation = static_cast(ops[3]); \ @@ -3786,20 +3786,20 @@ case OpGroupNonUniform##op: \ SPIRV_CROSS_THROW("Invalid group operation."); \ break; \ } - GROUP_OP(FAdd, Sum, true) - GROUP_OP(FMul, Product, true) - GROUP_OP(FMin, Min, false) - GROUP_OP(FMax, Max, false) - GROUP_OP(IAdd, Sum, true) - GROUP_OP(IMul, Product, true) - GROUP_OP(SMin, Min, false) - GROUP_OP(SMax, Max, false) - GROUP_OP(UMin, Min, false) - GROUP_OP(UMax, Max, false) - GROUP_OP(BitwiseAnd, BitAnd, false) - GROUP_OP(BitwiseOr, BitOr, false) - GROUP_OP(BitwiseXor, BitXor, false) -#undef GROUP_OP + HLSL_GROUP_OP(FAdd, Sum, true) + HLSL_GROUP_OP(FMul, Product, true) + HLSL_GROUP_OP(FMin, Min, false) + HLSL_GROUP_OP(FMax, Max, false) + HLSL_GROUP_OP(IAdd, Sum, true) + HLSL_GROUP_OP(IMul, Product, true) + HLSL_GROUP_OP(SMin, Min, false) + HLSL_GROUP_OP(SMax, Max, false) + HLSL_GROUP_OP(UMin, Min, false) + HLSL_GROUP_OP(UMax, Max, false) + HLSL_GROUP_OP(BitwiseAnd, BitAnd, false) + HLSL_GROUP_OP(BitwiseOr, BitOr, false) + HLSL_GROUP_OP(BitwiseXor, BitXor, false) +#undef HLSL_GROUP_OP // clang-format on case OpGroupNonUniformQuadSwap: @@ -3834,17 +3834,17 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) auto ops = stream(instruction); auto opcode = static_cast(instruction.op); -#define BOP(op) emit_binary_op(ops[0], ops[1], ops[2], ops[3], #op) -#define BOP_CAST(op, type) \ +#define HLSL_BOP(op) emit_binary_op(ops[0], ops[1], ops[2], ops[3], #op) +#define HLSL_BOP_CAST(op, type) \ emit_binary_op_cast(ops[0], ops[1], ops[2], ops[3], #op, type, hlsl_opcode_is_sign_invariant(opcode)) -#define UOP(op) emit_unary_op(ops[0], ops[1], ops[2], #op) -#define QFOP(op) emit_quaternary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], ops[5], #op) -#define TFOP(op) emit_trinary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], #op) -#define BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) -#define BFOP_CAST(op, type) \ +#define HLSL_UOP(op) emit_unary_op(ops[0], ops[1], ops[2], #op) +#define HLSL_QFOP(op) emit_quaternary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], ops[5], #op) +#define HLSL_TFOP(op) emit_trinary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], #op) +#define HLSL_BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) +#define HLSL_BFOP_CAST(op, type) \ emit_binary_func_op_cast(ops[0], ops[1], ops[2], ops[3], #op, type, hlsl_opcode_is_sign_invariant(opcode)) -#define BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) -#define UFOP(op) emit_unary_func_op(ops[0], ops[1], ops[2], #op) +#define HLSL_BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) +#define HLSL_UFOP(op) emit_unary_func_op(ops[0], ops[1], ops[2], #op) switch (opcode) { @@ -3913,39 +3913,39 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) } case OpDPdx: - UFOP(ddx); + HLSL_UFOP(ddx); register_control_dependent_expression(ops[1]); break; case OpDPdy: - UFOP(ddy); + HLSL_UFOP(ddy); register_control_dependent_expression(ops[1]); break; case OpDPdxFine: - UFOP(ddx_fine); + HLSL_UFOP(ddx_fine); register_control_dependent_expression(ops[1]); break; case OpDPdyFine: - UFOP(ddy_fine); + HLSL_UFOP(ddy_fine); register_control_dependent_expression(ops[1]); break; case OpDPdxCoarse: - UFOP(ddx_coarse); + HLSL_UFOP(ddx_coarse); register_control_dependent_expression(ops[1]); break; case OpDPdyCoarse: - UFOP(ddy_coarse); + HLSL_UFOP(ddy_coarse); register_control_dependent_expression(ops[1]); break; case OpFwidth: case OpFwidthCoarse: case OpFwidthFine: - UFOP(fwidth); + HLSL_UFOP(fwidth); register_control_dependent_expression(ops[1]); break; @@ -3958,7 +3958,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (type.vecsize > 1) emit_unrolled_unary_op(result_type, id, ops[2], "!"); else - UOP(!); + HLSL_UOP(!); break; } @@ -3970,7 +3970,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "=="); else - BOP_CAST(==, SPIRType::Int); + HLSL_BOP_CAST(==, SPIRType::Int); break; } @@ -3983,7 +3983,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "=="); else - BOP(==); + HLSL_BOP(==); break; } @@ -3995,7 +3995,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "!="); else - BOP_CAST(!=, SPIRType::Int); + HLSL_BOP_CAST(!=, SPIRType::Int); break; } @@ -4008,7 +4008,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "!="); else - BOP(!=); + HLSL_BOP(!=); break; } @@ -4022,7 +4022,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], ">"); else - BOP_CAST(>, type); + HLSL_BOP_CAST(>, type); break; } @@ -4034,7 +4034,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], ">"); else - BOP(>); + HLSL_BOP(>); break; } @@ -4048,7 +4048,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], ">="); else - BOP_CAST(>=, type); + HLSL_BOP_CAST(>=, type); break; } @@ -4060,7 +4060,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], ">="); else - BOP(>=); + HLSL_BOP(>=); break; } @@ -4074,7 +4074,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "<"); else - BOP_CAST(<, type); + HLSL_BOP_CAST(<, type); break; } @@ -4086,7 +4086,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "<"); else - BOP(<); + HLSL_BOP(<); break; } @@ -4100,7 +4100,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "<="); else - BOP_CAST(<=, type); + HLSL_BOP_CAST(<=, type); break; } @@ -4112,7 +4112,7 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) if (expression_type(ops[2]).vecsize > 1) emit_unrolled_binary_op(result_type, id, ops[2], ops[3], "<="); else - BOP(<=); + HLSL_BOP(<=); break; } @@ -4417,18 +4417,18 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) } if (opcode == OpBitFieldSExtract) - TFOP(SPIRV_Cross_bitfieldSExtract); + HLSL_TFOP(SPIRV_Cross_bitfieldSExtract); else - TFOP(SPIRV_Cross_bitfieldUExtract); + HLSL_TFOP(SPIRV_Cross_bitfieldUExtract); break; } case OpBitCount: - UFOP(countbits); + HLSL_UFOP(countbits); break; case OpBitReverse: - UFOP(reversebits); + HLSL_UFOP(reversebits); break; default: diff --git a/spirv_msl.cpp b/spirv_msl.cpp index 73637b75..08d9f6a2 100644 --- a/spirv_msl.cpp +++ b/spirv_msl.cpp @@ -1543,16 +1543,16 @@ void CompilerMSL::emit_specialization_constants() void CompilerMSL::emit_instruction(const Instruction &instruction) { -#define BOP(op) emit_binary_op(ops[0], ops[1], ops[2], ops[3], #op) -#define BOP_CAST(op, type) \ +#define MSL_BOP(op) emit_binary_op(ops[0], ops[1], ops[2], ops[3], #op) +#define MSL_BOP_CAST(op, type) \ emit_binary_op_cast(ops[0], ops[1], ops[2], ops[3], #op, type, opcode_is_sign_invariant(opcode)) -#define UOP(op) emit_unary_op(ops[0], ops[1], ops[2], #op) -#define QFOP(op) emit_quaternary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], ops[5], #op) -#define TFOP(op) emit_trinary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], #op) -#define BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) -#define BFOP_CAST(op, type) \ +#define MSL_UOP(op) emit_unary_op(ops[0], ops[1], ops[2], #op) +#define MSL_QFOP(op) emit_quaternary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], ops[5], #op) +#define MSL_TFOP(op) emit_trinary_func_op(ops[0], ops[1], ops[2], ops[3], ops[4], #op) +#define MSL_BFOP(op) emit_binary_func_op(ops[0], ops[1], ops[2], ops[3], #op) +#define MSL_BFOP_CAST(op, type) \ emit_binary_func_op_cast(ops[0], ops[1], ops[2], ops[3], #op, type, opcode_is_sign_invariant(opcode)) -#define UFOP(op) emit_unary_func_op(ops[0], ops[1], ops[2], #op) +#define MSL_UFOP(op) emit_unary_func_op(ops[0], ops[1], ops[2], #op) auto ops = stream(instruction); auto opcode = static_cast(instruction.op); @@ -1564,81 +1564,81 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) case OpIEqual: case OpLogicalEqual: case OpFOrdEqual: - BOP(==); + MSL_BOP(==); break; case OpINotEqual: case OpLogicalNotEqual: case OpFOrdNotEqual: - BOP(!=); + MSL_BOP(!=); break; case OpUGreaterThan: case OpSGreaterThan: case OpFOrdGreaterThan: - BOP(>); + MSL_BOP(>); break; case OpUGreaterThanEqual: case OpSGreaterThanEqual: case OpFOrdGreaterThanEqual: - BOP(>=); + MSL_BOP(>=); break; case OpULessThan: case OpSLessThan: case OpFOrdLessThan: - BOP(<); + MSL_BOP(<); break; case OpULessThanEqual: case OpSLessThanEqual: case OpFOrdLessThanEqual: - BOP(<=); + MSL_BOP(<=); break; // Derivatives case OpDPdx: case OpDPdxFine: case OpDPdxCoarse: - UFOP(dfdx); + MSL_UFOP(dfdx); register_control_dependent_expression(ops[1]); break; case OpDPdy: case OpDPdyFine: case OpDPdyCoarse: - UFOP(dfdy); + MSL_UFOP(dfdy); register_control_dependent_expression(ops[1]); break; case OpFwidth: case OpFwidthCoarse: case OpFwidthFine: - UFOP(fwidth); + MSL_UFOP(fwidth); register_control_dependent_expression(ops[1]); break; // Bitfield case OpBitFieldInsert: - QFOP(insert_bits); + MSL_QFOP(insert_bits); break; case OpBitFieldSExtract: case OpBitFieldUExtract: - TFOP(extract_bits); + MSL_TFOP(extract_bits); break; case OpBitReverse: - UFOP(reverse_bits); + MSL_UFOP(reverse_bits); break; case OpBitCount: - UFOP(popcount); + MSL_UFOP(popcount); break; case OpFRem: - BFOP(fmod); + MSL_BFOP(fmod); break; // Atomics @@ -1691,7 +1691,7 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) break; } -#define AFMOImpl(op, valsrc) \ +#define MSL_AFMO_IMPL(op, valsrc) \ do \ { \ uint32_t result_type = ops[0]; \ @@ -1702,45 +1702,45 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) emit_atomic_func_op(result_type, id, "atomic_fetch_" #op "_explicit", mem_sem, mem_sem, false, ptr, val); \ } while (false) -#define AFMO(op) AFMOImpl(op, ops[5]) -#define AFMIO(op) AFMOImpl(op, 1) +#define MSL_AFMO(op) MSL_AFMO_IMPL(op, ops[5]) +#define MSL_AFMIO(op) MSL_AFMO_IMPL(op, 1) case OpAtomicIIncrement: - AFMIO(add); + MSL_AFMIO(add); break; case OpAtomicIDecrement: - AFMIO(sub); + MSL_AFMIO(sub); break; case OpAtomicIAdd: - AFMO(add); + MSL_AFMO(add); break; case OpAtomicISub: - AFMO(sub); + MSL_AFMO(sub); break; case OpAtomicSMin: case OpAtomicUMin: - AFMO(min); + MSL_AFMO(min); break; case OpAtomicSMax: case OpAtomicUMax: - AFMO(max); + MSL_AFMO(max); break; case OpAtomicAnd: - AFMO(and); + MSL_AFMO(and); break; case OpAtomicOr: - AFMO(or); + MSL_AFMO(or); break; case OpAtomicXor: - AFMO(xor); + MSL_AFMO (xor); break; // Images @@ -1864,7 +1864,7 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) break; } -#define ImgQry(qrytype) \ +#define MSL_ImgQry(qrytype) \ do \ { \ uint32_t rslt_type_id = ops[0]; \ @@ -1877,11 +1877,11 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) } while (false) case OpImageQueryLevels: - ImgQry(mip_levels); + MSL_ImgQry(mip_levels); break; case OpImageQuerySamples: - ImgQry(samples); + MSL_ImgQry(samples); break; // Casting @@ -1963,7 +1963,7 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) e->need_transpose = true; } else - BOP(*); + MSL_BOP(*); break; } diff --git a/spirv_msl.hpp b/spirv_msl.hpp index 71ab604c..fe3401d9 100644 --- a/spirv_msl.hpp +++ b/spirv_msl.hpp @@ -152,7 +152,7 @@ public: Platform platform = macOS; uint32_t msl_version = make_msl_version(1, 2); - uint32_t texel_buffer_texture_width = 4096; // Width of 2D Metal textures used as 1D texel buffers + uint32_t texel_buffer_texture_width = 4096; // Width of 2D Metal textures used as 1D texel buffers bool enable_point_size_builtin = true; bool resolve_specialized_array_lengths = true;