mesa: Add core mesa support for GL_ARB_shader_draw_parameters
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
This commit is contained in:
@@ -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;
|
||||
|
@@ -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),
|
||||
|
@@ -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;
|
||||
|
@@ -1574,6 +1574,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:
|
||||
@@ -1619,6 +1623,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:
|
||||
|
@@ -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)
|
||||
|
@@ -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,
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
|
@@ -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;
|
||||
|
@@ -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)
|
||||
|
@@ -3712,6 +3712,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;
|
||||
|
Reference in New Issue
Block a user