On Mon, May 9, 2016 at 12:26 PM, Nanley Chery <nanleych...@gmail.com> wrote:
> From: Nanley Chery <nanley.g.ch...@intel.com> > > This function previously assumed that the Buffer and Image had matching > dimensions. However, it is possible to copy from a buffer with larger > dimensions than the image. Modify the copy function to enable this. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=95292 > Signed-off-by: Nanley Chery <nanley.g.ch...@intel.com> > --- > src/intel/vulkan/anv_meta_copy.c | 19 +++++++++++-------- > 1 file changed, 11 insertions(+), 8 deletions(-) > > diff --git a/src/intel/vulkan/anv_meta_copy.c > b/src/intel/vulkan/anv_meta_copy.c > index 982fa7e..1d131d3 100644 > --- a/src/intel/vulkan/anv_meta_copy.c > +++ b/src/intel/vulkan/anv_meta_copy.c > @@ -128,18 +128,20 @@ meta_copy_buffer_to_image(struct anv_cmd_buffer > *cmd_buffer, > const VkOffset3D img_offset_el = > meta_region_offset_el(image, &pRegions[r].imageOffset); > const VkExtent3D bufferExtent = { > - .width = pRegions[r].bufferRowLength, > - .height = pRegions[r].bufferImageHeight, > + .width = MAX(pRegions[r].bufferRowLength, > + pRegions[r].imageExtent.width), > As I commented on IRC, I think this would be better as "pRegions[r].bufferRowLength ? pRegions[r].BufferRowLength : pRegions[r].imageExtent.width" With that, Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net> > + .height = MAX(pRegions[r].bufferImageHeight, > + pRegions[r].imageExtent.height), > }; > - > - /* Start creating blit rect */ > const VkExtent3D buf_extent_el = > meta_region_extent_el(image, &bufferExtent); > + > + /* Start creating blit rect */ > const VkExtent3D img_extent_el = > meta_region_extent_el(image, &pRegions[r].imageExtent); > struct anv_meta_blit2d_rect rect = { > - .width = MAX2(buf_extent_el.width, img_extent_el.width), > - .height = MAX2(buf_extent_el.height, img_extent_el.height), > + .width = img_extent_el.width, > + .height = img_extent_el.height, > }; > > /* Create blit surfaces */ > @@ -153,7 +155,7 @@ meta_copy_buffer_to_image(struct anv_cmd_buffer > *cmd_buffer, > .tiling = ISL_TILING_LINEAR, > .base_offset = buffer->offset + pRegions[r].bufferOffset, > .bs = forward ? image->format->isl_layout->bs : img_bsurf.bs, > - .pitch = rect.width * buf_bsurf.bs, > + .pitch = buf_extent_el.width * buf_bsurf.bs, > }; > > /* Set direction-dependent variables */ > @@ -188,7 +190,8 @@ meta_copy_buffer_to_image(struct anv_cmd_buffer > *cmd_buffer, > * increment the offset directly in the image effectively > * re-binding it to different backing memory. > */ > - buf_bsurf.base_offset += rect.width * rect.height * buf_bsurf.bs > ; > + buf_bsurf.base_offset += buf_extent_el.width * > + buf_extent_el.height * buf_bsurf.bs; > > if (image->type == VK_IMAGE_TYPE_3D) > slice_3d++; > -- > 2.8.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev