mirror of
https://github.com/RPCS3/glslang.git
synced 2025-03-05 09:08:33 +00:00
INTEL_shader_integer_functions2: Add SPIR-V generation
v2: Move addCapability and addExtension extension calls from TGlslangToSpvTraverser::createBinaryOperation to TGlslangToSpvTraverser::visitAggregate. Suggested by JohnK.
This commit is contained in:
parent
fbcdcac254
commit
b3bd402c7c
@ -2608,6 +2608,17 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
|
||||
atomic = true;
|
||||
break;
|
||||
|
||||
case glslang::EOpAbsDifference:
|
||||
case glslang::EOpAddSaturate:
|
||||
case glslang::EOpSubSaturate:
|
||||
case glslang::EOpAverage:
|
||||
case glslang::EOpAverageRounded:
|
||||
case glslang::EOpMul32x16:
|
||||
builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
|
||||
builder.addExtension("SPV_INTEL_shader_integer_functions2");
|
||||
binOp = node->getOp();
|
||||
break;
|
||||
|
||||
case glslang::EOpIgnoreIntersectionNV:
|
||||
case glslang::EOpTerminateRayNV:
|
||||
case glslang::EOpTraceNV:
|
||||
@ -5231,6 +5242,30 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD
|
||||
binOp = spv::OpLogicalNotEqual;
|
||||
break;
|
||||
|
||||
case glslang::EOpAbsDifference:
|
||||
binOp = isUnsigned ? spv::OpAbsUSubINTEL : spv::OpAbsISubINTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpAddSaturate:
|
||||
binOp = isUnsigned ? spv::OpUAddSatINTEL : spv::OpIAddSatINTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpSubSaturate:
|
||||
binOp = isUnsigned ? spv::OpUSubSatINTEL : spv::OpISubSatINTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpAverage:
|
||||
binOp = isUnsigned ? spv::OpUAverageINTEL : spv::OpIAverageINTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpAverageRounded:
|
||||
binOp = isUnsigned ? spv::OpUAverageRoundedINTEL : spv::OpIAverageRoundedINTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpMul32x16:
|
||||
binOp = isUnsigned ? spv::OpUMul32x16INTEL : spv::OpIMul32x16INTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpLessThan:
|
||||
case glslang::EOpGreaterThan:
|
||||
case glslang::EOpLessThanEqual:
|
||||
@ -5745,6 +5780,18 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
|
||||
libCall = spv::GLSLstd450FindSMsb;
|
||||
break;
|
||||
|
||||
case glslang::EOpCountLeadingZeros:
|
||||
builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
|
||||
builder.addExtension("SPV_INTEL_shader_integer_functions2");
|
||||
unaryOp = spv::OpUCountLeadingZerosINTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpCountTrailingZeros:
|
||||
builder.addCapability(spv::CapabilityIntegerFunctions2INTEL);
|
||||
builder.addExtension("SPV_INTEL_shader_integer_functions2");
|
||||
unaryOp = spv::OpUCountTrailingZerosINTEL;
|
||||
break;
|
||||
|
||||
case glslang::EOpBallot:
|
||||
case glslang::EOpReadFirstInvocation:
|
||||
case glslang::EOpAnyInvocation:
|
||||
|
@ -931,6 +931,8 @@ const char* CapabilityString(int info)
|
||||
case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT";
|
||||
case CapabilityShaderClockKHR: return "ShaderClockKHR";
|
||||
|
||||
case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL";
|
||||
|
||||
default: return "Bad";
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user