Merge branch 'sync' into automapping-opengl-location
Sync code from KhronosGroup/glslang.
This commit is contained in:
commit
1247baa678
119 changed files with 8168 additions and 4614 deletions
|
|
@ -275,6 +275,12 @@ enum TBuiltInVariable {
|
|||
EbvMeshViewIndicesNV,
|
||||
#endif
|
||||
|
||||
// sm builtins
|
||||
EbvWarpsPerSM,
|
||||
EbvSMCount,
|
||||
EbvWarpID,
|
||||
EbvSMID,
|
||||
|
||||
// HLSL built-ins that live only temporarily, until they get remapped
|
||||
// to one of the above.
|
||||
EbvFragDepthGreater,
|
||||
|
|
@ -460,6 +466,11 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
|
|||
case EbvMeshViewIndicesNV: return "MeshViewIndicesNV";
|
||||
#endif
|
||||
|
||||
case EbvWarpsPerSM: return "WarpsPerSMNV";
|
||||
case EbvSMCount: return "SMCountNV";
|
||||
case EbvWarpID: return "WarpIDNV";
|
||||
case EbvSMID: return "SMIDNV";
|
||||
|
||||
default: return "unknown built-in variable";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -514,8 +514,9 @@ public:
|
|||
|
||||
const char* semanticName;
|
||||
TStorageQualifier storage : 6;
|
||||
TBuiltInVariable builtIn : 8;
|
||||
TBuiltInVariable declaredBuiltIn : 8;
|
||||
TBuiltInVariable builtIn : 9;
|
||||
TBuiltInVariable declaredBuiltIn : 9;
|
||||
static_assert(EbvLast < 256, "need to increase size of TBuiltInVariable bitfields!");
|
||||
TPrecisionQualifier precision : 3;
|
||||
bool invariant : 1; // require canonical treatment for cross-shader invariance
|
||||
bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects
|
||||
|
|
|
|||
|
|
@ -624,6 +624,8 @@ enum TOperator {
|
|||
EOpBeginInvocationInterlock, // Fragment only
|
||||
EOpEndInvocationInterlock, // Fragment only
|
||||
|
||||
EOpIsHelperInvocation,
|
||||
|
||||
//
|
||||
// Branch
|
||||
//
|
||||
|
|
@ -634,6 +636,7 @@ enum TOperator {
|
|||
EOpContinue,
|
||||
EOpCase,
|
||||
EOpDefault,
|
||||
EOpDemote, // Fragment only
|
||||
|
||||
//
|
||||
// Constructors
|
||||
|
|
@ -651,9 +654,21 @@ enum TOperator {
|
|||
EOpConstructBool,
|
||||
EOpConstructFloat,
|
||||
EOpConstructDouble,
|
||||
// Keep vector and matrix constructors in a consistent relative order for
|
||||
// TParseContext::constructBuiltIn, which converts between 8/16/32 bit
|
||||
// vector constructors
|
||||
EOpConstructVec2,
|
||||
EOpConstructVec3,
|
||||
EOpConstructVec4,
|
||||
EOpConstructMat2x2,
|
||||
EOpConstructMat2x3,
|
||||
EOpConstructMat2x4,
|
||||
EOpConstructMat3x2,
|
||||
EOpConstructMat3x3,
|
||||
EOpConstructMat3x4,
|
||||
EOpConstructMat4x2,
|
||||
EOpConstructMat4x3,
|
||||
EOpConstructMat4x4,
|
||||
EOpConstructDVec2,
|
||||
EOpConstructDVec3,
|
||||
EOpConstructDVec4,
|
||||
|
|
@ -684,15 +699,6 @@ enum TOperator {
|
|||
EOpConstructU64Vec2,
|
||||
EOpConstructU64Vec3,
|
||||
EOpConstructU64Vec4,
|
||||
EOpConstructMat2x2,
|
||||
EOpConstructMat2x3,
|
||||
EOpConstructMat2x4,
|
||||
EOpConstructMat3x2,
|
||||
EOpConstructMat3x3,
|
||||
EOpConstructMat3x4,
|
||||
EOpConstructMat4x2,
|
||||
EOpConstructMat4x3,
|
||||
EOpConstructMat4x4,
|
||||
EOpConstructDMat2x2,
|
||||
EOpConstructDMat2x3,
|
||||
EOpConstructDMat2x4,
|
||||
|
|
@ -999,6 +1005,10 @@ enum TOperator {
|
|||
EOpWaveGetLaneIndex, // Will decompose to gl_SubgroupInvocationID.
|
||||
EOpWaveActiveCountBits, // Will decompose to subgroupBallotBitCount(subgroupBallot()).
|
||||
EOpWavePrefixCountBits, // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
|
||||
|
||||
// Shader Clock Ops
|
||||
EOpReadClockSubgroupKHR,
|
||||
EOpReadClockDeviceKHR,
|
||||
};
|
||||
|
||||
class TIntermTraverser;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
// This header is generated by the make-revision script.
|
||||
|
||||
#define GLSLANG_PATCH_LEVEL 3226
|
||||
#define GLSLANG_PATCH_LEVEL 3321
|
||||
|
|
|
|||
31
glslang/MachineIndependent/Constant.cpp
Normal file → Executable file
31
glslang/MachineIndependent/Constant.cpp
Normal file → Executable file
|
|
@ -415,8 +415,8 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||
|
||||
case EOpEmitStreamVertex:
|
||||
case EOpEndStreamPrimitive:
|
||||
// These don't actually fold
|
||||
return 0;
|
||||
// These don't fold
|
||||
return nullptr;
|
||||
|
||||
case EOpPackSnorm2x16:
|
||||
case EOpPackUnorm2x16:
|
||||
|
|
@ -491,8 +491,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||
break;
|
||||
}
|
||||
|
||||
// TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out
|
||||
|
||||
case EOpPackSnorm2x16:
|
||||
case EOpPackUnorm2x16:
|
||||
case EOpPackHalf2x16:
|
||||
|
|
@ -510,7 +508,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||
case EOpDeterminant:
|
||||
case EOpMatrixInverse:
|
||||
case EOpTranspose:
|
||||
return 0;
|
||||
return nullptr;
|
||||
|
||||
default:
|
||||
assert(componentWise);
|
||||
|
|
@ -538,7 +536,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||
case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break;
|
||||
case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const()))); break;
|
||||
default:
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
case EOpLogicalNot:
|
||||
|
|
@ -546,7 +544,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||
switch (getType().getBasicType()) {
|
||||
case EbtBool: newConstArray[i].setBConst(!unionArray[i].getBConst()); break;
|
||||
default:
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
case EOpBitwiseNot:
|
||||
|
|
@ -970,7 +968,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
|
|||
case EOpInt16BitsToFloat16:
|
||||
case EOpUint16BitsToFloat16:
|
||||
default:
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1201,12 +1199,17 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode)
|
|||
newConstArray[comp].setBConst(childConstUnions[0][arg0comp] != childConstUnions[1][arg1comp]);
|
||||
break;
|
||||
case EOpMix:
|
||||
if (children[2]->getAsTyped()->getBasicType() == EbtBool)
|
||||
newConstArray[comp].setDConst(childConstUnions[2][arg2comp].getBConst() ? childConstUnions[1][arg1comp].getDConst() :
|
||||
childConstUnions[0][arg0comp].getDConst());
|
||||
else
|
||||
newConstArray[comp].setDConst(childConstUnions[0][arg0comp].getDConst() * (1.0 - childConstUnions[2][arg2comp].getDConst()) +
|
||||
childConstUnions[1][arg1comp].getDConst() * childConstUnions[2][arg2comp].getDConst());
|
||||
if (!children[0]->getAsTyped()->isFloatingDomain())
|
||||
return aggrNode;
|
||||
if (children[2]->getAsTyped()->getBasicType() == EbtBool) {
|
||||
newConstArray[comp].setDConst(childConstUnions[2][arg2comp].getBConst()
|
||||
? childConstUnions[1][arg1comp].getDConst()
|
||||
: childConstUnions[0][arg0comp].getDConst());
|
||||
} else {
|
||||
newConstArray[comp].setDConst(
|
||||
childConstUnions[0][arg0comp].getDConst() * (1.0 - childConstUnions[2][arg2comp].getDConst()) +
|
||||
childConstUnions[1][arg1comp].getDConst() * childConstUnions[2][arg2comp].getDConst());
|
||||
}
|
||||
break;
|
||||
case EOpStep:
|
||||
newConstArray[comp].setDConst(childConstUnions[1][arg1comp].getDConst() < childConstUnions[0][arg0comp].getDConst() ? 0.0 : 1.0);
|
||||
|
|
|
|||
|
|
@ -3838,12 +3838,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
}
|
||||
|
||||
// GL_AMD_gcn_shader
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
if (profile != EEsProfile && version >= 440) {
|
||||
commonBuiltins.append(
|
||||
"float cubeFaceIndexAMD(vec3);"
|
||||
"vec2 cubeFaceCoordAMD(vec3);"
|
||||
"uint64_t timeAMD();"
|
||||
|
||||
"in int gl_SIMDGroupSizeAMD;"
|
||||
"\n");
|
||||
}
|
||||
|
||||
|
|
@ -5034,6 +5035,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"void beginInvocationInterlockARB(void);"
|
||||
"void endInvocationInterlockARB(void);");
|
||||
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
"bool helperInvocationEXT();"
|
||||
"\n");
|
||||
|
||||
#ifdef AMD_EXTENSIONS
|
||||
// GL_AMD_shader_explicit_vertex_parameter
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
|
|
@ -5085,6 +5090,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"\n");
|
||||
}
|
||||
|
||||
// GL_ARB_shader_clock & GL_EXT_shader_realtime_clock
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
commonBuiltins.append(
|
||||
"uvec2 clock2x32ARB();"
|
||||
"uint64_t clockARB();"
|
||||
"uvec2 clockRealtime2x32EXT();"
|
||||
"uint64_t clockRealtimeEXT();"
|
||||
"\n");
|
||||
}
|
||||
|
||||
// GL_AMD_shader_fragment_mask
|
||||
if (profile != EEsProfile && version >= 450 && spvVersion.vulkan > 0) {
|
||||
stageBuiltins[EShLangFragment].append(
|
||||
|
|
@ -5129,14 +5144,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
}
|
||||
|
||||
//E_SPV_NV_compute_shader_derivatives
|
||||
|
||||
stageBuiltins[EShLangCompute].append(derivatives);
|
||||
stageBuiltins[EShLangCompute].append(derivativeControls);
|
||||
stageBuiltins[EShLangCompute].append("\n");
|
||||
|
||||
|
||||
if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
|
||||
stageBuiltins[EShLangCompute].append(derivatives);
|
||||
stageBuiltins[EShLangCompute].append(derivativeControls);
|
||||
stageBuiltins[EShLangCompute].append("\n");
|
||||
}
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
|
||||
stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
|
||||
stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
|
||||
stageBuiltins[EShLangCompute].append("\n");
|
||||
|
|
@ -6141,6 +6154,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"in highp uvec4 gl_SubgroupGtMask;"
|
||||
"in highp uvec4 gl_SubgroupLeMask;"
|
||||
"in highp uvec4 gl_SubgroupLtMask;"
|
||||
// GL_NV_shader_sm_builtins
|
||||
"in highp uint gl_WarpsPerSMNV;"
|
||||
"in highp uint gl_SMCountNV;"
|
||||
"in highp uint gl_WarpIDNV;"
|
||||
"in highp uint gl_SMIDNV;"
|
||||
"\n";
|
||||
const char* fragmentSubgroupDecls =
|
||||
"flat in mediump uint gl_SubgroupSize;"
|
||||
|
|
@ -6150,6 +6168,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
"flat in highp uvec4 gl_SubgroupGtMask;"
|
||||
"flat in highp uvec4 gl_SubgroupLeMask;"
|
||||
"flat in highp uvec4 gl_SubgroupLtMask;"
|
||||
// GL_NV_shader_sm_builtins
|
||||
"flat in highp uint gl_WarpsPerSMNV;"
|
||||
"flat in highp uint gl_SMCountNV;"
|
||||
"flat in highp uint gl_WarpIDNV;"
|
||||
"flat in highp uint gl_SMIDNV;"
|
||||
"\n";
|
||||
const char* computeSubgroupDecls =
|
||||
"in highp uint gl_NumSubgroups;"
|
||||
|
|
@ -6299,6 +6322,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|||
commonBuiltins.append("const int gl_SemanticsAcquireRelease = 0x8;\n");
|
||||
commonBuiltins.append("const int gl_SemanticsMakeAvailable = 0x2000;\n");
|
||||
commonBuiltins.append("const int gl_SemanticsMakeVisible = 0x4000;\n");
|
||||
commonBuiltins.append("const int gl_SemanticsVolatile = 0x8000;\n");
|
||||
|
||||
commonBuiltins.append("const int gl_StorageSemanticsNone = 0x0;\n");
|
||||
commonBuiltins.append("const int gl_StorageSemanticsBuffer = 0x40;\n");
|
||||
|
|
@ -7737,14 +7761,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
|
|||
s.append(builtInConstant);
|
||||
}
|
||||
|
||||
#ifdef AMD_EXTENSIONS
|
||||
// GL_AMD_gcn_shader
|
||||
if (profile != EEsProfile && version >= 450) {
|
||||
snprintf(builtInConstant, maxSize, "const int gl_SIMDGroupSizeAMD = 64;");
|
||||
s.append(builtInConstant);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
// SPV_NV_mesh_shader
|
||||
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
|
||||
|
|
@ -7889,19 +7905,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.setFunctionExtensions("readInvocationARB", 1, &E_GL_ARB_shader_ballot);
|
||||
symbolTable.setFunctionExtensions("readFirstInvocationARB", 1, &E_GL_ARB_shader_ballot);
|
||||
|
||||
BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupEqMaskARB", EbvSubGroupEqMask, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupGeMaskARB", EbvSubGroupGeMask, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupGtMaskARB", EbvSubGroupGtMask, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable);
|
||||
|
||||
if (spvVersion.vulkan > 0)
|
||||
// Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
|
||||
SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
|
||||
else
|
||||
BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
|
||||
|
||||
if (version >= 430) {
|
||||
symbolTable.setFunctionExtensions("anyInvocationARB", 1, &E_GL_ARB_shader_group_vote);
|
||||
symbolTable.setFunctionExtensions("allInvocationsARB", 1, &E_GL_ARB_shader_group_vote);
|
||||
|
|
@ -7909,6 +7912,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef AMD_EXTENSIONS
|
||||
if (profile != EEsProfile) {
|
||||
symbolTable.setFunctionExtensions("minInvocationsAMD", 1, &E_GL_AMD_shader_ballot);
|
||||
|
|
@ -7943,6 +7947,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
}
|
||||
|
||||
if (profile != EEsProfile) {
|
||||
symbolTable.setVariableExtensions("gl_SIMDGroupSizeAMD", 1, &E_GL_AMD_gcn_shader);
|
||||
SpecialQualifier("gl_SIMDGroupSizeAMD", EvqVaryingIn, EbvSubGroupSize, symbolTable);
|
||||
|
||||
symbolTable.setFunctionExtensions("cubeFaceIndexAMD", 1, &E_GL_AMD_gcn_shader);
|
||||
symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader);
|
||||
symbolTable.setFunctionExtensions("timeAMD", 1, &E_GL_AMD_gcn_shader);
|
||||
|
|
@ -8088,7 +8095,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
|
||||
BuiltInVariable("gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
|
||||
|
||||
if (language != EShLangVertex) {
|
||||
if (language == EShLangVertex || language == EShLangGeometry) {
|
||||
symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
|
||||
symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes);
|
||||
|
||||
|
|
@ -8162,7 +8169,22 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
|
||||
BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
|
||||
}
|
||||
|
||||
|
||||
if (profile != EEsProfile) {
|
||||
BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupEqMaskARB", EbvSubGroupEqMask, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupGeMaskARB", EbvSubGroupGeMask, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupGtMaskARB", EbvSubGroupGtMask, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable);
|
||||
BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable);
|
||||
|
||||
if (spvVersion.vulkan > 0)
|
||||
// Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
|
||||
SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
|
||||
else
|
||||
BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
|
||||
}
|
||||
|
||||
// GL_KHR_shader_subgroup
|
||||
if ((profile == EEsProfile && version >= 310) ||
|
||||
(profile != EEsProfile && version >= 140)) {
|
||||
|
|
@ -8181,6 +8203,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable);
|
||||
BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable);
|
||||
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
|
||||
|
||||
// GL_NV_shader_sm_builtins
|
||||
symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
|
||||
BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
|
||||
BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
|
||||
BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
@ -8409,19 +8441,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_BaryCoordNV", EbvBaryCoordNV, symbolTable);
|
||||
BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable);
|
||||
}
|
||||
if (((profile != EEsProfile && version >= 450) ||
|
||||
(profile == EEsProfile && version >= 320)) &&
|
||||
language == EShLangCompute) {
|
||||
symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdxFine", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdyFine", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("fwidthFine", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdxCoarse", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((profile != EEsProfile && version >= 450) ||
|
||||
|
|
@ -8434,6 +8453,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
|
||||
symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
|
||||
|
||||
symbolTable.setFunctionExtensions("clockARB", 1, &E_GL_ARB_shader_clock);
|
||||
symbolTable.setFunctionExtensions("clock2x32ARB", 1, &E_GL_ARB_shader_clock);
|
||||
|
||||
symbolTable.setFunctionExtensions("clockRealtimeEXT", 1, &E_GL_EXT_shader_realtime_clock);
|
||||
symbolTable.setFunctionExtensions("clockRealtime2x32EXT", 1, &E_GL_EXT_shader_realtime_clock);
|
||||
|
||||
if (profile == EEsProfile && version < 320) {
|
||||
symbolTable.setVariableExtensions("gl_PrimitiveID", Num_AEP_geometry_shader, AEP_geometry_shader);
|
||||
symbolTable.setVariableExtensions("gl_Layer", Num_AEP_geometry_shader, AEP_geometry_shader);
|
||||
|
|
@ -8582,6 +8607,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveXorNV", 1, &E_GL_NV_shader_subgroup_partitioned);
|
||||
#endif
|
||||
|
||||
// GL_NV_shader_sm_builtins
|
||||
symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
|
||||
BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
|
||||
BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
|
||||
BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
|
||||
}
|
||||
|
||||
if (profile == EEsProfile) {
|
||||
|
|
@ -8601,6 +8635,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.setVariableExtensions("gl_SemanticsAcquireRelease", 1, &E_GL_KHR_memory_scope_semantics);
|
||||
symbolTable.setVariableExtensions("gl_SemanticsMakeAvailable", 1, &E_GL_KHR_memory_scope_semantics);
|
||||
symbolTable.setVariableExtensions("gl_SemanticsMakeVisible", 1, &E_GL_KHR_memory_scope_semantics);
|
||||
symbolTable.setVariableExtensions("gl_SemanticsVolatile", 1, &E_GL_KHR_memory_scope_semantics);
|
||||
|
||||
symbolTable.setVariableExtensions("gl_StorageSemanticsNone", 1, &E_GL_KHR_memory_scope_semantics);
|
||||
symbolTable.setVariableExtensions("gl_StorageSemanticsBuffer", 1, &E_GL_KHR_memory_scope_semantics);
|
||||
|
|
@ -8608,6 +8643,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.setVariableExtensions("gl_StorageSemanticsImage", 1, &E_GL_KHR_memory_scope_semantics);
|
||||
symbolTable.setVariableExtensions("gl_StorageSemanticsOutput", 1, &E_GL_KHR_memory_scope_semantics);
|
||||
}
|
||||
|
||||
symbolTable.setFunctionExtensions("helperInvocationEXT", 1, &E_GL_EXT_demote_to_helper_invocation);
|
||||
break;
|
||||
|
||||
case EShLangCompute:
|
||||
|
|
@ -8686,6 +8723,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable);
|
||||
BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable);
|
||||
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
|
||||
|
||||
// GL_NV_shader_sm_builtins
|
||||
symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
|
||||
BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
|
||||
BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
|
||||
BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
|
||||
}
|
||||
|
||||
if ((profile != EEsProfile && version >= 140) ||
|
||||
|
|
@ -8712,6 +8759,20 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.setFunctionExtensions("coopMatStoreNV", 1, &E_GL_NV_cooperative_matrix);
|
||||
symbolTable.setFunctionExtensions("coopMatMulAddNV", 1, &E_GL_NV_cooperative_matrix);
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
|
||||
symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdxFine", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdyFine", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("fwidthFine", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdxCoarse", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives);
|
||||
}
|
||||
#endif
|
||||
|
||||
break;
|
||||
#ifdef NV_EXTENSIONS
|
||||
case EShLangRayGenNV:
|
||||
|
|
@ -8800,6 +8861,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable);
|
||||
BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable);
|
||||
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
|
||||
|
||||
// GL_NV_shader_sm_builtins
|
||||
symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
|
||||
BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
|
||||
BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
|
||||
BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -8934,6 +9005,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
|
||||
|
||||
symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
|
||||
|
||||
// GL_NV_shader_sm_builtins
|
||||
symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
|
||||
BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
|
||||
BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
|
||||
BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -9024,6 +9105,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable);
|
||||
|
||||
symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
|
||||
|
||||
// GL_NV_shader_sm_builtins
|
||||
symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins);
|
||||
BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable);
|
||||
BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable);
|
||||
BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable);
|
||||
BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
|
@ -9196,6 +9287,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
|
||||
symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter);
|
||||
|
||||
symbolTable.relateToOperator("clockARB", EOpReadClockSubgroupKHR);
|
||||
symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR);
|
||||
|
||||
symbolTable.relateToOperator("clockRealtimeEXT", EOpReadClockDeviceKHR);
|
||||
symbolTable.relateToOperator("clockRealtime2x32EXT", EOpReadClockDeviceKHR);
|
||||
|
||||
if (profile != EEsProfile && version >= 460) {
|
||||
symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicCounterAdd);
|
||||
symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicCounterSubtract);
|
||||
|
|
@ -9222,6 +9319,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
symbolTable.relateToOperator("findLSB", EOpFindLSB);
|
||||
symbolTable.relateToOperator("findMSB", EOpFindMSB);
|
||||
|
||||
symbolTable.relateToOperator("helperInvocationEXT", EOpIsHelperInvocation);
|
||||
|
||||
if (PureOperatorBuiltins) {
|
||||
symbolTable.relateToOperator("imageSize", EOpImageQuerySize);
|
||||
symbolTable.relateToOperator("imageSamples", EOpImageQuerySamples);
|
||||
|
|
@ -9671,6 +9770,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|||
BuiltInVariable("gl_in", "gl_TexCoord", EbvTexCoord, symbolTable);
|
||||
BuiltInVariable("gl_in", "gl_FogFragCoord", EbvFogFragCoord, symbolTable);
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
|
||||
symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes);
|
||||
|
||||
BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
|
||||
BuiltInVariable("gl_in", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable);
|
||||
#endif
|
||||
|
||||
// extension requirements
|
||||
if (profile == EEsProfile) {
|
||||
symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
|
||||
|
|
|
|||
|
|
@ -574,24 +574,6 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
|||
|
||||
TOperator newOp = EOpNull;
|
||||
|
||||
// Certain explicit conversions are allowed conditionally
|
||||
bool arithemeticInt8Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8);
|
||||
#ifdef AMD_EXTENSIONS
|
||||
bool arithemeticInt16Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16) ||
|
||||
extensionRequested(E_GL_AMD_gpu_shader_int16);
|
||||
|
||||
bool arithemeticFloat16Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16) ||
|
||||
extensionRequested(E_GL_AMD_gpu_shader_half_float);
|
||||
#else
|
||||
bool arithemeticInt16Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16);
|
||||
|
||||
bool arithemeticFloat16Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16);
|
||||
#endif
|
||||
bool convertToIntTypes = (convertTo == EbtInt8 || convertTo == EbtUint8 ||
|
||||
convertTo == EbtInt16 || convertTo == EbtUint16 ||
|
||||
convertTo == EbtInt || convertTo == EbtUint ||
|
||||
|
|
@ -608,19 +590,19 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
|||
node->getBasicType() == EbtFloat ||
|
||||
node->getBasicType() == EbtDouble);
|
||||
|
||||
if (! arithemeticInt8Enabled) {
|
||||
if (! getArithemeticInt8Enabled()) {
|
||||
if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) ||
|
||||
((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes))
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (! arithemeticInt16Enabled) {
|
||||
if (! getArithemeticInt16Enabled()) {
|
||||
if (((convertTo == EbtInt16 || convertTo == EbtUint16) && ! convertFromIntTypes) ||
|
||||
((node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16) && ! convertToIntTypes))
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (! arithemeticFloat16Enabled) {
|
||||
if (! getArithemeticFloat16Enabled()) {
|
||||
if ((convertTo == EbtFloat16 && ! convertFromFloatTypes) ||
|
||||
(node->getBasicType() == EbtFloat16 && ! convertToFloatTypes))
|
||||
return nullptr;
|
||||
|
|
@ -841,9 +823,15 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
|||
newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
|
||||
|
||||
if (node->getAsConstantUnion()) {
|
||||
TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
|
||||
if (folded)
|
||||
return folded;
|
||||
// 8/16-bit storage extensions don't support 8/16-bit constants, so don't fold conversions
|
||||
// to those types
|
||||
if ((getArithemeticInt8Enabled() || !(convertTo == EbtInt8 || convertTo == EbtUint8)) &&
|
||||
(getArithemeticInt16Enabled() || !(convertTo == EbtInt16 || convertTo == EbtUint16)) &&
|
||||
(getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16))) {
|
||||
TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
|
||||
if (folded)
|
||||
return folded;
|
||||
}
|
||||
}
|
||||
|
||||
// Propagate specialization-constant-ness, if allowed
|
||||
|
|
@ -3788,217 +3776,41 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
|
|||
TConstUnionArray leftUnionArray(size);
|
||||
|
||||
for (int i=0; i < size; i++) {
|
||||
switch (promoteTo) {
|
||||
case EbtFloat:
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtInt:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
|
||||
break;
|
||||
case EbtUint:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
|
||||
break;
|
||||
case EbtInt64:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
|
||||
break;
|
||||
case EbtUint64:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
|
||||
break;
|
||||
case EbtBool:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
|
||||
break;
|
||||
case EbtFloat:
|
||||
case EbtDouble:
|
||||
case EbtFloat16:
|
||||
leftUnionArray[i] = rightUnionArray[i];
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
}
|
||||
break;
|
||||
case EbtDouble:
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtInt:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
|
||||
break;
|
||||
case EbtUint:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
|
||||
break;
|
||||
case EbtInt64:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
|
||||
break;
|
||||
case EbtUint64:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
|
||||
break;
|
||||
case EbtBool:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
|
||||
break;
|
||||
case EbtFloat:
|
||||
case EbtDouble:
|
||||
case EbtFloat16:
|
||||
leftUnionArray[i] = rightUnionArray[i];
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
}
|
||||
break;
|
||||
case EbtFloat16:
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtInt:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getIConst()));
|
||||
break;
|
||||
case EbtUint:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getUConst()));
|
||||
break;
|
||||
case EbtInt64:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getI64Const()));
|
||||
break;
|
||||
case EbtUint64:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getU64Const()));
|
||||
break;
|
||||
case EbtBool:
|
||||
leftUnionArray[i].setDConst(static_cast<double>(rightUnionArray[i].getBConst()));
|
||||
break;
|
||||
case EbtFloat:
|
||||
case EbtDouble:
|
||||
case EbtFloat16:
|
||||
leftUnionArray[i] = rightUnionArray[i];
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
}
|
||||
break;
|
||||
case EbtInt:
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtInt:
|
||||
leftUnionArray[i] = rightUnionArray[i];
|
||||
break;
|
||||
case EbtUint:
|
||||
leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getUConst()));
|
||||
break;
|
||||
case EbtInt64:
|
||||
leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getI64Const()));
|
||||
break;
|
||||
case EbtUint64:
|
||||
leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getU64Const()));
|
||||
break;
|
||||
case EbtBool:
|
||||
leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getBConst()));
|
||||
break;
|
||||
case EbtFloat:
|
||||
case EbtDouble:
|
||||
case EbtFloat16:
|
||||
leftUnionArray[i].setIConst(static_cast<int>(rightUnionArray[i].getDConst()));
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
}
|
||||
break;
|
||||
case EbtUint:
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtInt:
|
||||
leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getIConst()));
|
||||
break;
|
||||
case EbtUint:
|
||||
leftUnionArray[i] = rightUnionArray[i];
|
||||
break;
|
||||
case EbtInt64:
|
||||
leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getI64Const()));
|
||||
break;
|
||||
case EbtUint64:
|
||||
leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getU64Const()));
|
||||
break;
|
||||
case EbtBool:
|
||||
leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getBConst()));
|
||||
break;
|
||||
case EbtFloat:
|
||||
case EbtDouble:
|
||||
case EbtFloat16:
|
||||
leftUnionArray[i].setUConst(static_cast<unsigned int>(rightUnionArray[i].getDConst()));
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
}
|
||||
break;
|
||||
case EbtBool:
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtInt:
|
||||
leftUnionArray[i].setBConst(rightUnionArray[i].getIConst() != 0);
|
||||
break;
|
||||
case EbtUint:
|
||||
leftUnionArray[i].setBConst(rightUnionArray[i].getUConst() != 0);
|
||||
break;
|
||||
case EbtInt64:
|
||||
leftUnionArray[i].setBConst(rightUnionArray[i].getI64Const() != 0);
|
||||
break;
|
||||
case EbtUint64:
|
||||
leftUnionArray[i].setBConst(rightUnionArray[i].getU64Const() != 0);
|
||||
break;
|
||||
case EbtBool:
|
||||
leftUnionArray[i] = rightUnionArray[i];
|
||||
break;
|
||||
case EbtFloat:
|
||||
case EbtDouble:
|
||||
case EbtFloat16:
|
||||
leftUnionArray[i].setBConst(rightUnionArray[i].getDConst() != 0.0);
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
}
|
||||
break;
|
||||
case EbtInt64:
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtInt:
|
||||
leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getIConst()));
|
||||
break;
|
||||
case EbtUint:
|
||||
leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getUConst()));
|
||||
break;
|
||||
case EbtInt64:
|
||||
leftUnionArray[i] = rightUnionArray[i];
|
||||
break;
|
||||
case EbtUint64:
|
||||
leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getU64Const()));
|
||||
break;
|
||||
case EbtBool:
|
||||
leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getBConst()));
|
||||
break;
|
||||
case EbtFloat:
|
||||
case EbtDouble:
|
||||
case EbtFloat16:
|
||||
leftUnionArray[i].setI64Const(static_cast<long long>(rightUnionArray[i].getDConst()));
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
}
|
||||
break;
|
||||
case EbtUint64:
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtInt:
|
||||
leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getIConst()));
|
||||
break;
|
||||
case EbtUint:
|
||||
leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getUConst()));
|
||||
break;
|
||||
case EbtInt64:
|
||||
leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getI64Const()));
|
||||
break;
|
||||
case EbtUint64:
|
||||
leftUnionArray[i] = rightUnionArray[i];
|
||||
break;
|
||||
case EbtBool:
|
||||
leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getBConst()));
|
||||
break;
|
||||
case EbtFloat:
|
||||
case EbtDouble:
|
||||
case EbtFloat16:
|
||||
leftUnionArray[i].setU64Const(static_cast<unsigned long long>(rightUnionArray[i].getDConst()));
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return node;
|
||||
|
||||
#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
|
||||
#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
|
||||
|
||||
#define TO_ALL(Get) \
|
||||
switch (promoteTo) { \
|
||||
case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
|
||||
case EbtFloat: PROMOTE(setDConst, double, Get); break; \
|
||||
case EbtDouble: PROMOTE(setDConst, double, Get); break; \
|
||||
case EbtInt8: PROMOTE(setI8Const, char, Get); break; \
|
||||
case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
|
||||
case EbtInt: PROMOTE(setIConst, int, Get); break; \
|
||||
case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
|
||||
case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
|
||||
case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
|
||||
case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
|
||||
case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
|
||||
case EbtBool: PROMOTE_TO_BOOL(Get); break; \
|
||||
default: return node; \
|
||||
}
|
||||
|
||||
switch (node->getType().getBasicType()) {
|
||||
case EbtFloat16: TO_ALL(getDConst); break;
|
||||
case EbtFloat: TO_ALL(getDConst); break;
|
||||
case EbtDouble: TO_ALL(getDConst); break;
|
||||
case EbtInt8: TO_ALL(getI8Const); break;
|
||||
case EbtInt16: TO_ALL(getI16Const); break;
|
||||
case EbtInt: TO_ALL(getIConst); break;
|
||||
case EbtInt64: TO_ALL(getI64Const); break;
|
||||
case EbtUint8: TO_ALL(getU8Const); break;
|
||||
case EbtUint16: TO_ALL(getU16Const); break;
|
||||
case EbtUint: TO_ALL(getUConst); break;
|
||||
case EbtUint64: TO_ALL(getU64Const); break;
|
||||
case EbtBool: TO_ALL(getBConst); break;
|
||||
default: return node;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -254,11 +254,17 @@ void TParseContextBase::trackLinkage(TSymbol& symbol)
|
|||
// Give an error if not.
|
||||
void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
|
||||
{
|
||||
const auto sizeIsSpecializationExpression = [&type]() {
|
||||
return type.containsSpecializationSize() &&
|
||||
type.getArraySizes()->getOuterNode() != nullptr &&
|
||||
type.getArraySizes()->getOuterNode()->getAsSymbolNode() == nullptr; };
|
||||
|
||||
if (index < 0) {
|
||||
error(loc, "", "[", "index out of range '%d'", index);
|
||||
index = 0;
|
||||
} else if (type.isArray()) {
|
||||
if (type.isSizedArray() && index >= type.getOuterArraySize()) {
|
||||
if (type.isSizedArray() && !sizeIsSpecializationExpression() &&
|
||||
index >= type.getOuterArraySize()) {
|
||||
error(loc, "", "[", "array index out of range '%d'", index);
|
||||
index = type.getOuterArraySize() - 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1165,8 +1165,9 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
|
|||
error(arguments->getLoc(), message, "readonly", "");
|
||||
if (argQualifier.writeonly && ! formalQualifier.writeonly)
|
||||
error(arguments->getLoc(), message, "writeonly", "");
|
||||
if (!builtIn && argQualifier.restrict && ! formalQualifier.restrict)
|
||||
error(arguments->getLoc(), message, "restrict", "");
|
||||
// Don't check 'restrict', it is different than the rest:
|
||||
// "...but only restrict can be taken away from a calling argument, by a formal parameter that
|
||||
// lacks the restrict qualifier..."
|
||||
}
|
||||
if (!builtIn && argQualifier.layoutFormat != formalQualifier.layoutFormat) {
|
||||
// we have mismatched formats, which should only be allowed if writeonly
|
||||
|
|
@ -1640,6 +1641,7 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction&
|
|||
const int gl_SemanticsAcquireRelease = 0x8;
|
||||
const int gl_SemanticsMakeAvailable = 0x2000;
|
||||
const int gl_SemanticsMakeVisible = 0x4000;
|
||||
const int gl_SemanticsVolatile = 0x8000;
|
||||
|
||||
//const int gl_StorageSemanticsNone = 0x0;
|
||||
const int gl_StorageSemanticsBuffer = 0x40;
|
||||
|
|
@ -1729,7 +1731,8 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction&
|
|||
gl_SemanticsRelease |
|
||||
gl_SemanticsAcquireRelease |
|
||||
gl_SemanticsMakeAvailable |
|
||||
gl_SemanticsMakeVisible))) {
|
||||
gl_SemanticsMakeVisible |
|
||||
gl_SemanticsVolatile))) {
|
||||
error(loc, "Invalid semantics value", fnCandidate.getName().c_str(), "");
|
||||
}
|
||||
if (((storageClassSemantics | storageClassSemantics2) & ~(gl_StorageSemanticsBuffer |
|
||||
|
|
@ -1781,7 +1784,16 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction&
|
|||
error(loc, "gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease",
|
||||
fnCandidate.getName().c_str(), "");
|
||||
}
|
||||
|
||||
if ((semantics & gl_SemanticsVolatile) &&
|
||||
(callNode.getOp() == EOpMemoryBarrier || callNode.getOp() == EOpBarrier)) {
|
||||
error(loc, "gl_SemanticsVolatile must not be used with memoryBarrier or controlBarrier",
|
||||
fnCandidate.getName().c_str(), "");
|
||||
}
|
||||
if ((callNode.getOp() == EOpAtomicCompSwap || callNode.getOp() == EOpImageAtomicCompSwap) &&
|
||||
((semantics ^ semantics2) & gl_SemanticsVolatile)) {
|
||||
error(loc, "semEqual and semUnequal must either both include gl_SemanticsVolatile or neither",
|
||||
fnCandidate.getName().c_str(), "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -3964,23 +3976,30 @@ bool TParseContext::isRuntimeLength(const TIntermTyped& base) const
|
|||
}
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
// Fix mesh view output array dimension
|
||||
void TParseContext::resizeMeshViewDimension(const TSourceLoc& loc, TType& type)
|
||||
// Check if mesh perviewNV attributes have a view dimension
|
||||
// and resize it to gl_MaxMeshViewCountNV when implicitly sized.
|
||||
void TParseContext::checkAndResizeMeshViewDim(const TSourceLoc& loc, TType& type, bool isBlockMember)
|
||||
{
|
||||
// see if member is a per-view attribute
|
||||
if (type.getQualifier().isPerView()) {
|
||||
// since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value
|
||||
int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV;
|
||||
if (!type.getQualifier().isPerView())
|
||||
return;
|
||||
|
||||
if (! type.isArray()) {
|
||||
error(loc, "requires an view array dimension", "perviewNV", "");
|
||||
}
|
||||
else if (!type.isUnsizedArray() && type.getOuterArraySize() != maxViewCount) {
|
||||
if ((isBlockMember && type.isArray()) || (!isBlockMember && type.isArrayOfArrays())) {
|
||||
// since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value.
|
||||
int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV;
|
||||
// For block members, outermost array dimension is the view dimension.
|
||||
// For non-block members, outermost array dimension is the vertex/primitive dimension
|
||||
// and 2nd outermost is the view dimension.
|
||||
int viewDim = isBlockMember ? 0 : 1;
|
||||
int viewDimSize = type.getArraySizes()->getDimSize(viewDim);
|
||||
|
||||
if (viewDimSize != UnsizedArraySize && viewDimSize != maxViewCount)
|
||||
error(loc, "mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized", "[]", "");
|
||||
}
|
||||
else if (type.isUnsizedArray()) {
|
||||
type.changeOuterArraySize(maxViewCount);
|
||||
}
|
||||
else if (viewDimSize == UnsizedArraySize)
|
||||
type.getArraySizes()->setDimSize(viewDim, maxViewCount);
|
||||
}
|
||||
else {
|
||||
error(loc, "requires a view array dimension", "perviewNV", "");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
@ -6415,6 +6434,7 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
|
|||
transparentOpaqueCheck(loc, type, identifier);
|
||||
#ifdef NV_EXTENSIONS
|
||||
accStructNVCheck(loc, type, identifier);
|
||||
checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false);
|
||||
#endif
|
||||
if (type.getQualifier().storage == EvqConst && type.containsBasicType(EbtReference)) {
|
||||
error(loc, "variables with reference type can't have qualifier 'const'", "qualifier", "");
|
||||
|
|
@ -6936,6 +6956,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
|
|||
case EOpConstructF16Mat4x4:
|
||||
case EOpConstructFloat16:
|
||||
basicOp = EOpConstructFloat16;
|
||||
// 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
|
||||
// so construct a 32-bit type and convert
|
||||
if (!intermediate.getArithemeticFloat16Enabled()) {
|
||||
TType tempType(EbtFloat, EvqTemporary, type.getVectorSize());
|
||||
newNode = node;
|
||||
if (tempType != newNode->getType())
|
||||
newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructVec2 + op - EOpConstructF16Vec2), tempType, node->getLoc());
|
||||
newNode = intermediate.addConversion(EbtFloat16, newNode);
|
||||
return newNode;
|
||||
}
|
||||
break;
|
||||
|
||||
case EOpConstructI8Vec2:
|
||||
|
|
@ -6943,6 +6973,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
|
|||
case EOpConstructI8Vec4:
|
||||
case EOpConstructInt8:
|
||||
basicOp = EOpConstructInt8;
|
||||
// 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
|
||||
// so construct a 32-bit type and convert
|
||||
if (!intermediate.getArithemeticInt8Enabled()) {
|
||||
TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
|
||||
newNode = node;
|
||||
if (tempType != newNode->getType())
|
||||
newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructIVec2 + op - EOpConstructI8Vec2), tempType, node->getLoc());
|
||||
newNode = intermediate.addConversion(EbtInt8, newNode);
|
||||
return newNode;
|
||||
}
|
||||
break;
|
||||
|
||||
case EOpConstructU8Vec2:
|
||||
|
|
@ -6950,6 +6990,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
|
|||
case EOpConstructU8Vec4:
|
||||
case EOpConstructUint8:
|
||||
basicOp = EOpConstructUint8;
|
||||
// 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
|
||||
// so construct a 32-bit type and convert
|
||||
if (!intermediate.getArithemeticInt8Enabled()) {
|
||||
TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
|
||||
newNode = node;
|
||||
if (tempType != newNode->getType())
|
||||
newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructUVec2 + op - EOpConstructU8Vec2), tempType, node->getLoc());
|
||||
newNode = intermediate.addConversion(EbtUint8, newNode);
|
||||
return newNode;
|
||||
}
|
||||
break;
|
||||
|
||||
case EOpConstructI16Vec2:
|
||||
|
|
@ -6957,6 +7007,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
|
|||
case EOpConstructI16Vec4:
|
||||
case EOpConstructInt16:
|
||||
basicOp = EOpConstructInt16;
|
||||
// 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
|
||||
// so construct a 32-bit type and convert
|
||||
if (!intermediate.getArithemeticInt16Enabled()) {
|
||||
TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
|
||||
newNode = node;
|
||||
if (tempType != newNode->getType())
|
||||
newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructIVec2 + op - EOpConstructI16Vec2), tempType, node->getLoc());
|
||||
newNode = intermediate.addConversion(EbtInt16, newNode);
|
||||
return newNode;
|
||||
}
|
||||
break;
|
||||
|
||||
case EOpConstructU16Vec2:
|
||||
|
|
@ -6964,6 +7024,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T
|
|||
case EOpConstructU16Vec4:
|
||||
case EOpConstructUint16:
|
||||
basicOp = EOpConstructUint16;
|
||||
// 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
|
||||
// so construct a 32-bit type and convert
|
||||
if (!intermediate.getArithemeticInt16Enabled()) {
|
||||
TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
|
||||
newNode = node;
|
||||
if (tempType != newNode->getType())
|
||||
newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructUVec2 + op - EOpConstructU16Vec2), tempType, node->getLoc());
|
||||
newNode = intermediate.addConversion(EbtUint16, newNode);
|
||||
return newNode;
|
||||
}
|
||||
break;
|
||||
|
||||
case EOpConstructIVec2:
|
||||
|
|
@ -7280,7 +7350,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
|
|||
#ifdef NV_EXTENSIONS
|
||||
if (memberWithPerViewQualifier) {
|
||||
for (unsigned int member = 0; member < typeList.size(); ++member) {
|
||||
resizeMeshViewDimension(typeList[member].loc, *typeList[member].type);
|
||||
checkAndResizeMeshViewDim(typeList[member].loc, *typeList[member].type, /*isBlockMember*/ true);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -429,7 +429,7 @@ public:
|
|||
// Determine loop control from attributes
|
||||
void handleLoopAttributes(const TAttributes& attributes, TIntermNode*);
|
||||
|
||||
void resizeMeshViewDimension(const TSourceLoc&, TType&);
|
||||
void checkAndResizeMeshViewDim(const TSourceLoc&, TType&, bool isBlockMember);
|
||||
|
||||
protected:
|
||||
void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type);
|
||||
|
|
|
|||
|
|
@ -356,6 +356,7 @@ void TScanContext::fillInKeywordMap()
|
|||
(*KeywordMap)["default"] = DEFAULT;
|
||||
(*KeywordMap)["if"] = IF;
|
||||
(*KeywordMap)["else"] = ELSE;
|
||||
(*KeywordMap)["demote"] = DEMOTE;
|
||||
(*KeywordMap)["discard"] = DISCARD;
|
||||
(*KeywordMap)["return"] = RETURN;
|
||||
(*KeywordMap)["void"] = VOID;
|
||||
|
|
@ -1621,6 +1622,12 @@ int TScanContext::tokenizeIdentifier()
|
|||
return keyword;
|
||||
return identifierOrType();
|
||||
|
||||
case DEMOTE:
|
||||
if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation))
|
||||
return keyword;
|
||||
else
|
||||
return identifierOrType();
|
||||
|
||||
default:
|
||||
parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -1791,6 +1791,7 @@ void TShader::setUniformLocationBase(int base)
|
|||
void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); }
|
||||
void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlattenUniformArrays(flatten); }
|
||||
void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); }
|
||||
void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); }
|
||||
void TShader::setResourceSetBinding(const std::vector<std::string>& base) { intermediate->setResourceSetBinding(base); }
|
||||
void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); }
|
||||
|
||||
|
|
@ -1982,7 +1983,7 @@ const char* TProgram::getInfoDebugLog()
|
|||
|
||||
bool TProgram::buildReflection(int opts)
|
||||
{
|
||||
if (! linked || reflection)
|
||||
if (! linked || reflection != nullptr)
|
||||
return false;
|
||||
|
||||
int firstStage = EShLangVertex, lastStage = EShLangFragment;
|
||||
|
|
@ -2012,9 +2013,8 @@ bool TProgram::buildReflection(int opts)
|
|||
return true;
|
||||
}
|
||||
|
||||
unsigned TProgram::getLocalSize(int dim) const { return reflection->getLocalSize(dim); }
|
||||
int TProgram::getReflectionIndex(const char* name) const { return reflection->getIndex(name); }
|
||||
|
||||
unsigned TProgram::getLocalSize(int dim) const { return reflection->getLocalSize(dim); }
|
||||
int TProgram::getReflectionIndex(const char* name) const { return reflection->getIndex(name); }
|
||||
int TProgram::getNumUniformVariables() const { return reflection->getNumUniforms(); }
|
||||
const TObjectReflection& TProgram::getUniform(int index) const { return reflection->getUniform(index); }
|
||||
int TProgram::getNumUniformBlocks() const { return reflection->getNumUniformBlocks(); }
|
||||
|
|
@ -2029,8 +2029,7 @@ int TProgram::getNumBufferBlocks() const { return r
|
|||
const TObjectReflection& TProgram::getBufferBlock(int index) const { return reflection->getStorageBufferBlock(index); }
|
||||
int TProgram::getNumAtomicCounters() const { return reflection->getNumAtomicCounters(); }
|
||||
const TObjectReflection& TProgram::getAtomicCounter(int index) const { return reflection->getAtomicCounter(index); }
|
||||
|
||||
void TProgram::dumpReflection() { reflection->dump(); }
|
||||
void TProgram::dumpReflection() { if (reflection != nullptr) reflection->dump(); }
|
||||
|
||||
//
|
||||
// I/O mapping implementation.
|
||||
|
|
|
|||
|
|
@ -188,6 +188,7 @@ void TParseVersions::initializeExtensionBehavior()
|
|||
extensionBehavior[E_GL_ARB_post_depth_coverage] = EBhDisable;
|
||||
extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = EBhDisable;
|
||||
extensionBehavior[E_GL_ARB_fragment_shader_interlock] = EBhDisable;
|
||||
extensionBehavior[E_GL_ARB_shader_clock] = EBhDisable;
|
||||
|
||||
extensionBehavior[E_GL_KHR_shader_subgroup_basic] = EBhDisable;
|
||||
extensionBehavior[E_GL_KHR_shader_subgroup_vote] = EBhDisable;
|
||||
|
|
@ -211,6 +212,7 @@ void TParseVersions::initializeExtensionBehavior()
|
|||
extensionBehavior[E_GL_EXT_fragment_invocation_density] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_buffer_reference] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_buffer_reference2] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_demote_to_helper_invocation] = EBhDisable;
|
||||
|
||||
extensionBehavior[E_GL_EXT_shader_16bit_storage] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_shader_8bit_storage] = EBhDisable;
|
||||
|
|
@ -251,6 +253,7 @@ void TParseVersions::initializeExtensionBehavior()
|
|||
#endif
|
||||
|
||||
extensionBehavior[E_GL_NV_cooperative_matrix] = EBhDisable;
|
||||
extensionBehavior[E_GL_NV_shader_sm_builtins] = EBhDisable;
|
||||
|
||||
// AEP
|
||||
extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisable;
|
||||
|
|
@ -283,6 +286,7 @@ void TParseVersions::initializeExtensionBehavior()
|
|||
// EXT extensions
|
||||
extensionBehavior[E_GL_EXT_device_group] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_multiview] = EBhDisable;
|
||||
extensionBehavior[E_GL_EXT_shader_realtime_clock] = EBhDisable;
|
||||
|
||||
// OVR extensions
|
||||
extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
|
||||
|
|
@ -393,6 +397,7 @@ void TParseVersions::getPreamble(std::string& preamble)
|
|||
"#define GL_EXT_fragment_invocation_density 1\n"
|
||||
"#define GL_EXT_buffer_reference 1\n"
|
||||
"#define GL_EXT_buffer_reference2 1\n"
|
||||
"#define GL_EXT_demote_to_helper_invocation 1\n"
|
||||
|
||||
// GL_KHR_shader_subgroup
|
||||
"#define GL_KHR_shader_subgroup_basic 1\n"
|
||||
|
|
@ -405,6 +410,7 @@ void TParseVersions::getPreamble(std::string& preamble)
|
|||
"#define GL_KHR_shader_subgroup_quad 1\n"
|
||||
|
||||
"#define E_GL_EXT_shader_atomic_int64 1\n"
|
||||
"#define E_GL_EXT_shader_realtime_clock 1\n"
|
||||
|
||||
#ifdef AMD_EXTENSIONS
|
||||
"#define GL_AMD_shader_ballot 1\n"
|
||||
|
|
@ -459,6 +465,7 @@ void TParseVersions::getPreamble(std::string& preamble)
|
|||
preamble +=
|
||||
"#define GL_EXT_device_group 1\n"
|
||||
"#define GL_EXT_multiview 1\n"
|
||||
"#define GL_NV_shader_sm_builtins 1\n"
|
||||
;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ const char* const E_GL_ARB_shader_stencil_export = "GL_ARB_shader_stencil
|
|||
const char* const E_GL_ARB_post_depth_coverage = "GL_ARB_post_depth_coverage";
|
||||
const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array";
|
||||
const char* const E_GL_ARB_fragment_shader_interlock = "GL_ARB_fragment_shader_interlock";
|
||||
const char* const E_GL_ARB_shader_clock = "GL_ARB_shader_clock";
|
||||
|
||||
const char* const E_GL_KHR_shader_subgroup_basic = "GL_KHR_shader_subgroup_basic";
|
||||
const char* const E_GL_KHR_shader_subgroup_vote = "GL_KHR_shader_subgroup_vote";
|
||||
|
|
@ -173,6 +174,8 @@ const char* const E_GL_EXT_scalar_block_layout = "GL_EXT_scalar_blo
|
|||
const char* const E_GL_EXT_fragment_invocation_density = "GL_EXT_fragment_invocation_density";
|
||||
const char* const E_GL_EXT_buffer_reference = "GL_EXT_buffer_reference";
|
||||
const char* const E_GL_EXT_buffer_reference2 = "GL_EXT_buffer_reference2";
|
||||
const char* const E_GL_EXT_demote_to_helper_invocation = "GL_EXT_demote_to_helper_invocation";
|
||||
const char* const E_GL_EXT_shader_realtime_clock = "GL_EXT_shader_realtime_clock";
|
||||
|
||||
// Arrays of extensions for the above viewportEXTs duplications
|
||||
|
||||
|
|
@ -228,6 +231,7 @@ const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]);
|
|||
#endif
|
||||
|
||||
const char* const E_GL_NV_cooperative_matrix = "GL_NV_cooperative_matrix";
|
||||
const char* const E_GL_NV_shader_sm_builtins = "GL_NV_shader_sm_builtins";
|
||||
|
||||
// AEP
|
||||
const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a";
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
|
|||
%token <lex> ATTRIBUTE VARYING
|
||||
%token <lex> FLOAT16_T FLOAT FLOAT32_T DOUBLE FLOAT64_T
|
||||
%token <lex> CONST BOOL INT UINT INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T
|
||||
%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE
|
||||
%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE DEMOTE
|
||||
%token <lex> BVEC2 BVEC3 BVEC4
|
||||
%token <lex> IVEC2 IVEC3 IVEC4
|
||||
%token <lex> UVEC2 UVEC3 UVEC4
|
||||
|
|
@ -265,7 +265,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
|
|||
%type <interm.intermNode> declaration external_declaration
|
||||
%type <interm.intermNode> for_init_statement compound_statement_no_new_scope
|
||||
%type <interm.nodePair> selection_rest_statement for_rest_statement
|
||||
%type <interm.intermNode> iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped
|
||||
%type <interm.intermNode> iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped demote_statement
|
||||
%type <interm> single_declaration init_declarator_list
|
||||
|
||||
%type <interm> parameter_declaration parameter_declarator parameter_type_specifier
|
||||
|
|
@ -3416,6 +3416,15 @@ simple_statement
|
|||
| case_label { $$ = $1; }
|
||||
| iteration_statement { $$ = $1; }
|
||||
| jump_statement { $$ = $1; }
|
||||
| demote_statement { $$ = $1; }
|
||||
;
|
||||
|
||||
demote_statement
|
||||
: DEMOTE SEMICOLON {
|
||||
parseContext.requireStage($1.loc, EShLangFragment, "demote");
|
||||
parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
|
||||
$$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc);
|
||||
}
|
||||
;
|
||||
|
||||
compound_statement
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -76,380 +76,381 @@ extern int yydebug;
|
|||
CASE = 286,
|
||||
DEFAULT = 287,
|
||||
SUBROUTINE = 288,
|
||||
BVEC2 = 289,
|
||||
BVEC3 = 290,
|
||||
BVEC4 = 291,
|
||||
IVEC2 = 292,
|
||||
IVEC3 = 293,
|
||||
IVEC4 = 294,
|
||||
UVEC2 = 295,
|
||||
UVEC3 = 296,
|
||||
UVEC4 = 297,
|
||||
I64VEC2 = 298,
|
||||
I64VEC3 = 299,
|
||||
I64VEC4 = 300,
|
||||
U64VEC2 = 301,
|
||||
U64VEC3 = 302,
|
||||
U64VEC4 = 303,
|
||||
I32VEC2 = 304,
|
||||
I32VEC3 = 305,
|
||||
I32VEC4 = 306,
|
||||
U32VEC2 = 307,
|
||||
U32VEC3 = 308,
|
||||
U32VEC4 = 309,
|
||||
I16VEC2 = 310,
|
||||
I16VEC3 = 311,
|
||||
I16VEC4 = 312,
|
||||
U16VEC2 = 313,
|
||||
U16VEC3 = 314,
|
||||
U16VEC4 = 315,
|
||||
I8VEC2 = 316,
|
||||
I8VEC3 = 317,
|
||||
I8VEC4 = 318,
|
||||
U8VEC2 = 319,
|
||||
U8VEC3 = 320,
|
||||
U8VEC4 = 321,
|
||||
VEC2 = 322,
|
||||
VEC3 = 323,
|
||||
VEC4 = 324,
|
||||
MAT2 = 325,
|
||||
MAT3 = 326,
|
||||
MAT4 = 327,
|
||||
CENTROID = 328,
|
||||
IN = 329,
|
||||
OUT = 330,
|
||||
INOUT = 331,
|
||||
UNIFORM = 332,
|
||||
PATCH = 333,
|
||||
SAMPLE = 334,
|
||||
BUFFER = 335,
|
||||
SHARED = 336,
|
||||
NONUNIFORM = 337,
|
||||
PAYLOADNV = 338,
|
||||
PAYLOADINNV = 339,
|
||||
HITATTRNV = 340,
|
||||
CALLDATANV = 341,
|
||||
CALLDATAINNV = 342,
|
||||
COHERENT = 343,
|
||||
VOLATILE = 344,
|
||||
RESTRICT = 345,
|
||||
READONLY = 346,
|
||||
WRITEONLY = 347,
|
||||
DEVICECOHERENT = 348,
|
||||
QUEUEFAMILYCOHERENT = 349,
|
||||
WORKGROUPCOHERENT = 350,
|
||||
SUBGROUPCOHERENT = 351,
|
||||
NONPRIVATE = 352,
|
||||
DVEC2 = 353,
|
||||
DVEC3 = 354,
|
||||
DVEC4 = 355,
|
||||
DMAT2 = 356,
|
||||
DMAT3 = 357,
|
||||
DMAT4 = 358,
|
||||
F16VEC2 = 359,
|
||||
F16VEC3 = 360,
|
||||
F16VEC4 = 361,
|
||||
F16MAT2 = 362,
|
||||
F16MAT3 = 363,
|
||||
F16MAT4 = 364,
|
||||
F32VEC2 = 365,
|
||||
F32VEC3 = 366,
|
||||
F32VEC4 = 367,
|
||||
F32MAT2 = 368,
|
||||
F32MAT3 = 369,
|
||||
F32MAT4 = 370,
|
||||
F64VEC2 = 371,
|
||||
F64VEC3 = 372,
|
||||
F64VEC4 = 373,
|
||||
F64MAT2 = 374,
|
||||
F64MAT3 = 375,
|
||||
F64MAT4 = 376,
|
||||
NOPERSPECTIVE = 377,
|
||||
FLAT = 378,
|
||||
SMOOTH = 379,
|
||||
LAYOUT = 380,
|
||||
EXPLICITINTERPAMD = 381,
|
||||
PERVERTEXNV = 382,
|
||||
PERPRIMITIVENV = 383,
|
||||
PERVIEWNV = 384,
|
||||
PERTASKNV = 385,
|
||||
MAT2X2 = 386,
|
||||
MAT2X3 = 387,
|
||||
MAT2X4 = 388,
|
||||
MAT3X2 = 389,
|
||||
MAT3X3 = 390,
|
||||
MAT3X4 = 391,
|
||||
MAT4X2 = 392,
|
||||
MAT4X3 = 393,
|
||||
MAT4X4 = 394,
|
||||
DMAT2X2 = 395,
|
||||
DMAT2X3 = 396,
|
||||
DMAT2X4 = 397,
|
||||
DMAT3X2 = 398,
|
||||
DMAT3X3 = 399,
|
||||
DMAT3X4 = 400,
|
||||
DMAT4X2 = 401,
|
||||
DMAT4X3 = 402,
|
||||
DMAT4X4 = 403,
|
||||
F16MAT2X2 = 404,
|
||||
F16MAT2X3 = 405,
|
||||
F16MAT2X4 = 406,
|
||||
F16MAT3X2 = 407,
|
||||
F16MAT3X3 = 408,
|
||||
F16MAT3X4 = 409,
|
||||
F16MAT4X2 = 410,
|
||||
F16MAT4X3 = 411,
|
||||
F16MAT4X4 = 412,
|
||||
F32MAT2X2 = 413,
|
||||
F32MAT2X3 = 414,
|
||||
F32MAT2X4 = 415,
|
||||
F32MAT3X2 = 416,
|
||||
F32MAT3X3 = 417,
|
||||
F32MAT3X4 = 418,
|
||||
F32MAT4X2 = 419,
|
||||
F32MAT4X3 = 420,
|
||||
F32MAT4X4 = 421,
|
||||
F64MAT2X2 = 422,
|
||||
F64MAT2X3 = 423,
|
||||
F64MAT2X4 = 424,
|
||||
F64MAT3X2 = 425,
|
||||
F64MAT3X3 = 426,
|
||||
F64MAT3X4 = 427,
|
||||
F64MAT4X2 = 428,
|
||||
F64MAT4X3 = 429,
|
||||
F64MAT4X4 = 430,
|
||||
ATOMIC_UINT = 431,
|
||||
ACCSTRUCTNV = 432,
|
||||
FCOOPMATNV = 433,
|
||||
SAMPLER1D = 434,
|
||||
SAMPLER2D = 435,
|
||||
SAMPLER3D = 436,
|
||||
SAMPLERCUBE = 437,
|
||||
SAMPLER1DSHADOW = 438,
|
||||
SAMPLER2DSHADOW = 439,
|
||||
SAMPLERCUBESHADOW = 440,
|
||||
SAMPLER1DARRAY = 441,
|
||||
SAMPLER2DARRAY = 442,
|
||||
SAMPLER1DARRAYSHADOW = 443,
|
||||
SAMPLER2DARRAYSHADOW = 444,
|
||||
ISAMPLER1D = 445,
|
||||
ISAMPLER2D = 446,
|
||||
ISAMPLER3D = 447,
|
||||
ISAMPLERCUBE = 448,
|
||||
ISAMPLER1DARRAY = 449,
|
||||
ISAMPLER2DARRAY = 450,
|
||||
USAMPLER1D = 451,
|
||||
USAMPLER2D = 452,
|
||||
USAMPLER3D = 453,
|
||||
USAMPLERCUBE = 454,
|
||||
USAMPLER1DARRAY = 455,
|
||||
USAMPLER2DARRAY = 456,
|
||||
SAMPLER2DRECT = 457,
|
||||
SAMPLER2DRECTSHADOW = 458,
|
||||
ISAMPLER2DRECT = 459,
|
||||
USAMPLER2DRECT = 460,
|
||||
SAMPLERBUFFER = 461,
|
||||
ISAMPLERBUFFER = 462,
|
||||
USAMPLERBUFFER = 463,
|
||||
SAMPLERCUBEARRAY = 464,
|
||||
SAMPLERCUBEARRAYSHADOW = 465,
|
||||
ISAMPLERCUBEARRAY = 466,
|
||||
USAMPLERCUBEARRAY = 467,
|
||||
SAMPLER2DMS = 468,
|
||||
ISAMPLER2DMS = 469,
|
||||
USAMPLER2DMS = 470,
|
||||
SAMPLER2DMSARRAY = 471,
|
||||
ISAMPLER2DMSARRAY = 472,
|
||||
USAMPLER2DMSARRAY = 473,
|
||||
SAMPLEREXTERNALOES = 474,
|
||||
SAMPLEREXTERNAL2DY2YEXT = 475,
|
||||
F16SAMPLER1D = 476,
|
||||
F16SAMPLER2D = 477,
|
||||
F16SAMPLER3D = 478,
|
||||
F16SAMPLER2DRECT = 479,
|
||||
F16SAMPLERCUBE = 480,
|
||||
F16SAMPLER1DARRAY = 481,
|
||||
F16SAMPLER2DARRAY = 482,
|
||||
F16SAMPLERCUBEARRAY = 483,
|
||||
F16SAMPLERBUFFER = 484,
|
||||
F16SAMPLER2DMS = 485,
|
||||
F16SAMPLER2DMSARRAY = 486,
|
||||
F16SAMPLER1DSHADOW = 487,
|
||||
F16SAMPLER2DSHADOW = 488,
|
||||
F16SAMPLER1DARRAYSHADOW = 489,
|
||||
F16SAMPLER2DARRAYSHADOW = 490,
|
||||
F16SAMPLER2DRECTSHADOW = 491,
|
||||
F16SAMPLERCUBESHADOW = 492,
|
||||
F16SAMPLERCUBEARRAYSHADOW = 493,
|
||||
SAMPLER = 494,
|
||||
SAMPLERSHADOW = 495,
|
||||
TEXTURE1D = 496,
|
||||
TEXTURE2D = 497,
|
||||
TEXTURE3D = 498,
|
||||
TEXTURECUBE = 499,
|
||||
TEXTURE1DARRAY = 500,
|
||||
TEXTURE2DARRAY = 501,
|
||||
ITEXTURE1D = 502,
|
||||
ITEXTURE2D = 503,
|
||||
ITEXTURE3D = 504,
|
||||
ITEXTURECUBE = 505,
|
||||
ITEXTURE1DARRAY = 506,
|
||||
ITEXTURE2DARRAY = 507,
|
||||
UTEXTURE1D = 508,
|
||||
UTEXTURE2D = 509,
|
||||
UTEXTURE3D = 510,
|
||||
UTEXTURECUBE = 511,
|
||||
UTEXTURE1DARRAY = 512,
|
||||
UTEXTURE2DARRAY = 513,
|
||||
TEXTURE2DRECT = 514,
|
||||
ITEXTURE2DRECT = 515,
|
||||
UTEXTURE2DRECT = 516,
|
||||
TEXTUREBUFFER = 517,
|
||||
ITEXTUREBUFFER = 518,
|
||||
UTEXTUREBUFFER = 519,
|
||||
TEXTURECUBEARRAY = 520,
|
||||
ITEXTURECUBEARRAY = 521,
|
||||
UTEXTURECUBEARRAY = 522,
|
||||
TEXTURE2DMS = 523,
|
||||
ITEXTURE2DMS = 524,
|
||||
UTEXTURE2DMS = 525,
|
||||
TEXTURE2DMSARRAY = 526,
|
||||
ITEXTURE2DMSARRAY = 527,
|
||||
UTEXTURE2DMSARRAY = 528,
|
||||
F16TEXTURE1D = 529,
|
||||
F16TEXTURE2D = 530,
|
||||
F16TEXTURE3D = 531,
|
||||
F16TEXTURE2DRECT = 532,
|
||||
F16TEXTURECUBE = 533,
|
||||
F16TEXTURE1DARRAY = 534,
|
||||
F16TEXTURE2DARRAY = 535,
|
||||
F16TEXTURECUBEARRAY = 536,
|
||||
F16TEXTUREBUFFER = 537,
|
||||
F16TEXTURE2DMS = 538,
|
||||
F16TEXTURE2DMSARRAY = 539,
|
||||
SUBPASSINPUT = 540,
|
||||
SUBPASSINPUTMS = 541,
|
||||
ISUBPASSINPUT = 542,
|
||||
ISUBPASSINPUTMS = 543,
|
||||
USUBPASSINPUT = 544,
|
||||
USUBPASSINPUTMS = 545,
|
||||
F16SUBPASSINPUT = 546,
|
||||
F16SUBPASSINPUTMS = 547,
|
||||
IMAGE1D = 548,
|
||||
IIMAGE1D = 549,
|
||||
UIMAGE1D = 550,
|
||||
IMAGE2D = 551,
|
||||
IIMAGE2D = 552,
|
||||
UIMAGE2D = 553,
|
||||
IMAGE3D = 554,
|
||||
IIMAGE3D = 555,
|
||||
UIMAGE3D = 556,
|
||||
IMAGE2DRECT = 557,
|
||||
IIMAGE2DRECT = 558,
|
||||
UIMAGE2DRECT = 559,
|
||||
IMAGECUBE = 560,
|
||||
IIMAGECUBE = 561,
|
||||
UIMAGECUBE = 562,
|
||||
IMAGEBUFFER = 563,
|
||||
IIMAGEBUFFER = 564,
|
||||
UIMAGEBUFFER = 565,
|
||||
IMAGE1DARRAY = 566,
|
||||
IIMAGE1DARRAY = 567,
|
||||
UIMAGE1DARRAY = 568,
|
||||
IMAGE2DARRAY = 569,
|
||||
IIMAGE2DARRAY = 570,
|
||||
UIMAGE2DARRAY = 571,
|
||||
IMAGECUBEARRAY = 572,
|
||||
IIMAGECUBEARRAY = 573,
|
||||
UIMAGECUBEARRAY = 574,
|
||||
IMAGE2DMS = 575,
|
||||
IIMAGE2DMS = 576,
|
||||
UIMAGE2DMS = 577,
|
||||
IMAGE2DMSARRAY = 578,
|
||||
IIMAGE2DMSARRAY = 579,
|
||||
UIMAGE2DMSARRAY = 580,
|
||||
F16IMAGE1D = 581,
|
||||
F16IMAGE2D = 582,
|
||||
F16IMAGE3D = 583,
|
||||
F16IMAGE2DRECT = 584,
|
||||
F16IMAGECUBE = 585,
|
||||
F16IMAGE1DARRAY = 586,
|
||||
F16IMAGE2DARRAY = 587,
|
||||
F16IMAGECUBEARRAY = 588,
|
||||
F16IMAGEBUFFER = 589,
|
||||
F16IMAGE2DMS = 590,
|
||||
F16IMAGE2DMSARRAY = 591,
|
||||
STRUCT = 592,
|
||||
VOID = 593,
|
||||
WHILE = 594,
|
||||
IDENTIFIER = 595,
|
||||
TYPE_NAME = 596,
|
||||
FLOATCONSTANT = 597,
|
||||
DOUBLECONSTANT = 598,
|
||||
INT16CONSTANT = 599,
|
||||
UINT16CONSTANT = 600,
|
||||
INT32CONSTANT = 601,
|
||||
UINT32CONSTANT = 602,
|
||||
INTCONSTANT = 603,
|
||||
UINTCONSTANT = 604,
|
||||
INT64CONSTANT = 605,
|
||||
UINT64CONSTANT = 606,
|
||||
BOOLCONSTANT = 607,
|
||||
FLOAT16CONSTANT = 608,
|
||||
LEFT_OP = 609,
|
||||
RIGHT_OP = 610,
|
||||
INC_OP = 611,
|
||||
DEC_OP = 612,
|
||||
LE_OP = 613,
|
||||
GE_OP = 614,
|
||||
EQ_OP = 615,
|
||||
NE_OP = 616,
|
||||
AND_OP = 617,
|
||||
OR_OP = 618,
|
||||
XOR_OP = 619,
|
||||
MUL_ASSIGN = 620,
|
||||
DIV_ASSIGN = 621,
|
||||
ADD_ASSIGN = 622,
|
||||
MOD_ASSIGN = 623,
|
||||
LEFT_ASSIGN = 624,
|
||||
RIGHT_ASSIGN = 625,
|
||||
AND_ASSIGN = 626,
|
||||
XOR_ASSIGN = 627,
|
||||
OR_ASSIGN = 628,
|
||||
SUB_ASSIGN = 629,
|
||||
LEFT_PAREN = 630,
|
||||
RIGHT_PAREN = 631,
|
||||
LEFT_BRACKET = 632,
|
||||
RIGHT_BRACKET = 633,
|
||||
LEFT_BRACE = 634,
|
||||
RIGHT_BRACE = 635,
|
||||
DOT = 636,
|
||||
COMMA = 637,
|
||||
COLON = 638,
|
||||
EQUAL = 639,
|
||||
SEMICOLON = 640,
|
||||
BANG = 641,
|
||||
DASH = 642,
|
||||
TILDE = 643,
|
||||
PLUS = 644,
|
||||
STAR = 645,
|
||||
SLASH = 646,
|
||||
PERCENT = 647,
|
||||
LEFT_ANGLE = 648,
|
||||
RIGHT_ANGLE = 649,
|
||||
VERTICAL_BAR = 650,
|
||||
CARET = 651,
|
||||
AMPERSAND = 652,
|
||||
QUESTION = 653,
|
||||
INVARIANT = 654,
|
||||
PRECISE = 655,
|
||||
HIGH_PRECISION = 656,
|
||||
MEDIUM_PRECISION = 657,
|
||||
LOW_PRECISION = 658,
|
||||
PRECISION = 659,
|
||||
PACKED = 660,
|
||||
RESOURCE = 661,
|
||||
SUPERP = 662
|
||||
DEMOTE = 289,
|
||||
BVEC2 = 290,
|
||||
BVEC3 = 291,
|
||||
BVEC4 = 292,
|
||||
IVEC2 = 293,
|
||||
IVEC3 = 294,
|
||||
IVEC4 = 295,
|
||||
UVEC2 = 296,
|
||||
UVEC3 = 297,
|
||||
UVEC4 = 298,
|
||||
I64VEC2 = 299,
|
||||
I64VEC3 = 300,
|
||||
I64VEC4 = 301,
|
||||
U64VEC2 = 302,
|
||||
U64VEC3 = 303,
|
||||
U64VEC4 = 304,
|
||||
I32VEC2 = 305,
|
||||
I32VEC3 = 306,
|
||||
I32VEC4 = 307,
|
||||
U32VEC2 = 308,
|
||||
U32VEC3 = 309,
|
||||
U32VEC4 = 310,
|
||||
I16VEC2 = 311,
|
||||
I16VEC3 = 312,
|
||||
I16VEC4 = 313,
|
||||
U16VEC2 = 314,
|
||||
U16VEC3 = 315,
|
||||
U16VEC4 = 316,
|
||||
I8VEC2 = 317,
|
||||
I8VEC3 = 318,
|
||||
I8VEC4 = 319,
|
||||
U8VEC2 = 320,
|
||||
U8VEC3 = 321,
|
||||
U8VEC4 = 322,
|
||||
VEC2 = 323,
|
||||
VEC3 = 324,
|
||||
VEC4 = 325,
|
||||
MAT2 = 326,
|
||||
MAT3 = 327,
|
||||
MAT4 = 328,
|
||||
CENTROID = 329,
|
||||
IN = 330,
|
||||
OUT = 331,
|
||||
INOUT = 332,
|
||||
UNIFORM = 333,
|
||||
PATCH = 334,
|
||||
SAMPLE = 335,
|
||||
BUFFER = 336,
|
||||
SHARED = 337,
|
||||
NONUNIFORM = 338,
|
||||
PAYLOADNV = 339,
|
||||
PAYLOADINNV = 340,
|
||||
HITATTRNV = 341,
|
||||
CALLDATANV = 342,
|
||||
CALLDATAINNV = 343,
|
||||
COHERENT = 344,
|
||||
VOLATILE = 345,
|
||||
RESTRICT = 346,
|
||||
READONLY = 347,
|
||||
WRITEONLY = 348,
|
||||
DEVICECOHERENT = 349,
|
||||
QUEUEFAMILYCOHERENT = 350,
|
||||
WORKGROUPCOHERENT = 351,
|
||||
SUBGROUPCOHERENT = 352,
|
||||
NONPRIVATE = 353,
|
||||
DVEC2 = 354,
|
||||
DVEC3 = 355,
|
||||
DVEC4 = 356,
|
||||
DMAT2 = 357,
|
||||
DMAT3 = 358,
|
||||
DMAT4 = 359,
|
||||
F16VEC2 = 360,
|
||||
F16VEC3 = 361,
|
||||
F16VEC4 = 362,
|
||||
F16MAT2 = 363,
|
||||
F16MAT3 = 364,
|
||||
F16MAT4 = 365,
|
||||
F32VEC2 = 366,
|
||||
F32VEC3 = 367,
|
||||
F32VEC4 = 368,
|
||||
F32MAT2 = 369,
|
||||
F32MAT3 = 370,
|
||||
F32MAT4 = 371,
|
||||
F64VEC2 = 372,
|
||||
F64VEC3 = 373,
|
||||
F64VEC4 = 374,
|
||||
F64MAT2 = 375,
|
||||
F64MAT3 = 376,
|
||||
F64MAT4 = 377,
|
||||
NOPERSPECTIVE = 378,
|
||||
FLAT = 379,
|
||||
SMOOTH = 380,
|
||||
LAYOUT = 381,
|
||||
EXPLICITINTERPAMD = 382,
|
||||
PERVERTEXNV = 383,
|
||||
PERPRIMITIVENV = 384,
|
||||
PERVIEWNV = 385,
|
||||
PERTASKNV = 386,
|
||||
MAT2X2 = 387,
|
||||
MAT2X3 = 388,
|
||||
MAT2X4 = 389,
|
||||
MAT3X2 = 390,
|
||||
MAT3X3 = 391,
|
||||
MAT3X4 = 392,
|
||||
MAT4X2 = 393,
|
||||
MAT4X3 = 394,
|
||||
MAT4X4 = 395,
|
||||
DMAT2X2 = 396,
|
||||
DMAT2X3 = 397,
|
||||
DMAT2X4 = 398,
|
||||
DMAT3X2 = 399,
|
||||
DMAT3X3 = 400,
|
||||
DMAT3X4 = 401,
|
||||
DMAT4X2 = 402,
|
||||
DMAT4X3 = 403,
|
||||
DMAT4X4 = 404,
|
||||
F16MAT2X2 = 405,
|
||||
F16MAT2X3 = 406,
|
||||
F16MAT2X4 = 407,
|
||||
F16MAT3X2 = 408,
|
||||
F16MAT3X3 = 409,
|
||||
F16MAT3X4 = 410,
|
||||
F16MAT4X2 = 411,
|
||||
F16MAT4X3 = 412,
|
||||
F16MAT4X4 = 413,
|
||||
F32MAT2X2 = 414,
|
||||
F32MAT2X3 = 415,
|
||||
F32MAT2X4 = 416,
|
||||
F32MAT3X2 = 417,
|
||||
F32MAT3X3 = 418,
|
||||
F32MAT3X4 = 419,
|
||||
F32MAT4X2 = 420,
|
||||
F32MAT4X3 = 421,
|
||||
F32MAT4X4 = 422,
|
||||
F64MAT2X2 = 423,
|
||||
F64MAT2X3 = 424,
|
||||
F64MAT2X4 = 425,
|
||||
F64MAT3X2 = 426,
|
||||
F64MAT3X3 = 427,
|
||||
F64MAT3X4 = 428,
|
||||
F64MAT4X2 = 429,
|
||||
F64MAT4X3 = 430,
|
||||
F64MAT4X4 = 431,
|
||||
ATOMIC_UINT = 432,
|
||||
ACCSTRUCTNV = 433,
|
||||
FCOOPMATNV = 434,
|
||||
SAMPLER1D = 435,
|
||||
SAMPLER2D = 436,
|
||||
SAMPLER3D = 437,
|
||||
SAMPLERCUBE = 438,
|
||||
SAMPLER1DSHADOW = 439,
|
||||
SAMPLER2DSHADOW = 440,
|
||||
SAMPLERCUBESHADOW = 441,
|
||||
SAMPLER1DARRAY = 442,
|
||||
SAMPLER2DARRAY = 443,
|
||||
SAMPLER1DARRAYSHADOW = 444,
|
||||
SAMPLER2DARRAYSHADOW = 445,
|
||||
ISAMPLER1D = 446,
|
||||
ISAMPLER2D = 447,
|
||||
ISAMPLER3D = 448,
|
||||
ISAMPLERCUBE = 449,
|
||||
ISAMPLER1DARRAY = 450,
|
||||
ISAMPLER2DARRAY = 451,
|
||||
USAMPLER1D = 452,
|
||||
USAMPLER2D = 453,
|
||||
USAMPLER3D = 454,
|
||||
USAMPLERCUBE = 455,
|
||||
USAMPLER1DARRAY = 456,
|
||||
USAMPLER2DARRAY = 457,
|
||||
SAMPLER2DRECT = 458,
|
||||
SAMPLER2DRECTSHADOW = 459,
|
||||
ISAMPLER2DRECT = 460,
|
||||
USAMPLER2DRECT = 461,
|
||||
SAMPLERBUFFER = 462,
|
||||
ISAMPLERBUFFER = 463,
|
||||
USAMPLERBUFFER = 464,
|
||||
SAMPLERCUBEARRAY = 465,
|
||||
SAMPLERCUBEARRAYSHADOW = 466,
|
||||
ISAMPLERCUBEARRAY = 467,
|
||||
USAMPLERCUBEARRAY = 468,
|
||||
SAMPLER2DMS = 469,
|
||||
ISAMPLER2DMS = 470,
|
||||
USAMPLER2DMS = 471,
|
||||
SAMPLER2DMSARRAY = 472,
|
||||
ISAMPLER2DMSARRAY = 473,
|
||||
USAMPLER2DMSARRAY = 474,
|
||||
SAMPLEREXTERNALOES = 475,
|
||||
SAMPLEREXTERNAL2DY2YEXT = 476,
|
||||
F16SAMPLER1D = 477,
|
||||
F16SAMPLER2D = 478,
|
||||
F16SAMPLER3D = 479,
|
||||
F16SAMPLER2DRECT = 480,
|
||||
F16SAMPLERCUBE = 481,
|
||||
F16SAMPLER1DARRAY = 482,
|
||||
F16SAMPLER2DARRAY = 483,
|
||||
F16SAMPLERCUBEARRAY = 484,
|
||||
F16SAMPLERBUFFER = 485,
|
||||
F16SAMPLER2DMS = 486,
|
||||
F16SAMPLER2DMSARRAY = 487,
|
||||
F16SAMPLER1DSHADOW = 488,
|
||||
F16SAMPLER2DSHADOW = 489,
|
||||
F16SAMPLER1DARRAYSHADOW = 490,
|
||||
F16SAMPLER2DARRAYSHADOW = 491,
|
||||
F16SAMPLER2DRECTSHADOW = 492,
|
||||
F16SAMPLERCUBESHADOW = 493,
|
||||
F16SAMPLERCUBEARRAYSHADOW = 494,
|
||||
SAMPLER = 495,
|
||||
SAMPLERSHADOW = 496,
|
||||
TEXTURE1D = 497,
|
||||
TEXTURE2D = 498,
|
||||
TEXTURE3D = 499,
|
||||
TEXTURECUBE = 500,
|
||||
TEXTURE1DARRAY = 501,
|
||||
TEXTURE2DARRAY = 502,
|
||||
ITEXTURE1D = 503,
|
||||
ITEXTURE2D = 504,
|
||||
ITEXTURE3D = 505,
|
||||
ITEXTURECUBE = 506,
|
||||
ITEXTURE1DARRAY = 507,
|
||||
ITEXTURE2DARRAY = 508,
|
||||
UTEXTURE1D = 509,
|
||||
UTEXTURE2D = 510,
|
||||
UTEXTURE3D = 511,
|
||||
UTEXTURECUBE = 512,
|
||||
UTEXTURE1DARRAY = 513,
|
||||
UTEXTURE2DARRAY = 514,
|
||||
TEXTURE2DRECT = 515,
|
||||
ITEXTURE2DRECT = 516,
|
||||
UTEXTURE2DRECT = 517,
|
||||
TEXTUREBUFFER = 518,
|
||||
ITEXTUREBUFFER = 519,
|
||||
UTEXTUREBUFFER = 520,
|
||||
TEXTURECUBEARRAY = 521,
|
||||
ITEXTURECUBEARRAY = 522,
|
||||
UTEXTURECUBEARRAY = 523,
|
||||
TEXTURE2DMS = 524,
|
||||
ITEXTURE2DMS = 525,
|
||||
UTEXTURE2DMS = 526,
|
||||
TEXTURE2DMSARRAY = 527,
|
||||
ITEXTURE2DMSARRAY = 528,
|
||||
UTEXTURE2DMSARRAY = 529,
|
||||
F16TEXTURE1D = 530,
|
||||
F16TEXTURE2D = 531,
|
||||
F16TEXTURE3D = 532,
|
||||
F16TEXTURE2DRECT = 533,
|
||||
F16TEXTURECUBE = 534,
|
||||
F16TEXTURE1DARRAY = 535,
|
||||
F16TEXTURE2DARRAY = 536,
|
||||
F16TEXTURECUBEARRAY = 537,
|
||||
F16TEXTUREBUFFER = 538,
|
||||
F16TEXTURE2DMS = 539,
|
||||
F16TEXTURE2DMSARRAY = 540,
|
||||
SUBPASSINPUT = 541,
|
||||
SUBPASSINPUTMS = 542,
|
||||
ISUBPASSINPUT = 543,
|
||||
ISUBPASSINPUTMS = 544,
|
||||
USUBPASSINPUT = 545,
|
||||
USUBPASSINPUTMS = 546,
|
||||
F16SUBPASSINPUT = 547,
|
||||
F16SUBPASSINPUTMS = 548,
|
||||
IMAGE1D = 549,
|
||||
IIMAGE1D = 550,
|
||||
UIMAGE1D = 551,
|
||||
IMAGE2D = 552,
|
||||
IIMAGE2D = 553,
|
||||
UIMAGE2D = 554,
|
||||
IMAGE3D = 555,
|
||||
IIMAGE3D = 556,
|
||||
UIMAGE3D = 557,
|
||||
IMAGE2DRECT = 558,
|
||||
IIMAGE2DRECT = 559,
|
||||
UIMAGE2DRECT = 560,
|
||||
IMAGECUBE = 561,
|
||||
IIMAGECUBE = 562,
|
||||
UIMAGECUBE = 563,
|
||||
IMAGEBUFFER = 564,
|
||||
IIMAGEBUFFER = 565,
|
||||
UIMAGEBUFFER = 566,
|
||||
IMAGE1DARRAY = 567,
|
||||
IIMAGE1DARRAY = 568,
|
||||
UIMAGE1DARRAY = 569,
|
||||
IMAGE2DARRAY = 570,
|
||||
IIMAGE2DARRAY = 571,
|
||||
UIMAGE2DARRAY = 572,
|
||||
IMAGECUBEARRAY = 573,
|
||||
IIMAGECUBEARRAY = 574,
|
||||
UIMAGECUBEARRAY = 575,
|
||||
IMAGE2DMS = 576,
|
||||
IIMAGE2DMS = 577,
|
||||
UIMAGE2DMS = 578,
|
||||
IMAGE2DMSARRAY = 579,
|
||||
IIMAGE2DMSARRAY = 580,
|
||||
UIMAGE2DMSARRAY = 581,
|
||||
F16IMAGE1D = 582,
|
||||
F16IMAGE2D = 583,
|
||||
F16IMAGE3D = 584,
|
||||
F16IMAGE2DRECT = 585,
|
||||
F16IMAGECUBE = 586,
|
||||
F16IMAGE1DARRAY = 587,
|
||||
F16IMAGE2DARRAY = 588,
|
||||
F16IMAGECUBEARRAY = 589,
|
||||
F16IMAGEBUFFER = 590,
|
||||
F16IMAGE2DMS = 591,
|
||||
F16IMAGE2DMSARRAY = 592,
|
||||
STRUCT = 593,
|
||||
VOID = 594,
|
||||
WHILE = 595,
|
||||
IDENTIFIER = 596,
|
||||
TYPE_NAME = 597,
|
||||
FLOATCONSTANT = 598,
|
||||
DOUBLECONSTANT = 599,
|
||||
INT16CONSTANT = 600,
|
||||
UINT16CONSTANT = 601,
|
||||
INT32CONSTANT = 602,
|
||||
UINT32CONSTANT = 603,
|
||||
INTCONSTANT = 604,
|
||||
UINTCONSTANT = 605,
|
||||
INT64CONSTANT = 606,
|
||||
UINT64CONSTANT = 607,
|
||||
BOOLCONSTANT = 608,
|
||||
FLOAT16CONSTANT = 609,
|
||||
LEFT_OP = 610,
|
||||
RIGHT_OP = 611,
|
||||
INC_OP = 612,
|
||||
DEC_OP = 613,
|
||||
LE_OP = 614,
|
||||
GE_OP = 615,
|
||||
EQ_OP = 616,
|
||||
NE_OP = 617,
|
||||
AND_OP = 618,
|
||||
OR_OP = 619,
|
||||
XOR_OP = 620,
|
||||
MUL_ASSIGN = 621,
|
||||
DIV_ASSIGN = 622,
|
||||
ADD_ASSIGN = 623,
|
||||
MOD_ASSIGN = 624,
|
||||
LEFT_ASSIGN = 625,
|
||||
RIGHT_ASSIGN = 626,
|
||||
AND_ASSIGN = 627,
|
||||
XOR_ASSIGN = 628,
|
||||
OR_ASSIGN = 629,
|
||||
SUB_ASSIGN = 630,
|
||||
LEFT_PAREN = 631,
|
||||
RIGHT_PAREN = 632,
|
||||
LEFT_BRACKET = 633,
|
||||
RIGHT_BRACKET = 634,
|
||||
LEFT_BRACE = 635,
|
||||
RIGHT_BRACE = 636,
|
||||
DOT = 637,
|
||||
COMMA = 638,
|
||||
COLON = 639,
|
||||
EQUAL = 640,
|
||||
SEMICOLON = 641,
|
||||
BANG = 642,
|
||||
DASH = 643,
|
||||
TILDE = 644,
|
||||
PLUS = 645,
|
||||
STAR = 646,
|
||||
SLASH = 647,
|
||||
PERCENT = 648,
|
||||
LEFT_ANGLE = 649,
|
||||
RIGHT_ANGLE = 650,
|
||||
VERTICAL_BAR = 651,
|
||||
CARET = 652,
|
||||
AMPERSAND = 653,
|
||||
QUESTION = 654,
|
||||
INVARIANT = 655,
|
||||
PRECISE = 656,
|
||||
HIGH_PRECISION = 657,
|
||||
MEDIUM_PRECISION = 658,
|
||||
LOW_PRECISION = 659,
|
||||
PRECISION = 660,
|
||||
PACKED = 661,
|
||||
RESOURCE = 662,
|
||||
SUPERP = 663
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
@ -494,7 +495,7 @@ union YYSTYPE
|
|||
glslang::TArraySizes* typeParameters;
|
||||
} interm;
|
||||
|
||||
#line 498 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
|
||||
#line 499 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
|
||||
};
|
||||
|
||||
typedef union YYSTYPE YYSTYPE;
|
||||
|
|
|
|||
|
|
@ -1098,6 +1098,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
|
|||
case EOpCooperativeMatrixStore: out.debug << "Store cooperative matrix"; break;
|
||||
case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices"; break;
|
||||
|
||||
case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break;
|
||||
|
||||
default: out.debug.message(EPrefixError, "Bad aggregation op");
|
||||
}
|
||||
|
||||
|
|
@ -1392,6 +1394,7 @@ bool TOutputTraverser::visitBranch(TVisit /* visit*/, TIntermBranch* node)
|
|||
case EOpContinue: out.debug << "Branch: Continue"; break;
|
||||
case EOpReturn: out.debug << "Branch: Return"; break;
|
||||
case EOpCase: out.debug << "case: "; break;
|
||||
case EOpDemote: out.debug << "Demote"; break;
|
||||
case EOpDefault: out.debug << "default: "; break;
|
||||
default: out.debug << "Branch: Unknown Branch"; break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -266,7 +266,8 @@ public:
|
|||
needToLegalize(false),
|
||||
binaryDoubleOutput(false),
|
||||
usePhysicalStorageBuffer(false),
|
||||
uniformLocationBase(0)
|
||||
uniformLocationBase(0),
|
||||
nanMinMaxClamp(false)
|
||||
{
|
||||
localSize[0] = 1;
|
||||
localSize[1] = 1;
|
||||
|
|
@ -767,6 +768,9 @@ public:
|
|||
void setUniformLocationBase(int base) { uniformLocationBase = base; }
|
||||
int getUniformLocationBase() const { return uniformLocationBase; }
|
||||
|
||||
void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; }
|
||||
bool getNanMinMaxClamp() const { return nanMinMaxClamp; }
|
||||
|
||||
void setNeedsLegalization() { needToLegalize = true; }
|
||||
bool needsLegalization() const { return needToLegalize; }
|
||||
|
||||
|
|
@ -776,6 +780,27 @@ public:
|
|||
const char* const implicitThisName;
|
||||
const char* const implicitCounterName;
|
||||
|
||||
// Certain explicit conversions are allowed conditionally
|
||||
bool getArithemeticInt8Enabled() const {
|
||||
return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8);
|
||||
}
|
||||
bool getArithemeticInt16Enabled() const {
|
||||
return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
|
||||
#ifdef AMD_EXTENSIONS
|
||||
extensionRequested(E_GL_AMD_gpu_shader_int16) ||
|
||||
#endif
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16);
|
||||
}
|
||||
|
||||
bool getArithemeticFloat16Enabled() const {
|
||||
return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) ||
|
||||
#ifdef AMD_EXTENSIONS
|
||||
extensionRequested(E_GL_AMD_gpu_shader_half_float) ||
|
||||
#endif
|
||||
extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16);
|
||||
}
|
||||
|
||||
protected:
|
||||
TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
|
||||
void error(TInfoSink& infoSink, const char*);
|
||||
|
|
@ -900,6 +925,7 @@ protected:
|
|||
|
||||
std::unordered_map<std::string, int> uniformLocationOverrides;
|
||||
int uniformLocationBase;
|
||||
bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN
|
||||
|
||||
private:
|
||||
void operator=(TIntermediate&); // prevent assignments
|
||||
|
|
|
|||
|
|
@ -435,6 +435,7 @@ public:
|
|||
void setHlslIoMapping(bool hlslIoMap);
|
||||
void setFlattenUniformArrays(bool flatten);
|
||||
void setNoStorageFormat(bool useUnknownFormat);
|
||||
void setNanMinMaxClamp(bool nanMinMaxClamp);
|
||||
void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode);
|
||||
|
||||
// For setting up the environment (cleared to nothingness in the constructor).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue