Support the shader_draw_parameters extension.
This commit is contained in:
parent
f284acae5f
commit
fcad019e11
@ -5066,6 +5066,30 @@ string CompilerGLSL::builtin_to_glsl(BuiltIn builtin, StorageClass storage)
|
||||
return "gl_GlobalInvocationID";
|
||||
case BuiltInLocalInvocationIndex:
|
||||
return "gl_LocalInvocationIndex";
|
||||
case BuiltInBaseVertex:
|
||||
if (options.es)
|
||||
SPIRV_CROSS_THROW("BaseVertex not supported in ES profile.");
|
||||
if (options.version < 460) {
|
||||
require_extension_internal("GL_ARB_shader_draw_parameters");
|
||||
return "gl_BaseVertexARB";
|
||||
}
|
||||
return "gl_BaseVertex";
|
||||
case BuiltInBaseInstance:
|
||||
if (options.es)
|
||||
SPIRV_CROSS_THROW("BaseInstance not supported in ES profile.");
|
||||
if (options.version < 460) {
|
||||
require_extension_internal("GL_ARB_shader_draw_parameters");
|
||||
return "gl_BaseInstanceARB";
|
||||
}
|
||||
return "gl_BaseInstance";
|
||||
case BuiltInDrawIndex:
|
||||
if (options.es)
|
||||
SPIRV_CROSS_THROW("DrawIndex not supported in ES profile.");
|
||||
if (options.version < 460) {
|
||||
require_extension_internal("GL_ARB_shader_draw_parameters");
|
||||
return "gl_DrawIDARB";
|
||||
}
|
||||
return "gl_DrawID";
|
||||
|
||||
case BuiltInSampleId:
|
||||
if (options.es && options.version < 320)
|
||||
@ -10020,6 +10044,9 @@ void CompilerGLSL::bitcast_from_builtin_load(uint32_t source_id, std::string &ex
|
||||
case BuiltInVertexId:
|
||||
case BuiltInVertexIndex:
|
||||
case BuiltInSampleId:
|
||||
case BuiltInBaseVertex:
|
||||
case BuiltInBaseInstance:
|
||||
case BuiltInDrawIndex:
|
||||
expected_type = SPIRType::Int;
|
||||
break;
|
||||
|
||||
|
@ -2960,8 +2960,11 @@ string CompilerMSL::member_attribute_qualifier(const SPIRType &type, uint32_t in
|
||||
{
|
||||
case BuiltInVertexId:
|
||||
case BuiltInVertexIndex:
|
||||
case BuiltInBaseVertex:
|
||||
case BuiltInInstanceId:
|
||||
case BuiltInInstanceIndex:
|
||||
case BuiltInBaseInstance:
|
||||
case BuiltInDrawIndex:
|
||||
return string(" [[") + builtin_qualifier(builtin) + "]]";
|
||||
|
||||
default:
|
||||
@ -3839,6 +3842,12 @@ string CompilerMSL::builtin_to_glsl(BuiltIn builtin, StorageClass storage)
|
||||
return "gl_VertexIndex";
|
||||
case BuiltInInstanceIndex:
|
||||
return "gl_InstanceIndex";
|
||||
case BuiltInBaseVertex:
|
||||
return "gl_BaseVertex";
|
||||
case BuiltInBaseInstance:
|
||||
return "gl_BaseInstance";
|
||||
case BuiltInDrawIndex:
|
||||
return "gl_DrawID";
|
||||
|
||||
// When used in the entry function, output builtins are qualified with output struct name.
|
||||
// Test storage class as NOT Input, as output builtins might be part of generic type.
|
||||
@ -3873,10 +3882,17 @@ string CompilerMSL::builtin_qualifier(BuiltIn builtin)
|
||||
return "vertex_id";
|
||||
case BuiltInVertexIndex:
|
||||
return "vertex_id";
|
||||
case BuiltInBaseVertex:
|
||||
return "base_vertex";
|
||||
case BuiltInInstanceId:
|
||||
return "instance_id";
|
||||
case BuiltInInstanceIndex:
|
||||
return "instance_id";
|
||||
case BuiltInBaseInstance:
|
||||
return "base_instance";
|
||||
case BuiltInDrawIndex:
|
||||
// FIXME: Metal needs real support for this.
|
||||
return "buffer(15)";
|
||||
|
||||
// Vertex function out
|
||||
case BuiltInClipDistance:
|
||||
@ -3940,10 +3956,16 @@ string CompilerMSL::builtin_type_decl(BuiltIn builtin)
|
||||
return "uint";
|
||||
case BuiltInVertexIndex:
|
||||
return "uint";
|
||||
case BuiltInBaseVertex:
|
||||
return "uint";
|
||||
case BuiltInInstanceId:
|
||||
return "uint";
|
||||
case BuiltInInstanceIndex:
|
||||
return "uint";
|
||||
case BuiltInBaseInstance:
|
||||
return "uint";
|
||||
case BuiltInDrawIndex:
|
||||
return "device uint *";
|
||||
|
||||
// Vertex function out
|
||||
case BuiltInClipDistance:
|
||||
|
Loading…
Reference in New Issue
Block a user