glsl/parser: extract consts/exts/api out of context at start.
This stores these pointers separately. in theory now gl_context can be made more opaque later, if we split header files ups. Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14437>
This commit is contained in:
@@ -631,7 +631,7 @@ generate_call(exec_list *instructions, ir_function_signature *sig,
|
||||
* instructions; just generate an ir_constant.
|
||||
*/
|
||||
if (state->is_version(120, 100) ||
|
||||
state->ctx->Const.AllowGLSLBuiltinConstantExpression) {
|
||||
state->consts->AllowGLSLBuiltinConstantExpression) {
|
||||
ir_constant *value = sig->constant_expression_value(ctx,
|
||||
actual_parameters,
|
||||
NULL);
|
||||
|
@@ -2917,11 +2917,11 @@ static bool
|
||||
validate_stream_qualifier(YYLTYPE *loc, struct _mesa_glsl_parse_state *state,
|
||||
unsigned stream)
|
||||
{
|
||||
if (stream >= state->ctx->Const.MaxVertexStreams) {
|
||||
if (stream >= state->consts->MaxVertexStreams) {
|
||||
_mesa_glsl_error(loc, state,
|
||||
"invalid stream specified %d is larger than "
|
||||
"MAX_VERTEX_STREAMS - 1 (%d).",
|
||||
stream, state->ctx->Const.MaxVertexStreams - 1);
|
||||
stream, state->consts->MaxVertexStreams - 1);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2948,7 +2948,7 @@ apply_explicit_binding(struct _mesa_glsl_parse_state *state,
|
||||
return;
|
||||
}
|
||||
|
||||
const struct gl_context *const ctx = state->ctx;
|
||||
const struct gl_constants *consts = state->consts;
|
||||
unsigned elements = type->is_array() ? type->arrays_of_arrays_size() : 1;
|
||||
unsigned max_index = qual_binding + elements - 1;
|
||||
const glsl_type *base_type = type->without_array();
|
||||
@@ -2965,11 +2965,11 @@ apply_explicit_binding(struct _mesa_glsl_parse_state *state,
|
||||
* The implementation-dependent maximum is GL_MAX_UNIFORM_BUFFER_BINDINGS.
|
||||
*/
|
||||
if (qual->flags.q.uniform &&
|
||||
max_index >= ctx->Const.MaxUniformBufferBindings) {
|
||||
max_index >= consts->MaxUniformBufferBindings) {
|
||||
_mesa_glsl_error(loc, state, "layout(binding = %u) for %d UBOs exceeds "
|
||||
"the maximum number of UBO binding points (%d)",
|
||||
qual_binding, elements,
|
||||
ctx->Const.MaxUniformBufferBindings);
|
||||
consts->MaxUniformBufferBindings);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2983,11 +2983,11 @@ apply_explicit_binding(struct _mesa_glsl_parse_state *state,
|
||||
* be within this range."
|
||||
*/
|
||||
if (qual->flags.q.buffer &&
|
||||
max_index >= ctx->Const.MaxShaderStorageBufferBindings) {
|
||||
max_index >= consts->MaxShaderStorageBufferBindings) {
|
||||
_mesa_glsl_error(loc, state, "layout(binding = %u) for %d SSBOs exceeds "
|
||||
"the maximum number of SSBO binding points (%d)",
|
||||
qual_binding, elements,
|
||||
ctx->Const.MaxShaderStorageBufferBindings);
|
||||
consts->MaxShaderStorageBufferBindings);
|
||||
return;
|
||||
}
|
||||
} else if (base_type->is_sampler()) {
|
||||
@@ -2998,7 +2998,7 @@ apply_explicit_binding(struct _mesa_glsl_parse_state *state,
|
||||
* with an array of size N, all elements of the array from binding
|
||||
* through binding + N - 1 must be within this range."
|
||||
*/
|
||||
unsigned limit = ctx->Const.MaxCombinedTextureImageUnits;
|
||||
unsigned limit = consts->MaxCombinedTextureImageUnits;
|
||||
|
||||
if (max_index >= limit) {
|
||||
_mesa_glsl_error(loc, state, "layout(binding = %d) for %d samplers "
|
||||
@@ -3008,23 +3008,23 @@ apply_explicit_binding(struct _mesa_glsl_parse_state *state,
|
||||
return;
|
||||
}
|
||||
} else if (base_type->contains_atomic()) {
|
||||
assert(ctx->Const.MaxAtomicBufferBindings <= MAX_COMBINED_ATOMIC_BUFFERS);
|
||||
if (qual_binding >= ctx->Const.MaxAtomicBufferBindings) {
|
||||
assert(consts->MaxAtomicBufferBindings <= MAX_COMBINED_ATOMIC_BUFFERS);
|
||||
if (qual_binding >= consts->MaxAtomicBufferBindings) {
|
||||
_mesa_glsl_error(loc, state, "layout(binding = %d) exceeds the "
|
||||
"maximum number of atomic counter buffer bindings "
|
||||
"(%u)", qual_binding,
|
||||
ctx->Const.MaxAtomicBufferBindings);
|
||||
consts->MaxAtomicBufferBindings);
|
||||
|
||||
return;
|
||||
}
|
||||
} else if ((state->is_version(420, 310) ||
|
||||
state->ARB_shading_language_420pack_enable) &&
|
||||
base_type->is_image()) {
|
||||
assert(ctx->Const.MaxImageUnits <= MAX_IMAGE_UNITS);
|
||||
if (max_index >= ctx->Const.MaxImageUnits) {
|
||||
assert(consts->MaxImageUnits <= MAX_IMAGE_UNITS);
|
||||
if (max_index >= consts->MaxImageUnits) {
|
||||
_mesa_glsl_error(loc, state, "Image binding %d exceeds the "
|
||||
"maximum number of image units (%d)", max_index,
|
||||
ctx->Const.MaxImageUnits);
|
||||
consts->MaxImageUnits);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3268,13 +3268,13 @@ apply_explicit_location(const struct ast_type_qualifier *qual,
|
||||
if (!state->check_explicit_uniform_location_allowed(loc, var))
|
||||
return;
|
||||
|
||||
const struct gl_context *const ctx = state->ctx;
|
||||
const struct gl_constants *consts = state->consts;
|
||||
unsigned max_loc = qual_location + var->type->uniform_locations() - 1;
|
||||
|
||||
if (max_loc >= ctx->Const.MaxUserAssignableUniformLocations) {
|
||||
if (max_loc >= consts->MaxUserAssignableUniformLocations) {
|
||||
_mesa_glsl_error(loc, state, "location(s) consumed by uniform %s "
|
||||
">= MAX_UNIFORM_LOCATIONS (%u)", var->name,
|
||||
ctx->Const.MaxUserAssignableUniformLocations);
|
||||
consts->MaxUserAssignableUniformLocations);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -8808,20 +8808,20 @@ ast_cs_input_layout::hir(exec_list *instructions,
|
||||
}
|
||||
ralloc_free(local_size_str);
|
||||
|
||||
if (qual_local_size[i] > state->ctx->Const.MaxComputeWorkGroupSize[i]) {
|
||||
if (qual_local_size[i] > state->consts->MaxComputeWorkGroupSize[i]) {
|
||||
_mesa_glsl_error(&loc, state,
|
||||
"local_size_%c exceeds MAX_COMPUTE_WORK_GROUP_SIZE"
|
||||
" (%d)", 'x' + i,
|
||||
state->ctx->Const.MaxComputeWorkGroupSize[i]);
|
||||
state->consts->MaxComputeWorkGroupSize[i]);
|
||||
break;
|
||||
}
|
||||
total_invocations *= qual_local_size[i];
|
||||
if (total_invocations >
|
||||
state->ctx->Const.MaxComputeWorkGroupInvocations) {
|
||||
state->consts->MaxComputeWorkGroupInvocations) {
|
||||
_mesa_glsl_error(&loc, state,
|
||||
"product of local_sizes exceeds "
|
||||
"MAX_COMPUTE_WORK_GROUP_INVOCATIONS (%d)",
|
||||
state->ctx->Const.MaxComputeWorkGroupInvocations);
|
||||
state->consts->MaxComputeWorkGroupInvocations);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -312,49 +312,49 @@ static bool
|
||||
gpu_shader4_integer(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return state->EXT_gpu_shader4_enable &&
|
||||
state->ctx->Extensions.EXT_texture_integer;
|
||||
state->exts->EXT_texture_integer;
|
||||
}
|
||||
|
||||
static bool
|
||||
gpu_shader4_array(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return state->EXT_gpu_shader4_enable &&
|
||||
state->ctx->Extensions.EXT_texture_array;
|
||||
state->exts->EXT_texture_array;
|
||||
}
|
||||
|
||||
static bool
|
||||
gpu_shader4_array_integer(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return gpu_shader4_array(state) &&
|
||||
state->ctx->Extensions.EXT_texture_integer;
|
||||
state->exts->EXT_texture_integer;
|
||||
}
|
||||
|
||||
static bool
|
||||
gpu_shader4_rect(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return state->EXT_gpu_shader4_enable &&
|
||||
state->ctx->Extensions.NV_texture_rectangle;
|
||||
state->exts->NV_texture_rectangle;
|
||||
}
|
||||
|
||||
static bool
|
||||
gpu_shader4_rect_integer(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return gpu_shader4_rect(state) &&
|
||||
state->ctx->Extensions.EXT_texture_integer;
|
||||
state->exts->EXT_texture_integer;
|
||||
}
|
||||
|
||||
static bool
|
||||
gpu_shader4_tbo(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return state->EXT_gpu_shader4_enable &&
|
||||
state->ctx->Extensions.EXT_texture_buffer_object;
|
||||
state->exts->EXT_texture_buffer_object;
|
||||
}
|
||||
|
||||
static bool
|
||||
gpu_shader4_tbo_integer(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return gpu_shader4_tbo(state) &&
|
||||
state->ctx->Extensions.EXT_texture_integer;
|
||||
state->exts->EXT_texture_integer;
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -368,21 +368,21 @@ static bool
|
||||
gpu_shader4_integer_derivs_only(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return gpu_shader4_derivs_only(state) &&
|
||||
state->ctx->Extensions.EXT_texture_integer;
|
||||
state->exts->EXT_texture_integer;
|
||||
}
|
||||
|
||||
static bool
|
||||
gpu_shader4_array_derivs_only(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return gpu_shader4_derivs_only(state) &&
|
||||
state->ctx->Extensions.EXT_texture_array;
|
||||
state->exts->EXT_texture_array;
|
||||
}
|
||||
|
||||
static bool
|
||||
gpu_shader4_array_integer_derivs_only(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return gpu_shader4_array_derivs_only(state) &&
|
||||
state->ctx->Extensions.EXT_texture_integer;
|
||||
state->exts->EXT_texture_integer;
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -465,7 +465,7 @@ texture_array_lod(const _mesa_glsl_parse_state *state)
|
||||
return lod_exists_in_stage(state) &&
|
||||
(state->EXT_texture_array_enable ||
|
||||
(state->EXT_gpu_shader4_enable &&
|
||||
state->ctx->Extensions.EXT_texture_array));
|
||||
state->exts->EXT_texture_array));
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -473,7 +473,7 @@ texture_array(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return state->EXT_texture_array_enable ||
|
||||
(state->EXT_gpu_shader4_enable &&
|
||||
state->ctx->Extensions.EXT_texture_array);
|
||||
state->exts->EXT_texture_array);
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -593,7 +593,7 @@ derivatives(const _mesa_glsl_parse_state *state)
|
||||
return derivatives_only(state) &&
|
||||
(state->is_version(110, 300) ||
|
||||
state->OES_standard_derivatives_enable ||
|
||||
state->ctx->Const.AllowGLSLRelaxedES);
|
||||
state->consts->AllowGLSLRelaxedES);
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -875,7 +875,7 @@ shader_integer_functions2_int64(const _mesa_glsl_parse_state *state)
|
||||
static bool
|
||||
is_nir(const _mesa_glsl_parse_state *state)
|
||||
{
|
||||
return state->ctx->Const.ShaderCompilerOptions[state->stage].NirOptions;
|
||||
return state->consts->ShaderCompilerOptions[state->stage].NirOptions;
|
||||
}
|
||||
|
||||
static bool
|
||||
|
@@ -333,17 +333,17 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state)
|
||||
|
||||
add_type(symbols, glsl_type::samplerCubeShadow_type);
|
||||
|
||||
if (state->ctx->Extensions.EXT_texture_array) {
|
||||
if (state->exts->EXT_texture_array) {
|
||||
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->ctx->Extensions.EXT_texture_buffer_object) {
|
||||
if (state->exts->EXT_texture_buffer_object) {
|
||||
add_type(symbols, glsl_type::samplerBuffer_type);
|
||||
}
|
||||
|
||||
if (state->ctx->Extensions.EXT_texture_integer) {
|
||||
if (state->exts->EXT_texture_integer) {
|
||||
add_type(symbols, glsl_type::isampler1D_type);
|
||||
add_type(symbols, glsl_type::isampler2D_type);
|
||||
add_type(symbols, glsl_type::isampler3D_type);
|
||||
@@ -354,17 +354,17 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state)
|
||||
add_type(symbols, glsl_type::usampler3D_type);
|
||||
add_type(symbols, glsl_type::usamplerCube_type);
|
||||
|
||||
if (state->ctx->Extensions.NV_texture_rectangle) {
|
||||
if (state->exts->NV_texture_rectangle) {
|
||||
add_type(symbols, glsl_type::isampler2DRect_type);
|
||||
add_type(symbols, glsl_type::usampler2DRect_type);
|
||||
}
|
||||
if (state->ctx->Extensions.EXT_texture_array) {
|
||||
if (state->exts->EXT_texture_array) {
|
||||
add_type(symbols, glsl_type::isampler1DArray_type);
|
||||
add_type(symbols, glsl_type::isampler2DArray_type);
|
||||
add_type(symbols, glsl_type::usampler1DArray_type);
|
||||
add_type(symbols, glsl_type::usampler2DArray_type);
|
||||
}
|
||||
if (state->ctx->Extensions.EXT_texture_buffer_object) {
|
||||
if (state->exts->EXT_texture_buffer_object) {
|
||||
add_type(symbols, glsl_type::isamplerBuffer_type);
|
||||
add_type(symbols, glsl_type::usamplerBuffer_type);
|
||||
}
|
||||
|
@@ -757,12 +757,12 @@ builtin_variable_generator::generate_constants()
|
||||
*/
|
||||
if (state->is_version(0, 300)) {
|
||||
add_const("gl_MaxVertexOutputVectors",
|
||||
state->ctx->Const.Program[MESA_SHADER_VERTEX].MaxOutputComponents / 4);
|
||||
state->consts->Program[MESA_SHADER_VERTEX].MaxOutputComponents / 4);
|
||||
add_const("gl_MaxFragmentInputVectors",
|
||||
state->ctx->Const.Program[MESA_SHADER_FRAGMENT].MaxInputComponents / 4);
|
||||
state->consts->Program[MESA_SHADER_FRAGMENT].MaxInputComponents / 4);
|
||||
} else {
|
||||
add_const("gl_MaxVaryingVectors",
|
||||
state->ctx->Const.MaxVarying);
|
||||
state->consts->MaxVarying);
|
||||
}
|
||||
|
||||
/* EXT_blend_func_extended brings a built in constant
|
||||
@@ -778,7 +778,7 @@ builtin_variable_generator::generate_constants()
|
||||
* compat profile in GLSL 4.20. GLSL ES never supported this constant.
|
||||
*/
|
||||
if (compatibility || !state->is_version(420, 100)) {
|
||||
add_const("gl_MaxVaryingFloats", state->ctx->Const.MaxVarying * 4);
|
||||
add_const("gl_MaxVaryingFloats", state->consts->MaxVarying * 4);
|
||||
}
|
||||
|
||||
/* Texel offsets were introduced in ARB_shading_language_420pack (which
|
||||
@@ -798,7 +798,7 @@ builtin_variable_generator::generate_constants()
|
||||
add_const("gl_MaxClipDistances", state->Const.MaxClipPlanes);
|
||||
}
|
||||
if (state->is_version(130, 0)) {
|
||||
add_const("gl_MaxVaryingComponents", state->ctx->Const.MaxVarying * 4);
|
||||
add_const("gl_MaxVaryingComponents", state->consts->MaxVarying * 4);
|
||||
}
|
||||
if (state->has_cull_distance()) {
|
||||
add_const("gl_MaxCullDistances", state->Const.MaxClipPlanes);
|
||||
@@ -1188,7 +1188,7 @@ builtin_variable_generator::generate_tcs_special_vars()
|
||||
add_output(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2),
|
||||
GLSL_PRECISION_HIGH, "gl_TessLevelInner")->data.patch = 1;
|
||||
/* XXX What to do if multiple are flipped on? */
|
||||
int bbox_slot = state->ctx->Const.NoPrimitiveBoundingBoxOutput ? -1 :
|
||||
int bbox_slot = state->consts->NoPrimitiveBoundingBoxOutput ? -1 :
|
||||
VARYING_SLOT_BOUNDING_BOX0;
|
||||
if (state->EXT_primitive_bounding_box_enable)
|
||||
add_output(bbox_slot, array(vec4_t, 2), "gl_BoundingBoxEXT")
|
||||
@@ -1229,7 +1229,7 @@ builtin_variable_generator::generate_tes_special_vars()
|
||||
"gl_PatchVerticesIn");
|
||||
add_system_value(SYSTEM_VALUE_TESS_COORD, vec3_t, GLSL_PRECISION_HIGH,
|
||||
"gl_TessCoord");
|
||||
if (this->state->ctx->Const.GLSLTessLevelsAsInputs) {
|
||||
if (this->state->consts->GLSLTessLevelsAsInputs) {
|
||||
add_input(VARYING_SLOT_TESS_LEVEL_OUTER, array(float_t, 4),
|
||||
GLSL_PRECISION_HIGH, "gl_TessLevelOuter")->data.patch = 1;
|
||||
add_input(VARYING_SLOT_TESS_LEVEL_INNER, array(float_t, 2),
|
||||
@@ -1313,14 +1313,14 @@ builtin_variable_generator::generate_fs_special_vars()
|
||||
GLSL_PRECISION_HIGH :
|
||||
GLSL_PRECISION_MEDIUM);
|
||||
|
||||
if (this->state->ctx->Const.GLSLFragCoordIsSysVal) {
|
||||
if (this->state->consts->GLSLFragCoordIsSysVal) {
|
||||
add_system_value(SYSTEM_VALUE_FRAG_COORD, vec4_t, frag_coord_precision,
|
||||
"gl_FragCoord");
|
||||
} else {
|
||||
add_input(VARYING_SLOT_POS, vec4_t, frag_coord_precision, "gl_FragCoord");
|
||||
}
|
||||
|
||||
if (this->state->ctx->Const.GLSLFrontFacingIsSysVal) {
|
||||
if (this->state->consts->GLSLFrontFacingIsSysVal) {
|
||||
var = add_system_value(SYSTEM_VALUE_FRONT_FACE, bool_t, "gl_FrontFacing");
|
||||
var->data.interpolation = INTERP_MODE_FLAT;
|
||||
} else {
|
||||
@@ -1329,7 +1329,7 @@ builtin_variable_generator::generate_fs_special_vars()
|
||||
}
|
||||
|
||||
if (state->is_version(120, 100)) {
|
||||
if (this->state->ctx->Const.GLSLPointCoordIsSysVal)
|
||||
if (this->state->consts->GLSLPointCoordIsSysVal)
|
||||
add_system_value(SYSTEM_VALUE_POINT_COORD, vec2_t,
|
||||
GLSL_PRECISION_MEDIUM, "gl_PointCoord");
|
||||
else
|
||||
@@ -1505,8 +1505,8 @@ builtin_variable_generator::add_varying(int slot, const glsl_type *type,
|
||||
void
|
||||
builtin_variable_generator::generate_varyings()
|
||||
{
|
||||
struct gl_shader_compiler_options *options =
|
||||
&state->ctx->Const.ShaderCompilerOptions[state->stage];
|
||||
const struct gl_shader_compiler_options *options =
|
||||
&state->consts->ShaderCompilerOptions[state->stage];
|
||||
|
||||
/* gl_Position and gl_PointSize are not visible from fragment shaders. */
|
||||
if (state->stage != MESA_SHADER_FRAGMENT) {
|
||||
|
@@ -455,25 +455,25 @@ sampler1D DEPRECATED_ES_TYPE(glsl_type::sampler1D_type);
|
||||
sampler2D { yylval->type = glsl_type::sampler2D_type; return BASIC_TYPE_TOK; }
|
||||
sampler3D { yylval->type = glsl_type::sampler3D_type; return BASIC_TYPE_TOK; }
|
||||
samplerCube { yylval->type = glsl_type::samplerCube_type; return BASIC_TYPE_TOK; }
|
||||
sampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_array, glsl_type::sampler1DArray_type);
|
||||
sampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_array, glsl_type::sampler2DArray_type);
|
||||
sampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler1DArray_type);
|
||||
sampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler2DArray_type);
|
||||
sampler1DShadow DEPRECATED_ES_TYPE(glsl_type::sampler1DShadow_type);
|
||||
sampler2DShadow { yylval->type = glsl_type::sampler2DShadow_type; return BASIC_TYPE_TOK; }
|
||||
samplerCubeShadow TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable, glsl_type::samplerCubeShadow_type);
|
||||
sampler1DArrayShadow TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_array, glsl_type::sampler1DArrayShadow_type);
|
||||
sampler2DArrayShadow TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_array, glsl_type::sampler2DArrayShadow_type);
|
||||
isampler1D TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::isampler1D_type);
|
||||
isampler2D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::isampler2D_type);
|
||||
isampler3D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::isampler3D_type);
|
||||
isamplerCube TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::isamplerCube_type);
|
||||
isampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer && yyextra->ctx->Extensions.EXT_texture_array, glsl_type::isampler1DArray_type);
|
||||
isampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer && yyextra->ctx->Extensions.EXT_texture_array, glsl_type::isampler2DArray_type);
|
||||
usampler1D TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::usampler1D_type);
|
||||
usampler2D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::usampler2D_type);
|
||||
usampler3D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::usampler3D_type);
|
||||
usamplerCube TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::usamplerCube_type);
|
||||
usampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer && yyextra->ctx->Extensions.EXT_texture_array, glsl_type::usampler1DArray_type);
|
||||
usampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_integer && yyextra->ctx->Extensions.EXT_texture_array, glsl_type::usampler2DArray_type);
|
||||
sampler1DArrayShadow TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler1DArrayShadow_type);
|
||||
sampler2DArrayShadow TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_array, glsl_type::sampler2DArrayShadow_type);
|
||||
isampler1D TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler1D_type);
|
||||
isampler2D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler2D_type);
|
||||
isampler3D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isampler3D_type);
|
||||
isamplerCube TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::isamplerCube_type);
|
||||
isampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::isampler1DArray_type);
|
||||
isampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::isampler2DArray_type);
|
||||
usampler1D TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler1D_type);
|
||||
usampler2D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler2D_type);
|
||||
usampler3D TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usampler3D_type);
|
||||
usamplerCube TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer, glsl_type::usamplerCube_type);
|
||||
usampler1DArray TYPE_WITH_ALT(130, 300, 130, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::usampler1DArray_type);
|
||||
usampler2DArray TYPE_WITH_ALT(130, 300, 130, 300, yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_integer && yyextra->exts->EXT_texture_array, glsl_type::usampler2DArray_type);
|
||||
|
||||
/* additional keywords in ARB_texture_multisample, included in GLSL 1.50 */
|
||||
/* these are reserved but not defined in GLSL 3.00 */
|
||||
@@ -713,15 +713,15 @@ common KEYWORD(130, 300, 0, 0, COMMON);
|
||||
partition KEYWORD(130, 300, 0, 0, PARTITION);
|
||||
active KEYWORD(130, 300, 0, 0, ACTIVE);
|
||||
superp KEYWORD(130, 100, 0, 0, SUPERP);
|
||||
samplerBuffer TYPE_WITH_ALT(130, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_buffer_object), glsl_type::samplerBuffer_type);
|
||||
samplerBuffer TYPE_WITH_ALT(130, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object), glsl_type::samplerBuffer_type);
|
||||
filter KEYWORD(130, 300, 0, 0, FILTER);
|
||||
row_major KEYWORD_WITH_ALT(130, 0, 140, 0, yyextra->ARB_uniform_buffer_object_enable && !yyextra->es_shader, ROW_MAJOR);
|
||||
|
||||
/* Additional reserved words in GLSL 1.40 */
|
||||
isampler2DRect TYPE_WITH_ALT(140, 300, 140, 0, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.NV_texture_rectangle && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::isampler2DRect_type);
|
||||
usampler2DRect TYPE_WITH_ALT(140, 300, 140, 0, yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.NV_texture_rectangle && yyextra->ctx->Extensions.EXT_texture_integer, glsl_type::usampler2DRect_type);
|
||||
isamplerBuffer TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_buffer_object && yyextra->ctx->Extensions.EXT_texture_integer), glsl_type::isamplerBuffer_type);
|
||||
usamplerBuffer TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->ctx->Extensions.EXT_texture_buffer_object && yyextra->ctx->Extensions.EXT_texture_integer), glsl_type::usamplerBuffer_type);
|
||||
isampler2DRect TYPE_WITH_ALT(140, 300, 140, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->NV_texture_rectangle && yyextra->exts->EXT_texture_integer, glsl_type::isampler2DRect_type);
|
||||
usampler2DRect TYPE_WITH_ALT(140, 300, 140, 0, yyextra->EXT_gpu_shader4_enable && yyextra->exts->NV_texture_rectangle && yyextra->exts->EXT_texture_integer, glsl_type::usampler2DRect_type);
|
||||
isamplerBuffer TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object && yyextra->exts->EXT_texture_integer), glsl_type::isamplerBuffer_type);
|
||||
usamplerBuffer TYPE_WITH_ALT(140, 300, 140, 320, yyextra->EXT_texture_buffer_enable || yyextra->OES_texture_buffer_enable || (yyextra->EXT_gpu_shader4_enable && yyextra->exts->EXT_texture_buffer_object && yyextra->exts->EXT_texture_integer), glsl_type::usamplerBuffer_type);
|
||||
|
||||
/* Additional reserved words in GLSL ES 3.00 */
|
||||
resource KEYWORD(420, 300, 0, 0, RESOURCE);
|
||||
|
@@ -61,7 +61,8 @@ static const unsigned known_desktop_gl_versions[] =
|
||||
_mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
|
||||
gl_shader_stage stage,
|
||||
void *mem_ctx)
|
||||
: ctx(_ctx), cs_input_local_size_specified(false), cs_input_local_size(),
|
||||
: ctx(_ctx), exts(&_ctx->Extensions), consts(&_ctx->Const),
|
||||
api(_ctx->API), cs_input_local_size_specified(false), cs_input_local_size(),
|
||||
switch_state(), warnings_enabled(true)
|
||||
{
|
||||
assert(stage < MESA_SHADER_STAGES);
|
||||
@@ -417,10 +418,10 @@ _mesa_glsl_parse_state::set_valid_gl_and_glsl_versions(YYLTYPE *locp)
|
||||
* Later calls to _mesa_glsl_initialize_types will misbehave if
|
||||
* the version is invalid.
|
||||
*/
|
||||
switch (this->ctx->API) {
|
||||
switch (this->api) {
|
||||
case API_OPENGL_COMPAT:
|
||||
case API_OPENGL_CORE:
|
||||
this->language_version = this->ctx->Const.GLSLVersion;
|
||||
this->language_version = this->consts->GLSLVersion;
|
||||
break;
|
||||
|
||||
case API_OPENGLES:
|
||||
@@ -458,8 +459,8 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
|
||||
} else if (strcmp(ident, "compatibility") == 0) {
|
||||
compat_token_present = true;
|
||||
|
||||
if (this->ctx->API != API_OPENGL_COMPAT &&
|
||||
!this->ctx->Const.AllowGLSLCompatShaders) {
|
||||
if (this->api != API_OPENGL_COMPAT &&
|
||||
!this->consts->AllowGLSLCompatShaders) {
|
||||
_mesa_glsl_error(locp, this,
|
||||
"the compatibility profile is not supported");
|
||||
}
|
||||
@@ -495,8 +496,8 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE *locp, int version,
|
||||
this->language_version = version;
|
||||
|
||||
this->compat_shader = compat_token_present ||
|
||||
this->ctx->Const.ForceCompatShaders ||
|
||||
(this->ctx->API == API_OPENGL_COMPAT &&
|
||||
this->consts->ForceCompatShaders ||
|
||||
(this->api == API_OPENGL_COMPAT &&
|
||||
this->language_version == 140) ||
|
||||
(!this->es_shader && this->language_version < 140);
|
||||
|
||||
@@ -598,7 +599,7 @@ struct _mesa_glsl_extension {
|
||||
* Predicate that checks whether the relevant extension is available for
|
||||
* this context.
|
||||
*/
|
||||
bool (*available_pred)(const struct gl_context *,
|
||||
bool (*available_pred)(const struct gl_extensions *,
|
||||
gl_api api, uint8_t version);
|
||||
|
||||
/**
|
||||
@@ -628,9 +629,9 @@ struct _mesa_glsl_extension {
|
||||
/** Checks if the context supports a user-facing extension */
|
||||
#define EXT(name_str, driver_cap, ...) \
|
||||
static UNUSED bool \
|
||||
has_##name_str(const struct gl_context *ctx, gl_api api, uint8_t version) \
|
||||
has_##name_str(const struct gl_extensions *exts, gl_api api, uint8_t version) \
|
||||
{ \
|
||||
return ctx->Extensions.driver_cap && (version >= \
|
||||
return exts->driver_cap && (version >= \
|
||||
_mesa_extension_table[MESA_EXTENSION_##name_str].version[api]); \
|
||||
}
|
||||
#include "main/extensions_table.h"
|
||||
@@ -793,7 +794,7 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = {
|
||||
bool _mesa_glsl_extension::compatible_with_state(
|
||||
const _mesa_glsl_parse_state *state, gl_api api, uint8_t gl_version) const
|
||||
{
|
||||
return this->available_pred(state->ctx, api, gl_version);
|
||||
return this->available_pred(state->exts, api, gl_version);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -830,8 +831,8 @@ _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
|
||||
const char *behavior_string, YYLTYPE *behavior_locp,
|
||||
_mesa_glsl_parse_state *state)
|
||||
{
|
||||
uint8_t gl_version = state->ctx->Extensions.Version;
|
||||
gl_api api = state->ctx->API;
|
||||
uint8_t gl_version = state->exts->Version;
|
||||
gl_api api = state->api;
|
||||
ext_behavior behavior;
|
||||
if (strcmp(behavior_string, "warn") == 0) {
|
||||
behavior = extension_warn;
|
||||
@@ -879,7 +880,7 @@ _mesa_glsl_process_extension(const char *name, YYLTYPE *name_locp,
|
||||
const _mesa_glsl_extension *extension = find_extension(name);
|
||||
if (extension &&
|
||||
(extension->compatible_with_state(state, api, gl_version) ||
|
||||
(state->ctx->Const.AllowGLSLCompatShaders &&
|
||||
(state->consts->AllowGLSLCompatShaders &&
|
||||
extension->compatible_with_state(state, API_OPENGL_COMPAT, gl_version)))) {
|
||||
extension->set_flags(state, behavior);
|
||||
if (extension->available_pred == has_ANDROID_extension_pack_es31a) {
|
||||
@@ -2051,8 +2052,8 @@ add_builtin_defines(struct _mesa_glsl_parse_state *state,
|
||||
unsigned version,
|
||||
bool es)
|
||||
{
|
||||
unsigned gl_version = state->ctx->Extensions.Version;
|
||||
gl_api api = state->ctx->API;
|
||||
unsigned gl_version = state->exts->Version;
|
||||
gl_api api = state->api;
|
||||
|
||||
if (gl_version != 0xff) {
|
||||
unsigned i;
|
||||
@@ -2094,27 +2095,27 @@ do_late_parsing_checks(struct _mesa_glsl_parse_state *state)
|
||||
}
|
||||
|
||||
static void
|
||||
opt_shader_and_create_symbol_table(struct gl_context *ctx,
|
||||
opt_shader_and_create_symbol_table(const struct gl_constants *consts,
|
||||
struct glsl_symbol_table *source_symbols,
|
||||
struct gl_shader *shader)
|
||||
{
|
||||
assert(shader->CompileStatus != COMPILE_FAILURE &&
|
||||
!shader->ir->is_empty());
|
||||
|
||||
struct gl_shader_compiler_options *options =
|
||||
&ctx->Const.ShaderCompilerOptions[shader->Stage];
|
||||
const struct gl_shader_compiler_options *options =
|
||||
&consts->ShaderCompilerOptions[shader->Stage];
|
||||
|
||||
/* Do some optimization at compile time to reduce shader IR size
|
||||
* and reduce later work if the same shader is linked multiple times
|
||||
*/
|
||||
if (ctx->Const.GLSLOptimizeConservatively) {
|
||||
if (consts->GLSLOptimizeConservatively) {
|
||||
/* Run it just once. */
|
||||
do_common_optimization(shader->ir, false, false, options,
|
||||
ctx->Const.NativeIntegers);
|
||||
consts->NativeIntegers);
|
||||
} else {
|
||||
/* Repeat it until it stops making changes. */
|
||||
while (do_common_optimization(shader->ir, false, false, options,
|
||||
ctx->Const.NativeIntegers))
|
||||
consts->NativeIntegers))
|
||||
;
|
||||
}
|
||||
|
||||
@@ -2308,7 +2309,7 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader,
|
||||
lower_builtins(shader->ir);
|
||||
assign_subroutine_indexes(state);
|
||||
lower_subroutine(shader->ir, state);
|
||||
opt_shader_and_create_symbol_table(ctx, state->symbols, shader);
|
||||
opt_shader_and_create_symbol_table(&ctx->Const, state->symbols, shader);
|
||||
}
|
||||
|
||||
if (!force_recompile) {
|
||||
|
@@ -373,7 +373,10 @@ struct _mesa_glsl_parse_state {
|
||||
void process_version_directive(YYLTYPE *locp, int version,
|
||||
const char *ident);
|
||||
|
||||
struct gl_context *const ctx;
|
||||
struct gl_context *const ctx; /* only to be used for debug callback. */
|
||||
const struct gl_extensions *exts;
|
||||
const struct gl_constants *consts;
|
||||
gl_api api;
|
||||
void *scanner;
|
||||
exec_list translation_unit;
|
||||
glsl_symbol_table *symbols;
|
||||
|
Reference in New Issue
Block a user