mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-01 22:00:26 +01:00
st/mesa: fix sampler view reference counting bug in glDraw/CopyPixels
Use pipe_sampler_view_reference() instead of ordinary assignment.
Also add a new sanity check assertion.
Fixes piglit gl-1.0-drawpixels-color-index test crash. But note
that the test still fails.
Cc: "10.4, 10.5" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu>
(cherry picked from commit 62a8883f32)
This commit is contained in:
parent
d7fe0d9ce7
commit
80ec8ee3a1
1 changed files with 9 additions and 6 deletions
|
|
@ -1100,7 +1100,7 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
|
|||
const GLfloat *color;
|
||||
struct pipe_context *pipe = st->pipe;
|
||||
GLboolean write_stencil = GL_FALSE, write_depth = GL_FALSE;
|
||||
struct pipe_sampler_view *sv[2];
|
||||
struct pipe_sampler_view *sv[2] = { NULL };
|
||||
int num_sampler_view = 1;
|
||||
struct st_fp_variant *fpv;
|
||||
struct gl_pixelstore_attrib clippedUnpack;
|
||||
|
|
@ -1154,8 +1154,9 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
|
|||
|
||||
color = NULL;
|
||||
if (st->pixel_xfer.pixelmap_enabled) {
|
||||
sv[1] = st->pixel_xfer.pixelmap_sampler_view;
|
||||
num_sampler_view++;
|
||||
pipe_sampler_view_reference(&sv[1],
|
||||
st->pixel_xfer.pixelmap_sampler_view);
|
||||
num_sampler_view++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1176,7 +1177,8 @@ st_DrawPixels(struct gl_context *ctx, GLint x, GLint y,
|
|||
if (write_stencil) {
|
||||
enum pipe_format stencil_format =
|
||||
util_format_stencil_only(pt->format);
|
||||
|
||||
/* we should not be doing pixel map/transfer (see above) */
|
||||
assert(num_sampler_view == 1);
|
||||
sv[1] = st_create_texture_sampler_view_format(st->pipe, pt,
|
||||
stencil_format);
|
||||
num_sampler_view++;
|
||||
|
|
@ -1467,7 +1469,7 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
|
|||
struct st_renderbuffer *rbRead;
|
||||
void *driver_vp, *driver_fp;
|
||||
struct pipe_resource *pt;
|
||||
struct pipe_sampler_view *sv[2];
|
||||
struct pipe_sampler_view *sv[2] = { NULL };
|
||||
int num_sampler_view = 1;
|
||||
GLfloat *color;
|
||||
enum pipe_format srcFormat;
|
||||
|
|
@ -1516,7 +1518,8 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy,
|
|||
driver_vp = make_passthrough_vertex_shader(st, GL_FALSE);
|
||||
|
||||
if (st->pixel_xfer.pixelmap_enabled) {
|
||||
sv[1] = st->pixel_xfer.pixelmap_sampler_view;
|
||||
pipe_sampler_view_reference(&sv[1],
|
||||
st->pixel_xfer.pixelmap_sampler_view);
|
||||
num_sampler_view++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue