Add GL_KHR_shader_subgroup_rotate support
Co-authored-by: Neil Hickey <neil.hickey@arm.com> Co-authored-by: Stuart Brady <stuart.brady@arm.com> Signed-off-by: Sven van Haastregt <sven.vanhaastregt@arm.com>
This commit is contained in:
parent
8c3dbb3596
commit
b1f7affe94
20 changed files with 5765 additions and 7 deletions
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
** Copyright (c) 2014-2020 The Khronos Group Inc.
|
||||
** Copyright (C) 2022-2024 Arm Limited.
|
||||
** Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
|
@ -58,5 +59,6 @@ static const char* const E_SPV_AMD_shader_early_and_late_fragment_tests = "SPV_A
|
|||
static const char* const E_SPV_KHR_ray_tracing_position_fetch = "SPV_KHR_ray_tracing_position_fetch";
|
||||
static const char* const E_SPV_KHR_cooperative_matrix = "SPV_KHR_cooperative_matrix";
|
||||
static const char* const E_SPV_KHR_maximal_reconvergence = "SPV_KHR_maximal_reconvergence";
|
||||
static const char* const E_SPV_KHR_subgroup_rotate = "SPV_KHR_subgroup_rotate";
|
||||
|
||||
#endif // #ifndef GLSLextKHR_H
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
//
|
||||
// Copyright (C) 2014-2016 LunarG, Inc.
|
||||
// Copyright (C) 2015-2020 Google, Inc.
|
||||
// Copyright (C) 2017 ARM Limited.
|
||||
// Copyright (C) 2017, 2022-2024 Arm Limited.
|
||||
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved.
|
||||
|
|
@ -8318,6 +8318,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
|
|||
builder.addCapability(spv::CapabilityGroupNonUniform);
|
||||
builder.addCapability(spv::CapabilityGroupNonUniformBallot);
|
||||
break;
|
||||
case glslang::EOpSubgroupRotate:
|
||||
case glslang::EOpSubgroupClusteredRotate:
|
||||
builder.addExtension(spv::E_SPV_KHR_subgroup_rotate);
|
||||
builder.addCapability(spv::CapabilityGroupNonUniformRotateKHR);
|
||||
break;
|
||||
case glslang::EOpSubgroupShuffle:
|
||||
case glslang::EOpSubgroupShuffleXor:
|
||||
builder.addCapability(spv::CapabilityGroupNonUniform);
|
||||
|
|
@ -8425,6 +8430,8 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
|
|||
case glslang::EOpSubgroupShuffleXor: opCode = spv::OpGroupNonUniformShuffleXor; break;
|
||||
case glslang::EOpSubgroupShuffleUp: opCode = spv::OpGroupNonUniformShuffleUp; break;
|
||||
case glslang::EOpSubgroupShuffleDown: opCode = spv::OpGroupNonUniformShuffleDown; break;
|
||||
case glslang::EOpSubgroupRotate:
|
||||
case glslang::EOpSubgroupClusteredRotate: opCode = spv::OpGroupNonUniformRotateKHR; break;
|
||||
case glslang::EOpSubgroupAdd:
|
||||
case glslang::EOpSubgroupInclusiveAdd:
|
||||
case glslang::EOpSubgroupExclusiveAdd:
|
||||
|
|
@ -8851,6 +8858,8 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
|
|||
case glslang::EOpSubgroupShuffleXor:
|
||||
case glslang::EOpSubgroupShuffleUp:
|
||||
case glslang::EOpSubgroupShuffleDown:
|
||||
case glslang::EOpSubgroupRotate:
|
||||
case glslang::EOpSubgroupClusteredRotate:
|
||||
case glslang::EOpSubgroupClusteredAdd:
|
||||
case glslang::EOpSubgroupClusteredMul:
|
||||
case glslang::EOpSubgroupClusteredMin:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
//
|
||||
// Copyright (C) 2014-2015 LunarG, Inc.
|
||||
// Copyright (C) 2022-2024 Arm Limited.
|
||||
// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved.
|
||||
|
|
@ -942,6 +943,7 @@ const char* CapabilityString(int info)
|
|||
case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
|
||||
case CapabilityDrawParameters: return "DrawParameters";
|
||||
case CapabilitySubgroupVoteKHR: return "SubgroupVoteKHR";
|
||||
case CapabilityGroupNonUniformRotateKHR: return "CapabilityGroupNonUniformRotateKHR";
|
||||
|
||||
case CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16";
|
||||
case CapabilityStorageUniform16: return "StorageUniform16";
|
||||
|
|
@ -1483,6 +1485,8 @@ const char* OpcodeString(int op)
|
|||
case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT";
|
||||
case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT";
|
||||
|
||||
case OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR";
|
||||
|
||||
case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR";
|
||||
case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";
|
||||
case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";
|
||||
|
|
@ -2901,6 +2905,11 @@ void Parameterize()
|
|||
InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
|
||||
InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
|
||||
|
||||
InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandScope, "'Execution'");
|
||||
InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'X'");
|
||||
InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'Delta'");
|
||||
InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'ClusterSize'", true);
|
||||
|
||||
InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
|
||||
InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue