Skip to content

Commit

Permalink
Merge branch 'KhronosGroup-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
Madman10K committed Feb 5, 2025
2 parents cee831f + 0182cc1 commit ac29798
Show file tree
Hide file tree
Showing 11 changed files with 74 additions and 1 deletion.
3 changes: 3 additions & 0 deletions SPIRV/GLSL.ext.NV.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,7 @@ const char* const E_SPV_NV_tensor_addressing = "SPV_NV_tensor_addressing";
//SPV_NV_cooperative_matrix2
const char* const E_SPV_NV_cooperative_matrix2 = "SPV_NV_cooperative_matrix2";

//SPV_NV_cluster_acceleration_structure
const char* const E_SPV_NV_cluster_acceleration_structure = "SPV_NV_cluster_acceleration_structure";

#endif // #ifndef GLSLextNV_H
31 changes: 30 additions & 1 deletion SPIRV/GlslangToSpv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1022,6 +1022,10 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV);
builder.addExtension("SPV_NV_displacement_micromap");
return spv::BuiltInHitKindBackFacingMicroTriangleNV;
case glslang::EbvClusterIDNV:
builder.addCapability(spv::CapabilityRayTracingClusterAccelerationStructureNV);
builder.addExtension("SPV_NV_cluster_acceleration_structure");
return spv::BuiltInClusterIDNV;

// barycentrics
case glslang::EbvBaryCoordNV:
Expand Down Expand Up @@ -2654,6 +2658,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
case glslang::EOpHitObjectRecordEmptyNV:
case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV:
case glslang::EOpHitObjectGetShaderRecordBufferHandleNV:
case glslang::EOpHitObjectGetClusterIdNV:
return true;
default:
return false;
Expand Down Expand Up @@ -3454,6 +3459,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
builder.addCapability(spv::CapabilityDisplacementMicromapNV);
break;

case glslang::EOpRayQueryGetIntersectionClusterIdNV:
builder.addExtension(spv::E_SPV_NV_cluster_acceleration_structure);
builder.addCapability(spv::CapabilityRayQueryKHR);
builder.addCapability(spv::CapabilityRayTracingClusterAccelerationStructureNV);
break;

case glslang::EOpDebugPrintf:
noReturnValue = true;
break;
Expand Down Expand Up @@ -3521,6 +3532,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpHitObjectRecordMissNV:
case glslang::EOpHitObjectRecordMissMotionNV:
case glslang::EOpHitObjectGetAttributesNV:
case glslang::EOpHitObjectGetClusterIdNV:
if (arg == 0)
lvalue = true;
break;
Expand All @@ -3543,6 +3555,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpRayQueryGetIntersectionObjectRayOrigin:
case glslang::EOpRayQueryGetIntersectionObjectToWorld:
case glslang::EOpRayQueryGetIntersectionWorldToObject:
case glslang::EOpRayQueryGetIntersectionClusterIdNV:
if (arg == 0)
lvalue = true;
break;
Expand Down Expand Up @@ -3771,7 +3784,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayOrigin ||
glslangOp == glslang::EOpRayQueryGetIntersectionObjectToWorld ||
glslangOp == glslang::EOpRayQueryGetIntersectionWorldToObject ||
glslangOp == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT
glslangOp == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT ||
glslangOp == glslang::EOpRayQueryGetIntersectionClusterIdNV
)) {
bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst();
operands.push_back(builder.makeIntConstant(cond ? 1 : 0));
Expand Down Expand Up @@ -7740,6 +7754,13 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe
unaryOp = spv::OpHitObjectGetShaderRecordBufferHandleNV;
break;

case glslang::EOpHitObjectGetClusterIdNV:
unaryOp = spv::OpHitObjectGetClusterIdNV;
builder.addExtension(spv::E_SPV_NV_cluster_acceleration_structure);
builder.addCapability(spv::CapabilityShaderInvocationReorderNV);
builder.addCapability(spv::CapabilityRayTracingClusterAccelerationStructureNV);
break;

case glslang::EOpFetchMicroTriangleVertexPositionNV:
unaryOp = spv::OpFetchMicroTriangleVertexPositionNV;
break;
Expand Down Expand Up @@ -9326,6 +9347,10 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
opCode = spv::OpRayQueryGetIntersectionObjectToWorldKHR;
break;
case glslang::EOpRayQueryGetIntersectionClusterIdNV:
typeId = builder.makeIntegerType(32, 1);
opCode = spv::OpRayQueryGetIntersectionClusterIdNV;
break;
case glslang::EOpRayQueryGetIntersectionWorldToObject:
typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3);
opCode = spv::OpRayQueryGetIntersectionWorldToObjectKHR;
Expand Down Expand Up @@ -9451,6 +9476,10 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
typeId = builder.makeVectorType(builder.makeUintType(32), 2);
opCode = spv::OpHitObjectGetShaderRecordBufferHandleNV;
break;
case glslang::EOpHitObjectGetClusterIdNV:
typeId = builder.makeIntegerType(32, 1);
opCode = spv::OpHitObjectGetClusterIdNV;
break;
case glslang::EOpReorderThreadNV: {
if (operands.size() == 2) {
builder.createNoResultOp(spv::OpReorderThreadWithHintNV, operands);
Expand Down
12 changes: 12 additions & 0 deletions SPIRV/doc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,7 @@ const char* BuiltInString(int builtIn)
// case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT
case BuiltInBaryCoordKHR: return "BaryCoordKHR";
case BuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR";
case BuiltInClusterIDNV: return "ClusterIDNV";

case BuiltInFragSizeEXT: return "FragSizeEXT";
case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT";
Expand Down Expand Up @@ -1097,6 +1098,8 @@ const char* CapabilityString(int info)
case CapabilityDotProductInput4x8BitKHR: return "DotProductInput4x8BitKHR";
case CapabilityDotProductInput4x8BitPackedKHR: return "DotProductInput4x8BitPackedKHR";

case CapabilityRayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV";

default: return "Bad";
}
}
Expand Down Expand Up @@ -1549,6 +1552,7 @@ const char* OpcodeString(int op)
case OpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR";
case OpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR";
case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR";
case OpRayQueryGetIntersectionClusterIdNV: return "OpRayQueryGetIntersectionClusterIdNV";

case OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV";
case OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV";
Expand Down Expand Up @@ -1626,6 +1630,7 @@ const char* OpcodeString(int op)
case OpHitObjectIsMissNV: return "OpHitObjectIsMissNV";
case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
case OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV";
case OpHitObjectGetClusterIdNV: return "OpHitObjectGetClusterIdNV";

case OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV";
case OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV";
Expand Down Expand Up @@ -3213,6 +3218,10 @@ void Parameterize()
InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'Committed'");
InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].setResultAndType(true, true);

InstructionDesc[OpRayQueryGetIntersectionClusterIdNV].operands.push(OperandId, "'RayQuery'");
InstructionDesc[OpRayQueryGetIntersectionClusterIdNV].operands.push(OperandId, "'Committed'");
InstructionDesc[OpRayQueryGetIntersectionClusterIdNV].setResultAndType(true, true);

InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'");
InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'");
InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'");
Expand Down Expand Up @@ -3532,6 +3541,9 @@ void Parameterize()
InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Payload'");
InstructionDesc[OpHitObjectTraceRayMotionNV].setResultAndType(false, false);

InstructionDesc[OpHitObjectGetClusterIdNV].operands.push(OperandId, "'HitObject'");
InstructionDesc[OpHitObjectGetClusterIdNV].setResultAndType(true, true);

InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Acceleration Structure'");
InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Instance ID'");
InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Geometry Index'");
Expand Down
6 changes: 6 additions & 0 deletions SPIRV/spirv.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,7 @@ enum BuiltIn {
BuiltInSMIDNV = 5377,
BuiltInHitKindFrontFacingMicroTriangleNV = 5405,
BuiltInHitKindBackFacingMicroTriangleNV = 5406,
BuiltInClusterIDNV = 5436,
BuiltInCullMaskKHR = 6021,
BuiltInMax = 0x7fffffff,
};
Expand Down Expand Up @@ -1177,6 +1178,7 @@ enum Capability {
CapabilityCooperativeMatrixTensorAddressingNV = 5433,
CapabilityCooperativeMatrixBlockLoadsNV = 5434,
CapabilityCooperativeVectorTrainingNV = 5435,
CapabilityRayTracingClusterAccelerationStructureNV = 5437,
CapabilityTensorAddressingNV = 5439,
CapabilitySubgroupShuffleINTEL = 5568,
CapabilitySubgroupBufferBlockIOINTEL = 5569,
Expand Down Expand Up @@ -1994,6 +1996,8 @@ enum Op {
OpTypeAccelerationStructureKHR = 5341,
OpTypeAccelerationStructureNV = 5341,
OpExecuteCallableNV = 5344,
OpRayQueryGetIntersectionClusterIdNV = 5345,
OpHitObjectGetClusterIdNV = 5346,
OpTypeCooperativeMatrixNV = 5358,
OpCooperativeMatrixLoadNV = 5359,
OpCooperativeMatrixStoreNV = 5360,
Expand Down Expand Up @@ -2747,6 +2751,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break;
case OpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break;
case OpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break;
case OpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break;
case OpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break;
case OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break;
case OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break;
Expand Down Expand Up @@ -3042,6 +3047,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;
case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
case OpRayQueryGetIntersectionClusterIdNV: *hasResult = true; *hasResultType = true; break;
case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;
case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
Expand Down
2 changes: 2 additions & 0 deletions glslang/Include/BaseTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,7 @@ enum TBuiltInVariable {
EbvWorldToObject3x4,
EbvIncomingRayFlags,
EbvCurrentRayTimeNV,
EbvClusterIDNV,
// barycentrics
EbvBaryCoordNV,
EbvBaryCoordNoPerspNV,
Expand Down Expand Up @@ -503,6 +504,7 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
case EbvObjectToWorld: return "ObjectToWorldNV";
case EbvWorldToObject: return "WorldToObjectNV";
case EbvCurrentRayTimeNV: return "CurrentRayTimeNV";
case EbvClusterIDNV: return "ClusterIDNV";

case EbvBaryCoordEXT:
case EbvBaryCoordNV: return "BaryCoordKHR";
Expand Down
4 changes: 4 additions & 0 deletions glslang/Include/intermediate.h
Original file line number Diff line number Diff line change
Expand Up @@ -967,6 +967,10 @@ enum TOperator {
EOpImageBlockMatchWindowSADQCOM,
EOpImageBlockMatchGatherSSDQCOM,
EOpImageBlockMatchGatherSADQCOM,

// GL_NV_cluster_acceleration_structure
EOpRayQueryGetIntersectionClusterIdNV,
EOpHitObjectGetClusterIdNV,
};

inline bool IsOpNumericConv(const TOperator op) {
Expand Down
Loading

0 comments on commit ac29798

Please sign in to comment.