On Fri, Apr 17, 2015 at 04:51:37PM -0700, Anuj Phogat wrote: > Currently, that's the only path that supports reading data from these buffers. > > Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> > --- > src/mesa/drivers/dri/i965/intel_pixel_read.c | 22 ++++++++++++++++++++-- > src/mesa/drivers/dri/i965/intel_tex_image.c | 28 > ++++++++++++++++++++-------- > 2 files changed, 40 insertions(+), 10 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/intel_pixel_read.c > b/src/mesa/drivers/dri/i965/intel_pixel_read.c > index 9ab5ed1..a7eefb3 100644 > --- a/src/mesa/drivers/dri/i965/intel_pixel_read.c > +++ b/src/mesa/drivers/dri/i965/intel_pixel_read.c > @@ -221,15 +221,33 @@ intelReadPixels(struct gl_context * ctx, > > struct brw_context *brw = brw_context(ctx); > bool dirty; > + bool create_pbo = false; > + uint32_t tr_mode = INTEL_MIPTREE_TRMODE_NONE; > > DBG("%s\n", __FUNCTION__); > > + if (brw->gen >= 9) { > + struct gl_renderbuffer_attachment *readAtt =
const > + > &ctx->ReadBuffer->Attachment[ctx->ReadBuffer->_ColorReadBufferIndex]; > + struct intel_renderbuffer *irb = const > + intel_renderbuffer(readAtt->Renderbuffer); > + if (irb && irb->mt) { > + tr_mode = irb->mt->tr_mode; > + create_pbo = irb->mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE; > + } > + } > + > if (_mesa_meta_pbo_GetTexSubImage(ctx, 2, NULL, x, y, 0, width, > height, 1, format, type, pixels, > - false /*create_pbo*/, > - true /*for_readpixels*/, pack)) > + create_pbo, true /*for_readpixels*/, > + pack)) > return; > > + /* Currently there are no fallback paths to read data from surfaces with > + * tr_mode != INTEL_MIPTREE_TRMODE_NONE. > + */ > + assert(tr_mode == INTEL_MIPTREE_TRMODE_NONE); > + Similar suggestion as in the previous patch, put this into _mesa_meta_pbo_GetTexSubImage() in order to avoid both callers of having the same assertion. > if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) > perf_debug("%s: fallback to CPU mapping in PBO case\n", __FUNCTION__); > > diff --git a/src/mesa/drivers/dri/i965/intel_tex_image.c > b/src/mesa/drivers/dri/i965/intel_tex_image.c > index 03db100..8e845c6 100644 > --- a/src/mesa/drivers/dri/i965/intel_tex_image.c > +++ b/src/mesa/drivers/dri/i965/intel_tex_image.c > @@ -498,19 +498,31 @@ intel_get_tex_image(struct gl_context *ctx, > struct gl_texture_image *texImage) { > struct brw_context *brw = brw_context(ctx); > bool ok; > + bool create_pbo = false; > + uint32_t tr_mode = INTEL_MIPTREE_TRMODE_NONE; > > DBG("%s\n", __FUNCTION__); > > - if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) { > - if (_mesa_meta_pbo_GetTexSubImage(ctx, 3, texImage, 0, 0, 0, > - texImage->Width, texImage->Height, > - texImage->Depth, format, type, > - pixels, false /* create_pbo */, > - false /*for_readpixels*/, > &ctx->Pack)) > - return; > + if (brw->gen >= 9) { > + struct intel_texture_image *intelImage = intel_texture_image(texImage); > + tr_mode = intelImage->mt->tr_mode; > + create_pbo = intelImage->mt->tr_mode != INTEL_MIPTREE_TRMODE_NONE; > + } And here you could take advantage of the helper I suggested in the previous patch, I think. > + > + if (_mesa_meta_pbo_GetTexSubImage(ctx, 3, texImage, 0, 0, 0, > + texImage->Width, texImage->Height, > + texImage->Depth, format, type, > + pixels, create_pbo, > + false /*for_readpixels*/, &ctx->Pack)) > + return; > + > + /* Currently there are no fallback paths to read data from surfaces with > + * tr_mode != INTEL_MIPTREE_TRMODE_NONE. > + */ > + assert(tr_mode == INTEL_MIPTREE_TRMODE_NONE); > > + if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) > perf_debug("%s: fallback to CPU mapping in PBO case\n", __FUNCTION__); > - } > > ok = intel_gettexsubimage_tiled_memcpy(ctx, texImage, 0, 0, > texImage->Width, texImage->Height, > -- > 2.3.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev