Unverified Commit 29c49e10 by John Kessenich Committed by GitHub

Merge pull request #1266 from amdrexu/feature

Implement the extension GL_AMD_gpu_shader_half_float_fetch
parents 2c40e856 1e5d7b0b
...@@ -27,13 +27,8 @@ ...@@ -27,13 +27,8 @@
#ifndef GLSLextAMD_H #ifndef GLSLextAMD_H
#define GLSLextAMD_H #define GLSLextAMD_H
enum BuiltIn;
enum Capability;
enum Decoration;
enum Op;
static const int GLSLextAMDVersion = 100; static const int GLSLextAMDVersion = 100;
static const int GLSLextAMDRevision = 6; static const int GLSLextAMDRevision = 7;
// SPV_AMD_shader_ballot // SPV_AMD_shader_ballot
static const char* const E_SPV_AMD_shader_ballot = "SPV_AMD_shader_ballot"; static const char* const E_SPV_AMD_shader_ballot = "SPV_AMD_shader_ballot";
...@@ -107,4 +102,10 @@ static const char* const E_SPV_AMD_shader_image_load_store_lod = "SPV_AMD_shader ...@@ -107,4 +102,10 @@ static const char* const E_SPV_AMD_shader_image_load_store_lod = "SPV_AMD_shader
// SPV_AMD_shader_fragment_mask // SPV_AMD_shader_fragment_mask
static const char* const E_SPV_AMD_shader_fragment_mask = "SPV_AMD_shader_fragment_mask"; static const char* const E_SPV_AMD_shader_fragment_mask = "SPV_AMD_shader_fragment_mask";
// SPV_AMD_gpu_shader_half_float_fetch
static const char* const E_SPV_AMD_gpu_shader_half_float_fetch = "SPV_AMD_gpu_shader_half_float_fetch";
enum Capability;
static const Capability CapabilityFloat16ImageAMD = static_cast<Capability>(5008);
#endif // #ifndef GLSLextAMD_H #endif // #ifndef GLSLextAMD_H
...@@ -2340,6 +2340,12 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler) ...@@ -2340,6 +2340,12 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
{ {
switch (sampler.type) { switch (sampler.type) {
case glslang::EbtFloat: return builder.makeFloatType(32); case glslang::EbtFloat: return builder.makeFloatType(32);
#ifdef AMD_EXTENSIONS
case glslang::EbtFloat16:
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
builder.addCapability(spv::CapabilityFloat16ImageAMD);
return builder.makeFloatType(16);
#endif
case glslang::EbtInt: return builder.makeIntType(32); case glslang::EbtInt: return builder.makeIntType(32);
case glslang::EbtUint: return builder.makeUintType(32); case glslang::EbtUint: return builder.makeUintType(32);
default: default:
...@@ -3159,9 +3165,15 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& ...@@ -3159,9 +3165,15 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
glslang::TSampler sampler = {}; glslang::TSampler sampler = {};
bool cubeCompare = false; bool cubeCompare = false;
#ifdef AMD_EXTENSIONS
bool f16ShadowCompare = false;
#endif
if (node.isTexture() || node.isImage()) { if (node.isTexture() || node.isImage()) {
sampler = glslangArguments[0]->getAsTyped()->getType().getSampler(); sampler = glslangArguments[0]->getAsTyped()->getType().getSampler();
cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow; cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
#ifdef AMD_EXTENSIONS
f16ShadowCompare = sampler.shadow && glslangArguments[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16;
#endif
} }
for (int i = 0; i < (int)glslangArguments.size(); ++i) { for (int i = 0; i < (int)glslangArguments.size(); ++i) {
...@@ -3186,6 +3198,21 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& ...@@ -3186,6 +3198,21 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if ((sampler.ms && i == 3) || (! sampler.ms && i == 2)) if ((sampler.ms && i == 3) || (! sampler.ms && i == 2))
lvalue = true; lvalue = true;
break; break;
#ifdef AMD_EXTENSIONS
case glslang::EOpSparseTexture:
if (((cubeCompare || f16ShadowCompare) && i == 3) || (! (cubeCompare || f16ShadowCompare) && i == 2))
lvalue = true;
break;
case glslang::EOpSparseTextureClamp:
if (((cubeCompare || f16ShadowCompare) && i == 4) || (! (cubeCompare || f16ShadowCompare) && i == 3))
lvalue = true;
break;
case glslang::EOpSparseTextureLod:
case glslang::EOpSparseTextureOffset:
if ((f16ShadowCompare && i == 4) || (! f16ShadowCompare && i == 3))
lvalue = true;
break;
#else
case glslang::EOpSparseTexture: case glslang::EOpSparseTexture:
if ((cubeCompare && i == 3) || (! cubeCompare && i == 2)) if ((cubeCompare && i == 3) || (! cubeCompare && i == 2))
lvalue = true; lvalue = true;
...@@ -3199,6 +3226,7 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& ...@@ -3199,6 +3226,7 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if (i == 3) if (i == 3)
lvalue = true; lvalue = true;
break; break;
#endif
case glslang::EOpSparseTextureFetch: case glslang::EOpSparseTextureFetch:
if ((sampler.dim != glslang::EsdRect && i == 3) || (sampler.dim == glslang::EsdRect && i == 2)) if ((sampler.dim != glslang::EsdRect && i == 3) || (sampler.dim == glslang::EsdRect && i == 2))
lvalue = true; lvalue = true;
...@@ -3207,6 +3235,23 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& ...@@ -3207,6 +3235,23 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if ((sampler.dim != glslang::EsdRect && i == 4) || (sampler.dim == glslang::EsdRect && i == 3)) if ((sampler.dim != glslang::EsdRect && i == 4) || (sampler.dim == glslang::EsdRect && i == 3))
lvalue = true; lvalue = true;
break; break;
#ifdef AMD_EXTENSIONS
case glslang::EOpSparseTextureLodOffset:
case glslang::EOpSparseTextureGrad:
case glslang::EOpSparseTextureOffsetClamp:
if ((f16ShadowCompare && i == 5) || (! f16ShadowCompare && i == 4))
lvalue = true;
break;
case glslang::EOpSparseTextureGradOffset:
case glslang::EOpSparseTextureGradClamp:
if ((f16ShadowCompare && i == 6) || (! f16ShadowCompare && i == 5))
lvalue = true;
break;
case glslang::EOpSparseTextureGradOffsetClamp:
if ((f16ShadowCompare && i == 7) || (! f16ShadowCompare && i == 6))
lvalue = true;
break;
#else
case glslang::EOpSparseTextureLodOffset: case glslang::EOpSparseTextureLodOffset:
case glslang::EOpSparseTextureGrad: case glslang::EOpSparseTextureGrad:
case glslang::EOpSparseTextureOffsetClamp: case glslang::EOpSparseTextureOffsetClamp:
...@@ -3222,6 +3267,7 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& ...@@ -3222,6 +3267,7 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
if (i == 6) if (i == 6)
lvalue = true; lvalue = true;
break; break;
#endif
case glslang::EOpSparseTextureGather: case glslang::EOpSparseTextureGather:
if ((sampler.shadow && i == 3) || (! sampler.shadow && i == 2)) if ((sampler.shadow && i == 3) || (! sampler.shadow && i == 2))
lvalue = true; lvalue = true;
...@@ -3274,6 +3320,12 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO ...@@ -3274,6 +3320,12 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
// Process a GLSL texturing op (will be SPV image) // Process a GLSL texturing op (will be SPV image)
const glslang::TSampler sampler = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler() const glslang::TSampler sampler = node->getAsAggregate() ? node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler()
: node->getAsUnaryNode()->getOperand()->getAsTyped()->getType().getSampler(); : node->getAsUnaryNode()->getOperand()->getAsTyped()->getType().getSampler();
#ifdef AMD_EXTENSIONS
bool f16ShadowCompare = (sampler.shadow && node->getAsAggregate())
? node->getAsAggregate()->getSequence()[1]->getAsTyped()->getType().getBasicType() == glslang::EbtFloat16
: false;
#endif
std::vector<spv::Id> arguments; std::vector<spv::Id> arguments;
if (node->getAsAggregate()) if (node->getAsAggregate())
translateArguments(*node->getAsAggregate(), arguments); translateArguments(*node->getAsAggregate(), arguments);
...@@ -3517,6 +3569,9 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO ...@@ -3517,6 +3569,9 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
#ifdef AMD_EXTENSIONS #ifdef AMD_EXTENSIONS
if (cracked.gather) if (cracked.gather)
++nonBiasArgCount; // comp argument should be present when bias argument is present ++nonBiasArgCount; // comp argument should be present when bias argument is present
if (f16ShadowCompare)
++nonBiasArgCount;
#endif #endif
if (cracked.offset) if (cracked.offset)
++nonBiasArgCount; ++nonBiasArgCount;
...@@ -3560,7 +3615,11 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO ...@@ -3560,7 +3615,11 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
bool noImplicitLod = false; bool noImplicitLod = false;
// sort out where Dref is coming from // sort out where Dref is coming from
#ifdef AMD_EXTENSIONS
if (cubeCompare || f16ShadowCompare) {
#else
if (cubeCompare) { if (cubeCompare) {
#endif
params.Dref = arguments[2]; params.Dref = arguments[2];
++extraArgs; ++extraArgs;
} else if (sampler.shadow && cracked.gather) { } else if (sampler.shadow && cracked.gather) {
......
...@@ -1751,7 +1751,11 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter ...@@ -1751,7 +1751,11 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter
break; break;
} }
case OpImageQueryLod: case OpImageQueryLod:
#ifdef AMD_EXTENSIONS
resultType = makeVectorType(getScalarTypeId(getTypeId(parameters.coords)), 2);
#else
resultType = makeVectorType(makeFloatType(32), 2); resultType = makeVectorType(makeFloatType(32), 2);
#endif
break; break;
case OpImageQueryLevels: case OpImageQueryLevels:
case OpImageQuerySamples: case OpImageQuerySamples:
......
...@@ -849,6 +849,7 @@ const char* CapabilityString(int info) ...@@ -849,6 +849,7 @@ const char* CapabilityString(int info)
case 5013: return "StencilExportEXT"; case 5013: return "StencilExportEXT";
#ifdef AMD_EXTENSIONS #ifdef AMD_EXTENSIONS
case 5008: return "Float16ImageAMD";
case 5009: return "ImageGatherBiasLodAMD"; case 5009: return "ImageGatherBiasLodAMD";
case 5010: return "FragmentMaskAMD"; case 5010: return "FragmentMaskAMD";
case 5015: return "ImageReadWriteLodAMD"; case 5015: return "ImageReadWriteLodAMD";
......
...@@ -52,7 +52,7 @@ ERROR: 0:209: 'assign' : cannot convert from ' const float' to ' temp 4-compone ...@@ -52,7 +52,7 @@ ERROR: 0:209: 'assign' : cannot convert from ' const float' to ' temp 4-compone
ERROR: 0:212: 'sampler2DRect' : Reserved word. ERROR: 0:212: 'sampler2DRect' : Reserved word.
ERROR: 0:244: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' global void' and a right operand of type ' const int' (or there is no acceptable conversion) ERROR: 0:244: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' global void' and a right operand of type ' const int' (or there is no acceptable conversion)
ERROR: 0:245: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' const int' and a right operand of type ' global void' (or there is no acceptable conversion) ERROR: 0:245: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' const int' and a right operand of type ' global void' (or there is no acceptable conversion)
ERROR: 0:248: 'shader half float' : required extension not requested: GL_AMD_gpu_shader_half_float ERROR: 0:248: 'half floating-point suffix' : required extension not requested: GL_AMD_gpu_shader_half_float
ERROR: 0:248: 'half floating-point suffix' : not supported with this profile: none ERROR: 0:248: 'half floating-point suffix' : not supported with this profile: none
ERROR: 0:248: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON ERROR: 0:248: '' : syntax error, unexpected IDENTIFIER, expecting COMMA or SEMICOLON
ERROR: 56 compilation errors. No code generated. ERROR: 56 compilation errors. No code generated.
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -205,6 +205,9 @@ struct TSampler { // misnomer now; includes images, textures without sampler, ...@@ -205,6 +205,9 @@ struct TSampler { // misnomer now; includes images, textures without sampler,
switch (type) { switch (type) {
case EbtFloat: break; case EbtFloat: break;
#ifdef AMD_EXTENSIONS
case EbtFloat16: s.append("f16"); break;
#endif
case EbtInt: s.append("i"); break; case EbtInt: s.append("i"); break;
case EbtUint: s.append("u"); break; case EbtUint: s.append("u"); break;
default: break; // some compilers want this default: break; // some compilers want this
......
...@@ -1520,6 +1520,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan ...@@ -1520,6 +1520,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
} }
if (arg > 0) { if (arg > 0) {
#ifdef AMD_EXTENSIONS
bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 && arg0->getType().getSampler().shadow;
if (f16ShadowCompare)
++arg;
#endif
if (! (*argp)[arg]->getAsConstantUnion()) if (! (*argp)[arg]->getAsConstantUnion())
error(loc, "argument must be compile-time constant", "texel offset", ""); error(loc, "argument must be compile-time constant", "texel offset", "");
else { else {
......
...@@ -579,6 +579,54 @@ void TScanContext::fillInKeywordMap() ...@@ -579,6 +579,54 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["usubpassInput"] = USUBPASSINPUT; (*KeywordMap)["usubpassInput"] = USUBPASSINPUT;
(*KeywordMap)["usubpassInputMS"] = USUBPASSINPUTMS; (*KeywordMap)["usubpassInputMS"] = USUBPASSINPUTMS;
#ifdef AMD_EXTENSIONS
(*KeywordMap)["f16sampler1D"] = F16SAMPLER1D;
(*KeywordMap)["f16sampler2D"] = F16SAMPLER2D;
(*KeywordMap)["f16sampler3D"] = F16SAMPLER3D;
(*KeywordMap)["f16sampler2DRect"] = F16SAMPLER2DRECT;
(*KeywordMap)["f16samplerCube"] = F16SAMPLERCUBE;
(*KeywordMap)["f16sampler1DArray"] = F16SAMPLER1DARRAY;
(*KeywordMap)["f16sampler2DArray"] = F16SAMPLER2DARRAY;
(*KeywordMap)["f16samplerCubeArray"] = F16SAMPLERCUBEARRAY;
(*KeywordMap)["f16samplerBuffer"] = F16SAMPLERBUFFER;
(*KeywordMap)["f16sampler2DMS"] = F16SAMPLER2DMS;
(*KeywordMap)["f16sampler2DMSArray"] = F16SAMPLER2DMSARRAY;
(*KeywordMap)["f16sampler1DShadow"] = F16SAMPLER1DSHADOW;
(*KeywordMap)["f16sampler2DShadow"] = F16SAMPLER2DSHADOW;
(*KeywordMap)["f16sampler2DRectShadow"] = F16SAMPLER2DRECTSHADOW;
(*KeywordMap)["f16samplerCubeShadow"] = F16SAMPLERCUBESHADOW;
(*KeywordMap)["f16sampler1DArrayShadow"] = F16SAMPLER1DARRAYSHADOW;
(*KeywordMap)["f16sampler2DArrayShadow"] = F16SAMPLER2DARRAYSHADOW;
(*KeywordMap)["f16samplerCubeArrayShadow"] = F16SAMPLERCUBEARRAYSHADOW;
(*KeywordMap)["f16image1D"] = F16IMAGE1D;
(*KeywordMap)["f16image2D"] = F16IMAGE2D;
(*KeywordMap)["f16image3D"] = F16IMAGE3D;
(*KeywordMap)["f16image2DRect"] = F16IMAGE2DRECT;
(*KeywordMap)["f16imageCube"] = F16IMAGECUBE;
(*KeywordMap)["f16image1DArray"] = F16IMAGE1DARRAY;
(*KeywordMap)["f16image2DArray"] = F16IMAGE2DARRAY;
(*KeywordMap)["f16imageCubeArray"] = F16IMAGECUBEARRAY;
(*KeywordMap)["f16imageBuffer"] = F16IMAGEBUFFER;
(*KeywordMap)["f16image2DMS"] = F16IMAGE2DMS;
(*KeywordMap)["f16image2DMSArray"] = F16IMAGE2DMSARRAY;
(*KeywordMap)["f16texture1D"] = F16TEXTURE1D;
(*KeywordMap)["f16texture2D"] = F16TEXTURE2D;
(*KeywordMap)["f16texture3D"] = F16TEXTURE3D;
(*KeywordMap)["f16texture2DRect"] = F16TEXTURE2DRECT;
(*KeywordMap)["f16textureCube"] = F16TEXTURECUBE;
(*KeywordMap)["f16texture1DArray"] = F16TEXTURE1DARRAY;
(*KeywordMap)["f16texture2DArray"] = F16TEXTURE2DARRAY;
(*KeywordMap)["f16textureCubeArray"] = F16TEXTURECUBEARRAY;
(*KeywordMap)["f16textureBuffer"] = F16TEXTUREBUFFER;
(*KeywordMap)["f16texture2DMS"] = F16TEXTURE2DMS;
(*KeywordMap)["f16texture2DMSArray"] = F16TEXTURE2DMSARRAY;
(*KeywordMap)["f16subpassInput"] = F16SUBPASSINPUT;
(*KeywordMap)["f16subpassInputMS"] = F16SUBPASSINPUTMS;
#endif
(*KeywordMap)["noperspective"] = NOPERSPECTIVE; (*KeywordMap)["noperspective"] = NOPERSPECTIVE;
(*KeywordMap)["smooth"] = SMOOTH; (*KeywordMap)["smooth"] = SMOOTH;
(*KeywordMap)["flat"] = FLAT; (*KeywordMap)["flat"] = FLAT;
...@@ -1029,6 +1077,7 @@ int TScanContext::tokenizeIdentifier() ...@@ -1029,6 +1077,7 @@ int TScanContext::tokenizeIdentifier()
(parseContext.profile != EEsProfile && parseContext.version >= 450 && (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float))) parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float)))
return keyword; return keyword;
return identifierOrType(); return identifierOrType();
#endif #endif
...@@ -1211,6 +1260,60 @@ int TScanContext::tokenizeIdentifier() ...@@ -1211,6 +1260,60 @@ int TScanContext::tokenizeIdentifier()
else else
return identifierOrType(); return identifierOrType();
#ifdef AMD_EXTENSIONS
case F16SAMPLER1D:
case F16SAMPLER2D:
case F16SAMPLER3D:
case F16SAMPLER2DRECT:
case F16SAMPLERCUBE:
case F16SAMPLER1DARRAY:
case F16SAMPLER2DARRAY:
case F16SAMPLERCUBEARRAY:
case F16SAMPLERBUFFER:
case F16SAMPLER2DMS:
case F16SAMPLER2DMSARRAY:
case F16SAMPLER1DSHADOW:
case F16SAMPLER2DSHADOW:
case F16SAMPLER1DARRAYSHADOW:
case F16SAMPLER2DARRAYSHADOW:
case F16SAMPLER2DRECTSHADOW:
case F16SAMPLERCUBESHADOW:
case F16SAMPLERCUBEARRAYSHADOW:
case F16IMAGE1D:
case F16IMAGE2D:
case F16IMAGE3D:
case F16IMAGE2DRECT:
case F16IMAGECUBE:
case F16IMAGE1DARRAY:
case F16IMAGE2DARRAY:
case F16IMAGECUBEARRAY:
case F16IMAGEBUFFER:
case F16IMAGE2DMS:
case F16IMAGE2DMSARRAY:
case F16TEXTURE1D:
case F16TEXTURE2D:
case F16TEXTURE3D:
case F16TEXTURE2DRECT:
case F16TEXTURECUBE:
case F16TEXTURE1DARRAY:
case F16TEXTURE2DARRAY:
case F16TEXTURECUBEARRAY:
case F16TEXTUREBUFFER:
case F16TEXTURE2DMS:
case F16TEXTURE2DMSARRAY:
case F16SUBPASSINPUT:
case F16SUBPASSINPUTMS:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch) &&
parseContext.profile != EEsProfile && parseContext.version >= 450))
return keyword;
return identifierOrType();
#endif
case NOPERSPECTIVE: case NOPERSPECTIVE:
return es30ReservedFromGLSL(130); return es30ReservedFromGLSL(130);
......
...@@ -75,6 +75,9 @@ void TType::buildMangledName(TString& mangledName) const ...@@ -75,6 +75,9 @@ void TType::buildMangledName(TString& mangledName) const
case EbtAtomicUint: mangledName += "au"; break; case EbtAtomicUint: mangledName += "au"; break;
case EbtSampler: case EbtSampler:
switch (sampler.type) { switch (sampler.type) {
#ifdef AMD_EXTENSIONS
case EbtFloat16: mangledName += "f16"; break;
#endif
case EbtInt: mangledName += "i"; break; case EbtInt: mangledName += "i"; break;
case EbtUint: mangledName += "u"; break; case EbtUint: mangledName += "u"; break;
default: break; // some compilers want this default: break; // some compilers want this
......
...@@ -204,6 +204,7 @@ void TParseVersions::initializeExtensionBehavior() ...@@ -204,6 +204,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_AMD_gpu_shader_int16] = EBhDisable; extensionBehavior[E_GL_AMD_gpu_shader_int16] = EBhDisable;
extensionBehavior[E_GL_AMD_shader_image_load_store_lod] = EBhDisable; extensionBehavior[E_GL_AMD_shader_image_load_store_lod] = EBhDisable;
extensionBehavior[E_GL_AMD_shader_fragment_mask] = EBhDisable; extensionBehavior[E_GL_AMD_shader_fragment_mask] = EBhDisable;
extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch] = EBhDisable;
#endif #endif
#ifdef NV_EXTENSIONS #ifdef NV_EXTENSIONS
...@@ -341,6 +342,7 @@ void TParseVersions::getPreamble(std::string& preamble) ...@@ -341,6 +342,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_AMD_gpu_shader_int16 1\n" "#define GL_AMD_gpu_shader_int16 1\n"
"#define GL_AMD_shader_image_load_store_lod 1\n" "#define GL_AMD_shader_image_load_store_lod 1\n"
"#define GL_AMD_shader_fragment_mask 1\n" "#define GL_AMD_shader_fragment_mask 1\n"
"#define GL_AMD_gpu_shader_half_float_fetch 1\n"
#endif #endif
#ifdef NV_EXTENSIONS #ifdef NV_EXTENSIONS
...@@ -749,7 +751,7 @@ void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op) ...@@ -749,7 +751,7 @@ void TParseVersions::doubleCheck(const TSourceLoc& loc, const char* op)
void TParseVersions::int16Check(const TSourceLoc& loc, const char* op, bool builtIn) void TParseVersions::int16Check(const TSourceLoc& loc, const char* op, bool builtIn)
{ {
if (! builtIn) { if (! builtIn) {
requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_int16, "shader int16"); requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_int16, op);
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op); profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op); profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
...@@ -760,7 +762,18 @@ void TParseVersions::int16Check(const TSourceLoc& loc, const char* op, bool buil ...@@ -760,7 +762,18 @@ void TParseVersions::int16Check(const TSourceLoc& loc, const char* op, bool buil
void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn) void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
{ {
if (! builtIn) { if (! builtIn) {
requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float, "shader half float"); requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float, op);
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
}
}
// Call for any operation needing GLSL float16 opaque-type support
void TParseVersions::float16OpaqueCheck(const TSourceLoc& loc, const char* op, bool builtIn)
{
if (! builtIn) {
requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float_fetch, op);
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op); profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op); profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
...@@ -772,7 +785,7 @@ void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool bu ...@@ -772,7 +785,7 @@ void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool bu
void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn) void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn)
{ {
if (! builtIn) { if (! builtIn) {
requireExtensions(loc, 1, &E_GL_ARB_gpu_shader_int64, "shader int64"); requireExtensions(loc, 1, &E_GL_ARB_gpu_shader_int64, op);
requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
profileRequires(loc, ECoreProfile, 450, nullptr, op); profileRequires(loc, ECoreProfile, 450, nullptr, op);
profileRequires(loc, ECompatibilityProfile, 450, nullptr, op); profileRequires(loc, ECompatibilityProfile, 450, nullptr, op);
......
...@@ -174,6 +174,7 @@ const char* const E_GL_AMD_texture_gather_bias_lod = "GL_AMD_textur ...@@ -174,6 +174,7 @@ const char* const E_GL_AMD_texture_gather_bias_lod = "GL_AMD_textur
const char* const E_GL_AMD_gpu_shader_int16 = "GL_AMD_gpu_shader_int16"; const char* const E_GL_AMD_gpu_shader_int16 = "GL_AMD_gpu_shader_int16";
const char* const E_GL_AMD_shader_image_load_store_lod = "GL_AMD_shader_image_load_store_lod"; const char* const E_GL_AMD_shader_image_load_store_lod = "GL_AMD_shader_image_load_store_lod";
const char* const E_GL_AMD_shader_fragment_mask = "GL_AMD_shader_fragment_mask"; const char* const E_GL_AMD_shader_fragment_mask = "GL_AMD_shader_fragment_mask";
const char* const E_GL_AMD_gpu_shader_half_float_fetch = "GL_AMD_gpu_shader_half_float_fetch";
#endif #endif
#ifdef NV_EXTENSIONS #ifdef NV_EXTENSIONS
......
...@@ -117,6 +117,40 @@ ...@@ -117,6 +117,40 @@
#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C
#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D
#ifdef AMD_EXTENSIONS
#define GL_FLOAT16_SAMPLER_1D_AMD 0x91CE
#define GL_FLOAT16_SAMPLER_2D_AMD 0x91CF
#define GL_FLOAT16_SAMPLER_3D_AMD 0x91D0
#define GL_FLOAT16_SAMPLER_CUBE_AMD 0x91D1
#define GL_FLOAT16_SAMPLER_2D_RECT_AMD 0x91D2
#define GL_FLOAT16_SAMPLER_1D_ARRAY_AMD 0x91D3
#define GL_FLOAT16_SAMPLER_2D_ARRAY_AMD 0x91D4
#define GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_AMD 0x91D5
#define GL_FLOAT16_SAMPLER_BUFFER_AMD 0x91D6
#define GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_AMD 0x91D7
#define GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_ARRAY_AMD 0x91D8
#define GL_FLOAT16_SAMPLER_1D_SHADOW_AMD 0x91D9
#define GL_FLOAT16_SAMPLER_2D_SHADOW_AMD 0x91DA
#define GL_FLOAT16_SAMPLER_2D_RECT_SHADOW_AMD 0x91DB
#define GL_FLOAT16_SAMPLER_1D_ARRAY_SHADOW_AMD 0x91DC
#define GL_FLOAT16_SAMPLER_2D_ARRAY_SHADOW_AMD 0x91DD
#define GL_FLOAT16_SAMPLER_CUBE_SHADOW_AMD 0x91DE
#define GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_SHADOW_AMD 0x91DF
#define GL_FLOAT16_IMAGE_1D_AMD 0x91E0
#define GL_FLOAT16_IMAGE_2D_AMD 0x91E1
#define GL_FLOAT16_IMAGE_3D_AMD 0x91E2
#define GL_FLOAT16_IMAGE_2D_RECT_AMD 0x91E3
#define GL_FLOAT16_IMAGE_CUBE_AMD 0x91E4
#define GL_FLOAT16_IMAGE_1D_ARRAY_AMD 0x91E5
#define GL_FLOAT16_IMAGE_2D_ARRAY_AMD 0x91E6
#define GL_FLOAT16_IMAGE_CUBE_MAP_ARRAY_AMD 0x91E7
#define GL_FLOAT16_IMAGE_BUFFER_AMD 0x91E8
#define GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD 0x91E9
#define GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD 0x91EA
#endif
#define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_1D 0x8DC9
#define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_2D 0x8DCA
#define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_3D 0x8DCB
......
This source diff could not be displayed because it is too large. You can view the blob instead.
/* A Bison parser, made by GNU Bison 3.0. */ /* A Bison parser, made by GNU Bison 3.0.4. */
/* Bison interface for Yacc-like parsers in C /* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -30,8 +30,8 @@ ...@@ -30,8 +30,8 @@
This special exception was added by the Free Software Foundation in This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */ version 2.2 of Bison. */
#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED #ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED # define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED
/* Debug traces. */ /* Debug traces. */
#ifndef YYDEBUG #ifndef YYDEBUG
# define YYDEBUG 1 # define YYDEBUG 1
...@@ -197,158 +197,200 @@ extern int yydebug; ...@@ -197,158 +197,200 @@ extern int yydebug;
ISAMPLER2DMSARRAY = 407, ISAMPLER2DMSARRAY = 407,
USAMPLER2DMSARRAY = 408, USAMPLER2DMSARRAY = 408,
SAMPLEREXTERNALOES = 409, SAMPLEREXTERNALOES = 409,
SAMPLER = 410, F16SAMPLER1D = 410,
SAMPLERSHADOW = 411, F16SAMPLER2D = 411,
TEXTURE1D = 412, F16SAMPLER3D = 412,
TEXTURE2D = 413, F16SAMPLER2DRECT = 413,
TEXTURE3D = 414, F16SAMPLERCUBE = 414,
TEXTURECUBE = 415, F16SAMPLER1DARRAY = 415,
TEXTURE1DARRAY = 416, F16SAMPLER2DARRAY = 416,
TEXTURE2DARRAY = 417, F16SAMPLERCUBEARRAY = 417,
ITEXTURE1D = 418, F16SAMPLERBUFFER = 418,
ITEXTURE2D = 419, F16SAMPLER2DMS = 419,
ITEXTURE3D = 420, F16SAMPLER2DMSARRAY = 420,
ITEXTURECUBE = 421, F16SAMPLER1DSHADOW = 421,
ITEXTURE1DARRAY = 422, F16SAMPLER2DSHADOW = 422,
ITEXTURE2DARRAY = 423, F16SAMPLER1DARRAYSHADOW = 423,
UTEXTURE1D = 424, F16SAMPLER2DARRAYSHADOW = 424,
UTEXTURE2D = 425, F16SAMPLER2DRECTSHADOW = 425,
UTEXTURE3D = 426, F16SAMPLERCUBESHADOW = 426,
UTEXTURECUBE = 427, F16SAMPLERCUBEARRAYSHADOW = 427,
UTEXTURE1DARRAY = 428, SAMPLER = 428,
UTEXTURE2DARRAY = 429, SAMPLERSHADOW = 429,
TEXTURE2DRECT = 430, TEXTURE1D = 430,
ITEXTURE2DRECT = 431, TEXTURE2D = 431,
UTEXTURE2DRECT = 432, TEXTURE3D = 432,
TEXTUREBUFFER = 433, TEXTURECUBE = 433,
ITEXTUREBUFFER = 434, TEXTURE1DARRAY = 434,
UTEXTUREBUFFER = 435, TEXTURE2DARRAY = 435,
TEXTURECUBEARRAY = 436, ITEXTURE1D = 436,
ITEXTURECUBEARRAY = 437, ITEXTURE2D = 437,
UTEXTURECUBEARRAY = 438, ITEXTURE3D = 438,
TEXTURE2DMS = 439, ITEXTURECUBE = 439,
ITEXTURE2DMS = 440, ITEXTURE1DARRAY = 440,
UTEXTURE2DMS = 441, ITEXTURE2DARRAY = 441,
TEXTURE2DMSARRAY = 442, UTEXTURE1D = 442,
ITEXTURE2DMSARRAY = 443, UTEXTURE2D = 443,
UTEXTURE2DMSARRAY = 444, UTEXTURE3D = 444,
SUBPASSINPUT = 445, UTEXTURECUBE = 445,
SUBPASSINPUTMS = 446, UTEXTURE1DARRAY = 446,
ISUBPASSINPUT = 447, UTEXTURE2DARRAY = 447,
ISUBPASSINPUTMS = 448, TEXTURE2DRECT = 448,
USUBPASSINPUT = 449, ITEXTURE2DRECT = 449,
USUBPASSINPUTMS = 450, UTEXTURE2DRECT = 450,
IMAGE1D = 451, TEXTUREBUFFER = 451,
IIMAGE1D = 452, ITEXTUREBUFFER = 452,
UIMAGE1D = 453, UTEXTUREBUFFER = 453,
IMAGE2D = 454, TEXTURECUBEARRAY = 454,
IIMAGE2D = 455, ITEXTURECUBEARRAY = 455,
UIMAGE2D = 456, UTEXTURECUBEARRAY = 456,
IMAGE3D = 457, TEXTURE2DMS = 457,
IIMAGE3D = 458, ITEXTURE2DMS = 458,
UIMAGE3D = 459, UTEXTURE2DMS = 459,
IMAGE2DRECT = 460, TEXTURE2DMSARRAY = 460,
IIMAGE2DRECT = 461, ITEXTURE2DMSARRAY = 461,
UIMAGE2DRECT = 462, UTEXTURE2DMSARRAY = 462,
IMAGECUBE = 463, F16TEXTURE1D = 463,
IIMAGECUBE = 464, F16TEXTURE2D = 464,
UIMAGECUBE = 465, F16TEXTURE3D = 465,
IMAGEBUFFER = 466, F16TEXTURE2DRECT = 466,
IIMAGEBUFFER = 467, F16TEXTURECUBE = 467,
UIMAGEBUFFER = 468, F16TEXTURE1DARRAY = 468,
IMAGE1DARRAY = 469, F16TEXTURE2DARRAY = 469,
IIMAGE1DARRAY = 470, F16TEXTURECUBEARRAY = 470,
UIMAGE1DARRAY = 471, F16TEXTUREBUFFER = 471,
IMAGE2DARRAY = 472, F16TEXTURE2DMS = 472,
IIMAGE2DARRAY = 473, F16TEXTURE2DMSARRAY = 473,
UIMAGE2DARRAY = 474, SUBPASSINPUT = 474,
IMAGECUBEARRAY = 475, SUBPASSINPUTMS = 475,
IIMAGECUBEARRAY = 476, ISUBPASSINPUT = 476,
UIMAGECUBEARRAY = 477, ISUBPASSINPUTMS = 477,
IMAGE2DMS = 478, USUBPASSINPUT = 478,
IIMAGE2DMS = 479, USUBPASSINPUTMS = 479,
UIMAGE2DMS = 480, F16SUBPASSINPUT = 480,
IMAGE2DMSARRAY = 481, F16SUBPASSINPUTMS = 481,
IIMAGE2DMSARRAY = 482, IMAGE1D = 482,
UIMAGE2DMSARRAY = 483, IIMAGE1D = 483,
STRUCT = 484, UIMAGE1D = 484,
VOID = 485, IMAGE2D = 485,
WHILE = 486, IIMAGE2D = 486,
IDENTIFIER = 487, UIMAGE2D = 487,
TYPE_NAME = 488, IMAGE3D = 488,
FLOATCONSTANT = 489, IIMAGE3D = 489,
DOUBLECONSTANT = 490, UIMAGE3D = 490,
INTCONSTANT = 491, IMAGE2DRECT = 491,
UINTCONSTANT = 492, IIMAGE2DRECT = 492,
INT64CONSTANT = 493, UIMAGE2DRECT = 493,
UINT64CONSTANT = 494, IMAGECUBE = 494,
INT16CONSTANT = 495, IIMAGECUBE = 495,
UINT16CONSTANT = 496, UIMAGECUBE = 496,
BOOLCONSTANT = 497, IMAGEBUFFER = 497,
FLOAT16CONSTANT = 498, IIMAGEBUFFER = 498,
LEFT_OP = 499, UIMAGEBUFFER = 499,
RIGHT_OP = 500, IMAGE1DARRAY = 500,
INC_OP = 501, IIMAGE1DARRAY = 501,
DEC_OP = 502, UIMAGE1DARRAY = 502,
LE_OP = 503, IMAGE2DARRAY = 503,
GE_OP = 504, IIMAGE2DARRAY = 504,
EQ_OP = 505, UIMAGE2DARRAY = 505,
NE_OP = 506, IMAGECUBEARRAY = 506,
AND_OP = 507, IIMAGECUBEARRAY = 507,
OR_OP = 508, UIMAGECUBEARRAY = 508,
XOR_OP = 509, IMAGE2DMS = 509,
MUL_ASSIGN = 510, IIMAGE2DMS = 510,
DIV_ASSIGN = 511, UIMAGE2DMS = 511,
ADD_ASSIGN = 512, IMAGE2DMSARRAY = 512,
MOD_ASSIGN = 513, IIMAGE2DMSARRAY = 513,
LEFT_ASSIGN = 514, UIMAGE2DMSARRAY = 514,
RIGHT_ASSIGN = 515, F16IMAGE1D = 515,
AND_ASSIGN = 516, F16IMAGE2D = 516,
XOR_ASSIGN = 517, F16IMAGE3D = 517,
OR_ASSIGN = 518, F16IMAGE2DRECT = 518,
SUB_ASSIGN = 519, F16IMAGECUBE = 519,
LEFT_PAREN = 520, F16IMAGE1DARRAY = 520,
RIGHT_PAREN = 521, F16IMAGE2DARRAY = 521,
LEFT_BRACKET = 522, F16IMAGECUBEARRAY = 522,
RIGHT_BRACKET = 523, F16IMAGEBUFFER = 523,
LEFT_BRACE = 524, F16IMAGE2DMS = 524,
RIGHT_BRACE = 525, F16IMAGE2DMSARRAY = 525,
DOT = 526, STRUCT = 526,
COMMA = 527, VOID = 527,
COLON = 528, WHILE = 528,
EQUAL = 529, IDENTIFIER = 529,
SEMICOLON = 530, TYPE_NAME = 530,
BANG = 531, FLOATCONSTANT = 531,
DASH = 532, DOUBLECONSTANT = 532,
TILDE = 533, INTCONSTANT = 533,
PLUS = 534, UINTCONSTANT = 534,
STAR = 535, INT64CONSTANT = 535,
SLASH = 536, UINT64CONSTANT = 536,
PERCENT = 537, INT16CONSTANT = 537,
LEFT_ANGLE = 538, UINT16CONSTANT = 538,
RIGHT_ANGLE = 539, BOOLCONSTANT = 539,
VERTICAL_BAR = 540, FLOAT16CONSTANT = 540,
CARET = 541, LEFT_OP = 541,
AMPERSAND = 542, RIGHT_OP = 542,
QUESTION = 543, INC_OP = 543,
INVARIANT = 544, DEC_OP = 544,
PRECISE = 545, LE_OP = 545,
HIGH_PRECISION = 546, GE_OP = 546,
MEDIUM_PRECISION = 547, EQ_OP = 547,
LOW_PRECISION = 548, NE_OP = 548,
PRECISION = 549, AND_OP = 549,
PACKED = 550, OR_OP = 550,
RESOURCE = 551, XOR_OP = 551,
SUPERP = 552 MUL_ASSIGN = 552,
DIV_ASSIGN = 553,
ADD_ASSIGN = 554,
MOD_ASSIGN = 555,
LEFT_ASSIGN = 556,
RIGHT_ASSIGN = 557,
AND_ASSIGN = 558,
XOR_ASSIGN = 559,
OR_ASSIGN = 560,
SUB_ASSIGN = 561,
LEFT_PAREN = 562,
RIGHT_PAREN = 563,
LEFT_BRACKET = 564,
RIGHT_BRACKET = 565,
LEFT_BRACE = 566,
RIGHT_BRACE = 567,
DOT = 568,
COMMA = 569,
COLON = 570,
EQUAL = 571,
SEMICOLON = 572,
BANG = 573,
DASH = 574,
TILDE = 575,
PLUS = 576,
STAR = 577,
SLASH = 578,
PERCENT = 579,
LEFT_ANGLE = 580,
RIGHT_ANGLE = 581,
VERTICAL_BAR = 582,
CARET = 583,
AMPERSAND = 584,
QUESTION = 585,
INVARIANT = 586,
PRECISE = 587,
HIGH_PRECISION = 588,
MEDIUM_PRECISION = 589,
LOW_PRECISION = 590,
PRECISION = 591,
PACKED = 592,
RESOURCE = 593,
SUPERP = 594
}; };
#endif #endif
/* Value type. */ /* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE union YYSTYPE
{ {
#line 69 "MachineIndependent/glslang.y" /* yacc.c:1909 */ #line 69 "glslang.y" /* yacc.c:1909 */
struct { struct {
glslang::TSourceLoc loc; glslang::TSourceLoc loc;
...@@ -383,8 +425,10 @@ union YYSTYPE ...@@ -383,8 +425,10 @@ union YYSTYPE
}; };
} interm; } interm;
#line 387 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ #line 429 "glslang_tab.cpp.h" /* yacc.c:1909 */
}; };
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_DECLARED 1
#endif #endif
...@@ -393,4 +437,4 @@ union YYSTYPE ...@@ -393,4 +437,4 @@ union YYSTYPE
int yyparse (glslang::TParseContext* pParseContext); int yyparse (glslang::TParseContext* pParseContext);
#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ #endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED */
...@@ -80,6 +80,7 @@ public: ...@@ -80,6 +80,7 @@ public:
#ifdef AMD_EXTENSIONS #ifdef AMD_EXTENSIONS
virtual void int16Check(const TSourceLoc& loc, const char* op, bool builtIn = false); virtual void int16Check(const TSourceLoc& loc, const char* op, bool builtIn = false);
virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false); virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void float16OpaqueCheck(const TSourceLoc&, const char* op, bool builtIn = false);
#endif #endif
virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false); virtual void int64Check(const TSourceLoc&, const char* op, bool builtIn = false);
virtual void spvRemoved(const TSourceLoc&, const char* op); virtual void spvRemoved(const TSourceLoc&, const char* op);
......
...@@ -415,6 +415,36 @@ public: ...@@ -415,6 +415,36 @@ public:
case EsdBuffer: case EsdBuffer:
return GL_SAMPLER_BUFFER; return GL_SAMPLER_BUFFER;
} }
#ifdef AMD_EXTENSIONS
case EbtFloat16:
switch ((int)sampler.dim) {
case Esd1D:
switch ((int)sampler.shadow) {
case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_AMD : GL_FLOAT16_SAMPLER_1D_AMD;
case true: return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_1D_SHADOW_AMD;
}
case Esd2D:
switch ((int)sampler.ms) {
case false:
switch ((int)sampler.shadow) {
case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_AMD;
case true: return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_2D_SHADOW_AMD;
}
case true: return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_AMD;
}
case Esd3D:
return GL_FLOAT16_SAMPLER_3D_AMD;
case EsdCube:
switch ((int)sampler.shadow) {
case false: return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_AMD : GL_FLOAT16_SAMPLER_CUBE_AMD;
case true: return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_CUBE_SHADOW_AMD;
}
case EsdRect:
return sampler.shadow ? GL_FLOAT16_SAMPLER_2D_RECT_SHADOW_AMD : GL_FLOAT16_SAMPLER_2D_RECT_AMD;
case EsdBuffer:
return GL_FLOAT16_SAMPLER_BUFFER_AMD;
}
#endif
case EbtInt: case EbtInt:
switch ((int)sampler.dim) { switch ((int)sampler.dim) {
case Esd1D: case Esd1D:
...@@ -477,6 +507,26 @@ public: ...@@ -477,6 +507,26 @@ public:
case EsdBuffer: case EsdBuffer:
return GL_IMAGE_BUFFER; return GL_IMAGE_BUFFER;
} }
#ifdef AMD_EXTENSIONS
case EbtFloat16:
switch ((int)sampler.dim) {
case Esd1D:
return sampler.arrayed ? GL_FLOAT16_IMAGE_1D_ARRAY_AMD : GL_FLOAT16_IMAGE_1D_AMD;
case Esd2D:
switch ((int)sampler.ms) {
case false: return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_AMD;
case true: return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD;
}
case Esd3D:
return GL_FLOAT16_IMAGE_3D_AMD;
case EsdCube:
return sampler.arrayed ? GL_FLOAT16_IMAGE_CUBE_MAP_ARRAY_AMD : GL_FLOAT16_IMAGE_CUBE_AMD;
case EsdRect:
return GL_FLOAT16_IMAGE_2D_RECT_AMD;
case EsdBuffer:
return GL_FLOAT16_IMAGE_BUFFER_AMD;
}
#endif
case EbtInt: case EbtInt:
switch ((int)sampler.dim) { switch ((int)sampler.dim) {
case Esd1D: case Esd1D:
......
...@@ -419,6 +419,7 @@ INSTANTIATE_TEST_CASE_P( ...@@ -419,6 +419,7 @@ INSTANTIATE_TEST_CASE_P(
Glsl, CompileVulkanToSpirvTestAMD, Glsl, CompileVulkanToSpirvTestAMD,
::testing::ValuesIn(std::vector<std::string>({ ::testing::ValuesIn(std::vector<std::string>({
"spv.float16.frag", "spv.float16.frag",
"spv.float16Fetch.frag",
"spv.imageLoadStoreLod.frag", "spv.imageLoadStoreLod.frag",
"spv.int16.frag", "spv.int16.frag",
"spv.shaderBallotAMD.comp", "spv.shaderBallotAMD.comp",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment