glsl: add subroutine index qualifier support
ARB_explicit_uniform_location allows the index for subroutine functions to be explicitly set in the shader. This patch reduces the restriction on the index qualifier in validate_layout_qualifiers() to allow it to be applied to subroutines and adds the new subroutine qualifier validation to ast_function::hir(). ast_fully_specified_type::has_qualifiers() is updated to allow the index qualifier on subroutine functions when explicit uniform locations is available. A new check is added to ast_type_qualifier::merge_qualifier() to stop multiple function qualifiers from being defied, before this patch this would cause a segfault. Finally a new variable is added to ir_function_signature to store the index. This value is validated and the non explicit values assigned in link_assign_subroutine_types(). Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:

committed by
Timothy Arceri

parent
02d2ab2378
commit
f7af69c350
@@ -661,6 +661,13 @@ _mesa_program_resource_index(struct gl_shader_program *shProg,
|
||||
switch (res->Type) {
|
||||
case GL_ATOMIC_COUNTER_BUFFER:
|
||||
return RESOURCE_ATC(res) - shProg->AtomicBuffers;
|
||||
case GL_VERTEX_SUBROUTINE:
|
||||
case GL_GEOMETRY_SUBROUTINE:
|
||||
case GL_FRAGMENT_SUBROUTINE:
|
||||
case GL_COMPUTE_SUBROUTINE:
|
||||
case GL_TESS_CONTROL_SUBROUTINE:
|
||||
case GL_TESS_EVALUATION_SUBROUTINE:
|
||||
return RESOURCE_SUB(res)->index;
|
||||
case GL_UNIFORM_BLOCK:
|
||||
case GL_SHADER_STORAGE_BLOCK:
|
||||
case GL_TRANSFORM_FEEDBACK_VARYING:
|
||||
|
Reference in New Issue
Block a user