diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp index 002cf07921a..77eb78a4102 100644 --- a/src/compiler/glsl/linker.cpp +++ b/src/compiler/glsl/linker.cpp @@ -2008,21 +2008,21 @@ link_gs_inout_layout_qualifiers(struct gl_shader_program *prog, */ static void link_cs_input_layout_qualifiers(struct gl_shader_program *prog, - struct gl_linked_shader *linked_shader, + struct gl_program *gl_prog, struct gl_shader **shader_list, unsigned num_shaders) { - for (int i = 0; i < 3; i++) - linked_shader->info.Comp.LocalSize[i] = 0; - - linked_shader->info.Comp.LocalSizeVariable = false; - /* This function is called for all shader stages, but it only has an effect * for compute shaders. */ - if (linked_shader->Stage != MESA_SHADER_COMPUTE) + if (gl_prog->info.stage != MESA_SHADER_COMPUTE) return; + for (int i = 0; i < 3; i++) + gl_prog->info.cs.local_size[i] = 0; + + gl_prog->info.cs.local_size_variable = false; + /* From the ARB_compute_shader spec, in the section describing local size * declarations: * @@ -2037,9 +2037,9 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog, struct gl_shader *shader = shader_list[sh]; if (shader->info.Comp.LocalSize[0] != 0) { - if (linked_shader->info.Comp.LocalSize[0] != 0) { + if (gl_prog->info.cs.local_size[0] != 0) { for (int i = 0; i < 3; i++) { - if (linked_shader->info.Comp.LocalSize[i] != + if (gl_prog->info.cs.local_size[i] != shader->info.Comp.LocalSize[i]) { linker_error(prog, "compute shader defined with conflicting " "local sizes\n"); @@ -2048,11 +2048,11 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog, } } for (int i = 0; i < 3; i++) { - linked_shader->info.Comp.LocalSize[i] = + gl_prog->info.cs.local_size[i] = shader->info.Comp.LocalSize[i]; } } else if (shader->info.Comp.LocalSizeVariable) { - if (linked_shader->info.Comp.LocalSize[0] != 0) { + if (gl_prog->info.cs.local_size[0] != 0) { /* The ARB_compute_variable_group_size spec says: * * If one compute shader attached to a program declares a @@ -2064,7 +2064,7 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog, "variable local group size\n"); return; } - linked_shader->info.Comp.LocalSizeVariable = true; + gl_prog->info.cs.local_size_variable = true; } } @@ -2072,17 +2072,12 @@ link_cs_input_layout_qualifiers(struct gl_shader_program *prog, * since we already know we're in the right type of shader program * for doing it. */ - if (linked_shader->info.Comp.LocalSize[0] == 0 && - !linked_shader->info.Comp.LocalSizeVariable) { + if (gl_prog->info.cs.local_size[0] == 0 && + !gl_prog->info.cs.local_size_variable) { linker_error(prog, "compute shader must contain a fixed or a variable " "local group size\n"); return; } - for (int i = 0; i < 3; i++) - prog->Comp.LocalSize[i] = linked_shader->info.Comp.LocalSize[i]; - - prog->Comp.LocalSizeVariable = - linked_shader->info.Comp.LocalSizeVariable; } @@ -2212,7 +2207,7 @@ link_intrastage_shaders(void *mem_ctx, link_tcs_out_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); link_tes_in_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); link_gs_inout_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); - link_cs_input_layout_qualifiers(prog, linked, shader_list, num_shaders); + link_cs_input_layout_qualifiers(prog, gl_prog, shader_list, num_shaders); link_xfb_stride_layout_qualifiers(ctx, prog, linked, shader_list, num_shaders); diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 56ab614d312..e7a730d6ad9 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2759,20 +2759,10 @@ struct gl_shader_program * _mesa_copy_linked_program_data(). */ struct { - /** - * If this shader contains a compute stage, size specified using - * local_size_{x,y,z}. Otherwise undefined. - */ - unsigned LocalSize[3]; /** * Size of shared variables accessed by the compute shader. */ unsigned SharedSize; - - /** - * Whether a variable work group size has been specified. - */ - bool LocalSizeVariable; } Comp; /** Data shared by gl_program and gl_shader_program */ diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index a550e6ff1ed..3313fa215b3 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -807,7 +807,8 @@ get_programiv(struct gl_context *ctx, GLuint program, GLenum pname, return; } for (i = 0; i < 3; i++) - params[i] = shProg->Comp.LocalSize[i]; + params[i] = shProg->_LinkedShaders[MESA_SHADER_COMPUTE]-> + Program->info.cs.local_size[i]; return; } case GL_PROGRAM_SEPARABLE: @@ -2213,10 +2214,7 @@ _mesa_copy_linked_program_data(const struct gl_shader_program *src, break; } case MESA_SHADER_COMPUTE: { - for (int i = 0; i < 3; i++) - dst->info.cs.local_size[i] = src->Comp.LocalSize[i]; dst->info.cs.shared_size = src->Comp.SharedSize; - dst->info.cs.local_size_variable = src->Comp.LocalSizeVariable; break; } default: diff --git a/src/mesa/main/shaderobj.c b/src/mesa/main/shaderobj.c index 4e514a3d09f..b41137fbce3 100644 --- a/src/mesa/main/shaderobj.c +++ b/src/mesa/main/shaderobj.c @@ -282,8 +282,6 @@ init_shader_program(struct gl_shader_program *prog) prog->Geom.UsesEndPrimitive = false; prog->Geom.UsesStreams = false; - prog->Comp.LocalSizeVariable = false; - prog->TransformFeedback.BufferMode = GL_INTERLEAVED_ATTRIBS; exec_list_make_empty(&prog->EmptyUniformLocations);