[Mesa-dev] [PATCH 07/17] st/mesa: simplify update_constants functions

Marek Olšák maraeo at gmail.com
Mon May 1 12:52:56 UTC 2017


From: Marek Olšák <marek.olsak at amd.com>

---
 src/mesa/state_tracker/st_atom_constbuf.c | 45 +++++++++----------------------
 src/mesa/state_tracker/st_atom_constbuf.h |  4 +--
 src/mesa/state_tracker/st_cb_bitmap.c     |  2 +-
 src/mesa/state_tracker/st_cb_drawpixels.c |  4 +--
 4 files changed, 17 insertions(+), 38 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_constbuf.c b/src/mesa/state_tracker/st_atom_constbuf.c
index 6cbfba7..cc1bd29 100644
--- a/src/mesa/state_tracker/st_atom_constbuf.c
+++ b/src/mesa/state_tracker/st_atom_constbuf.c
@@ -44,26 +44,25 @@
 #include "st_debug.h"
 #include "st_context.h"
 #include "st_atom.h"
 #include "st_atom_constbuf.h"
 #include "st_program.h"
 #include "st_cb_bufferobjects.h"
 
 /**
  * Pass the given program parameters to the graphics pipe as a
  * constant buffer.
- * \param shader_type  either PIPE_SHADER_VERTEX or PIPE_SHADER_FRAGMENT
  */
