[Mesa-dev] [PATCH] anv/genX: Solve the anv_CmdClearColorImage crash issue
Xu, Randy
randy.xu at intel.com
Mon Mar 27 14:31:46 UTC 2017
Thanks,
Randy
> -----Original Message-----
> From: Landwerlin, Lionel G
> Sent: Monday, March 27, 2017 10:06 PM
> To: Xu, Randy <randy.xu at intel.com>; mesa-dev at lists.freedesktop.org
> Cc: mesa-stable at lists.freedesktop.org
> Subject: Re: [Mesa-dev] [PATCH] anv/genX: Solve the
> anv_CmdClearColorImage crash issue
>
> On 27/03/17 12:51, Xu, Randy wrote:
> > Thanks, Lionel
> >
> > See my comments below
> >
> >
> > Thanks,
> > Randy
> >
> >> -----Original Message-----
> >> From: Landwerlin, Lionel G
> >> Sent: Monday, March 27, 2017 5:14 PM
> >> To: Xu, Randy <randy.xu at intel.com>; mesa-dev at lists.freedesktop.org
> >> Subject: Re: [Mesa-dev] [PATCH] anv/genX: Solve the
> >> anv_CmdClearColorImage crash issue
> >>
> >> Hi Randy,
> >>
> >> This patch looks good to me.
> >>
> >> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> >> Cc: "17.0 13.0" <mesa-stable at lists.freedesktop.org>
> >>
> >> Are you planning to send a follow up patch to fix the remaining
> >> layoutCount accesses too?
> > I guess you means the layerCount access I checked the code, there are
> > two kinds of layerCount access, as member of VkImageSubresourceLayers
> or VkImageSubresourceRange.
> > Only the layerCount in VkImageSubresourceRange can be
> VK_REMAINING_ARRAY_LAYERS, and should be accessed through function
> anv_get_levelCount, two places have been covered in this patch.
>
> Thanks, the spec wasn't clear to me since it's not explicitly said that
> REMAINING is an invalid value (unless I missed something).
IMHO, the REMAINING (~0) is valid but has special meaning " it can set levelCount and layerCount to the special values VK_REMAINING_MIP_LEVELS and VK_REMAINING_ARRAY_LAYERS without knowing the exact number of mip levels or layers.", so we need use anv_get_levelCount() function to decode the VkImageSubresourceRange::layerCount variable.
>
> >
> > typedef struct VkImageSubresourceLayers {
> > VkImageAspectFlags aspectMask;
> > uint32_t mipLevel;
> > uint32_t baseArrayLayer;
> > uint32_t layerCount;
> > } VkImageSubresourceLayers;
> >
> > typedef struct VkImageSubresourceRange {
> > VkImageAspectFlags aspectMask;
> > uint32_t baseMipLevel;
> > uint32_t levelCount;
> > uint32_t baseArrayLayer;
> > uint32_t layerCount;
> > } VkImageSubresourceRange;
> >
> >
> >> Cheers,
> >>
> >> -
> >> Lionel
> >>
> >> On 20/03/17 07:31, Randy Xu wrote:
> >>> From: Xu Randy <randy.xu at intel.com>
> >>>
> >>> We should use anv_get_layerCount() to access layerCount of
> >>> VkImageSub- resourceRange in anv_CmdClearColorImage and
> >> anv_CmdClearDepthStencil-
> >>> Image, which handles the VK_REMAINING_ARRAY_LAYERS (~0) case.
> >>>
> >>> Test: Sample multithreadcmdbuf from LunarG can run without crash
> >>>
> >>> Signed-off-by: Xu Randy <randy.xu at intel.com>
> >>> ---
> >>> src/intel/vulkan/anv_blorp.c | 4 ++--
> >>> 1 file changed, 2 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/src/intel/vulkan/anv_blorp.c
> >>> b/src/intel/vulkan/anv_blorp.c index 1f4fec5..9b3910f 100644
> >>> --- a/src/intel/vulkan/anv_blorp.c
> >>> +++ b/src/intel/vulkan/anv_blorp.c
> >>> @@ -830,7 +830,7 @@ void anv_CmdClearColorImage(
> >>> VK_IMAGE_ASPECT_COLOR_BIT,
> >>> image->tiling);
> >>>
> >>> unsigned base_layer = pRanges[r].baseArrayLayer;
> >>> - unsigned layer_count = pRanges[r].layerCount;
> >>> + unsigned layer_count = anv_get_layerCount(image,
> >>> + &pRanges[r]);
> >>>
> >>> for (unsigned i = 0; i < anv_get_levelCount(image, &pRanges[r]); i++)
> {
> >>> const unsigned level = pRanges[r].baseMipLevel + i; @@
> >>> -890,7 +890,7 @@ void anv_CmdClearDepthStencilImage(
> >>> bool clear_stencil = pRanges[r].aspectMask &
> >>> VK_IMAGE_ASPECT_STENCIL_BIT;
> >>>
> >>> unsigned base_layer = pRanges[r].baseArrayLayer;
> >>> - unsigned layer_count = pRanges[r].layerCount;
> >>> + unsigned layer_count = anv_get_layerCount(image,
> >>> + &pRanges[r]);
> >>>
> >>> for (unsigned i = 0; i < anv_get_levelCount(image, &pRanges[r]); i++)
> {
> >>> const unsigned level = pRanges[r].baseMipLevel + i;
>
More information about the mesa-dev
mailing list