diff options
Diffstat (limited to 'mesalib/src/mesa/state_tracker')
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_atom_texture.c | 11 | ||||
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_context.c | 5 |
2 files changed, 13 insertions, 3 deletions
diff --git a/mesalib/src/mesa/state_tracker/st_atom_texture.c b/mesalib/src/mesa/state_tracker/st_atom_texture.c index 6e2efd960..df05e83c2 100644 --- a/mesalib/src/mesa/state_tracker/st_atom_texture.c +++ b/mesalib/src/mesa/state_tracker/st_atom_texture.c @@ -265,7 +265,7 @@ update_textures(struct st_context *st, { const GLuint old_max = *num_textures; GLbitfield samplers_used = prog->SamplersUsed; - GLuint unit; + GLuint unit, new_count; if (samplers_used == 0x0 && old_max == 0) return; @@ -294,9 +294,16 @@ update_textures(struct st_context *st, pipe_sampler_view_reference(&(sampler_views[unit]), sampler_view); } + /* Ex: if old_max = 3 and *num_textures = 1, we need to pass an + * array of views={X, NULL, NULL} to unref the old texture views + * at positions [1] and [2]. + */ + new_count = MAX2(*num_textures, old_max); + assert(new_count <= max_units); + cso_set_sampler_views(st->cso_context, shader_stage, - MIN2(*num_textures, max_units), + new_count, sampler_views); } diff --git a/mesalib/src/mesa/state_tracker/st_context.c b/mesalib/src/mesa/state_tracker/st_context.c index 7735eee4f..2e14da211 100644 --- a/mesalib/src/mesa/state_tracker/st_context.c +++ b/mesalib/src/mesa/state_tracker/st_context.c @@ -163,7 +163,10 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe ) else st->internal_target = PIPE_TEXTURE_RECT; - for (i = 0; i < 3; i++) { + /* Vertex element objects used for drawing rectangles for glBitmap, + * glDrawPixels, glClear, etc. + */ + for (i = 0; i < Elements(st->velems_util_draw); i++) { memset(&st->velems_util_draw[i], 0, sizeof(struct pipe_vertex_element)); st->velems_util_draw[i].src_offset = i * 4 * sizeof(float); st->velems_util_draw[i].instance_divisor = 0; |