From: Marek Olšák <marek.ol...@amd.com> --- src/mesa/state_tracker/st_atom_texture.c | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-)
diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c index 105fa79..ce7755f 100644 --- a/src/mesa/state_tracker/st_atom_texture.c +++ b/src/mesa/state_tracker/st_atom_texture.c @@ -94,24 +94,23 @@ st_update_single_texture(struct st_context *st, glsl130_or_later, ignore_srgb_decode); } static void update_textures(struct st_context *st, enum pipe_shader_type shader_stage, const struct gl_program *prog, - struct pipe_sampler_view **sampler_views, - unsigned *out_num_textures) + struct pipe_sampler_view **sampler_views) { - const GLuint old_max = *out_num_textures; + const GLuint old_max = st->state.num_sampler_views[shader_stage]; GLbitfield samplers_used = prog->SamplersUsed; GLbitfield texel_fetch_samplers = prog->info.textures_used_by_txf; GLbitfield free_slots = ~prog->SamplersUsed; GLbitfield external_samplers_used = prog->ExternalSamplersUsed; GLuint unit; if (samplers_used == 0x0 && old_max == 0) return; unsigned num_textures = 0; @@ -206,105 +205,98 @@ update_textures(struct st_context *st, break; } num_textures = MAX2(num_textures, extra + 1); } cso_set_sampler_views(st->cso_context, shader_stage, num_textures, sampler_views); - *out_num_textures = num_textures; + st->state.num_sampler_views[shader_stage] = num_textures; } /* Same as update_textures, but don't store the views in st_context. */ static void update_textures_local(struct st_context *st, enum pipe_shader_type shader_stage, - const struct gl_program *prog, - unsigned *out_num_textures) + const struct gl_program *prog) { struct pipe_sampler_view *local_views[PIPE_MAX_SAMPLERS] = {0}; - update_textures(st, shader_stage, prog, local_views, out_num_textures); + update_textures(st, shader_stage, prog, local_views); - unsigned num = *out_num_textures; + unsigned num = st->state.num_sampler_views[shader_stage]; for (unsigned i = 0; i < num; i++) pipe_sampler_view_reference(&local_views[i], NULL); } void st_update_vertex_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->Const.Program[MESA_SHADER_VERTEX].MaxTextureImageUnits > 0) { update_textures_local(st, PIPE_SHADER_VERTEX, - ctx->VertexProgram._Current, - &st->state.num_sampler_views[PIPE_SHADER_VERTEX]); + ctx->VertexProgram._Current); } } void st_update_fragment_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; update_textures(st, PIPE_SHADER_FRAGMENT, ctx->FragmentProgram._Current, - st->state.frag_sampler_views, - &st->state.num_sampler_views[PIPE_SHADER_FRAGMENT]); + st->state.frag_sampler_views); } void st_update_geometry_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->GeometryProgram._Current) { update_textures_local(st, PIPE_SHADER_GEOMETRY, - ctx->GeometryProgram._Current, - &st->state.num_sampler_views[PIPE_SHADER_GEOMETRY]); + ctx->GeometryProgram._Current); } } void st_update_tessctrl_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->TessCtrlProgram._Current) { update_textures_local(st, PIPE_SHADER_TESS_CTRL, - ctx->TessCtrlProgram._Current, - &st->state.num_sampler_views[PIPE_SHADER_TESS_CTRL]); + ctx->TessCtrlProgram._Current); } } void st_update_tesseval_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->TessEvalProgram._Current) { update_textures_local(st, PIPE_SHADER_TESS_EVAL, - ctx->TessEvalProgram._Current, - &st->state.num_sampler_views[PIPE_SHADER_TESS_EVAL]); + ctx->TessEvalProgram._Current); } } void st_update_compute_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->ComputeProgram._Current) { update_textures_local(st, PIPE_SHADER_COMPUTE, - ctx->ComputeProgram._Current, - &st->state.num_sampler_views[PIPE_SHADER_COMPUTE]); + ctx->ComputeProgram._Current); } } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev