On Fri, May 27, 2016 at 11:24 AM, Jordan Justen <[email protected]> wrote:
> v2: > * Move lower flag to context constants. (Ken) > > Signed-off-by: Jordan Justen <[email protected]> > Reviewed-by: Kenneth Graunke <[email protected]> (v1) > --- > src/compiler/glsl/builtin_variables.cpp | 29 > ++++++++++++++++++----------- > src/compiler/glsl/glsl_parser_extras.cpp | 2 +- > src/compiler/glsl/ir.h | 3 ++- > src/mesa/drivers/dri/i965/brw_context.c | 1 + > src/mesa/main/mtypes.h | 3 +++ > src/mesa/state_tracker/st_extensions.c | 4 +++- > 6 files changed, 28 insertions(+), 14 deletions(-) > > diff --git a/src/compiler/glsl/builtin_variables.cpp > b/src/compiler/glsl/builtin_variables.cpp > index d8b6f6e..22d16de 100644 > --- a/src/compiler/glsl/builtin_variables.cpp > +++ b/src/compiler/glsl/builtin_variables.cpp > @@ -1201,8 +1201,15 @@ > builtin_variable_generator::generate_cs_special_vars() > "gl_LocalInvocationID"); > add_system_value(SYSTEM_VALUE_WORK_GROUP_ID, uvec3_t, > "gl_WorkGroupID"); > add_system_value(SYSTEM_VALUE_NUM_WORK_GROUPS, uvec3_t, > "gl_NumWorkGroups"); > - add_variable("gl_GlobalInvocationID", uvec3_t, ir_var_auto, 0); > - add_variable("gl_LocalInvocationIndex", uint_t, ir_var_auto, 0); > + if (state->ctx->Const.LowerCsDerivedVariables) { > + add_variable("gl_GlobalInvocationID", uvec3_t, ir_var_auto, 0); > + add_variable("gl_LocalInvocationIndex", uint_t, ir_var_auto, 0); > + } else { > + add_system_value(SYSTEM_VALUE_GLOBAL_INVOCATION_ID, > + uvec3_t, "gl_GlobalInvocationID"); > + add_system_value(SYSTEM_VALUE_LOCAL_INVOCATION_INDEX, > + uint_t, "gl_LocalInvocationIndex"); > + } > } > > > @@ -1431,16 +1438,16 @@ initialize_cs_derived_variables(gl_shader *shader, > * These are initialized in the main function. > */ > void > -_mesa_glsl_initialize_derived_variables(gl_shader *shader) > +_mesa_glsl_initialize_derived_variables(struct gl_context *ctx, > + gl_shader *shader) > { > /* We only need to set CS variables currently. */ > - if (shader->Stage != MESA_SHADER_COMPUTE) > - return; > + if (shader->Stage == MESA_SHADER_COMPUTE && > + ctx->Const.LowerCsDerivedVariables) { > + ir_function_signature *const main_sig = > + _mesa_get_main_function_signature(shader); > > - ir_function_signature *const main_sig = > - _mesa_get_main_function_signature(shader); > - if (main_sig == NULL) > - return; > - > - initialize_cs_derived_variables(shader, main_sig); > + if (main_sig != NULL) > + initialize_cs_derived_variables(shader, main_sig); > + } > } > diff --git a/src/compiler/glsl/glsl_parser_extras.cpp > b/src/compiler/glsl/glsl_parser_extras.cpp > index 843998d..3d08508 100644 > --- a/src/compiler/glsl/glsl_parser_extras.cpp > +++ b/src/compiler/glsl/glsl_parser_extras.cpp > @@ -1907,7 +1907,7 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, > struct gl_shader *shader, > } > } > > - _mesa_glsl_initialize_derived_variables(shader); > + _mesa_glsl_initialize_derived_variables(ctx, shader); > > delete state->symbols; > ralloc_free(state); > diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h > index e8efd27..93716c4 100644 > --- a/src/compiler/glsl/ir.h > +++ b/src/compiler/glsl/ir.h > @@ -2562,7 +2562,8 @@ _mesa_glsl_initialize_variables(exec_list > *instructions, > struct _mesa_glsl_parse_state *state); > > extern void > -_mesa_glsl_initialize_derived_variables(gl_shader *shader); > +_mesa_glsl_initialize_derived_variables(struct gl_context *ctx, > + gl_shader *shader); > > extern void > _mesa_glsl_initialize_functions(_mesa_glsl_parse_state *state); > diff --git a/src/mesa/drivers/dri/i965/brw_context.c > b/src/mesa/drivers/dri/i965/brw_context.c > index 552e5ec..1477c8b 100644 > --- a/src/mesa/drivers/dri/i965/brw_context.c > +++ b/src/mesa/drivers/dri/i965/brw_context.c > @@ -565,6 +565,7 @@ brw_initialize_context_constants(struct brw_context > *brw) > ctx->Const.MaxClipPlanes = 8; > > ctx->Const.LowerTessLevel = true; > + ctx->Const.LowerCsDerivedVariables = true; > ctx->Const.PrimitiveRestartForPatches = true; > > ctx->Const.Program[MESA_SHADER_VERTEX].MaxNativeInstructions = 16 * > 1024; > diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h > index 2233526..d0f3760 100644 > --- a/src/mesa/main/mtypes.h > +++ b/src/mesa/main/mtypes.h > @@ -3763,6 +3763,9 @@ struct gl_constants > GLuint MaxTessControlTotalOutputComponents; > bool LowerTessLevel; /**< Lower gl_TessLevel* from float[n] to vecn? */ > bool PrimitiveRestartForPatches; > + bool LowerCsDerivedVariables; /**< Lower gl_GlobalInvocationID and > + * gl_LocalInvocationIndex based on > + * other builtin variables. */ > }; > > > diff --git a/src/mesa/state_tracker/st_extensions.c > b/src/mesa/state_tracker/st_extensions.c > index 68e6601..8f249bb 100644 > --- a/src/mesa/state_tracker/st_extensions.c > +++ b/src/mesa/state_tracker/st_extensions.c > @@ -309,11 +309,13 @@ void st_init_limits(struct pipe_screen *screen, > options->LowerCombinedClipCullDistance = true; > options->LowerBufferInterfaceBlocks = true; > > - if (sh == PIPE_SHADER_COMPUTE) > + if (sh == PIPE_SHADER_COMPUTE) { > options->LowerShaderSharedVariables = true; > + } > } > > c->LowerTessLevel = true; > + c->LowerCsDerivedVariables = true; > This looks a bit odd. Did you initially put this in the condition above? (Hence the added braces). If you really want it here, it's probably best to drop the braces above. > c->PrimitiveRestartForPatches = > screen->get_param(screen, PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES); > > -- > 2.8.1 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
