[Mesa-dev] [PATCH] glsl: pack extension enable bits in parse state to a struct
Tapani Pälli
tapani.palli at intel.com
Wed Feb 12 03:58:14 PST 2014
Having bits as a struct makes it possible to enable them all easily.
This functionality is used when deserializing shaders that are using
glsl types introduced by the glsl extensions.
Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
---
src/glsl/ast_function.cpp | 2 +-
src/glsl/ast_to_hir.cpp | 20 ++++-----
src/glsl/builtin_functions.cpp | 58 +++++++++++++-------------
src/glsl/builtin_types.cpp | 14 +++----
src/glsl/builtin_variables.cpp | 22 +++++-----
src/glsl/glsl_lexer.ll | 44 ++++++++++----------
src/glsl/glsl_parser.yy | 32 +++++++--------
src/glsl/glsl_parser_extras.cpp | 12 +++---
src/glsl/glsl_parser_extras.h | 80 ++++++++++++++++++++----------------
src/glsl/hir_field_selection.cpp | 6 +--
src/mesa/main/ff_fragment_shader.cpp | 2 +-
11 files changed, 151 insertions(+), 141 deletions(-)
diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp
index 4c5b0e4..a27acc4e 100644
--- a/src/glsl/ast_function.cpp
+++ b/src/glsl/ast_function.cpp
@@ -1694,7 +1694,7 @@ ast_aggregate_initializer::hir(exec_list *instructions,
}
const glsl_type *const constructor_type = this->constructor_type;
- if (!state->ARB_shading_language_420pack_enable) {
+ if (!state->ext.ARB_shading_language_420pack_enable) {
_mesa_glsl_error(&loc, state, "C-style initialization requires the "
"GL_ARB_shading_language_420pack extension");
return ir_rvalue::error_value(ctx);
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index c89a26b..543605d 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -1864,7 +1864,7 @@ process_array_type(YYLTYPE *loc, const glsl_type *base,
*
* "Only one-dimensional arrays may be declared."
*/
- if (!state->ARB_arrays_of_arrays_enable) {
+ if (!state->ext.ARB_arrays_of_arrays_enable) {
_mesa_glsl_error(loc, state,
"invalid array of `%s'"
"GL_ARB_arrays_of_arrays "
@@ -2438,7 +2438,7 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
* allow layout with the deprecated keywords.
*/
const bool relaxed_layout_qualifier_checking =
- state->ARB_fragment_coord_conventions_enable;
+ state->ext.ARB_fragment_coord_conventions_enable;
if (qual->has_layout() && uses_deprecated_qualifier) {
if (relaxed_layout_qualifier_checking) {
@@ -2460,8 +2460,8 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
+ qual->flags.q.depth_less
+ qual->flags.q.depth_unchanged;
if (depth_layout_count > 0
- && !state->AMD_conservative_depth_enable
- && !state->ARB_conservative_depth_enable) {
+ && !state->ext.AMD_conservative_depth_enable
+ && !state->ext.ARB_conservative_depth_enable) {
_mesa_glsl_error(loc, state,
"extension GL_AMD_conservative_depth or "
"GL_ARB_conservative_depth must be enabled "
@@ -2556,7 +2556,7 @@ get_variable_being_redeclared(ir_variable *var, YYLTYPE loc,
earlier->type = var->type;
delete var;
var = NULL;
- } else if ((state->ARB_fragment_coord_conventions_enable ||
+ } else if ((state->ext.ARB_fragment_coord_conventions_enable ||
state->is_version(150, 0))
&& strcmp(var->name, "gl_FragCoord") == 0
&& earlier->type == var->type
@@ -2589,8 +2589,8 @@ get_variable_being_redeclared(ir_variable *var, YYLTYPE loc,
earlier->data.interpolation = var->data.interpolation;
/* Layout qualifiers for gl_FragDepth. */
- } else if ((state->AMD_conservative_depth_enable ||
- state->ARB_conservative_depth_enable)
+ } else if ((state->ext.AMD_conservative_depth_enable ||
+ state->ext.ARB_conservative_depth_enable)
&& strcmp(var->name, "gl_FragDepth") == 0
&& earlier->type == var->type
&& earlier->data.mode == var->data.mode) {
@@ -2700,7 +2700,7 @@ process_initializer(ir_variable *var, ast_declaration *decl,
* expressions. Const-qualified global variables must still be
* initialized with constant expressions.
*/
- if (!state->ARB_shading_language_420pack_enable
+ if (!state->ext.ARB_shading_language_420pack_enable
|| state->current_function == NULL) {
_mesa_glsl_error(& initializer_loc, state,
"initializer of %s variable `%s' must be a "
@@ -3082,7 +3082,7 @@ ast_declarator_list::hir(exec_list *instructions,
*/
if (!state->is_version(130, 300)
&& !state->has_explicit_attrib_location()
- && !state->ARB_fragment_coord_conventions_enable) {
+ && !state->ext.ARB_fragment_coord_conventions_enable) {
if (this->type->qualifier.flags.q.out) {
_mesa_glsl_error(& loc, state,
"`out' qualifier in declaration of `%s' "
@@ -3966,7 +3966,7 @@ ast_jump_statement::hir(exec_list *instructions,
if (state->current_function->return_type != ret_type) {
YYLTYPE loc = this->get_location();
- if (state->ARB_shading_language_420pack_enable) {
+ if (state->ext.ARB_shading_language_420pack_enable) {
if (!apply_implicit_conversion(state->current_function->return_type,
ret, state)) {
_mesa_glsl_error(& loc, state,
diff --git a/src/glsl/builtin_functions.cpp b/src/glsl/builtin_functions.cpp
index 2162baa..dabdc2d 100644
--- a/src/glsl/builtin_functions.cpp
+++ b/src/glsl/builtin_functions.cpp
@@ -134,13 +134,13 @@ v140(const _mesa_glsl_parse_state *state)
static bool
texture_rectangle(const _mesa_glsl_parse_state *state)
{
- return state->ARB_texture_rectangle_enable;
+ return state->ext.ARB_texture_rectangle_enable;
}
static bool
texture_external(const _mesa_glsl_parse_state *state)
{
- return state->OES_EGL_image_external_enable;
+ return state->ext.OES_EGL_image_external_enable;
}
/** True if texturing functions with explicit LOD are allowed. */
@@ -157,7 +157,7 @@ lod_exists_in_stage(const _mesa_glsl_parse_state *state)
*/
return state->stage == MESA_SHADER_VERTEX ||
state->is_version(130, 300) ||
- state->ARB_shader_texture_lod_enable;
+ state->ext.ARB_shader_texture_lod_enable;
}
static bool
@@ -169,75 +169,75 @@ v110_lod(const _mesa_glsl_parse_state *state)
static bool
shader_texture_lod(const _mesa_glsl_parse_state *state)
{
- return state->ARB_shader_texture_lod_enable;
+ return state->ext.ARB_shader_texture_lod_enable;
}
static bool
shader_texture_lod_and_rect(const _mesa_glsl_parse_state *state)
{
- return state->ARB_shader_texture_lod_enable &&
- state->ARB_texture_rectangle_enable;
+ return state->ext.ARB_shader_texture_lod_enable &&
+ state->ext.ARB_texture_rectangle_enable;
}
static bool
shader_bit_encoding(const _mesa_glsl_parse_state *state)
{
return state->is_version(330, 300) ||
- state->ARB_shader_bit_encoding_enable ||
- state->ARB_gpu_shader5_enable;
+ state->ext.ARB_shader_bit_encoding_enable ||
+ state->ext.ARB_gpu_shader5_enable;
}
static bool
shader_integer_mix(const _mesa_glsl_parse_state *state)
{
- return v130(state) && state->EXT_shader_integer_mix_enable;
+ return v130(state) && state->ext.EXT_shader_integer_mix_enable;
}
static bool
shader_packing(const _mesa_glsl_parse_state *state)
{
- return state->ARB_shading_language_packing_enable ||
+ return state->ext.ARB_shading_language_packing_enable ||
state->is_version(400, 0);
}
static bool
shader_packing_or_es3(const _mesa_glsl_parse_state *state)
{
- return state->ARB_shading_language_packing_enable ||
+ return state->ext.ARB_shading_language_packing_enable ||
state->is_version(400, 300);
}
static bool
gpu_shader5(const _mesa_glsl_parse_state *state)
{
- return state->is_version(400, 0) || state->ARB_gpu_shader5_enable;
+ return state->is_version(400, 0) || state->ext.ARB_gpu_shader5_enable;
}
static bool
texture_array_lod(const _mesa_glsl_parse_state *state)
{
return lod_exists_in_stage(state) &&
- state->EXT_texture_array_enable;
+ state->ext.EXT_texture_array_enable;
}
static bool
fs_texture_array(const _mesa_glsl_parse_state *state)
{
return state->stage == MESA_SHADER_FRAGMENT &&
- state->EXT_texture_array_enable;
+ state->ext.EXT_texture_array_enable;
}
static bool
texture_array(const _mesa_glsl_parse_state *state)
{
- return state->EXT_texture_array_enable;
+ return state->ext.EXT_texture_array_enable;
}
static bool
texture_multisample(const _mesa_glsl_parse_state *state)
{
return state->is_version(150, 0) ||
- state->ARB_texture_multisample_enable;
+ state->ext.ARB_texture_multisample_enable;
}
static bool
@@ -245,36 +245,36 @@ fs_texture_cube_map_array(const _mesa_glsl_parse_state *state)
{
return state->stage == MESA_SHADER_FRAGMENT &&
(state->is_version(400, 0) ||
- state->ARB_texture_cube_map_array_enable);
+ state->ext.ARB_texture_cube_map_array_enable);
}
static bool
texture_cube_map_array(const _mesa_glsl_parse_state *state)
{
return state->is_version(400, 0) ||
- state->ARB_texture_cube_map_array_enable;
+ state->ext.ARB_texture_cube_map_array_enable;
}
static bool
texture_query_levels(const _mesa_glsl_parse_state *state)
{
return state->is_version(430, 0) ||
- state->ARB_texture_query_levels_enable;
+ state->ext.ARB_texture_query_levels_enable;
}
static bool
texture_query_lod(const _mesa_glsl_parse_state *state)
{
return state->stage == MESA_SHADER_FRAGMENT &&
- state->ARB_texture_query_lod_enable;
+ state->ext.ARB_texture_query_lod_enable;
}
static bool
texture_gather(const _mesa_glsl_parse_state *state)
{
return state->is_version(400, 0) ||
- state->ARB_texture_gather_enable ||
- state->ARB_gpu_shader5_enable;
+ state->ext.ARB_texture_gather_enable ||
+ state->ext.ARB_gpu_shader5_enable;
}
/* Only ARB_texture_gather but not GLSL 4.0 or ARB_gpu_shader5.
@@ -284,8 +284,8 @@ static bool
texture_gather_only(const _mesa_glsl_parse_state *state)
{
return !state->is_version(400, 0) &&
- !state->ARB_gpu_shader5_enable &&
- state->ARB_texture_gather_enable;
+ !state->ext.ARB_gpu_shader5_enable &&
+ state->ext.ARB_texture_gather_enable;
}
/* Desktop GL or OES_standard_derivatives + fragment shader only */
@@ -294,7 +294,7 @@ fs_oes_derivatives(const _mesa_glsl_parse_state *state)
{
return state->stage == MESA_SHADER_FRAGMENT &&
(state->is_version(110, 300) ||
- state->OES_standard_derivatives_enable);
+ state->ext.OES_standard_derivatives_enable);
}
static bool
@@ -311,7 +311,7 @@ tex3d(const _mesa_glsl_parse_state *state)
* OES_texture_3D extension, and in GLSL ES 3.00.
*/
return !state->es_shader ||
- state->OES_texture_3D_enable ||
+ state->ext.OES_texture_3D_enable ||
state->language_version >= 300;
}
@@ -319,7 +319,7 @@ static bool
fs_tex3d(const _mesa_glsl_parse_state *state)
{
return state->stage == MESA_SHADER_FRAGMENT &&
- (!state->es_shader || state->OES_texture_3D_enable);
+ (!state->es_shader || state->ext.OES_texture_3D_enable);
}
static bool
@@ -331,13 +331,13 @@ tex3d_lod(const _mesa_glsl_parse_state *state)
static bool
shader_atomic_counters(const _mesa_glsl_parse_state *state)
{
- return state->ARB_shader_atomic_counters_enable;
+ return state->ext.ARB_shader_atomic_counters_enable;
}
static bool
shader_trinary_minmax(const _mesa_glsl_parse_state *state)
{
- return state->AMD_shader_trinary_minmax_enable;
+ return state->ext.AMD_shader_trinary_minmax_enable;
}
/** @} */
diff --git a/src/glsl/builtin_types.cpp b/src/glsl/builtin_types.cpp
index 92e3860..82b4bb4 100644
--- a/src/glsl/builtin_types.cpp
+++ b/src/glsl/builtin_types.cpp
@@ -251,14 +251,14 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state)
* by the version-based loop, but attempting to add them a second time
* is harmless.
*/
- if (state->ARB_texture_cube_map_array_enable) {
+ if (state->ext.ARB_texture_cube_map_array_enable) {
add_type(symbols, glsl_type::samplerCubeArray_type);
add_type(symbols, glsl_type::samplerCubeArrayShadow_type);
add_type(symbols, glsl_type::isamplerCubeArray_type);
add_type(symbols, glsl_type::usamplerCubeArray_type);
}
- if (state->ARB_texture_multisample_enable) {
+ if (state->ext.ARB_texture_multisample_enable) {
add_type(symbols, glsl_type::sampler2DMS_type);
add_type(symbols, glsl_type::isampler2DMS_type);
add_type(symbols, glsl_type::usampler2DMS_type);
@@ -267,27 +267,27 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state)
add_type(symbols, glsl_type::usampler2DMSArray_type);
}
- if (state->ARB_texture_rectangle_enable) {
+ if (state->ext.ARB_texture_rectangle_enable) {
add_type(symbols, glsl_type::sampler2DRect_type);
add_type(symbols, glsl_type::sampler2DRectShadow_type);
}
- if (state->EXT_texture_array_enable) {
+ if (state->ext.EXT_texture_array_enable) {
add_type(symbols, glsl_type::sampler1DArray_type);
add_type(symbols, glsl_type::sampler2DArray_type);
add_type(symbols, glsl_type::sampler1DArrayShadow_type);
add_type(symbols, glsl_type::sampler2DArrayShadow_type);
}
- if (state->OES_EGL_image_external_enable) {
+ if (state->ext.OES_EGL_image_external_enable) {
add_type(symbols, glsl_type::samplerExternalOES_type);
}
- if (state->OES_texture_3D_enable) {
+ if (state->ext.OES_texture_3D_enable) {
add_type(symbols, glsl_type::sampler3D_type);
}
- if (state->ARB_shader_atomic_counters_enable) {
+ if (state->ext.ARB_shader_atomic_counters_enable) {
add_type(symbols, glsl_type::atomic_uint_type);
}
}
diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp
index cc42338..2ef6a98 100644
--- a/src/glsl/builtin_variables.cpp
+++ b/src/glsl/builtin_variables.cpp
@@ -600,7 +600,7 @@ builtin_variable_generator::generate_constants()
* version 4.20 and GLSL ES version 3.00.
*/
if ((state->is_version(130, 0) &&
- state->ARB_shading_language_420pack_enable) ||
+ state->ext.ARB_shading_language_420pack_enable) ||
state->is_version(420, 300)) {
add_const("gl_MinProgramTexelOffset",
state->Const.MinProgramTexelOffset);
@@ -666,7 +666,7 @@ builtin_variable_generator::generate_constants()
add_const("gl_MaxTextureCoords", state->Const.MaxTextureCoords);
}
- if (state->ARB_shader_atomic_counters_enable) {
+ if (state->ext.ARB_shader_atomic_counters_enable) {
add_const("gl_MaxVertexAtomicCounters",
state->Const.MaxVertexAtomicCounters);
add_const("gl_MaxGeometryAtomicCounters",
@@ -681,7 +681,7 @@ builtin_variable_generator::generate_constants()
add_const("gl_MaxTessEvaluationAtomicCounters", 0);
}
- if (state->is_version(430, 0) || state->ARB_compute_shader_enable) {
+ if (state->is_version(430, 0) || state->ext.ARB_compute_shader_enable) {
add_const_ivec3("gl_MaxComputeWorkGroupCount",
state->Const.MaxComputeWorkGroupCount[0],
state->Const.MaxComputeWorkGroupCount[1],
@@ -801,11 +801,11 @@ builtin_variable_generator::generate_vs_special_vars()
{
if (state->is_version(130, 300))
add_system_value(SYSTEM_VALUE_VERTEX_ID, int_t, "gl_VertexID");
- if (state->ARB_draw_instanced_enable)
+ if (state->ext.ARB_draw_instanced_enable)
add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, "gl_InstanceIDARB");
- if (state->ARB_draw_instanced_enable || state->is_version(140, 300))
+ if (state->ext.ARB_draw_instanced_enable || state->is_version(140, 300))
add_system_value(SYSTEM_VALUE_INSTANCE_ID, int_t, "gl_InstanceID");
- if (state->AMD_vertex_shader_layer_enable)
+ if (state->ext.AMD_vertex_shader_layer_enable)
add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer");
if (compatibility) {
add_input(VERT_ATTRIB_POS, vec4_t, "gl_Vertex");
@@ -832,7 +832,7 @@ void
builtin_variable_generator::generate_gs_special_vars()
{
add_output(VARYING_SLOT_LAYER, int_t, "gl_Layer");
- if (state->ARB_viewport_array_enable)
+ if (state->ext.ARB_viewport_array_enable)
add_output(VARYING_SLOT_VIEWPORT, int_t, "gl_ViewportIndex");
/* Although gl_PrimitiveID appears in tessellation control and tessellation
@@ -886,21 +886,21 @@ builtin_variable_generator::generate_fs_special_vars()
if (state->is_version(110, 300))
add_output(FRAG_RESULT_DEPTH, float_t, "gl_FragDepth");
- if (state->ARB_shader_stencil_export_enable) {
+ if (state->ext.ARB_shader_stencil_export_enable) {
ir_variable *const var =
add_output(FRAG_RESULT_STENCIL, int_t, "gl_FragStencilRefARB");
if (state->ARB_shader_stencil_export_warn)
var->warn_extension = "GL_ARB_shader_stencil_export";
}
- if (state->AMD_shader_stencil_export_enable) {
+ if (state->ext.AMD_shader_stencil_export_enable) {
ir_variable *const var =
add_output(FRAG_RESULT_STENCIL, int_t, "gl_FragStencilRefAMD");
if (state->AMD_shader_stencil_export_warn)
var->warn_extension = "GL_AMD_shader_stencil_export";
}
- if (state->ARB_sample_shading_enable) {
+ if (state->ext.ARB_sample_shading_enable) {
add_system_value(SYSTEM_VALUE_SAMPLE_ID, int_t, "gl_SampleID");
add_system_value(SYSTEM_VALUE_SAMPLE_POS, vec2_t, "gl_SamplePosition");
/* From the ARB_sample_shading specification:
@@ -913,7 +913,7 @@ builtin_variable_generator::generate_fs_special_vars()
add_output(FRAG_RESULT_SAMPLE_MASK, array(int_t, 1), "gl_SampleMask");
}
- if (state->ARB_gpu_shader5_enable) {
+ if (state->ext.ARB_gpu_shader5_enable) {
add_system_value(SYSTEM_VALUE_SAMPLE_MASK_IN, array(int_t, 1), "gl_SampleMaskIn");
}
}
diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll
index 3208b32..f206d1c 100644
--- a/src/glsl/glsl_lexer.ll
+++ b/src/glsl/glsl_lexer.ll
@@ -317,40 +317,40 @@ usampler2DArray KEYWORD(130, 300, 130, 300, USAMPLER2DARRAY);
/* additional keywords in ARB_texture_multisample, included in GLSL 1.50 */
/* these are reserved but not defined in GLSL 3.00 */
-sampler2DMS KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ARB_texture_multisample_enable, SAMPLER2DMS);
-isampler2DMS KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ARB_texture_multisample_enable, ISAMPLER2DMS);
-usampler2DMS KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ARB_texture_multisample_enable, USAMPLER2DMS);
-sampler2DMSArray KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ARB_texture_multisample_enable, SAMPLER2DMSARRAY);
-isampler2DMSArray KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ARB_texture_multisample_enable, ISAMPLER2DMSARRAY);
-usampler2DMSArray KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ARB_texture_multisample_enable, USAMPLER2DMSARRAY);
+sampler2DMS KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ext.ARB_texture_multisample_enable, SAMPLER2DMS);
+isampler2DMS KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ext.ARB_texture_multisample_enable, ISAMPLER2DMS);
+usampler2DMS KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ext.ARB_texture_multisample_enable, USAMPLER2DMS);
+sampler2DMSArray KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ext.ARB_texture_multisample_enable, SAMPLER2DMSARRAY);
+isampler2DMSArray KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ext.ARB_texture_multisample_enable, ISAMPLER2DMSARRAY);
+usampler2DMSArray KEYWORD_WITH_ALT(150, 300, 150, 0, yyextra->ext.ARB_texture_multisample_enable, USAMPLER2DMSARRAY);
/* keywords available with ARB_texture_cube_map_array_enable extension on desktop GLSL */
-samplerCubeArray KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ARB_texture_cube_map_array_enable, SAMPLERCUBEARRAY);
-isamplerCubeArray KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ARB_texture_cube_map_array_enable, ISAMPLERCUBEARRAY);
-usamplerCubeArray KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ARB_texture_cube_map_array_enable, USAMPLERCUBEARRAY);
-samplerCubeArrayShadow KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ARB_texture_cube_map_array_enable, SAMPLERCUBEARRAYSHADOW);
+samplerCubeArray KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ext.ARB_texture_cube_map_array_enable, SAMPLERCUBEARRAY);
+isamplerCubeArray KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ext.ARB_texture_cube_map_array_enable, ISAMPLERCUBEARRAY);
+usamplerCubeArray KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ext.ARB_texture_cube_map_array_enable, USAMPLERCUBEARRAY);
+samplerCubeArrayShadow KEYWORD_WITH_ALT(400, 0, 400, 0, yyextra->ext.ARB_texture_cube_map_array_enable, SAMPLERCUBEARRAYSHADOW);
samplerExternalOES {
- if (yyextra->OES_EGL_image_external_enable)
+ if (yyextra->ext.OES_EGL_image_external_enable)
return SAMPLEREXTERNALOES;
else
return IDENTIFIER;
}
-atomic_uint KEYWORD_WITH_ALT(420, 300, 420, 0, yyextra->ARB_shader_atomic_counters_enable, ATOMIC_UINT);
+atomic_uint KEYWORD_WITH_ALT(420, 300, 420, 0, yyextra->ext.ARB_shader_atomic_counters_enable, ATOMIC_UINT);
struct return STRUCT;
void return VOID_TOK;
layout {
if ((yyextra->is_version(140, 300))
- || yyextra->AMD_conservative_depth_enable
- || yyextra->ARB_conservative_depth_enable
- || yyextra->ARB_explicit_attrib_location_enable
- || yyextra->ARB_uniform_buffer_object_enable
- || yyextra->ARB_fragment_coord_conventions_enable
- || yyextra->ARB_shading_language_420pack_enable
- || yyextra->ARB_compute_shader_enable) {
+ || yyextra->ext.AMD_conservative_depth_enable
+ || yyextra->ext.ARB_conservative_depth_enable
+ || yyextra->ext.ARB_explicit_attrib_location_enable
+ || yyextra->ext.ARB_uniform_buffer_object_enable
+ || yyextra->ext.ARB_fragment_coord_conventions_enable
+ || yyextra->ext.ARB_shading_language_420pack_enable
+ || yyextra->ext.ARB_compute_shader_enable) {
return LAYOUT_TOK;
} else {
yylval->identifier = strdup(yytext);
@@ -430,7 +430,7 @@ enum KEYWORD(110, 100, 0, 0, ENUM);
typedef KEYWORD(110, 100, 0, 0, TYPEDEF);
template KEYWORD(110, 100, 0, 0, TEMPLATE);
this KEYWORD(110, 100, 0, 0, THIS);
-packed KEYWORD_WITH_ALT(110, 100, 140, 300, yyextra->ARB_uniform_buffer_object_enable, PACKED_TOK);
+packed KEYWORD_WITH_ALT(110, 100, 140, 300, yyextra->ext.ARB_uniform_buffer_object_enable, PACKED_TOK);
goto KEYWORD(110, 100, 0, 0, GOTO);
switch KEYWORD(110, 100, 130, 300, SWITCH);
default KEYWORD(110, 100, 130, 300, DEFAULT);
@@ -506,7 +506,7 @@ image2DArrayShadow KEYWORD(130, 300, 0, 0, IMAGE2DARRAYSHADOW);
imageBuffer KEYWORD(130, 300, 0, 0, IMAGEBUFFER);
iimageBuffer KEYWORD(130, 300, 0, 0, IIMAGEBUFFER);
uimageBuffer KEYWORD(130, 300, 0, 0, UIMAGEBUFFER);
-row_major KEYWORD_WITH_ALT(130, 0, 140, 0, yyextra->ARB_uniform_buffer_object_enable && !yyextra->es_shader, ROW_MAJOR);
+row_major KEYWORD_WITH_ALT(130, 0, 140, 0, yyextra->ext.ARB_uniform_buffer_object_enable && !yyextra->es_shader, ROW_MAJOR);
/* Additional reserved words in GLSL 1.40 */
isampler2DRect KEYWORD(140, 300, 140, 0, ISAMPLER2DRECT);
@@ -521,7 +521,7 @@ readonly KEYWORD(0, 300, 0, 0, READONLY);
writeonly KEYWORD(0, 300, 0, 0, WRITEONLY);
resource KEYWORD(0, 300, 0, 0, RESOURCE);
patch KEYWORD(0, 300, 0, 0, PATCH);
-sample KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_gpu_shader5_enable, SAMPLE);
+sample KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ext.ARB_gpu_shader5_enable, SAMPLE);
subroutine KEYWORD(0, 300, 0, 0, SUBROUTINE);
diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index dc35c1a..3682a58 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -930,7 +930,7 @@ parameter_qualifier:
if (($1.flags.q.in || $1.flags.q.out) && ($2.flags.q.in || $2.flags.q.out))
_mesa_glsl_error(&@1, state, "duplicate in/out/inout qualifier");
- if (!state->ARB_shading_language_420pack_enable && $2.flags.q.constant)
+ if (!state->ext.ARB_shading_language_420pack_enable && $2.flags.q.constant)
_mesa_glsl_error(&@1, state, "const must be specified before "
"in/out/inout");
@@ -942,7 +942,7 @@ parameter_qualifier:
if ($2.precision != ast_precision_none)
_mesa_glsl_error(&@1, state, "duplicate precision qualifier");
- if (!state->ARB_shading_language_420pack_enable && $2.flags.i != 0)
+ if (!state->ext.ARB_shading_language_420pack_enable && $2.flags.i != 0)
_mesa_glsl_error(&@1, state, "precision qualifiers must come last");
$$ = $2;
@@ -1121,7 +1121,7 @@ layout_qualifier_id:
memset(& $$, 0, sizeof($$));
/* Layout qualifiers for ARB_fragment_coord_conventions. */
- if (!$$.flags.i && (state->ARB_fragment_coord_conventions_enable ||
+ if (!$$.flags.i && (state->ext.ARB_fragment_coord_conventions_enable ||
state->is_version(150, 0))) {
if (match_layout_qualifier($1, "origin_upper_left", state) == 0) {
$$.flags.q.origin_upper_left = 1;
@@ -1139,8 +1139,8 @@ layout_qualifier_id:
/* Layout qualifiers for AMD/ARB_conservative_depth. */
if (!$$.flags.i &&
- (state->AMD_conservative_depth_enable ||
- state->ARB_conservative_depth_enable)) {
+ (state->ext.AMD_conservative_depth_enable ||
+ state->ext.ARB_conservative_depth_enable)) {
if (match_layout_qualifier($1, "depth_any", state) == 0) {
$$.flags.q.depth_any = 1;
} else if (match_layout_qualifier($1, "depth_greater", state) == 0) {
@@ -1261,14 +1261,14 @@ layout_qualifier_id:
}
}
- if ((state->ARB_shading_language_420pack_enable ||
- state->ARB_shader_atomic_counters_enable) &&
+ if ((state->ext.ARB_shading_language_420pack_enable ||
+ state->ext.ARB_shader_atomic_counters_enable) &&
match_layout_qualifier("binding", $1, state) == 0) {
$$.flags.q.explicit_binding = 1;
$$.binding = $3;
}
- if (state->ARB_shader_atomic_counters_enable &&
+ if (state->ext.ARB_shader_atomic_counters_enable &&
match_layout_qualifier("offset", $1, state) == 0) {
$$.flags.q.explicit_offset = 1;
$$.offset = $3;
@@ -1305,7 +1305,7 @@ layout_qualifier_id:
local_size_qualifiers[i], $3);
YYERROR;
} else if (!state->is_version(430, 0) &&
- !state->ARB_compute_shader_enable) {
+ !state->ext.ARB_compute_shader_enable) {
_mesa_glsl_error(& @3, state,
"%s qualifier requires GLSL 4.30 or "
"ARB_compute_shader",
@@ -1450,7 +1450,7 @@ type_qualifier:
"with layout(...)");
}
- if (!state->ARB_shading_language_420pack_enable && $2.flags.q.invariant) {
+ if (!state->ext.ARB_shading_language_420pack_enable && $2.flags.q.invariant) {
_mesa_glsl_error(&@1, state, "interpolation qualifiers must come "
"after \"invariant\"");
}
@@ -1466,7 +1466,7 @@ type_qualifier:
* appear to be any text indicating that it must come before the storage
* qualifier, but always seems to in examples.
*/
- if (!state->ARB_shading_language_420pack_enable && $2.has_layout())
+ if (!state->ext.ARB_shading_language_420pack_enable && $2.has_layout())
_mesa_glsl_error(&@1, state, "duplicate layout(...) qualifiers");
if ($2.flags.q.invariant)
@@ -1488,7 +1488,7 @@ type_qualifier:
"duplicate auxiliary storage qualifier (centroid or sample)");
}
- if (!state->ARB_shading_language_420pack_enable &&
+ if (!state->ext.ARB_shading_language_420pack_enable &&
($2.flags.q.invariant || $2.has_interpolation() || $2.has_layout())) {
_mesa_glsl_error(&@1, state, "auxiliary storage qualifiers must come "
"just before storage qualifiers");
@@ -1505,7 +1505,7 @@ type_qualifier:
if ($2.has_storage())
_mesa_glsl_error(&@1, state, "duplicate storage qualifier");
- if (!state->ARB_shading_language_420pack_enable &&
+ if (!state->ext.ARB_shading_language_420pack_enable &&
($2.flags.q.invariant || $2.has_interpolation() || $2.has_layout() ||
$2.has_auxiliary_storage())) {
_mesa_glsl_error(&@1, state, "storage qualifiers must come after "
@@ -1521,7 +1521,7 @@ type_qualifier:
if ($2.precision != ast_precision_none)
_mesa_glsl_error(&@1, state, "duplicate precision qualifier");
- if (!state->ARB_shading_language_420pack_enable && $2.flags.i != 0)
+ if (!state->ext.ARB_shading_language_420pack_enable && $2.flags.i != 0)
_mesa_glsl_error(&@1, state, "precision qualifiers must come last");
$$ = $2;
@@ -1590,7 +1590,7 @@ array_specifier:
{
$$ = $1;
- if (!state->ARB_arrays_of_arrays_enable) {
+ if (!state->ext.ARB_arrays_of_arrays_enable) {
_mesa_glsl_error(& @1, state,
"GL_ARB_arrays_of_arrays "
"required for defining arrays of arrays");
@@ -1604,7 +1604,7 @@ array_specifier:
{
$$ = $1;
- if (!state->ARB_arrays_of_arrays_enable) {
+ if (!state->ext.ARB_arrays_of_arrays_enable) {
_mesa_glsl_error(& @1, state,
"GL_ARB_arrays_of_arrays "
"required for defining arrays of arrays");
diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index b822d22..779336f 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -82,13 +82,13 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
this->language_version = ctx->Const.ForceGLSLVersion ?
ctx->Const.ForceGLSLVersion : 110;
this->es_shader = false;
- this->ARB_texture_rectangle_enable = true;
+ this->ext.ARB_texture_rectangle_enable = true;
/* OpenGL ES 2.0 has different defaults from desktop GL. */
if (ctx->API == API_OPENGLES2) {
this->language_version = 100;
this->es_shader = true;
- this->ARB_texture_rectangle_enable = false;
+ this->ext.ARB_texture_rectangle_enable = false;
}
this->extensions = &ctx->Extensions;
@@ -299,7 +299,7 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
}
if (this->es_shader) {
- this->ARB_texture_rectangle_enable = false;
+ this->ext.ARB_texture_rectangle_enable = false;
}
this->language_version = version;
@@ -467,7 +467,7 @@ struct _mesa_glsl_extension {
* See note in _mesa_glsl_extension::supported_flag about "pointer
* to member" types.
*/
- bool _mesa_glsl_parse_state::* enable_flag;
+ bool _mesa_glsl_parse_state::extension_enable_bits::* enable_flag;
/**
* Flag in the _mesa_glsl_parse_state struct that should be set
@@ -485,7 +485,7 @@ struct _mesa_glsl_extension {
#define EXT(NAME, GL, ES, SUPPORTED_FLAG) \
{ "GL_" #NAME, GL, ES, &gl_extensions::SUPPORTED_FLAG, \
- &_mesa_glsl_parse_state::NAME##_enable, \
+ &_mesa_glsl_parse_state::extension_enable_bits::NAME##_enable, \
&_mesa_glsl_parse_state::NAME##_warn }
/**
@@ -569,7 +569,7 @@ void _mesa_glsl_extension::set_flags(_mesa_glsl_parse_state *state,
* offsets this->enable_flag and this->warn_flag. See
* _mesa_glsl_extension::supported_flag for more info.
*/
- state->*(this->enable_flag) = (behavior != extension_disable);
+ state->ext.*(this->enable_flag) = (behavior != extension_disable);
state->*(this->warn_flag) = (behavior == extension_warn);
}
diff --git a/src/glsl/glsl_parser_extras.h b/src/glsl/glsl_parser_extras.h
index 7d66147..e923082 100644
--- a/src/glsl/glsl_parser_extras.h
+++ b/src/glsl/glsl_parser_extras.h
@@ -137,12 +137,12 @@ struct _mesa_glsl_parse_state {
bool has_explicit_attrib_location() const
{
- return ARB_explicit_attrib_location_enable || is_version(330, 300);
+ return ext.ARB_explicit_attrib_location_enable || is_version(330, 300);
}
bool has_uniform_buffer_objects() const
{
- return ARB_uniform_buffer_object_enable || is_version(140, 300);
+ return ext.ARB_uniform_buffer_object_enable || is_version(140, 300);
}
void process_version_directive(YYLTYPE *locp, int version,
@@ -309,73 +309,83 @@ struct _mesa_glsl_parse_state {
char *info_log;
+ struct extension_enable_bits {
+
+ /**
+ * \name Enable bits for GLSL extensions
+ */
+ /*@{*/
+ bool ARB_arrays_of_arrays_enable;
+ bool ARB_draw_buffers_enable;
+ bool ARB_draw_instanced_enable;
+ bool ARB_explicit_attrib_location_enable;
+ bool ARB_fragment_coord_conventions_enable;
+ bool ARB_texture_rectangle_enable;
+ bool ARB_texture_gather_enable;
+ bool EXT_texture_array_enable;
+ bool ARB_shader_texture_lod_enable;
+ bool ARB_shader_stencil_export_enable;
+ bool AMD_conservative_depth_enable;
+ bool ARB_conservative_depth_enable;
+ bool AMD_shader_stencil_export_enable;
+ bool OES_texture_3D_enable;
+ bool OES_EGL_image_external_enable;
+ bool ARB_shader_bit_encoding_enable;
+ bool ARB_uniform_buffer_object_enable;
+ bool OES_standard_derivatives_enable;
+ bool ARB_texture_cube_map_array_enable;
+ bool ARB_shading_language_packing_enable;
+ bool ARB_texture_multisample_enable;
+ bool ARB_texture_query_levels_enable;
+ bool ARB_texture_query_lod_enable;
+ bool ARB_gpu_shader5_enable;
+ bool AMD_vertex_shader_layer_enable;
+ bool ARB_shading_language_420pack_enable;
+ bool ARB_sample_shading_enable;
+ bool EXT_shader_integer_mix_enable;
+ bool ARB_shader_atomic_counters_enable;
+ bool AMD_shader_trinary_minmax_enable;
+ bool ARB_viewport_array_enable;
+ bool ARB_compute_shader_enable;
+ /*@}*/
+
+ } ext;
+
/**
- * \name Enable bits for GLSL extensions
+ * \name Warn bits for GLSL extensions
*/
/*@{*/
- bool ARB_arrays_of_arrays_enable;
bool ARB_arrays_of_arrays_warn;
- bool ARB_draw_buffers_enable;
bool ARB_draw_buffers_warn;
- bool ARB_draw_instanced_enable;
bool ARB_draw_instanced_warn;
- bool ARB_explicit_attrib_location_enable;
bool ARB_explicit_attrib_location_warn;
- bool ARB_fragment_coord_conventions_enable;
bool ARB_fragment_coord_conventions_warn;
- bool ARB_texture_rectangle_enable;
bool ARB_texture_rectangle_warn;
- bool ARB_texture_gather_enable;
bool ARB_texture_gather_warn;
- bool EXT_texture_array_enable;
bool EXT_texture_array_warn;
- bool ARB_shader_texture_lod_enable;
bool ARB_shader_texture_lod_warn;
- bool ARB_shader_stencil_export_enable;
bool ARB_shader_stencil_export_warn;
- bool AMD_conservative_depth_enable;
bool AMD_conservative_depth_warn;
- bool ARB_conservative_depth_enable;
bool ARB_conservative_depth_warn;
- bool AMD_shader_stencil_export_enable;
bool AMD_shader_stencil_export_warn;
- bool OES_texture_3D_enable;
bool OES_texture_3D_warn;
- bool OES_EGL_image_external_enable;
bool OES_EGL_image_external_warn;
- bool ARB_shader_bit_encoding_enable;
bool ARB_shader_bit_encoding_warn;
- bool ARB_uniform_buffer_object_enable;
bool ARB_uniform_buffer_object_warn;
- bool OES_standard_derivatives_enable;
bool OES_standard_derivatives_warn;
- bool ARB_texture_cube_map_array_enable;
bool ARB_texture_cube_map_array_warn;
- bool ARB_shading_language_packing_enable;
bool ARB_shading_language_packing_warn;
- bool ARB_texture_multisample_enable;
bool ARB_texture_multisample_warn;
- bool ARB_texture_query_levels_enable;
bool ARB_texture_query_levels_warn;
- bool ARB_texture_query_lod_enable;
bool ARB_texture_query_lod_warn;
- bool ARB_gpu_shader5_enable;
bool ARB_gpu_shader5_warn;
- bool AMD_vertex_shader_layer_enable;
bool AMD_vertex_shader_layer_warn;
- bool ARB_shading_language_420pack_enable;
bool ARB_shading_language_420pack_warn;
- bool ARB_sample_shading_enable;
bool ARB_sample_shading_warn;
- bool EXT_shader_integer_mix_enable;
bool EXT_shader_integer_mix_warn;
- bool ARB_shader_atomic_counters_enable;
bool ARB_shader_atomic_counters_warn;
- bool AMD_shader_trinary_minmax_enable;
bool AMD_shader_trinary_minmax_warn;
- bool ARB_viewport_array_enable;
bool ARB_viewport_array_warn;
- bool ARB_compute_shader_enable;
bool ARB_compute_shader_warn;
/*@}*/
diff --git a/src/glsl/hir_field_selection.cpp b/src/glsl/hir_field_selection.cpp
index 1e92c89..f86b6e6 100644
--- a/src/glsl/hir_field_selection.cpp
+++ b/src/glsl/hir_field_selection.cpp
@@ -77,7 +77,7 @@ _mesa_ast_field_selection_to_hir(const ast_expression *expr,
result = new(ctx) ir_constant(op->type->array_size());
} else if (op->type->is_vector()) {
- if (state->ARB_shading_language_420pack_enable) {
+ if (state->ext.ARB_shading_language_420pack_enable) {
/* .length() returns int. */
result = new(ctx) ir_constant((int) op->type->vector_elements);
} else {
@@ -85,7 +85,7 @@ _mesa_ast_field_selection_to_hir(const ast_expression *expr,
"with ARB_shading_language_420pack");
}
} else if (op->type->is_matrix()) {
- if (state->ARB_shading_language_420pack_enable) {
+ if (state->ext.ARB_shading_language_420pack_enable) {
/* .length() returns int. */
result = new(ctx) ir_constant((int) op->type->matrix_columns);
} else {
@@ -97,7 +97,7 @@ _mesa_ast_field_selection_to_hir(const ast_expression *expr,
_mesa_glsl_error(&loc, state, "unknown method: `%s'", method);
}
} else if (op->type->is_vector() ||
- (state->ARB_shading_language_420pack_enable &&
+ (state->ext.ARB_shading_language_420pack_enable &&
op->type->is_scalar())) {
ir_swizzle *swiz = ir_swizzle::create(op,
expr->primary_expression.identifier,
diff --git a/src/mesa/main/ff_fragment_shader.cpp b/src/mesa/main/ff_fragment_shader.cpp
index cad67aa..25bee68 100644
--- a/src/mesa/main/ff_fragment_shader.cpp
+++ b/src/mesa/main/ff_fragment_shader.cpp
@@ -1315,7 +1315,7 @@ create_new_program(struct gl_context *ctx, struct state_key *key)
state->language_version = 130;
state->es_shader = false;
if (_mesa_is_gles(ctx) && ctx->Extensions.OES_EGL_image_external)
- state->OES_EGL_image_external_enable = true;
+ state->ext.OES_EGL_image_external_enable = true;
_mesa_glsl_initialize_types(state);
_mesa_glsl_initialize_variables(p.instructions, state);
--
1.8.3.1
More information about the mesa-dev
mailing list