|
@@ -1,8 +1,9 @@
|
|
|
//
|
|
|
// Copyright (C) 2002-2005 3Dlabs Inc. Ltd.
|
|
|
// Copyright (C) 2012-2016 LunarG, Inc.
|
|
|
-// Copyright (C) 2015-2018 Google, Inc.
|
|
|
+// Copyright (C) 2015-2020 Google, Inc.
|
|
|
// Copyright (C) 2017 ARM Limited.
|
|
|
+// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
|
|
|
//
|
|
|
// All rights reserved.
|
|
|
//
|
|
@@ -125,8 +126,6 @@ enum ArgClass {
|
|
|
};
|
|
|
// Mixtures of the above, to help the function tables
|
|
|
const ArgClass ClassV1FIOCV = (ArgClass)(ClassV1 | ClassFIO | ClassCV);
|
|
|
-const ArgClass ClassV1FOCV = (ArgClass)(ClassV1 | ClassFO | ClassCV);
|
|
|
-const ArgClass ClassV1CV = (ArgClass)(ClassV1 | ClassCV);
|
|
|
const ArgClass ClassBNS = (ArgClass)(ClassB | ClassNS);
|
|
|
const ArgClass ClassRSNS = (ArgClass)(ClassRS | ClassNS);
|
|
|
|
|
@@ -154,6 +153,11 @@ EProfile EDesktopProfile = static_cast<EProfile>(ENoProfile | ECoreProfile | ECo
|
|
|
{ EBadProfile } };
|
|
|
const Versioning* Es300Desktop130 = &Es300Desktop130Version[0];
|
|
|
|
|
|
+ const Versioning Es310Desktop420Version[] = { { EEsProfile, 0, 310, 0, nullptr },
|
|
|
+ { EDesktopProfile, 0, 420, 0, nullptr },
|
|
|
+ { EBadProfile } };
|
|
|
+ const Versioning* Es310Desktop420 = &Es310Desktop420Version[0];
|
|
|
+
|
|
|
const Versioning Es310Desktop430Version[] = { { EEsProfile, 0, 310, 0, nullptr },
|
|
|
{ EDesktopProfile, 0, 430, 0, nullptr },
|
|
|
{ EBadProfile } };
|
|
@@ -257,14 +261,14 @@ const BuiltInFunction BaseFunctions[] = {
|
|
|
{ EOpGreaterThanEqual, "greaterThanEqual", 2, TypeU, ClassBNS, Es300Desktop130 },
|
|
|
{ EOpVectorEqual, "equal", 2, TypeU, ClassBNS, Es300Desktop130 },
|
|
|
{ EOpVectorNotEqual, "notEqual", 2, TypeU, ClassBNS, Es300Desktop130 },
|
|
|
- { EOpAtomicAdd, "atomicAdd", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
|
|
|
- { EOpAtomicMin, "atomicMin", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
|
|
|
- { EOpAtomicMax, "atomicMax", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
|
|
|
- { EOpAtomicAnd, "atomicAnd", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
|
|
|
- { EOpAtomicOr, "atomicOr", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
|
|
|
- { EOpAtomicXor, "atomicXor", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
|
|
|
- { EOpAtomicExchange, "atomicExchange", 2, TypeIU, ClassV1FIOCV, Es310Desktop430 },
|
|
|
- { EOpAtomicCompSwap, "atomicCompSwap", 3, TypeIU, ClassV1FIOCV, Es310Desktop430 },
|
|
|
+ { EOpAtomicAdd, "atomicAdd", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 },
|
|
|
+ { EOpAtomicMin, "atomicMin", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 },
|
|
|
+ { EOpAtomicMax, "atomicMax", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 },
|
|
|
+ { EOpAtomicAnd, "atomicAnd", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 },
|
|
|
+ { EOpAtomicOr, "atomicOr", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 },
|
|
|
+ { EOpAtomicXor, "atomicXor", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 },
|
|
|
+ { EOpAtomicExchange, "atomicExchange", 2, TypeIU, ClassV1FIOCV, Es310Desktop420 },
|
|
|
+ { EOpAtomicCompSwap, "atomicCompSwap", 3, TypeIU, ClassV1FIOCV, Es310Desktop420 },
|
|
|
#ifndef GLSLANG_WEB
|
|
|
{ EOpMix, "mix", 3, TypeB, ClassRegular, Es310Desktop450 },
|
|
|
{ EOpMix, "mix", 3, TypeIU, ClassLB, Es310Desktop450 },
|
|
@@ -1263,7 +1267,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|
|
#endif
|
|
|
|
|
|
if ((profile == EEsProfile && version >= 300) ||
|
|
|
- (profile != EEsProfile && version >= 330)) {
|
|
|
+ (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
|
|
|
commonBuiltins.append(
|
|
|
"int floatBitsToInt(highp float value);"
|
|
|
"ivec2 floatBitsToInt(highp vec2 value);"
|
|
@@ -4079,10 +4083,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|
|
}
|
|
|
#ifndef GLSLANG_WEB
|
|
|
if ((profile != EEsProfile && version >= 420) || esBarrier) {
|
|
|
- commonBuiltins.append(
|
|
|
- "void memoryBarrierAtomicCounter();"
|
|
|
- "void memoryBarrierImage();"
|
|
|
- );
|
|
|
+ if (spvVersion.vulkan == 0) {
|
|
|
+ commonBuiltins.append("void memoryBarrierAtomicCounter();");
|
|
|
+ }
|
|
|
+ commonBuiltins.append("void memoryBarrierImage();");
|
|
|
}
|
|
|
if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
|
|
|
stageBuiltins[EShLangMeshNV].append(
|
|
@@ -4098,6 +4102,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|
|
commonBuiltins.append("void controlBarrier(int, int, int, int);\n"
|
|
|
"void memoryBarrier(int, int, int);\n");
|
|
|
|
|
|
+ commonBuiltins.append("void debugPrintfEXT();\n");
|
|
|
+
|
|
|
if (profile != EEsProfile && version >= 450) {
|
|
|
// coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
|
|
|
// adding it introduces undesirable tempArgs on the stack. What we want
|
|
@@ -4335,29 +4341,64 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|
|
"\n");
|
|
|
}
|
|
|
|
|
|
- // Builtins for GL_NV_ray_tracing
|
|
|
+ // Builtins for GL_NV_ray_tracing/GL_EXT_ray_tracing/GL_EXT_ray_query
|
|
|
if (profile != EEsProfile && version >= 460) {
|
|
|
- stageBuiltins[EShLangRayGenNV].append(
|
|
|
+ commonBuiltins.append("void rayQueryInitializeEXT(rayQueryEXT, accelerationStructureEXT, uint, uint, vec3, float, vec3, float);"
|
|
|
+ "void rayQueryTerminateEXT(rayQueryEXT);"
|
|
|
+ "void rayQueryGenerateIntersectionEXT(rayQueryEXT, float);"
|
|
|
+ "void rayQueryConfirmIntersectionEXT(rayQueryEXT);"
|
|
|
+ "bool rayQueryProceedEXT(rayQueryEXT);"
|
|
|
+ "uint rayQueryGetIntersectionTypeEXT(rayQueryEXT, bool);"
|
|
|
+ "float rayQueryGetRayTMinEXT(rayQueryEXT);"
|
|
|
+ "uint rayQueryGetRayFlagsEXT(rayQueryEXT);"
|
|
|
+ "vec3 rayQueryGetWorldRayOriginEXT(rayQueryEXT);"
|
|
|
+ "vec3 rayQueryGetWorldRayDirectionEXT(rayQueryEXT);"
|
|
|
+ "float rayQueryGetIntersectionTEXT(rayQueryEXT, bool);"
|
|
|
+ "int rayQueryGetIntersectionInstanceCustomIndexEXT(rayQueryEXT, bool);"
|
|
|
+ "int rayQueryGetIntersectionInstanceIdEXT(rayQueryEXT, bool);"
|
|
|
+ "uint rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQueryEXT, bool);"
|
|
|
+ "int rayQueryGetIntersectionGeometryIndexEXT(rayQueryEXT, bool);"
|
|
|
+ "int rayQueryGetIntersectionPrimitiveIndexEXT(rayQueryEXT, bool);"
|
|
|
+ "vec2 rayQueryGetIntersectionBarycentricsEXT(rayQueryEXT, bool);"
|
|
|
+ "bool rayQueryGetIntersectionFrontFaceEXT(rayQueryEXT, bool);"
|
|
|
+ "bool rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQueryEXT);"
|
|
|
+ "vec3 rayQueryGetIntersectionObjectRayDirectionEXT(rayQueryEXT, bool);"
|
|
|
+ "vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT, bool);"
|
|
|
+ "mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT, bool);"
|
|
|
+ "mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT, bool);"
|
|
|
+ "\n");
|
|
|
+
|
|
|
+ stageBuiltins[EShLangRayGen].append(
|
|
|
"void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
|
|
|
+ "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
|
|
|
"void executeCallableNV(uint, int);"
|
|
|
+ "void executeCallableEXT(uint, int);"
|
|
|
"\n");
|
|
|
- stageBuiltins[EShLangIntersectNV].append(
|
|
|
+ stageBuiltins[EShLangIntersect].append(
|
|
|
"bool reportIntersectionNV(float, uint);"
|
|
|
+ "bool reportIntersectionEXT(float, uint);"
|
|
|
"\n");
|
|
|
- stageBuiltins[EShLangAnyHitNV].append(
|
|
|
+ stageBuiltins[EShLangAnyHit].append(
|
|
|
"void ignoreIntersectionNV();"
|
|
|
+ "void ignoreIntersectionEXT();"
|
|
|
"void terminateRayNV();"
|
|
|
+ "void terminateRayEXT();"
|
|
|
"\n");
|
|
|
- stageBuiltins[EShLangClosestHitNV].append(
|
|
|
+ stageBuiltins[EShLangClosestHit].append(
|
|
|
"void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
|
|
|
+ "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
|
|
|
"void executeCallableNV(uint, int);"
|
|
|
+ "void executeCallableEXT(uint, int);"
|
|
|
"\n");
|
|
|
- stageBuiltins[EShLangMissNV].append(
|
|
|
+ stageBuiltins[EShLangMiss].append(
|
|
|
"void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
|
|
|
+ "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
|
|
|
"void executeCallableNV(uint, int);"
|
|
|
+ "void executeCallableEXT(uint, int);"
|
|
|
"\n");
|
|
|
- stageBuiltins[EShLangCallableNV].append(
|
|
|
+ stageBuiltins[EShLangCallable].append(
|
|
|
"void executeCallableNV(uint, int);"
|
|
|
+ "void executeCallableEXT(uint, int);"
|
|
|
"\n");
|
|
|
}
|
|
|
|
|
@@ -5406,100 +5447,160 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|
|
stageBuiltins[EShLangMeshNV] .append(computeSubgroupDecls);
|
|
|
stageBuiltins[EShLangTaskNV] .append(subgroupDecls);
|
|
|
stageBuiltins[EShLangTaskNV] .append(computeSubgroupDecls);
|
|
|
- stageBuiltins[EShLangRayGenNV] .append(subgroupDecls);
|
|
|
- stageBuiltins[EShLangIntersectNV] .append(subgroupDecls);
|
|
|
- stageBuiltins[EShLangAnyHitNV] .append(subgroupDecls);
|
|
|
- stageBuiltins[EShLangClosestHitNV] .append(subgroupDecls);
|
|
|
- stageBuiltins[EShLangMissNV] .append(subgroupDecls);
|
|
|
- stageBuiltins[EShLangCallableNV] .append(subgroupDecls);
|
|
|
+ stageBuiltins[EShLangRayGen] .append(subgroupDecls);
|
|
|
+ stageBuiltins[EShLangIntersect] .append(subgroupDecls);
|
|
|
+ stageBuiltins[EShLangAnyHit] .append(subgroupDecls);
|
|
|
+ stageBuiltins[EShLangClosestHit] .append(subgroupDecls);
|
|
|
+ stageBuiltins[EShLangMiss] .append(subgroupDecls);
|
|
|
+ stageBuiltins[EShLangCallable] .append(subgroupDecls);
|
|
|
}
|
|
|
|
|
|
- // GL_NV_ray_tracing
|
|
|
+ // GL_NV_ray_tracing/GL_EXT_ray_tracing
|
|
|
if (profile != EEsProfile && version >= 460) {
|
|
|
|
|
|
const char *constRayFlags =
|
|
|
"const uint gl_RayFlagsNoneNV = 0U;"
|
|
|
+ "const uint gl_RayFlagsNoneEXT = 0U;"
|
|
|
"const uint gl_RayFlagsOpaqueNV = 1U;"
|
|
|
+ "const uint gl_RayFlagsOpaqueEXT = 1U;"
|
|
|
"const uint gl_RayFlagsNoOpaqueNV = 2U;"
|
|
|
+ "const uint gl_RayFlagsNoOpaqueEXT = 2U;"
|
|
|
"const uint gl_RayFlagsTerminateOnFirstHitNV = 4U;"
|
|
|
+ "const uint gl_RayFlagsTerminateOnFirstHitEXT = 4U;"
|
|
|
"const uint gl_RayFlagsSkipClosestHitShaderNV = 8U;"
|
|
|
+ "const uint gl_RayFlagsSkipClosestHitShaderEXT = 8U;"
|
|
|
"const uint gl_RayFlagsCullBackFacingTrianglesNV = 16U;"
|
|
|
+ "const uint gl_RayFlagsCullBackFacingTrianglesEXT = 16U;"
|
|
|
"const uint gl_RayFlagsCullFrontFacingTrianglesNV = 32U;"
|
|
|
+ "const uint gl_RayFlagsCullFrontFacingTrianglesEXT = 32U;"
|
|
|
"const uint gl_RayFlagsCullOpaqueNV = 64U;"
|
|
|
+ "const uint gl_RayFlagsCullOpaqueEXT = 64U;"
|
|
|
"const uint gl_RayFlagsCullNoOpaqueNV = 128U;"
|
|
|
+ "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;"
|
|
|
+ "const uint gl_RayFlagsSkipTrianglesEXT = 256U;"
|
|
|
+ "const uint gl_RayFlagsSkipAABBEXT = 512U;"
|
|
|
+ "const uint gl_HitKindFrontFacingTriangleEXT = 254U;"
|
|
|
+ "const uint gl_HitKindBackFacingTriangleEXT = 255U;"
|
|
|
+ "\n";
|
|
|
+
|
|
|
+ const char *constRayQueryIntersection =
|
|
|
+ "const uint gl_RayQueryCandidateIntersectionEXT = 0U;"
|
|
|
+ "const uint gl_RayQueryCommittedIntersectionEXT = 1U;"
|
|
|
+ "const uint gl_RayQueryCommittedIntersectionNoneEXT = 0U;"
|
|
|
+ "const uint gl_RayQueryCommittedIntersectionTriangleEXT = 1U;"
|
|
|
+ "const uint gl_RayQueryCommittedIntersectionGeneratedEXT = 2U;"
|
|
|
+ "const uint gl_RayQueryCandidateIntersectionTriangleEXT = 0U;"
|
|
|
+ "const uint gl_RayQueryCandidateIntersectionAABBEXT = 1U;"
|
|
|
"\n";
|
|
|
+
|
|
|
const char *rayGenDecls =
|
|
|
"in uvec3 gl_LaunchIDNV;"
|
|
|
+ "in uvec3 gl_LaunchIDEXT;"
|
|
|
"in uvec3 gl_LaunchSizeNV;"
|
|
|
+ "in uvec3 gl_LaunchSizeEXT;"
|
|
|
"\n";
|
|
|
const char *intersectDecls =
|
|
|
"in uvec3 gl_LaunchIDNV;"
|
|
|
+ "in uvec3 gl_LaunchIDEXT;"
|
|
|
"in uvec3 gl_LaunchSizeNV;"
|
|
|
+ "in uvec3 gl_LaunchSizeEXT;"
|
|
|
"in int gl_PrimitiveID;"
|
|
|
"in int gl_InstanceID;"
|
|
|
"in int gl_InstanceCustomIndexNV;"
|
|
|
+ "in int gl_InstanceCustomIndexEXT;"
|
|
|
+ "in int gl_GeometryIndexEXT;"
|
|
|
"in vec3 gl_WorldRayOriginNV;"
|
|
|
+ "in vec3 gl_WorldRayOriginEXT;"
|
|
|
"in vec3 gl_WorldRayDirectionNV;"
|
|
|
+ "in vec3 gl_WorldRayDirectionEXT;"
|
|
|
"in vec3 gl_ObjectRayOriginNV;"
|
|
|
+ "in vec3 gl_ObjectRayOriginEXT;"
|
|
|
"in vec3 gl_ObjectRayDirectionNV;"
|
|
|
+ "in vec3 gl_ObjectRayDirectionEXT;"
|
|
|
"in float gl_RayTminNV;"
|
|
|
+ "in float gl_RayTminEXT;"
|
|
|
"in float gl_RayTmaxNV;"
|
|
|
+ "in float gl_RayTmaxEXT;"
|
|
|
"in mat4x3 gl_ObjectToWorldNV;"
|
|
|
+ "in mat4x3 gl_ObjectToWorldEXT;"
|
|
|
+ "in mat3x4 gl_ObjectToWorld3x4EXT;"
|
|
|
"in mat4x3 gl_WorldToObjectNV;"
|
|
|
+ "in mat4x3 gl_WorldToObjectEXT;"
|
|
|
+ "in mat3x4 gl_WorldToObject3x4EXT;"
|
|
|
"in uint gl_IncomingRayFlagsNV;"
|
|
|
+ "in uint gl_IncomingRayFlagsEXT;"
|
|
|
"\n";
|
|
|
const char *hitDecls =
|
|
|
"in uvec3 gl_LaunchIDNV;"
|
|
|
+ "in uvec3 gl_LaunchIDEXT;"
|
|
|
"in uvec3 gl_LaunchSizeNV;"
|
|
|
+ "in uvec3 gl_LaunchSizeEXT;"
|
|
|
"in int gl_PrimitiveID;"
|
|
|
"in int gl_InstanceID;"
|
|
|
"in int gl_InstanceCustomIndexNV;"
|
|
|
+ "in int gl_InstanceCustomIndexEXT;"
|
|
|
+ "in int gl_GeometryIndexEXT;"
|
|
|
"in vec3 gl_WorldRayOriginNV;"
|
|
|
+ "in vec3 gl_WorldRayOriginEXT;"
|
|
|
"in vec3 gl_WorldRayDirectionNV;"
|
|
|
+ "in vec3 gl_WorldRayDirectionEXT;"
|
|
|
"in vec3 gl_ObjectRayOriginNV;"
|
|
|
+ "in vec3 gl_ObjectRayOriginEXT;"
|
|
|
"in vec3 gl_ObjectRayDirectionNV;"
|
|
|
+ "in vec3 gl_ObjectRayDirectionEXT;"
|
|
|
"in float gl_RayTminNV;"
|
|
|
+ "in float gl_RayTminEXT;"
|
|
|
"in float gl_RayTmaxNV;"
|
|
|
+ "in float gl_RayTmaxEXT;"
|
|
|
"in float gl_HitTNV;"
|
|
|
+ "in float gl_HitTEXT;"
|
|
|
"in uint gl_HitKindNV;"
|
|
|
+ "in uint gl_HitKindEXT;"
|
|
|
"in mat4x3 gl_ObjectToWorldNV;"
|
|
|
+ "in mat4x3 gl_ObjectToWorldEXT;"
|
|
|
+ "in mat3x4 gl_ObjectToWorld3x4EXT;"
|
|
|
"in mat4x3 gl_WorldToObjectNV;"
|
|
|
+ "in mat4x3 gl_WorldToObjectEXT;"
|
|
|
+ "in mat3x4 gl_WorldToObject3x4EXT;"
|
|
|
"in uint gl_IncomingRayFlagsNV;"
|
|
|
+ "in uint gl_IncomingRayFlagsEXT;"
|
|
|
"\n";
|
|
|
const char *missDecls =
|
|
|
"in uvec3 gl_LaunchIDNV;"
|
|
|
+ "in uvec3 gl_LaunchIDEXT;"
|
|
|
"in uvec3 gl_LaunchSizeNV;"
|
|
|
+ "in uvec3 gl_LaunchSizeEXT;"
|
|
|
"in vec3 gl_WorldRayOriginNV;"
|
|
|
+ "in vec3 gl_WorldRayOriginEXT;"
|
|
|
"in vec3 gl_WorldRayDirectionNV;"
|
|
|
+ "in vec3 gl_WorldRayDirectionEXT;"
|
|
|
"in vec3 gl_ObjectRayOriginNV;"
|
|
|
"in vec3 gl_ObjectRayDirectionNV;"
|
|
|
"in float gl_RayTminNV;"
|
|
|
+ "in float gl_RayTminEXT;"
|
|
|
"in float gl_RayTmaxNV;"
|
|
|
+ "in float gl_RayTmaxEXT;"
|
|
|
"in uint gl_IncomingRayFlagsNV;"
|
|
|
+ "in uint gl_IncomingRayFlagsEXT;"
|
|
|
"\n";
|
|
|
|
|
|
const char *callableDecls =
|
|
|
"in uvec3 gl_LaunchIDNV;"
|
|
|
+ "in uvec3 gl_LaunchIDEXT;"
|
|
|
"in uvec3 gl_LaunchSizeNV;"
|
|
|
+ "in uvec3 gl_LaunchSizeEXT;"
|
|
|
"\n";
|
|
|
|
|
|
- stageBuiltins[EShLangRayGenNV].append(rayGenDecls);
|
|
|
- stageBuiltins[EShLangRayGenNV].append(constRayFlags);
|
|
|
-
|
|
|
- stageBuiltins[EShLangIntersectNV].append(intersectDecls);
|
|
|
- stageBuiltins[EShLangIntersectNV].append(constRayFlags);
|
|
|
-
|
|
|
- stageBuiltins[EShLangAnyHitNV].append(hitDecls);
|
|
|
- stageBuiltins[EShLangAnyHitNV].append(constRayFlags);
|
|
|
|
|
|
- stageBuiltins[EShLangClosestHitNV].append(hitDecls);
|
|
|
- stageBuiltins[EShLangClosestHitNV].append(constRayFlags);
|
|
|
+ commonBuiltins.append(constRayQueryIntersection);
|
|
|
+ commonBuiltins.append(constRayFlags);
|
|
|
|
|
|
- stageBuiltins[EShLangMissNV].append(missDecls);
|
|
|
- stageBuiltins[EShLangMissNV].append(constRayFlags);
|
|
|
-
|
|
|
- stageBuiltins[EShLangCallableNV].append(callableDecls);
|
|
|
- stageBuiltins[EShLangCallableNV].append(constRayFlags);
|
|
|
+ stageBuiltins[EShLangRayGen].append(rayGenDecls);
|
|
|
+ stageBuiltins[EShLangIntersect].append(intersectDecls);
|
|
|
+ stageBuiltins[EShLangAnyHit].append(hitDecls);
|
|
|
+ stageBuiltins[EShLangClosestHit].append(hitDecls);
|
|
|
+ stageBuiltins[EShLangMiss].append(missDecls);
|
|
|
+ stageBuiltins[EShLangCallable].append(callableDecls);
|
|
|
|
|
|
}
|
|
|
if ((profile != EEsProfile && version >= 140)) {
|
|
@@ -5507,11 +5608,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|
|
"in highp int gl_DeviceIndex;" // GL_EXT_device_group
|
|
|
"\n";
|
|
|
|
|
|
- stageBuiltins[EShLangRayGenNV].append(deviceIndex);
|
|
|
- stageBuiltins[EShLangIntersectNV].append(deviceIndex);
|
|
|
- stageBuiltins[EShLangAnyHitNV].append(deviceIndex);
|
|
|
- stageBuiltins[EShLangClosestHitNV].append(deviceIndex);
|
|
|
- stageBuiltins[EShLangMissNV].append(deviceIndex);
|
|
|
+ stageBuiltins[EShLangRayGen].append(deviceIndex);
|
|
|
+ stageBuiltins[EShLangIntersect].append(deviceIndex);
|
|
|
+ stageBuiltins[EShLangAnyHit].append(deviceIndex);
|
|
|
+ stageBuiltins[EShLangClosestHit].append(deviceIndex);
|
|
|
+ stageBuiltins[EShLangMiss].append(deviceIndex);
|
|
|
}
|
|
|
|
|
|
if (version >= 300 /* both ES and non-ES */) {
|
|
@@ -5527,6 +5628,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
|
|
|
commonBuiltins.append("const int gl_ScopeSubgroup = 3;\n");
|
|
|
commonBuiltins.append("const int gl_ScopeInvocation = 4;\n");
|
|
|
commonBuiltins.append("const int gl_ScopeQueueFamily = 5;\n");
|
|
|
+ commonBuiltins.append("const int gl_ScopeShaderCallEXT = 6;\n");
|
|
|
|
|
|
commonBuiltins.append("const int gl_SemanticsRelaxed = 0x0;\n");
|
|
|
commonBuiltins.append("const int gl_SemanticsAcquire = 0x2;\n");
|
|
@@ -5723,7 +5825,7 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
|
|
|
return;
|
|
|
#endif
|
|
|
|
|
|
- if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 430)))
|
|
|
+ if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 420)))
|
|
|
return;
|
|
|
|
|
|
if (profile == EEsProfile)
|
|
@@ -6639,6 +6741,23 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if (version >= 320) {
|
|
|
+ // tessellation
|
|
|
+
|
|
|
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlImageUniforms = %d;", resources.maxTessControlImageUniforms);
|
|
|
+ s.append(builtInConstant);
|
|
|
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationImageUniforms = %d;", resources.maxTessEvaluationImageUniforms);
|
|
|
+ s.append(builtInConstant);
|
|
|
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounters = %d;", resources.maxTessControlAtomicCounters);
|
|
|
+ s.append(builtInConstant);
|
|
|
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounters = %d;", resources.maxTessEvaluationAtomicCounters);
|
|
|
+ s.append(builtInConstant);
|
|
|
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounterBuffers = %d;", resources.maxTessControlAtomicCounterBuffers);
|
|
|
+ s.append(builtInConstant);
|
|
|
+ snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounterBuffers = %d;", resources.maxTessEvaluationAtomicCounterBuffers);
|
|
|
+ s.append(builtInConstant);
|
|
|
+ }
|
|
|
+
|
|
|
} else {
|
|
|
// non-ES profile
|
|
|
|
|
@@ -7451,6 +7570,34 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|
|
BuiltInVariable("gl_FragStencilRefARB", EbvFragStencilRef, symbolTable);
|
|
|
}
|
|
|
|
|
|
+ if (profile != EEsProfile && version >= 460) {
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryInitializeEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryTerminateEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGenerateIntersectionEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryConfirmIntersectionEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryProceedEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionTypeEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionTEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetRayFlagsEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetRayTMinEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceCustomIndexEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceIdEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionGeometryIndexEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionPrimitiveIndexEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionBarycentricsEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionFrontFaceEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionCandidateAABBOpaqueEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayDirectionEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayOriginEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectToWorldEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetIntersectionWorldToObjectEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetWorldRayOriginEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT", 1, &E_GL_EXT_ray_query);
|
|
|
+ symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT", 1, &E_GL_EXT_ray_flags_primitive_culling);
|
|
|
+ symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT", 1, &E_GL_EXT_ray_flags_primitive_culling);
|
|
|
+ }
|
|
|
+
|
|
|
if ((profile != EEsProfile && version >= 130) ||
|
|
|
(profile == EEsProfile && version >= 310)) {
|
|
|
BuiltInVariable("gl_SampleID", EbvSampleId, symbolTable);
|
|
@@ -7710,6 +7857,29 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|
|
symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
|
|
|
}
|
|
|
|
|
|
+ if (profile != EEsProfile && version < 330 ) {
|
|
|
+ symbolTable.setFunctionExtensions("floatBitsToInt", 1, &E_GL_ARB_shader_bit_encoding);
|
|
|
+ symbolTable.setFunctionExtensions("floatBitsToUint", 1, &E_GL_ARB_shader_bit_encoding);
|
|
|
+ symbolTable.setFunctionExtensions("intBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
|
|
|
+ symbolTable.setFunctionExtensions("uintBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (profile != EEsProfile && version < 430 ) {
|
|
|
+ symbolTable.setFunctionExtensions("imageSize", 1, &E_GL_ARB_shader_image_size);
|
|
|
+ }
|
|
|
+
|
|
|
+ // GL_ARB_shader_storage_buffer_object
|
|
|
+ if (profile != EEsProfile && version < 430 ) {
|
|
|
+ symbolTable.setFunctionExtensions("atomicAdd", 1, &E_GL_ARB_shader_storage_buffer_object);
|
|
|
+ symbolTable.setFunctionExtensions("atomicMin", 1, &E_GL_ARB_shader_storage_buffer_object);
|
|
|
+ symbolTable.setFunctionExtensions("atomicMax", 1, &E_GL_ARB_shader_storage_buffer_object);
|
|
|
+ symbolTable.setFunctionExtensions("atomicAnd", 1, &E_GL_ARB_shader_storage_buffer_object);
|
|
|
+ symbolTable.setFunctionExtensions("atomicOr", 1, &E_GL_ARB_shader_storage_buffer_object);
|
|
|
+ symbolTable.setFunctionExtensions("atomicXor", 1, &E_GL_ARB_shader_storage_buffer_object);
|
|
|
+ symbolTable.setFunctionExtensions("atomicExchange", 1, &E_GL_ARB_shader_storage_buffer_object);
|
|
|
+ symbolTable.setFunctionExtensions("atomicCompSwap", 1, &E_GL_ARB_shader_storage_buffer_object);
|
|
|
+ }
|
|
|
+
|
|
|
symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
|
|
|
BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
|
|
|
symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
|
|
@@ -7922,6 +8092,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|
|
}
|
|
|
|
|
|
symbolTable.setFunctionExtensions("controlBarrier", 1, &E_GL_KHR_memory_scope_semantics);
|
|
|
+ symbolTable.setFunctionExtensions("debugPrintfEXT", 1, &E_GL_EXT_debug_printf);
|
|
|
|
|
|
// GL_ARB_shader_ballot
|
|
|
if (profile != EEsProfile) {
|
|
@@ -8011,49 +8182,97 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|
|
break;
|
|
|
|
|
|
#ifndef GLSLANG_WEB
|
|
|
- case EShLangRayGenNV:
|
|
|
- case EShLangIntersectNV:
|
|
|
- case EShLangAnyHitNV:
|
|
|
- case EShLangClosestHitNV:
|
|
|
- case EShLangMissNV:
|
|
|
- case EShLangCallableNV:
|
|
|
+ case EShLangRayGen:
|
|
|
+ case EShLangIntersect:
|
|
|
+ case EShLangAnyHit:
|
|
|
+ case EShLangClosestHit:
|
|
|
+ case EShLangMiss:
|
|
|
+ case EShLangCallable:
|
|
|
if (profile != EEsProfile && version >= 460) {
|
|
|
+ const char *rtexts[] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
|
|
|
symbolTable.setVariableExtensions("gl_LaunchIDNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_LaunchIDEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_LaunchSizeNV", 1, &E_GL_NV_ray_tracing);
|
|
|
- symbolTable.setVariableExtensions("gl_PrimitiveID", 1, &E_GL_NV_ray_tracing);
|
|
|
- symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_LaunchSizeEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_PrimitiveID", 2, rtexts);
|
|
|
+ symbolTable.setVariableExtensions("gl_InstanceID", 2, rtexts);
|
|
|
symbolTable.setVariableExtensions("gl_InstanceCustomIndexNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_InstanceCustomIndexEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_GeometryIndexEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_WorldRayOriginNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_WorldRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_WorldRayDirectionNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_WorldRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_ObjectRayOriginNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_ObjectRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_ObjectRayDirectionNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_ObjectRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_RayTminNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_HitKindEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_ObjectToWorldNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_ObjectToWorldEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_ObjectToWorld3x4EXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_WorldToObjectNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_WorldToObjectEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_WorldToObject3x4EXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
symbolTable.setVariableExtensions("gl_IncomingRayFlagsNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setVariableExtensions("gl_IncomingRayFlagsEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
|
|
|
symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
|
|
|
|
|
|
- BuiltInVariable("gl_LaunchIDNV", EbvLaunchIdNV, symbolTable);
|
|
|
- BuiltInVariable("gl_LaunchSizeNV", EbvLaunchSizeNV, symbolTable);
|
|
|
- BuiltInVariable("gl_PrimitiveID", EbvPrimitiveId, symbolTable);
|
|
|
- BuiltInVariable("gl_InstanceID", EbvInstanceId, symbolTable);
|
|
|
- BuiltInVariable("gl_InstanceCustomIndexNV", EbvInstanceCustomIndexNV,symbolTable);
|
|
|
- BuiltInVariable("gl_WorldRayOriginNV", EbvWorldRayOriginNV, symbolTable);
|
|
|
- BuiltInVariable("gl_WorldRayDirectionNV", EbvWorldRayDirectionNV, symbolTable);
|
|
|
- BuiltInVariable("gl_ObjectRayOriginNV", EbvObjectRayOriginNV, symbolTable);
|
|
|
- BuiltInVariable("gl_ObjectRayDirectionNV", EbvObjectRayDirectionNV, symbolTable);
|
|
|
- BuiltInVariable("gl_RayTminNV", EbvRayTminNV, symbolTable);
|
|
|
- BuiltInVariable("gl_RayTmaxNV", EbvRayTmaxNV, symbolTable);
|
|
|
- BuiltInVariable("gl_HitTNV", EbvHitTNV, symbolTable);
|
|
|
- BuiltInVariable("gl_HitKindNV", EbvHitKindNV, symbolTable);
|
|
|
- BuiltInVariable("gl_ObjectToWorldNV", EbvObjectToWorldNV, symbolTable);
|
|
|
- BuiltInVariable("gl_WorldToObjectNV", EbvWorldToObjectNV, symbolTable);
|
|
|
- BuiltInVariable("gl_IncomingRayFlagsNV", EbvIncomingRayFlagsNV, symbolTable);
|
|
|
- BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
|
|
|
+
|
|
|
+ symbolTable.setFunctionExtensions("traceNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("traceRayEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("reportIntersectionNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("reportIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("ignoreIntersectionNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("ignoreIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("terminateRayNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("terminateRayEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing);
|
|
|
+ symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing);
|
|
|
+
|
|
|
+
|
|
|
+ BuiltInVariable("gl_LaunchIDNV", EbvLaunchId, symbolTable);
|
|
|
+ BuiltInVariable("gl_LaunchIDEXT", EbvLaunchId, symbolTable);
|
|
|
+ BuiltInVariable("gl_LaunchSizeNV", EbvLaunchSize, symbolTable);
|
|
|
+ BuiltInVariable("gl_LaunchSizeEXT", EbvLaunchSize, symbolTable);
|
|
|
+ BuiltInVariable("gl_PrimitiveID", EbvPrimitiveId, symbolTable);
|
|
|
+ BuiltInVariable("gl_InstanceID", EbvInstanceId, symbolTable);
|
|
|
+ BuiltInVariable("gl_InstanceCustomIndexNV", EbvInstanceCustomIndex,symbolTable);
|
|
|
+ BuiltInVariable("gl_InstanceCustomIndexEXT", EbvInstanceCustomIndex,symbolTable);
|
|
|
+ BuiltInVariable("gl_GeometryIndexEXT", EbvGeometryIndex, symbolTable);
|
|
|
+ BuiltInVariable("gl_WorldRayOriginNV", EbvWorldRayOrigin, symbolTable);
|
|
|
+ BuiltInVariable("gl_WorldRayOriginEXT", EbvWorldRayOrigin, symbolTable);
|
|
|
+ BuiltInVariable("gl_WorldRayDirectionNV", EbvWorldRayDirection, symbolTable);
|
|
|
+ BuiltInVariable("gl_WorldRayDirectionEXT", EbvWorldRayDirection, symbolTable);
|
|
|
+ BuiltInVariable("gl_ObjectRayOriginNV", EbvObjectRayOrigin, symbolTable);
|
|
|
+ BuiltInVariable("gl_ObjectRayOriginEXT", EbvObjectRayOrigin, symbolTable);
|
|
|
+ BuiltInVariable("gl_ObjectRayDirectionNV", EbvObjectRayDirection, symbolTable);
|
|
|
+ BuiltInVariable("gl_ObjectRayDirectionEXT", EbvObjectRayDirection, symbolTable);
|
|
|
+ BuiltInVariable("gl_RayTminNV", EbvRayTmin, symbolTable);
|
|
|
+ BuiltInVariable("gl_RayTminEXT", EbvRayTmin, symbolTable);
|
|
|
+ BuiltInVariable("gl_RayTmaxNV", EbvRayTmax, symbolTable);
|
|
|
+ BuiltInVariable("gl_RayTmaxEXT", EbvRayTmax, symbolTable);
|
|
|
+ BuiltInVariable("gl_HitTNV", EbvHitT, symbolTable);
|
|
|
+ BuiltInVariable("gl_HitTEXT", EbvHitT, symbolTable);
|
|
|
+ BuiltInVariable("gl_HitKindNV", EbvHitKind, symbolTable);
|
|
|
+ BuiltInVariable("gl_HitKindEXT", EbvHitKind, symbolTable);
|
|
|
+ BuiltInVariable("gl_ObjectToWorldNV", EbvObjectToWorld, symbolTable);
|
|
|
+ BuiltInVariable("gl_ObjectToWorldEXT", EbvObjectToWorld, symbolTable);
|
|
|
+ BuiltInVariable("gl_ObjectToWorld3x4EXT", EbvObjectToWorld3x4, symbolTable);
|
|
|
+ BuiltInVariable("gl_WorldToObjectNV", EbvWorldToObject, symbolTable);
|
|
|
+ BuiltInVariable("gl_WorldToObjectEXT", EbvWorldToObject, symbolTable);
|
|
|
+ BuiltInVariable("gl_WorldToObject3x4EXT", EbvWorldToObject3x4, symbolTable);
|
|
|
+ BuiltInVariable("gl_IncomingRayFlagsNV", EbvIncomingRayFlags, symbolTable);
|
|
|
+ BuiltInVariable("gl_IncomingRayFlagsEXT", EbvIncomingRayFlags, symbolTable);
|
|
|
+ BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
|
|
|
|
|
|
// GL_ARB_shader_ballot
|
|
|
symbolTable.setVariableExtensions("gl_SubGroupSizeARB", 1, &E_GL_ARB_shader_ballot);
|
|
@@ -8470,6 +8689,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|
|
symbolTable.relateToOperator("average", EOpAverage);
|
|
|
symbolTable.relateToOperator("averageRounded", EOpAverageRounded);
|
|
|
symbolTable.relateToOperator("multiply32x16", EOpMul32x16);
|
|
|
+ symbolTable.relateToOperator("debugPrintfEXT", EOpDebugPrintf);
|
|
|
+
|
|
|
|
|
|
if (PureOperatorBuiltins) {
|
|
|
symbolTable.relateToOperator("imageSize", EOpImageQuerySize);
|
|
@@ -8768,6 +8989,33 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|
|
symbolTable.relateToOperator("dFdyCoarse", EOpDPdyCoarse);
|
|
|
symbolTable.relateToOperator("fwidthCoarse", EOpFwidthCoarse);
|
|
|
}
|
|
|
+
|
|
|
+ if (profile != EEsProfile && version >= 460) {
|
|
|
+ symbolTable.relateToOperator("rayQueryInitializeEXT", EOpRayQueryInitialize);
|
|
|
+ symbolTable.relateToOperator("rayQueryTerminateEXT", EOpRayQueryTerminate);
|
|
|
+ symbolTable.relateToOperator("rayQueryGenerateIntersectionEXT", EOpRayQueryGenerateIntersection);
|
|
|
+ symbolTable.relateToOperator("rayQueryConfirmIntersectionEXT", EOpRayQueryConfirmIntersection);
|
|
|
+ symbolTable.relateToOperator("rayQueryProceedEXT", EOpRayQueryProceed);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionTypeEXT", EOpRayQueryGetIntersectionType);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetRayTMinEXT", EOpRayQueryGetRayTMin);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetRayFlagsEXT", EOpRayQueryGetRayFlags);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionTEXT", EOpRayQueryGetIntersectionT);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionInstanceCustomIndexEXT", EOpRayQueryGetIntersectionInstanceCustomIndex);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionInstanceIdEXT", EOpRayQueryGetIntersectionInstanceId);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT", EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionGeometryIndexEXT", EOpRayQueryGetIntersectionGeometryIndex);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionPrimitiveIndexEXT", EOpRayQueryGetIntersectionPrimitiveIndex);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionBarycentricsEXT", EOpRayQueryGetIntersectionBarycentrics);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionFrontFaceEXT", EOpRayQueryGetIntersectionFrontFace);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionCandidateAABBOpaqueEXT", EOpRayQueryGetIntersectionCandidateAABBOpaque);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayDirectionEXT", EOpRayQueryGetIntersectionObjectRayDirection);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayOriginEXT", EOpRayQueryGetIntersectionObjectRayOrigin);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetWorldRayDirectionEXT", EOpRayQueryGetWorldRayDirection);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetWorldRayOriginEXT", EOpRayQueryGetWorldRayOrigin);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionObjectToWorldEXT", EOpRayQueryGetIntersectionObjectToWorld);
|
|
|
+ symbolTable.relateToOperator("rayQueryGetIntersectionWorldToObjectEXT", EOpRayQueryGetIntersectionWorldToObject);
|
|
|
+ }
|
|
|
+
|
|
|
symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid);
|
|
|
symbolTable.relateToOperator("interpolateAtSample", EOpInterpolateAtSample);
|
|
|
symbolTable.relateToOperator("interpolateAtOffset", EOpInterpolateAtOffset);
|
|
@@ -8799,27 +9047,34 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
|
|
|
symbolTable.relateToOperator("coopMatMulAddNV", EOpCooperativeMatrixMulAdd);
|
|
|
break;
|
|
|
|
|
|
- case EShLangRayGenNV:
|
|
|
- case EShLangClosestHitNV:
|
|
|
- case EShLangMissNV:
|
|
|
+ case EShLangRayGen:
|
|
|
+ case EShLangClosestHit:
|
|
|
+ case EShLangMiss:
|
|
|
if (profile != EEsProfile && version >= 460) {
|
|
|
- symbolTable.relateToOperator("traceNV", EOpTraceNV);
|
|
|
- symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
|
|
|
+ symbolTable.relateToOperator("traceNV", EOpTrace);
|
|
|
+ symbolTable.relateToOperator("traceRayEXT", EOpTrace);
|
|
|
+ symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable);
|
|
|
+ symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable);
|
|
|
}
|
|
|
break;
|
|
|
- case EShLangIntersectNV:
|
|
|
- if (profile != EEsProfile && version >= 460)
|
|
|
- symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersectionNV);
|
|
|
+ case EShLangIntersect:
|
|
|
+ if (profile != EEsProfile && version >= 460) {
|
|
|
+ symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersection);
|
|
|
+ symbolTable.relateToOperator("reportIntersectionEXT", EOpReportIntersection);
|
|
|
+ }
|
|
|
break;
|
|
|
- case EShLangAnyHitNV:
|
|
|
+ case EShLangAnyHit:
|
|
|
if (profile != EEsProfile && version >= 460) {
|
|
|
- symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersectionNV);
|
|
|
- symbolTable.relateToOperator("terminateRayNV", EOpTerminateRayNV);
|
|
|
+ symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersection);
|
|
|
+ symbolTable.relateToOperator("ignoreIntersectionEXT", EOpIgnoreIntersection);
|
|
|
+ symbolTable.relateToOperator("terminateRayNV", EOpTerminateRay);
|
|
|
+ symbolTable.relateToOperator("terminateRayEXT", EOpTerminateRay);
|
|
|
}
|
|
|
break;
|
|
|
- case EShLangCallableNV:
|
|
|
+ case EShLangCallable:
|
|
|
if (profile != EEsProfile && version >= 460) {
|
|
|
- symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
|
|
|
+ symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable);
|
|
|
+ symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable);
|
|
|
}
|
|
|
break;
|
|
|
case EShLangMeshNV:
|