diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index 88707af0e02..e8801ba4cbd 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -2391,14 +2391,11 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, state->has_implicit_int_to_uint_conversion(); shader->KHR_shader_subgroup_basic_enable = state->KHR_shader_subgroup_basic_enable; - struct gl_shader_compiler_options *options = - &ctx->Const.ShaderCompilerOptions[shader->Stage]; - if (!state->error && !shader->ir->is_empty()) { if (state->es_shader && (ctx->screen->shader_caps[shader->Stage].fp16 || ctx->screen->shader_caps[shader->Stage].int16)) - lower_precision(ctx->screen, shader->Stage, options, shader->ir); + lower_precision(ctx->screen, shader->Stage, shader->ir); lower_builtins(shader->ir); assign_subroutine_indexes(state); diff --git a/src/compiler/glsl/ir_optimization.h b/src/compiler/glsl/ir_optimization.h index daf3cf67e30..2c860b495d5 100644 --- a/src/compiler/glsl/ir_optimization.h +++ b/src/compiler/glsl/ir_optimization.h @@ -67,7 +67,6 @@ namespace ir_builder { class ir_factory; }; void lower_precision(const struct pipe_screen *screen, mesa_shader_stage stage, - const struct gl_shader_compiler_options *options, ir_exec_list *instructions); #endif /* GLSL_IR_OPTIMIZATION_H */ diff --git a/src/compiler/glsl/lower_precision.cpp b/src/compiler/glsl/lower_precision.cpp index bd206f9929f..1285a7f3a48 100644 --- a/src/compiler/glsl/lower_precision.cpp +++ b/src/compiler/glsl/lower_precision.cpp @@ -43,8 +43,7 @@ namespace { class find_precision_visitor : public ir_rvalue_enter_visitor { public: find_precision_visitor(const struct pipe_screen *screen, - mesa_shader_stage stage, - const struct gl_shader_compiler_options *options); + mesa_shader_stage stage); find_precision_visitor(const find_precision_visitor &) = delete; ~find_precision_visitor(); find_precision_visitor & operator=(const find_precision_visitor &) = delete; @@ -72,7 +71,6 @@ public: const struct pipe_screen *screen; mesa_shader_stage stage; - const struct gl_shader_compiler_options *options; }; class find_lowerable_rvalues_visitor : public ir_hierarchical_visitor { @@ -110,8 +108,7 @@ public: find_lowerable_rvalues_visitor(struct set *result, const struct pipe_screen *screen, - mesa_shader_stage stage, - const struct gl_shader_compiler_options *options); + mesa_shader_stage stage); static void stack_enter(class ir_instruction *ir, void *data); static void stack_leave(class ir_instruction *ir, void *data); @@ -137,7 +134,6 @@ public: mesa_shader_stage stage; std::vector stack; struct set *lowerable_rvalues; - const struct gl_shader_compiler_options *options; void pop_stack_entry(); void add_lowerable_children(const stack_entry &entry); @@ -187,13 +183,11 @@ can_lower_type(const struct pipe_screen *screen, mesa_shader_stage stage, find_lowerable_rvalues_visitor::find_lowerable_rvalues_visitor(struct set *res, const struct pipe_screen *screen, - mesa_shader_stage stage, - const struct gl_shader_compiler_options *opts) + mesa_shader_stage stage) { this->screen = screen; this->stage = stage; lowerable_rvalues = res; - options = opts; callback_enter = stack_enter; callback_leave = stack_leave; data_enter = this; @@ -423,8 +417,7 @@ find_lowerable_rvalues_visitor::visit_enter(ir_expression *ir) static unsigned handle_call(ir_call *ir, const struct set *lowerable_rvalues, - const struct pipe_screen *screen, mesa_shader_stage stage, - const struct gl_shader_compiler_options *options) + const struct pipe_screen *screen, mesa_shader_stage stage) { /* The intrinsic call is inside the wrapper imageLoad function that will * be inlined. We have to handle both of them. @@ -568,7 +561,7 @@ find_lowerable_rvalues_visitor::visit_leave(ir_call *ir) assert(var->data.mode == ir_var_temporary); unsigned return_precision = handle_call(ir, lowerable_rvalues, screen, - stage, options); + stage); can_lower_state lower_state = handle_precision(var->type, return_precision); @@ -619,11 +612,10 @@ find_lowerable_rvalues_visitor::visit_leave(ir_assignment *ir) static void find_lowerable_rvalues(const struct pipe_screen *screen, mesa_shader_stage stage, - const struct gl_shader_compiler_options *options, ir_exec_list *instructions, struct set *result) { - find_lowerable_rvalues_visitor v(result, screen, stage, options); + find_lowerable_rvalues_visitor v(result, screen, stage); visit_list_elements(&v, instructions); @@ -929,7 +921,7 @@ find_precision_visitor::map_builtin(linear_ctx *linalloc, ir_function_signature } } - lower_precision(screen, stage, options, &lowered_sig->body); + lower_precision(screen, stage, &lowered_sig->body); _mesa_hash_table_clear(clone_ht, NULL); @@ -939,14 +931,12 @@ find_precision_visitor::map_builtin(linear_ctx *linalloc, ir_function_signature } find_precision_visitor::find_precision_visitor(const struct pipe_screen *screen, - mesa_shader_stage stage, - const struct gl_shader_compiler_options *options) + mesa_shader_stage stage) : lowerable_rvalues(_mesa_pointer_set_create(NULL)), lowered_builtins(NULL), clone_ht(NULL), screen(screen), - stage(stage), - options(options) + stage(stage) { } @@ -971,9 +961,8 @@ find_precision_visitor::~find_precision_visitor() class lower_variables_visitor : public ir_rvalue_enter_visitor { public: lower_variables_visitor(const struct pipe_screen *screen, - mesa_shader_stage stage, - const struct gl_shader_compiler_options *options) - : screen(screen), stage(stage), options(options) { + mesa_shader_stage stage) + : screen(screen), stage(stage) { lower_vars = _mesa_pointer_set_create(NULL); } @@ -997,7 +986,6 @@ public: const struct pipe_screen *screen; mesa_shader_stage stage; - const struct gl_shader_compiler_options *options; set *lower_vars; }; @@ -1366,14 +1354,13 @@ lower_variables_visitor::visit_enter(ir_call *ir) void lower_precision(const struct pipe_screen *screen, mesa_shader_stage stage, - const struct gl_shader_compiler_options *options, ir_exec_list *instructions) { - find_precision_visitor v(screen, stage, options); - find_lowerable_rvalues(screen, stage, options, instructions, + find_precision_visitor v(screen, stage); + find_lowerable_rvalues(screen, stage, instructions, v.lowerable_rvalues); visit_list_elements(&v, instructions); - lower_variables_visitor vars(screen, stage, options); + lower_variables_visitor vars(screen, stage); visit_list_elements(&vars, instructions); } diff --git a/src/compiler/glsl/standalone_scaffolding.cpp b/src/compiler/glsl/standalone_scaffolding.cpp index 2a8794c4bcc..676f5e78ca5 100644 --- a/src/compiler/glsl/standalone_scaffolding.cpp +++ b/src/compiler/glsl/standalone_scaffolding.cpp @@ -284,14 +284,6 @@ void initialize_context_to_defaults(struct gl_context *ctx, gl_api api) ctx->Const.Program[MESA_SHADER_COMPUTE].MaxInputComponents = 0; /* not used */ ctx->Const.Program[MESA_SHADER_COMPUTE].MaxOutputComponents = 0; /* not used */ - /* Set up default shader compiler options. */ - struct gl_shader_compiler_options options; - memset(&options, 0, sizeof(options)); - options.MaxIfDepth = UINT_MAX; - - for (int sh = 0; sh < MESA_SHADER_STAGES; ++sh) - memcpy(&ctx->Const.ShaderCompilerOptions[sh], &options, sizeof(options)); - ctx->Driver.NewProgram = standalone_new_program; } diff --git a/src/mesa/main/consts_exts.h b/src/mesa/main/consts_exts.h index bb1382e90ce..f31f91918ec 100644 --- a/src/mesa/main/consts_exts.h +++ b/src/mesa/main/consts_exts.h @@ -315,49 +315,6 @@ struct gl_extensions GLubyte Version; }; -/** - * Compiler options for a single GLSL shaders type - */ -struct gl_shader_compiler_options -{ - /** Driver-selectable options: */ - GLboolean EmitNoCont; /**< Emit CONT opcode? */ - GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ - GLbitfield LowerBuiltinVariablesXfb; /**< Which builtin variables should - * be lowered for transform feedback - **/ - - /** - * If we can lower the precision of variables based on precision - * qualifiers - */ - GLboolean LowerPrecisionFloat16; - GLboolean LowerPrecisionInt16; - GLboolean LowerPrecisionDerivatives; - GLboolean LowerPrecisionFloat16Uniforms; - GLboolean LowerPrecision16BitLoadDst; - - /** - * This enables lowering of 16b constants. Some drivers may not - * to lower constants to 16b (ie. if the hw can do automatic - * narrowing on constant load) - */ - GLboolean LowerPrecisionConstants; - - /** - * \name Forms of indirect addressing the driver cannot do. - */ - /*@{*/ - GLboolean EmitNoIndirectTemp; /**< No indirect addressing of temps */ - GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */ - /*@}*/ - - GLuint MaxIfDepth; /**< Maximum nested IF blocks */ - - /** Clamp UBO and SSBO block indices so they don't go out-of-bounds. */ - GLboolean ClampBlockIndicesToArrayBounds; -}; - /** * Precision info for shader datatypes. See glGetShaderPrecisionFormat(). */ @@ -888,8 +845,6 @@ struct gl_constants /** GL_KHR_context_flush_control */ GLenum16 ContextReleaseBehavior; - struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_STAGES]; - /** (driconf) Force gl_Position to be considered invariant */ GLboolean VSPositionAlwaysInvariant; diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index a61a31e93d0..4617abf6591 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -198,19 +198,8 @@ _mesa_get_shader_capture_path(void) void _mesa_init_shader_state(struct gl_context *ctx) { - /* Device drivers may override these to control what kind of instructions - * are generated by the GLSL compiler. - */ - struct gl_shader_compiler_options options; - mesa_shader_stage sh; int i; - memset(&options, 0, sizeof(options)); - options.MaxIfDepth = UINT_MAX; - - for (sh = 0; sh < MESA_SHADER_STAGES; ++sh) - memcpy(&ctx->Const.ShaderCompilerOptions[sh], &options, sizeof(options)); - ctx->Shader.Flags = _mesa_get_shader_flags(); if (ctx->Shader.Flags != 0) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 0052a0c6e73..0ce1ee49436 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -201,8 +201,6 @@ void st_init_limits(struct pipe_screen *screen, for (sh = 0; sh < MESA_SHADER_STAGES; ++sh) { const mesa_shader_stage stage = tgsi_processor_to_shader_stage(sh); - struct gl_shader_compiler_options *options = - &c->ShaderCompilerOptions[stage]; struct gl_program_constants *pc = &c->Program[stage]; if (!screen->nir_options[stage] || @@ -320,39 +318,11 @@ void st_init_limits(struct pipe_screen *screen, pc->MediumFloat = pc->LowFloat; } - /* TODO: make these more fine-grained if anyone needs it */ - options->MaxIfDepth = - screen->shader_caps[sh].max_control_flow_depth; - - options->EmitNoMainReturn = - !screen->shader_caps[sh].subroutines; - - options->EmitNoCont = - !screen->shader_caps[sh].cont_supported; - - options->EmitNoIndirectTemp = - !screen->shader_caps[sh].indirect_temp_addr; - options->EmitNoIndirectUniform = - !screen->shader_caps[sh].indirect_const_addr; - if (pc->MaxInstructions && (!screen->shader_caps[sh].indirect_const_addr || pc->MaxUniformBlocks < 12)) { can_ubo = false; } - - options->LowerPrecisionFloat16 = - screen->shader_caps[sh].fp16; - options->LowerPrecisionDerivatives = - screen->shader_caps[sh].fp16_derivatives; - options->LowerPrecisionInt16 = - screen->shader_caps[sh].int16; - options->LowerPrecisionConstants = - screen->shader_caps[sh].glsl_16bit_consts; - options->LowerPrecisionFloat16Uniforms = - screen->shader_caps[sh].fp16_const_buffers; - options->LowerPrecision16BitLoadDst = - screen->shader_caps[sh].glsl_16bit_load_dst; } c->MaxUserAssignableUniformLocations =