diff options
author | Chad Versace <[email protected]> | 2016-08-25 16:08:15 -0700 |
---|---|---|
committer | Chad Versace <[email protected]> | 2016-08-25 16:52:00 -0700 |
commit | c82f99e883cfa66b3a3b135e7b1dab0a5bfae164 (patch) | |
tree | baa974ede3b4f37325c355f91bcc7745573c3022 /src/mesa/drivers/dri/i965/intel_fbo.c | |
parent | bebc1a1d995e33f173ea207848bcddd81f6dd19a (diff) |
i965: Fix miptree layout for EGLImage-based renderbuffers
When glEGLImageTargetRenderbufferStorageOES() was given an EGLImage
created from the non-base slice of a miptree,
intel_image_target_renderbuffer_storage() forgot to apply the intra-tile
offsets __DRIimage::tile_x,tile_y to the miptree layout.
This patch fixes the problem with a quick hack suitable for
cherry-picking. A proper fix requires more thorough plumbing in
intel_miptree_create_layout() and brw_tex_layout().
Patch 1/2 that fixes test
'dEQP-EGL.functional.image.create.gles2_cubemap_*'.
Reported-by: Haixia Shi <[email protected]>
Diagnosed-by: Haixia Shi <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]>
Cc: [email protected]
Change-Id: I8a64b0048a1ee9e714ebb3f33fffd8334036450b
Diffstat (limited to 'src/mesa/drivers/dri/i965/intel_fbo.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_fbo.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c b/src/mesa/drivers/dri/i965/intel_fbo.c index 03ea79142a5..89bf7d14b3d 100644 --- a/src/mesa/drivers/dri/i965/intel_fbo.c +++ b/src/mesa/drivers/dri/i965/intel_fbo.c @@ -375,6 +375,19 @@ intel_image_target_renderbuffer_storage(struct gl_context *ctx, if (!irb->mt) return; + /* Adjust the miptree's upper-left coordinate. + * + * FIXME: Adjusting the miptree's layout outside of + * intel_miptree_create_layout() is fragile. Plumb the adjustment through + * intel_miptree_create_layout() and brw_tex_layout(). + */ + irb->mt->level[0].level_x = image->tile_x; + irb->mt->level[0].level_y = image->tile_y; + irb->mt->level[0].slice[0].x_offset = image->tile_x; + irb->mt->level[0].slice[0].y_offset = image->tile_y; + irb->mt->total_width += image->tile_x; + irb->mt->total_height += image->tile_y; + rb->InternalFormat = image->internal_format; rb->Width = image->width; rb->Height = image->height; |