diff options
author | Michal Srb <[email protected]> | 2017-03-28 23:39:28 +0300 |
---|---|---|
committer | Nicolai Hähnle <[email protected]> | 2017-04-01 09:03:23 +0200 |
commit | 52f9ccefcb75a9d42307890d7714b1cd92e864cb (patch) | |
tree | c87a5480a345ccf6af0f654a75ed18ca4cf359ab /src | |
parent | d6fccb4c096dc06e5a4576afaf4e0d47f371999e (diff) |
st: Add cubeMapFace parameter to st_finalize_texture.
st_finalize_texture always accesses image at face 0, but it may not be
set if we are working with cubemap that had other face set.
This fixes crash in piglit
same-attachment-glFramebufferTexture2D-GL_DEPTH_STENCIL_ATTACHMENT.
Cc: [email protected]
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/state_trackers/dri/dri2.c | 2 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_atom_image.c | 2 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_atom_texture.c | 2 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_fbo.c | 2 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.c | 5 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.h | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_gen_mipmap.c | 2 |
7 files changed, 10 insertions, 8 deletions
diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c index b50e0964431..ed6004f836d 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c @@ -1808,7 +1808,7 @@ dri2_interop_export_object(__DRIcontext *_ctx, return MESA_GLINTEROP_INVALID_MIP_LEVEL; } - if (!st_finalize_texture(ctx, st->pipe, obj)) { + if (!st_finalize_texture(ctx, st->pipe, obj, 0)) { mtx_unlock(&ctx->Shared->Mutex); return MESA_GLINTEROP_OUT_OF_RESOURCES; } diff --git a/src/mesa/state_tracker/st_atom_image.c b/src/mesa/state_tracker/st_atom_image.c index 5dd2cd64f90..4101552dff4 100644 --- a/src/mesa/state_tracker/st_atom_image.c +++ b/src/mesa/state_tracker/st_atom_image.c @@ -64,7 +64,7 @@ st_bind_images(struct st_context *st, struct gl_program *prog, struct pipe_image_view *img = &images[i]; if (!_mesa_is_image_unit_valid(st->ctx, u) || - !st_finalize_texture(st->ctx, st->pipe, u->TexObj) || + !st_finalize_texture(st->ctx, st->pipe, u->TexObj, 0) || !stObj->pt) { memset(img, 0, sizeof(*img)); continue; diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c index 92023e0dc3a..5b481ec4344 100644 --- a/src/mesa/state_tracker/st_atom_texture.c +++ b/src/mesa/state_tracker/st_atom_texture.c @@ -73,7 +73,7 @@ update_single_texture(struct st_context *st, } stObj = st_texture_object(texObj); - retval = st_finalize_texture(ctx, st->pipe, texObj); + retval = st_finalize_texture(ctx, st->pipe, texObj, 0); if (!retval) { /* out of mem */ return GL_FALSE; diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 78433bff046..dce4239438a 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -488,7 +488,7 @@ st_render_texture(struct gl_context *ctx, struct st_renderbuffer *strb = st_renderbuffer(rb); struct pipe_resource *pt; - if (!st_finalize_texture(ctx, pipe, att->Texture)) + if (!st_finalize_texture(ctx, pipe, att->Texture, att->CubeMapFace)) return; pt = st_get_texobj_resource(att->Texture); diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index bc6f108a860..1b486d7c3c8 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -2434,7 +2434,8 @@ copy_image_data_to_texture(struct st_context *st, GLboolean st_finalize_texture(struct gl_context *ctx, struct pipe_context *pipe, - struct gl_texture_object *tObj) + struct gl_texture_object *tObj, + GLuint cubeMapFace) { struct st_context *st = st_context(ctx); struct st_texture_object *stObj = st_texture_object(tObj); @@ -2478,7 +2479,7 @@ st_finalize_texture(struct gl_context *ctx, } - firstImage = st_texture_image_const(_mesa_base_tex_image(&stObj->base)); + firstImage = st_texture_image_const(stObj->base.Image[cubeMapFace][stObj->base.BaseLevel]); assert(firstImage); /* If both firstImage and stObj point to a texture which can contain diff --git a/src/mesa/state_tracker/st_cb_texture.h b/src/mesa/state_tracker/st_cb_texture.h index 415d59ffe98..f647b16c8dc 100644 --- a/src/mesa/state_tracker/st_cb_texture.h +++ b/src/mesa/state_tracker/st_cb_texture.h @@ -47,7 +47,8 @@ st_get_blit_mask(GLenum srcFormat, GLenum dstFormat); extern GLboolean st_finalize_texture(struct gl_context *ctx, struct pipe_context *pipe, - struct gl_texture_object *tObj); + struct gl_texture_object *tObj, + GLuint cubeMapFace); extern void diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c index 10af11e17b4..16b914a8845 100644 --- a/src/mesa/state_tracker/st_gen_mipmap.c +++ b/src/mesa/state_tracker/st_gen_mipmap.c @@ -125,7 +125,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target, * * After this, we'll have all mipmap levels in one resource. */ - st_finalize_texture(ctx, st->pipe, texObj); + st_finalize_texture(ctx, st->pipe, texObj, 0); } pt = stObj->pt; |