SPV: Add missing extension declarations for certain AMD extensions.
This commit is contained in:
parent
f042e407a9
commit
17ff343bf4
@ -114,6 +114,7 @@ public:
|
|||||||
void dumpSpv(std::vector<unsigned int>& out);
|
void dumpSpv(std::vector<unsigned int>& out);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
|
||||||
spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
|
spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
|
||||||
spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration);
|
spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration);
|
||||||
spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
|
spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
|
||||||
@ -381,7 +382,7 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T
|
|||||||
// Translate glslang type to SPIR-V interpolation decorations.
|
// Translate glslang type to SPIR-V interpolation decorations.
|
||||||
// Returns spv::DecorationMax when no decoration
|
// Returns spv::DecorationMax when no decoration
|
||||||
// should be applied.
|
// should be applied.
|
||||||
spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier)
|
spv::Decoration TGlslangToSpvTraverser::TranslateInterpolationDecoration(const glslang::TQualifier& qualifier)
|
||||||
{
|
{
|
||||||
if (qualifier.smooth)
|
if (qualifier.smooth)
|
||||||
// Smooth decoration doesn't exist in SPIR-V 1.0
|
// Smooth decoration doesn't exist in SPIR-V 1.0
|
||||||
@ -391,8 +392,10 @@ spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qual
|
|||||||
else if (qualifier.flat)
|
else if (qualifier.flat)
|
||||||
return spv::DecorationFlat;
|
return spv::DecorationFlat;
|
||||||
#ifdef AMD_EXTENSIONS
|
#ifdef AMD_EXTENSIONS
|
||||||
else if (qualifier.explicitInterp)
|
else if (qualifier.explicitInterp) {
|
||||||
|
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
||||||
return spv::DecorationExplicitInterpAMD;
|
return spv::DecorationExplicitInterpAMD;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
return spv::DecorationMax;
|
return spv::DecorationMax;
|
||||||
@ -572,13 +575,33 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
|
|||||||
return spv::BuiltInSubgroupLtMaskKHR;
|
return spv::BuiltInSubgroupLtMaskKHR;
|
||||||
|
|
||||||
#ifdef AMD_EXTENSIONS
|
#ifdef AMD_EXTENSIONS
|
||||||
case glslang::EbvBaryCoordNoPersp: return spv::BuiltInBaryCoordNoPerspAMD;
|
case glslang::EbvBaryCoordNoPersp:
|
||||||
case glslang::EbvBaryCoordNoPerspCentroid: return spv::BuiltInBaryCoordNoPerspCentroidAMD;
|
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
||||||
case glslang::EbvBaryCoordNoPerspSample: return spv::BuiltInBaryCoordNoPerspSampleAMD;
|
return spv::BuiltInBaryCoordNoPerspAMD;
|
||||||
case glslang::EbvBaryCoordSmooth: return spv::BuiltInBaryCoordSmoothAMD;
|
|
||||||
case glslang::EbvBaryCoordSmoothCentroid: return spv::BuiltInBaryCoordSmoothCentroidAMD;
|
case glslang::EbvBaryCoordNoPerspCentroid:
|
||||||
case glslang::EbvBaryCoordSmoothSample: return spv::BuiltInBaryCoordSmoothSampleAMD;
|
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
||||||
case glslang::EbvBaryCoordPullModel: return spv::BuiltInBaryCoordPullModelAMD;
|
return spv::BuiltInBaryCoordNoPerspCentroidAMD;
|
||||||
|
|
||||||
|
case glslang::EbvBaryCoordNoPerspSample:
|
||||||
|
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
||||||
|
return spv::BuiltInBaryCoordNoPerspSampleAMD;
|
||||||
|
|
||||||
|
case glslang::EbvBaryCoordSmooth:
|
||||||
|
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
||||||
|
return spv::BuiltInBaryCoordSmoothAMD;
|
||||||
|
|
||||||
|
case glslang::EbvBaryCoordSmoothCentroid:
|
||||||
|
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
||||||
|
return spv::BuiltInBaryCoordSmoothCentroidAMD;
|
||||||
|
|
||||||
|
case glslang::EbvBaryCoordSmoothSample:
|
||||||
|
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
||||||
|
return spv::BuiltInBaryCoordSmoothSampleAMD;
|
||||||
|
|
||||||
|
case glslang::EbvBaryCoordPullModel:
|
||||||
|
builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter);
|
||||||
|
return spv::BuiltInBaryCoordPullModelAMD;
|
||||||
#endif
|
#endif
|
||||||
default: return spv::BuiltInMax;
|
default: return spv::BuiltInMax;
|
||||||
}
|
}
|
||||||
@ -4110,6 +4133,10 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
|
|||||||
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
builder.addCapability(spv::CapabilitySubgroupBallotKHR);
|
||||||
} else {
|
} else {
|
||||||
builder.addCapability(spv::CapabilityGroups);
|
builder.addCapability(spv::CapabilityGroups);
|
||||||
|
if (op == glslang::EOpMinInvocationsNonUniform ||
|
||||||
|
op == glslang::EOpMaxInvocationsNonUniform ||
|
||||||
|
op == glslang::EOpAddInvocationsNonUniform)
|
||||||
|
builder.addExtension(spv::E_SPV_AMD_shader_ballot);
|
||||||
|
|
||||||
spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
|
spvGroupOperands.push_back(builder.makeUintConstant(spv::ScopeSubgroup));
|
||||||
#ifdef AMD_EXTENSIONS
|
#ifdef AMD_EXTENSIONS
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user