On 12/15/2015 12:28 AM, Kristian Høgsberg Kristensen wrote: > --- > src/glsl/builtin_variables.cpp | 5 +++++ > src/glsl/glsl_parser_extras.cpp | 1 + > src/glsl/glsl_parser_extras.h | 2 ++ > src/glsl/nir/nir.c | 8 ++++++++ > src/glsl/nir/nir_intrinsics.h | 2 ++ > src/glsl/nir/shader_enums.h | 20 ++++++++++++++++++++ > src/glsl/standalone_scaffolding.cpp | 1 + > src/mesa/main/extensions_table.h | 1 + > src/mesa/main/mtypes.h | 1 + > 9 files changed, 41 insertions(+) > > diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp > index e8eab80..e82c99e 100644 > --- a/src/glsl/builtin_variables.cpp > +++ b/src/glsl/builtin_variables.cpp > @@ -951,6 +951,11 @@ builtin_variable_generator::generate_vs_special_vars() > add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, "gl_InstanceIDARB"); > if (state->ARB_draw_instanced_enable || state->is_version(140, 300)) > add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, "gl_InstanceID"); > + if (state->ARB_shader_draw_parameters_enable) { > + add_system_value(SYSTEM_VALUE_BASE_VERTEX, int_t, "gl_BaseVertexARB"); > + add_system_value(SYSTEM_VALUE_BASE_INSTANCE, int_t, > "gl_BaseInstanceARB"); > + add_system_value(SYSTEM_VALUE_DRAW_ID, int_t, "gl_DrawIDARB"); > + } > if (state->AMD_vertex_shader_layer_enable) { > var = add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer"); > var->data.interpolation = INTERP_QUALIFIER_FLAT; > diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp > index 29cf0c6..8c46f14 100644 > --- a/src/glsl/glsl_parser_extras.cpp > +++ b/src/glsl/glsl_parser_extras.cpp > @@ -608,6 +608,7 @@ static const _mesa_glsl_extension > _mesa_glsl_supported_extensions[] = { > EXT(ARB_shader_atomic_counters, true, false, > ARB_shader_atomic_counters), > EXT(ARB_shader_bit_encoding, true, false, > ARB_shader_bit_encoding), > EXT(ARB_shader_clock, true, false, ARB_shader_clock), > + EXT(ARB_shader_draw_parameters, true, false, > ARB_shader_draw_parameters), > EXT(ARB_shader_image_load_store, true, false, > ARB_shader_image_load_store), > EXT(ARB_shader_image_size, true, false, > ARB_shader_image_size), > EXT(ARB_shader_precision, true, false, > ARB_shader_precision), > diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h > index a4bda77..afb99af 100644 > --- a/src/glsl/glsl_parser_extras.h > +++ b/src/glsl/glsl_parser_extras.h > @@ -536,6 +536,8 @@ struct _mesa_glsl_parse_state { > bool ARB_shader_bit_encoding_warn; > bool ARB_shader_clock_enable; > bool ARB_shader_clock_warn; > + bool ARB_shader_draw_parameters_enable; > + bool ARB_shader_draw_parameters_warn; > bool ARB_shader_image_load_store_enable; > bool ARB_shader_image_load_store_warn; > bool ARB_shader_image_size_enable; > diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c > index 35fc1de..4b70e7c 100644 > --- a/src/glsl/nir/nir.c > +++ b/src/glsl/nir/nir.c > @@ -1588,6 +1588,10 @@ nir_intrinsic_from_system_value(gl_system_value val) > return nir_intrinsic_load_vertex_id; > case SYSTEM_VALUE_INSTANCE_ID: > return nir_intrinsic_load_instance_id; > + case SYSTEM_VALUE_DRAW_ID: > + return nir_intrinsic_load_draw_id; > + case SYSTEM_VALUE_BASE_INSTANCE: > + return nir_intrinsic_load_base_instance; > case SYSTEM_VALUE_VERTEX_ID_ZERO_BASE: > return nir_intrinsic_load_vertex_id_zero_base; > case SYSTEM_VALUE_BASE_VERTEX: > @@ -1633,6 +1637,10 @@ nir_system_value_from_intrinsic(nir_intrinsic_op > intrin) > return SYSTEM_VALUE_VERTEX_ID; > case nir_intrinsic_load_instance_id: > return SYSTEM_VALUE_INSTANCE_ID; > + case nir_intrinsic_load_draw_id: > + return SYSTEM_VALUE_DRAW_ID; > + case nir_intrinsic_load_base_instance: > + return SYSTEM_VALUE_BASE_INSTANCE; > case nir_intrinsic_load_vertex_id_zero_base: > return SYSTEM_VALUE_VERTEX_ID_ZERO_BASE; > case nir_intrinsic_load_base_vertex: > diff --git a/src/glsl/nir/nir_intrinsics.h b/src/glsl/nir/nir_intrinsics.h > index 9811fb3..917c805 100644 > --- a/src/glsl/nir/nir_intrinsics.h > +++ b/src/glsl/nir/nir_intrinsics.h > @@ -239,6 +239,8 @@ SYSTEM_VALUE(vertex_id, 1, 0) > SYSTEM_VALUE(vertex_id_zero_base, 1, 0) > SYSTEM_VALUE(base_vertex, 1, 0) > SYSTEM_VALUE(instance_id, 1, 0) > +SYSTEM_VALUE(base_instance, 1, 0) > +SYSTEM_VALUE(draw_id, 1, 0) > SYSTEM_VALUE(sample_id, 1, 0) > SYSTEM_VALUE(sample_pos, 2, 0) > SYSTEM_VALUE(sample_mask_in, 1, 0) > diff --git a/src/glsl/nir/shader_enums.h b/src/glsl/nir/shader_enums.h > index dd0e0ba..0be217c 100644 > --- a/src/glsl/nir/shader_enums.h > +++ b/src/glsl/nir/shader_enums.h > @@ -379,6 +379,26 @@ typedef enum > * \sa SYSTEM_VALUE_VERTEX_ID, SYSTEM_VALUE_VERTEX_ID_ZERO_BASE > */ > SYSTEM_VALUE_BASE_VERTEX, > + > + /** > + * Value of \c baseinstance passed to instanced draw entry points > + * > + * \sa SYSTEM_VALUE_INSTANCE_ID > + */ > + SYSTEM_VALUE_BASE_INSTANCE, > + > + /** > + * From _ARB_shader_draw_parameters: > + * > + * "Additionally, this extension adds a further built-in variable, > + * gl_DrawID to the shading language. This variable contains the index > + * of the draw currently being processed by a Multi* variant of a > + * drawing command (such as MultiDrawElements or > + * MultiDrawArraysIndirect)." > + * > + * If GL_ARB_multi_draw_indirect is not supported, this is always 0. > + */ > + SYSTEM_VALUE_DRAW_ID, > /*@}*/ > > /** > diff --git a/src/glsl/standalone_scaffolding.cpp > b/src/glsl/standalone_scaffolding.cpp > index 1f69d0d..e350f70 100644 > --- a/src/glsl/standalone_scaffolding.cpp > +++ b/src/glsl/standalone_scaffolding.cpp > @@ -149,6 +149,7 @@ void initialize_context_to_defaults(struct gl_context > *ctx, gl_api api) > ctx->Extensions.ARB_gpu_shader_fp64 = true; > ctx->Extensions.ARB_sample_shading = true; > ctx->Extensions.ARB_shader_bit_encoding = true; > + ctx->Extensions.ARB_shader_draw_parameters = true; > ctx->Extensions.ARB_shader_stencil_export = true; > ctx->Extensions.ARB_shader_subroutine = true; > ctx->Extensions.ARB_shader_texture_lod = true; > diff --git a/src/mesa/main/extensions_table.h > b/src/mesa/main/extensions_table.h > index 52a4ed6..789b55a 100644 > --- a/src/mesa/main/extensions_table.h > +++ b/src/mesa/main/extensions_table.h > @@ -96,6 +96,7 @@ EXT(ARB_separate_shader_objects , dummy_true > EXT(ARB_shader_atomic_counters , ARB_shader_atomic_counters > , GLL, GLC, x , x , 2011) > EXT(ARB_shader_bit_encoding , ARB_shader_bit_encoding > , GLL, GLC, x , x , 2010) > EXT(ARB_shader_clock , ARB_shader_clock > , GLL, GLC, x , x , 2015) > +EXT(ARB_shader_draw_parameters , ARB_shader_draw_parameters > , GLL, GLC, x , x , 2013)
Does this extension make any sense without GL_ARB_draw_indirect? If it does not, then we should not expose it in compatibility profile because GL_ARB_draw_indirect is not exposed in compatibility either. > EXT(ARB_shader_image_load_store , ARB_shader_image_load_store > , GLL, GLC, x , x , 2011) > EXT(ARB_shader_image_size , ARB_shader_image_size > , GLL, GLC, x , x , 2012) > EXT(ARB_shader_objects , dummy_true > , GLL, GLC, x , x , 2002) > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index 48309bf..05d51a3 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3714,6 +3714,7 @@ struct gl_extensions > GLboolean ARB_shader_atomic_counters; > GLboolean ARB_shader_bit_encoding; > GLboolean ARB_shader_clock; > + GLboolean ARB_shader_draw_parameters; > GLboolean ARB_shader_image_load_store; > GLboolean ARB_shader_image_size; > GLboolean ARB_shader_precision; > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev