From: Marek Olšák <marek.ol...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev