From: Marek Olšák <marek.ol...@amd.com> those are unused.
st_context: 10120 -> 3704 bytes --- src/mesa/state_tracker/st_atom_sampler.c | 35 +++++++++---------- src/mesa/state_tracker/st_atom_texture.c | 56 +++++++++++++++++-------------- src/mesa/state_tracker/st_cb_bitmap.c | 8 ++--- src/mesa/state_tracker/st_cb_drawpixels.c | 8 ++--- src/mesa/state_tracker/st_context.c | 10 +++--- src/mesa/state_tracker/st_context.h | 6 ++-- 6 files changed, 61 insertions(+), 62 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c index 6d83f96..289856c 100644 --- a/src/mesa/state_tracker/st_atom_sampler.c +++ b/src/mesa/state_tracker/st_atom_sampler.c @@ -251,27 +251,32 @@ update_shader_samplers(struct st_context *st, enum pipe_shader_type shader_stage, const struct gl_program *prog, struct pipe_sampler_state *samplers, unsigned *out_num_samplers) { struct gl_context *ctx = st->ctx; GLbitfield samplers_used = prog->SamplersUsed; GLbitfield free_slots = ~prog->SamplersUsed; GLbitfield external_samplers_used = prog->ExternalSamplersUsed; unsigned unit, num_samplers; + struct pipe_sampler_state local_samplers[PIPE_MAX_SAMPLERS]; const struct pipe_sampler_state *states[PIPE_MAX_SAMPLERS]; if (samplers_used == 0x0) { - *out_num_samplers = 0; + if (out_num_samplers) + *out_num_samplers = 0; return; } + if (!samplers) + samplers = local_samplers; + num_samplers = util_last_bit(samplers_used); /* loop over sampler units (aka tex image units) */ for (unit = 0; samplers_used; unit++, samplers_used >>= 1) { struct pipe_sampler_state *sampler = samplers + unit; unsigned tex_unit = prog->SamplerUnits[unit]; /* Don't update the sampler for TBOs. cso_context will not bind sampler * states that are NULL. */ @@ -313,98 +318,90 @@ update_shader_samplers(struct st_context *st, states[extra] = sampler; break; default: break; } num_samplers = MAX2(num_samplers, extra + 1); } cso_set_samplers(st->cso_context, shader_stage, num_samplers, states); - *out_num_samplers = num_samplers; + + if (out_num_samplers) + *out_num_samplers = num_samplers; } void st_update_vertex_samplers(struct st_context *st) { const struct gl_context *ctx = st->ctx; update_shader_samplers(st, PIPE_SHADER_VERTEX, - ctx->VertexProgram._Current, - st->state.samplers[PIPE_SHADER_VERTEX], - &st->state.num_samplers[PIPE_SHADER_VERTEX]); + ctx->VertexProgram._Current, NULL, NULL); } void st_update_tessctrl_samplers(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->TessCtrlProgram._Current) { update_shader_samplers(st, PIPE_SHADER_TESS_CTRL, - ctx->TessCtrlProgram._Current, - st->state.samplers[PIPE_SHADER_TESS_CTRL], - &st->state.num_samplers[PIPE_SHADER_TESS_CTRL]); + ctx->TessCtrlProgram._Current, NULL, NULL); } } void st_update_tesseval_samplers(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->TessEvalProgram._Current) { update_shader_samplers(st, PIPE_SHADER_TESS_EVAL, - ctx->TessEvalProgram._Current, - st->state.samplers[PIPE_SHADER_TESS_EVAL], - &st->state.num_samplers[PIPE_SHADER_TESS_EVAL]); + ctx->TessEvalProgram._Current, NULL, NULL); } } void st_update_geometry_samplers(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->GeometryProgram._Current) { update_shader_samplers(st, PIPE_SHADER_GEOMETRY, - ctx->GeometryProgram._Current, - st->state.samplers[PIPE_SHADER_GEOMETRY], - &st->state.num_samplers[PIPE_SHADER_GEOMETRY]); + ctx->GeometryProgram._Current, NULL, NULL); } } void st_update_fragment_samplers(struct st_context *st) { const struct gl_context *ctx = st->ctx; update_shader_samplers(st, PIPE_SHADER_FRAGMENT, ctx->FragmentProgram._Current, - st->state.samplers[PIPE_SHADER_FRAGMENT], - &st->state.num_samplers[PIPE_SHADER_FRAGMENT]); + st->state.frag_samplers, + &st->state.num_frag_samplers); } void st_update_compute_samplers(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->ComputeProgram._Current) { update_shader_samplers(st, PIPE_SHADER_COMPUTE, - ctx->ComputeProgram._Current, - st->state.samplers[PIPE_SHADER_COMPUTE], - &st->state.num_samplers[PIPE_SHADER_COMPUTE]); + ctx->ComputeProgram._Current, NULL, NULL); } } diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c index 6c26b77..105fa79 100644 --- a/src/mesa/state_tracker/st_atom_texture.c +++ b/src/mesa/state_tracker/st_atom_texture.c @@ -209,98 +209,102 @@ update_textures(struct st_context *st, 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; } +/* 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) +{ + struct pipe_sampler_view *local_views[PIPE_MAX_SAMPLERS] = {0}; + update_textures(st, shader_stage, prog, local_views, out_num_textures); + + unsigned num = *out_num_textures; + 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(st, - PIPE_SHADER_VERTEX, - ctx->VertexProgram._Current, - st->state.sampler_views[PIPE_SHADER_VERTEX], - &st->state.num_sampler_views[PIPE_SHADER_VERTEX]); + update_textures_local(st, PIPE_SHADER_VERTEX, + ctx->VertexProgram._Current, + &st->state.num_sampler_views[PIPE_SHADER_VERTEX]); } } 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.sampler_views[PIPE_SHADER_FRAGMENT], + st->state.frag_sampler_views, &st->state.num_sampler_views[PIPE_SHADER_FRAGMENT]); } void st_update_geometry_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->GeometryProgram._Current) { - update_textures(st, - PIPE_SHADER_GEOMETRY, - ctx->GeometryProgram._Current, - st->state.sampler_views[PIPE_SHADER_GEOMETRY], - &st->state.num_sampler_views[PIPE_SHADER_GEOMETRY]); + update_textures_local(st, PIPE_SHADER_GEOMETRY, + ctx->GeometryProgram._Current, + &st->state.num_sampler_views[PIPE_SHADER_GEOMETRY]); } } void st_update_tessctrl_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->TessCtrlProgram._Current) { - update_textures(st, - PIPE_SHADER_TESS_CTRL, - ctx->TessCtrlProgram._Current, - st->state.sampler_views[PIPE_SHADER_TESS_CTRL], - &st->state.num_sampler_views[PIPE_SHADER_TESS_CTRL]); + update_textures_local(st, PIPE_SHADER_TESS_CTRL, + ctx->TessCtrlProgram._Current, + &st->state.num_sampler_views[PIPE_SHADER_TESS_CTRL]); } } void st_update_tesseval_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->TessEvalProgram._Current) { - update_textures(st, - PIPE_SHADER_TESS_EVAL, - ctx->TessEvalProgram._Current, - st->state.sampler_views[PIPE_SHADER_TESS_EVAL], - &st->state.num_sampler_views[PIPE_SHADER_TESS_EVAL]); + update_textures_local(st, PIPE_SHADER_TESS_EVAL, + ctx->TessEvalProgram._Current, + &st->state.num_sampler_views[PIPE_SHADER_TESS_EVAL]); } } void st_update_compute_textures(struct st_context *st) { const struct gl_context *ctx = st->ctx; if (ctx->ComputeProgram._Current) { - update_textures(st, - PIPE_SHADER_COMPUTE, - ctx->ComputeProgram._Current, - st->state.sampler_views[PIPE_SHADER_COMPUTE], - &st->state.num_sampler_views[PIPE_SHADER_COMPUTE]); + update_textures_local(st, PIPE_SHADER_COMPUTE, + ctx->ComputeProgram._Current, + &st->state.num_sampler_views[PIPE_SHADER_COMPUTE]); } } diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index a5c7ed0..0a30ffa 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -217,39 +217,39 @@ setup_render_state(struct gl_context *ctx, /* disable other shaders */ cso_set_tessctrl_shader_handle(cso, NULL); cso_set_tesseval_shader_handle(cso, NULL); cso_set_geometry_shader_handle(cso, NULL); /* user samplers, plus our bitmap sampler */ { struct pipe_sampler_state *samplers[PIPE_MAX_SAMPLERS]; uint num = MAX2(fpv->bitmap_sampler + 1, - st->state.num_samplers[PIPE_SHADER_FRAGMENT]); + st->state.num_frag_samplers); uint i; - for (i = 0; i < st->state.num_samplers[PIPE_SHADER_FRAGMENT]; i++) { - samplers[i] = &st->state.samplers[PIPE_SHADER_FRAGMENT][i]; + for (i = 0; i < st->state.num_frag_samplers; i++) { + samplers[i] = &st->state.frag_samplers[i]; } if (atlas) samplers[fpv->bitmap_sampler] = &st->bitmap.atlas_sampler; else samplers[fpv->bitmap_sampler] = &st->bitmap.sampler; cso_set_samplers(cso, PIPE_SHADER_FRAGMENT, num, (const struct pipe_sampler_state **) samplers); } /* user textures, plus the bitmap texture */ { struct pipe_sampler_view *sampler_views[PIPE_MAX_SAMPLERS]; uint num = MAX2(fpv->bitmap_sampler + 1, st->state.num_sampler_views[PIPE_SHADER_FRAGMENT]); - memcpy(sampler_views, st->state.sampler_views[PIPE_SHADER_FRAGMENT], + memcpy(sampler_views, st->state.frag_sampler_views, sizeof(sampler_views)); sampler_views[fpv->bitmap_sampler] = sv; cso_set_sampler_views(cso, PIPE_SHADER_FRAGMENT, num, sampler_views); } /* viewport state: viewport matching window dims */ cso_set_viewport_dims(cso, st->state.fb_width, st->state.fb_height, st->state.fb_orientation == Y_0_TOP); diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index ff3eb9b..44f5b23 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -729,25 +729,25 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z, sampler.min_img_filter = PIPE_TEX_FILTER_NEAREST; sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NONE; sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST; sampler.normalized_coords = normalized; if (fpv) { /* drawing a color image */ const struct pipe_sampler_state *samplers[PIPE_MAX_SAMPLERS]; uint num = MAX3(fpv->drawpix_sampler + 1, fpv->pixelmap_sampler + 1, - st->state.num_samplers[PIPE_SHADER_FRAGMENT]); + st->state.num_frag_samplers); uint i; - for (i = 0; i < st->state.num_samplers[PIPE_SHADER_FRAGMENT]; i++) - samplers[i] = &st->state.samplers[PIPE_SHADER_FRAGMENT][i]; + for (i = 0; i < st->state.num_frag_samplers; i++) + samplers[i] = &st->state.frag_samplers[i]; samplers[fpv->drawpix_sampler] = &sampler; if (sv[1]) samplers[fpv->pixelmap_sampler] = &sampler; cso_set_samplers(cso, PIPE_SHADER_FRAGMENT, num, samplers); } else { /* drawing a depth/stencil image */ const struct pipe_sampler_state *samplers[2] = {&sampler, &sampler}; @@ -756,21 +756,21 @@ draw_textured_quad(struct gl_context *ctx, GLint x, GLint y, GLfloat z, } /* user textures, plus the drawpix textures */ if (fpv) { /* drawing a color image */ struct pipe_sampler_view *sampler_views[PIPE_MAX_SAMPLERS]; uint num = MAX3(fpv->drawpix_sampler + 1, fpv->pixelmap_sampler + 1, st->state.num_sampler_views[PIPE_SHADER_FRAGMENT]); - memcpy(sampler_views, st->state.sampler_views[PIPE_SHADER_FRAGMENT], + memcpy(sampler_views, st->state.frag_sampler_views, sizeof(sampler_views)); sampler_views[fpv->drawpix_sampler] = sv[0]; if (sv[1]) sampler_views[fpv->pixelmap_sampler] = sv[1]; cso_set_sampler_views(cso, PIPE_SHADER_FRAGMENT, num, sampler_views); } else { /* drawing a depth/stencil image */ cso_set_sampler_views(cso, PIPE_SHADER_FRAGMENT, num_sampler_view, sv); } diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index 8274b9e..7e72157 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -247,38 +247,36 @@ st_invalidate_state(struct gl_context *ctx) ctx->FragmentProgram._Current->ExternalSamplersUsed) { st->dirty |= ST_NEW_FS_STATE; } } } static void st_destroy_context_priv(struct st_context *st, bool destroy_pipe) { - uint shader, i; + uint i; st_destroy_atoms(st); st_destroy_draw(st); st_destroy_clear(st); st_destroy_bitmap(st); st_destroy_drawpix(st); st_destroy_drawtex(st); st_destroy_perfmon(st); st_destroy_pbo_helpers(st); st_destroy_bound_texture_handles(st); st_destroy_bound_image_handles(st); - for (shader = 0; shader < ARRAY_SIZE(st->state.sampler_views); shader++) { - for (i = 0; i < ARRAY_SIZE(st->state.sampler_views[0]); i++) { - pipe_sampler_view_release(st->pipe, - &st->state.sampler_views[shader][i]); - } + for (i = 0; i < ARRAY_SIZE(st->state.frag_sampler_views); i++) { + pipe_sampler_view_release(st->pipe, + &st->state.frag_sampler_views[i]); } /* free glReadPixels cache data */ st_invalidate_readpix_cache(st); cso_destroy_context(st->cso_context); if (st->pipe && destroy_pipe) st->pipe->destroy(st->pipe); diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h index 40a2de3..9f2480e 100644 --- a/src/mesa/state_tracker/st_context.h +++ b/src/mesa/state_tracker/st_context.h @@ -144,23 +144,23 @@ struct st_context boolean vertex_array_out_of_memory; boolean has_hw_atomics; /* Some state is contained in constant objects. * Other state is just parameter values. */ struct { struct pipe_blend_state blend; struct pipe_depth_stencil_alpha_state depth_stencil; struct pipe_rasterizer_state rasterizer; - struct pipe_sampler_state samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; - GLuint num_samplers[PIPE_SHADER_TYPES]; - struct pipe_sampler_view *sampler_views[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; + struct pipe_sampler_state frag_samplers[PIPE_MAX_SAMPLERS]; + GLuint num_frag_samplers; + struct pipe_sampler_view *frag_sampler_views[PIPE_MAX_SAMPLERS]; GLuint num_sampler_views[PIPE_SHADER_TYPES]; struct pipe_clip_state clip; struct { void *ptr; unsigned size; } constants[PIPE_SHADER_TYPES]; unsigned fb_width; unsigned fb_height; unsigned fb_num_samples; unsigned fb_num_layers; -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev