Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
On Wed, Feb 1, 2017, at 01:25, Dave Airlie wrote: > From: Dave Airlie <airl...@redhat.com> > > The CTS tests at least are using this, and we were totally > ignoring it. > > This hopefully fixes the bouncing multisample CTS tests. > > v2: get family mask in ignored case from command buffer. > v3: only change things in one place, use logic from Bas. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > --- > src/amd/vulkan/radv_cmd_buffer.c | 12 ++++++------ > src/amd/vulkan/radv_image.c | 11 +++++++---- > src/amd/vulkan/radv_meta_clear.c | 2 +- > src/amd/vulkan/radv_private.h | 2 +- > 4 files changed, 15 insertions(+), 12 deletions(-) > > diff --git a/src/amd/vulkan/radv_cmd_buffer.c > b/src/amd/vulkan/radv_cmd_buffer.c > index 7dd4aeb..d879740 100644 > --- a/src/amd/vulkan/radv_cmd_buffer.c > +++ b/src/amd/vulkan/radv_cmd_buffer.c > @@ -38,8 +38,8 @@ static void radv_handle_image_transition(struct > radv_cmd_buffer *cmd_buffer, > struct radv_image *image, > VkImageLayout src_layout, > VkImageLayout dst_layout, > - int src_family, > - int dst_family, > + uint32_t src_family, > + uint32_t dst_family, > VkImageSubresourceRange range, > VkImageAspectFlags pending_clears); > > @@ -2746,8 +2746,8 @@ static void radv_handle_image_transition(struct > radv_cmd_buffer *cmd_buffer, > struct radv_image *image, > VkImageLayout src_layout, > VkImageLayout dst_layout, > - int src_family, > - int dst_family, > + uint32_t src_family, > + uint32_t dst_family, > VkImageSubresourceRange range, > VkImageAspectFlags pending_clears) > { > @@ -2768,8 +2768,8 @@ static void radv_handle_image_transition(struct > radv_cmd_buffer *cmd_buffer, > return; > } > > - unsigned src_queue_mask = radv_image_queue_family_mask(image, > src_family); > - unsigned dst_queue_mask = radv_image_queue_family_mask(image, > dst_family); > + unsigned src_queue_mask = radv_image_queue_family_mask(image, > src_family, cmd_buffer->queue_family_index); > + unsigned dst_queue_mask = radv_image_queue_family_mask(image, > dst_family, cmd_buffer->queue_family_index); > > if (image->htile.size) > radv_handle_depth_image_transition(cmd_buffer, image, > src_layout, > diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c > index f75f008..99d1737 100644 > --- a/src/amd/vulkan/radv_image.c > +++ b/src/amd/vulkan/radv_image.c > @@ -905,10 +905,13 @@ bool radv_layout_can_fast_clear(const struct > radv_image *image, > } > > > -unsigned radv_image_queue_family_mask(const struct radv_image *image, > int family) { > - if (image->exclusive) > - return 1u <<family; > - return image->queue_family_mask; > +unsigned radv_image_queue_family_mask(const struct radv_image *image, > uint32_t family, uint32_t queue_family) > +{ > + if (!image->exclusive) > + return image->queue_family_mask; > + if (family == VK_QUEUE_FAMILY_IGNORED) > + return 1u << queue_family; > + return 1u << family; > } > > VkResult > diff --git a/src/amd/vulkan/radv_meta_clear.c > b/src/amd/vulkan/radv_meta_clear.c > index 957b388..a42e834 100644 > --- a/src/amd/vulkan/radv_meta_clear.c > +++ b/src/amd/vulkan/radv_meta_clear.c > @@ -844,7 +844,7 @@ emit_fast_color_clear(struct radv_cmd_buffer > *cmd_buffer, > if (!(cmd_buffer->device->debug_flags & RADV_DEBUG_FAST_CLEARS)) > return false; > > - if (!radv_layout_can_fast_clear(iview->image, image_layout, > radv_image_queue_family_mask(iview->image, > cmd_buffer->queue_family_index))) > + if (!radv_layout_can_fast_clear(iview->image, image_layout, > radv_image_queue_family_mask(iview->image, > cmd_buffer->queue_family_index, cmd_buffer->queue_family_index))) > goto fail; > if (vk_format_get_blocksizebits(iview->image->vk_format) > 64) > goto fail; > diff --git a/src/amd/vulkan/radv_private.h > b/src/amd/vulkan/radv_private.h > index 340e40d..0e3f466 100644 > --- a/src/amd/vulkan/radv_private.h > +++ b/src/amd/vulkan/radv_private.h > @@ -1089,7 +1089,7 @@ bool radv_layout_can_fast_clear(const struct > radv_image *image, > unsigned queue_mask); > > > -unsigned radv_image_queue_family_mask(const struct radv_image *image, > int family); > +unsigned radv_image_queue_family_mask(const struct radv_image *image, > uint32_t family, uint32_t queue_family); > > static inline uint32_t > radv_get_layerCount(const struct radv_image *image, > -- > 2.9.3 > > _______________________________________________ > 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