[Mesa-dev] [PATCH 2/7] mesa: Add core mesa support for GL_ARB_shader_draw_parameters
Anuj Phogat
anuj.phogat at gmail.com
Tue Dec 15 11:20:08 PST 2015
On Tue, Dec 15, 2015 at 12:28 AM, Kristian Høgsberg Kristensen
<krh at bitplanet.net> 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)
> 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;
> --
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
More information about the mesa-dev
mailing list