Hi, 2014-03-11 7:37 GMT+01:00 Pohjolainen, Topi <topi.pohjolai...@intel.com>: > On Mon, Mar 10, 2014 at 05:36:17PM +0100, Gwenole Beauchesne wrote: >> Fix eglCreateImage() from a packed dma_buf surface with a non-zero offset >> to pixels data. In particular, this fixes support for planar YUV surfaces >> when they are individually mapped on a per-plane basis, i.e. when the >> OES_EGL_image_external is not used and user application wants to use its >> own shader code for composition, or processing on individual plane (OCL). >> >> Signed-off-by: Gwenole Beauchesne <gwenole.beauche...@intel.com> >> --- >> src/mesa/drivers/dri/i965/intel_screen.c | 9 +++++++++ >> 1 file changed, 9 insertions(+) >> >> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c >> b/src/mesa/drivers/dri/i965/intel_screen.c >> index 05cf6b1..81a8330 100644 >> --- a/src/mesa/drivers/dri/i965/intel_screen.c >> +++ b/src/mesa/drivers/dri/i965/intel_screen.c >> @@ -651,6 +651,7 @@ intel_create_image_from_fds(__DRIscreen *screen, >> { >> struct intel_screen *intelScreen = screen->driverPrivate; >> struct intel_image_format *f; >> + uint32_t mask_x, mask_y; >> __DRIimage *image; >> int i, index; >> >> @@ -684,6 +685,14 @@ intel_create_image_from_fds(__DRIscreen *screen, >> image->strides[index] = strides[index]; >> } >> >> + if (f->nplanes == 1) { >> + image->offset = image->offsets[0]; > > I haven't thought through all the uses of '__DRIimage' but I'm a bit worried > that there is now the offset possibly twice - in the base and again in the > array describing the planes. I wonder if the real bug is that the offsets in > the array are not used in the right place(s): > > In intel_image_target_texture_2d() the call: > > intel_set_texture_image_region(ctx, texImage, image->region, > target, image->internal_format, > image->format, image->offset, > image->width, image->height, > image->tile_x, image->tile_y); > > should probably take the plane offsets into account even now when only single > plane images are accepted. > > Would this make sense? >
Yes, or removing image->offset altogether and exclusively use image->offsets[]? >> + intel_region_get_tile_masks(image->region, &mask_x, &mask_y, false); >> + if (image->offset & mask_x) >> + _mesa_warning(NULL, >> + "intel_create_image_from_fds: offset not on tile >> boundary"); >> + } >> + >> intel_setup_image_from_dimensions(image); >> >> return image; >> -- >> 1.7.9.5 >> >> _______________________________________________ >> 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