-void st_upload_constants( struct st_context *st,
-                          struct gl_program_parameter_list *params,
-                          gl_shader_stage stage)
+void st_upload_constants(struct st_context *st, struct gl_program *prog)
 {
+   gl_shader_stage stage = prog->info.stage;
+   struct gl_program_parameter_list *params = prog->Parameters;
    enum pipe_shader_type shader_type = st_shader_stage_to_ptarget(stage);
 
    assert(shader_type == PIPE_SHADER_VERTEX ||
           shader_type == PIPE_SHADER_FRAGMENT ||
           shader_type == PIPE_SHADER_GEOMETRY ||
           shader_type == PIPE_SHADER_TESS_CTRL ||
           shader_type == PIPE_SHADER_TESS_EVAL ||
           shader_type == PIPE_SHADER_COMPUTE);
 
    /* update the ATI constants before rendering */
@@ -134,88 +133,70 @@ void st_upload_constants( struct st_context *st,
       cso_set_constant_buffer(st->cso_context, shader_type, 0, NULL);
    }
 }
 
 
 /**
  * Vertex shader:
  */
 void st_update_vs_constants(struct st_context *st )
 {
-   struct st_vertex_program *vp = st->vp;
-   struct gl_program_parameter_list *params = vp->Base.Parameters;
-
-   st_upload_constants( st, params, MESA_SHADER_VERTEX );
+   st_upload_constants(st, &st->vp->Base);
 }
 
 /**
  * Fragment shader:
  */
 void st_update_fs_constants(struct st_context *st )
 {
-   struct st_fragment_program *fp = st->fp;
-   struct gl_program_parameter_list *params = fp->Base.Parameters;
-
-   st_upload_constants( st, params, MESA_SHADER_FRAGMENT );
+   st_upload_constants(st, &st->fp->Base);
 }
 
 
 /* Geometry shader:
  */
 void st_update_gs_constants(struct st_context *st )
 {
    struct st_common_program *gp = st->gp;
-   struct gl_program_parameter_list *params;
 
-   if (gp) {
-      params = gp->Base.Parameters;
-      st_upload_constants( st, params, MESA_SHADER_GEOMETRY );
-   }
+   if (st->gp)
+      st_upload_constants(st, &gp->Base);
 }
 
 /* Tessellation control shader:
  */
 void st_update_tcs_constants(struct st_context *st )
 {
    struct st_common_program *tcp = st->tcp;
-   struct gl_program_parameter_list *params;
 
-   if (tcp) {
-      params = tcp->Base.Parameters;
-      st_upload_constants( st, params, MESA_SHADER_TESS_CTRL );
-   }
+   if (tcp)
+      st_upload_constants(st, &tcp->Base);
 }
 
 /* Tessellation evaluation shader:
  */
 void st_update_tes_constants(struct st_context *st )
 {
    struct st_common_program *tep = st->tep;
-   struct gl_program_parameter_list *params;
 
-   if (tep) {
-      params = tep->Base.Parameters;
-      st_upload_constants( st, params, MESA_SHADER_TESS_EVAL );
-   }
+   if (tep)
+      st_upload_constants(st, &tep->Base);
 }
 
 /* Compute shader:
  */
 void st_update_cs_constants(struct st_context *st )
 {
    struct st_compute_program *cp = st->cp;
-   struct gl_program_parameter_list *params;
 
-   if (cp) {
-      params = cp->Base.Parameters;
-      st_upload_constants( st, params, MESA_SHADER_COMPUTE );
-   }
+   if (cp)
+      st_upload_constants(st, &cp->Base);
 }
 
 static void st_bind_ubos(struct st_context *st, struct gl_program *prog,
                          unsigned shader_type)
 {
    unsigned i;
    struct pipe_constant_buffer cb = { 0 };
 
    if (!prog)
       return;
diff --git a/src/mesa/state_tracker/st_atom_constbuf.h b/src/mesa/state_tracker/st_atom_constbuf.h
index df60a62..e810a24 100644
--- a/src/mesa/state_tracker/st_atom_constbuf.h
+++ b/src/mesa/state_tracker/st_atom_constbuf.h
@@ -28,16 +28,14 @@
 
 #ifndef ST_ATOM_CONSTBUF_H
 #define ST_ATOM_CONSTBUF_H
 
 #include "compiler/shader_enums.h"
 
 struct gl_program_parameter_list;
 struct st_context;
 
 
-void st_upload_constants( struct st_context *st,
-                          struct gl_program_parameter_list *params,
-                          gl_shader_stage stage);
+void st_upload_constants(struct st_context *st, struct gl_program *prog);
 
 
 #endif /* ST_ATOM_CONSTBUF_H */
diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c
index 9e83c0e..ef3f64b 100644
--- a/src/mesa/state_tracker/st_cb_bitmap.c
+++ b/src/mesa/state_tracker/st_cb_bitmap.c
@@ -184,21 +184,21 @@ setup_render_state(struct gl_context *ctx,
     * primary color from a statevar/constant rather than a varying variable.
     * when that's the case, we need to ensure that we use the 'color'
     * parameter and not the current attribute color (which may have changed
     * through glRasterPos and state validation.
     * So, we force the proper color here.  Not elegant, but it works.
     */
    {
       GLfloat colorSave[4];
       COPY_4V(colorSave, ctx->Current.Attrib[VERT_ATTRIB_COLOR0]);
       COPY_4V(ctx->Current.Attrib[VERT_ATTRIB_COLOR0], color);
-      st_upload_constants(st, st->fp->Base.Parameters, MESA_SHADER_FRAGMENT);
+      st_upload_constants(st, &st->fp->Base);
       COPY_4V(ctx->Current.Attrib[VERT_ATTRIB_COLOR0], colorSave);
    }
 
    cso_save_state(cso, (CSO_BIT_RASTERIZER |
                         CSO_BIT_FRAGMENT_SAMPLERS |
                         CSO_BIT_FRAGMENT_SAMPLER_VIEWS |
                         CSO_BIT_VIEWPORT |
                         CSO_BIT_STREAM_OUTPUTS |
                         CSO_BIT_VERTEX_ELEMENTS |
                         CSO_BIT_AUX_VERTEX_BUFFER_SLOT |
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
index bc4e533..33d10f6 100644
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
@@ -1116,21 +1116,21 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
 
       if (ctx->Pixel.MapColorFlag) {
          pipe_sampler_view_reference(&sv[1],
                                      st->pixel_xfer.pixelmap_sampler_view);
          num_sampler_view++;
       }
 
       /* compiling a new fragment shader variant added new state constants
        * into the constant buffer, we need to update them
        */
-      st_upload_constants(st, st->fp->Base.Parameters, MESA_SHADER_FRAGMENT);
+      st_upload_constants(st, &st->fp->Base);
    }
 
    /* Put glDrawPixels image into a texture */
    pt = make_texture(st, width, height, format, type, unpack, pixels);
    if (!pt) {
       _mesa_error(ctx, GL_OUT_OF_MEMORY, "glDrawPixels");
       return;
    }
 
    /* create sampler view for the image */
@@ -1479,21 +1479,21 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
 
       if (ctx->Pixel.MapColorFlag) {
          pipe_sampler_view_reference(&sv[1],
                                      st->pixel_xfer.pixelmap_sampler_view);
          num_sampler_view++;
       }
 
       /* compiling a new fragment shader variant added new state constants
        * into the constant buffer, we need to update them
        */
-      st_upload_constants(st, st->fp->Base.Parameters, MESA_SHADER_FRAGMENT);
+      st_upload_constants(st, &st->fp->Base);
    }
    else {
       assert(type == GL_DEPTH);
       rbRead = st_renderbuffer(ctx->ReadBuffer->
                                Attachment[BUFFER_DEPTH].Renderbuffer);
 
       driver_fp = get_drawpix_z_stencil_program(st, GL_TRUE, GL_FALSE);
       driver_vp = make_passthrough_vertex_shader(st, GL_TRUE);
    }
 
-- 
2.7.4



More information about the mesa-dev mailing list