On 09/01/17 05:13, Timothy Arceri wrote:
---
  src/compiler/glsl/linker.cpp | 35 +++++++++++++++--------------------
  src/mesa/main/mtypes.h       | 10 ----------
  src/mesa/main/shaderapi.c    |  6 ++----
  src/mesa/main/shaderobj.c    |  2 --
  4 files changed, 17 insertions(+), 36 deletions(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 53ee7e6..f822778 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -2005,21 +2005,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:
      *
@@ -2034,9 +2034,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");
@@ -2045,11 +2045,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
@@ -2061,7 +2061,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;
        }
     }
@@ -2069,17 +2069,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;
  }
@@ -2209,7 +2204,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 2004720..aff426f 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2760,19 +2760,9 @@ struct gl_shader_program
      */
     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;

Do you think we could get rid SharedSize too and store it directly into shader_info?

-
-      /**
-       * 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 4537ea4..8c6e035 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:
@@ -2214,10 +2215,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 4e514a3..b41137f 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);


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to