Commit 9b6e5e79 by Kerch Holt

Adds SPV_KHR_shader_draw_parameter extension functionality for SPIR-V.

parent 5fcfae83
......@@ -497,12 +497,21 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
case glslang::EbvInstanceId: return spv::BuiltInInstanceId;
case glslang::EbvVertexIndex: return spv::BuiltInVertexIndex;
case glslang::EbvInstanceIndex: return spv::BuiltInInstanceIndex;
case glslang::EbvBaseVertex:
case glslang::EbvBaseInstance:
case glslang::EbvDrawId:
// TODO: Add SPIR-V builtin ID.
logger->missingFunctionality("shader draw parameters");
return spv::BuiltInMax;
case glslang::EbvDrawId:
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInDrawIndex;
case glslang::EbvBaseVertex:
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInBaseVertex;
case glslang::EbvBaseInstance:
builder.addCapability(spv::CapabilityDrawParameters);
return spv::BuiltInBaseInstance;
case glslang::EbvPrimitiveId: return spv::BuiltInPrimitiveId;
case glslang::EbvInvocationId: return spv::BuiltInInvocationId;
case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner;
......
......@@ -309,6 +309,9 @@ const char* BuiltInString(int builtIn)
case 41: return "SubgroupLocalInvocationId";
case 42: return "VertexIndex"; // TBD: put next to VertexId?
case 43: return "InstanceIndex"; // TBD: put next to InstanceId?
case 4424: return "BaseVertex";
case 4425: return "BaseInstance";
case 4426: return "DrawIndex";
case BuiltInCeiling:
default: return "Bad";
......@@ -803,6 +806,7 @@ const char* CapabilityString(int info)
case 55: return "StorageImageReadWithoutFormat";
case 56: return "StorageImageWriteWithoutFormat";
case 57: return "MultiViewport";
case 4427: return "DrawParameters";
case CapabilityCeiling:
default: return "Bad";
......
......@@ -420,6 +420,9 @@ enum BuiltIn {
BuiltInSubgroupLocalInvocationId = 41,
BuiltInVertexIndex = 42,
BuiltInInstanceIndex = 43,
BuiltInBaseVertex = 4424,
BuiltInBaseInstance = 4425,
BuiltInDrawIndex = 4426,
BuiltInMax = 0x7fffffff,
};
......@@ -595,6 +598,7 @@ enum Capability {
CapabilityStorageImageReadWithoutFormat = 55,
CapabilityStorageImageWriteWithoutFormat = 56,
CapabilityMultiViewport = 57,
CapabilityDrawParameters = 4427,
CapabilityMax = 0x7fffffff,
};
......
spv.drawParams.vert
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Shader version: 450
Requested GL_ARB_shader_draw_parameters
0:? Sequence
0:7 Function Definition: main( (global void)
0:7 Function Parameters:
0:9 Sequence
0:9 Sequence
0:9 move second child to first child (temp int)
0:9 'a' (temp int)
0:9 'gl_BaseVertexARB' (in int BaseVertex)
0:10 Sequence
0:10 move second child to first child (temp int)
0:10 'b' (temp int)
0:10 'gl_BaseInstanceARB' (in int BaseInstance)
0:11 Sequence
0:11 move second child to first child (temp int)
0:11 'c' (temp int)
0:11 'gl_DrawIDARB' (in int DrawId)
0:12 move second child to first child (temp 3-component vector of float)
0:12 'pos' (smooth out 3-component vector of float)
0:12 Construct vec3 (temp 3-component vector of float)
0:12 Convert int to float (temp float)
0:12 'a' (temp int)
0:12 Convert int to float (temp float)
0:12 'b' (temp int)
0:12 Convert int to float (temp float)
0:12 'c' (temp int)
0:? Linker Objects
0:? 'pos' (smooth out 3-component vector of float)
0:? 'gl_VertexID' (gl_VertexId int VertexId)
0:? 'gl_InstanceID' (gl_InstanceId int InstanceId)
Linked vertex stage:
Shader version: 450
Requested GL_ARB_shader_draw_parameters
0:? Sequence
0:7 Function Definition: main( (global void)
0:7 Function Parameters:
0:9 Sequence
0:9 Sequence
0:9 move second child to first child (temp int)
0:9 'a' (temp int)
0:9 'gl_BaseVertexARB' (in int BaseVertex)
0:10 Sequence
0:10 move second child to first child (temp int)
0:10 'b' (temp int)
0:10 'gl_BaseInstanceARB' (in int BaseInstance)
0:11 Sequence
0:11 move second child to first child (temp int)
0:11 'c' (temp int)
0:11 'gl_DrawIDARB' (in int DrawId)
0:12 move second child to first child (temp 3-component vector of float)
0:12 'pos' (smooth out 3-component vector of float)
0:12 Construct vec3 (temp 3-component vector of float)
0:12 Convert int to float (temp float)
0:12 'a' (temp int)
0:12 Convert int to float (temp float)
0:12 'b' (temp int)
0:12 Convert int to float (temp float)
0:12 'c' (temp int)
0:? Linker Objects
0:? 'pos' (smooth out 3-component vector of float)
0:? 'gl_VertexID' (gl_VertexId int VertexId)
0:? 'gl_InstanceID' (gl_InstanceId int InstanceId)
#version 450
#extension GL_ARB_shader_draw_parameters : enable
out vec3 pos;
void main()
{
int a = gl_BaseVertexARB;
int b = gl_BaseInstanceARB;
int c = gl_DrawIDARB;
pos = vec3(a, b, c);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment