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