Support the shader_draw_parameters extension.

This commit is contained in:
Chip Davis 2018-08-28 13:47:29 -05:00
parent f284acae5f
commit fcad019e11
2 changed files with 49 additions and 0 deletions

View File

@ -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;

View File

@ -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: