On Mon, May 16, 2016 at 12:08:09PM -0700, Jason Ekstrand wrote: > This makes several checks easier and allows us to avoid calling > anv_format_for_vk_format in a number of cases. > --- > src/intel/vulkan/anv_image.c | 3 +++ > src/intel/vulkan/anv_private.h | 3 ++- > src/intel/vulkan/gen7_cmd_buffer.c | 5 ++--- > src/intel/vulkan/genX_cmd_buffer.c | 7 +++---- > 4 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c > index fb28389..6316a2a 100644 > --- a/src/intel/vulkan/anv_image.c > +++ b/src/intel/vulkan/anv_image.c > @@ -233,12 +233,14 @@ anv_image_create(VkDevice _device, > image->tiling = pCreateInfo->tiling; > > if (likely(anv_format_is_color(format))) { > + image->aspects |= VK_IMAGE_ASPECT_COLOR_BIT; > r = make_surface(device, image, create_info, > VK_IMAGE_ASPECT_COLOR_BIT); > if (r != VK_SUCCESS) > goto fail; > } else { > if (image->format->has_depth) { > + image->aspects |= VK_IMAGE_ASPECT_DEPTH_BIT; > r = make_surface(device, image, create_info, > VK_IMAGE_ASPECT_DEPTH_BIT); > if (r != VK_SUCCESS) > @@ -246,6 +248,7 @@ anv_image_create(VkDevice _device, > } > > if (image->format->has_stencil) { > + image->aspects |= VK_IMAGE_ASPECT_STENCIL_BIT; > r = make_surface(device, image, create_info, > VK_IMAGE_ASPECT_STENCIL_BIT); > if (r != VK_SUCCESS) > diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h > index a5888d6..c3b31e6 100644 > --- a/src/intel/vulkan/anv_private.h > +++ b/src/intel/vulkan/anv_private.h > @@ -1561,6 +1561,7 @@ struct anv_image { > */ > VkFormat vk_format; > const struct anv_format *format; > + VkImageAspectFlags aspects;
In Vulkan, the bitfield is a property of the image, so it is good to have this alignment. Reviewed-by: Nanley Chery <nanley.g.ch...@intel.com> - Nanley > VkExtent3D extent; > uint32_t levels; > uint32_t array_size; > @@ -1579,7 +1580,7 @@ struct anv_image { > * Image subsurfaces > * > * For each foo, anv_image::foo_surface is valid if and only if > - * anv_image::format has a foo aspect. > + * anv_image::aspects has a foo aspect. > * > * The hardware requires that the depth buffer and stencil buffer be > * separate surfaces. From Vulkan's perspective, though, depth and > stencil > diff --git a/src/intel/vulkan/gen7_cmd_buffer.c > b/src/intel/vulkan/gen7_cmd_buffer.c > index 03ce889..62d9f46 100644 > --- a/src/intel/vulkan/gen7_cmd_buffer.c > +++ b/src/intel/vulkan/gen7_cmd_buffer.c > @@ -415,9 +415,8 @@ genX(cmd_buffer_flush_dynamic_state)(struct > anv_cmd_buffer *cmd_buffer) > const struct anv_image_view *iview = > anv_cmd_buffer_get_depth_stencil_view(cmd_buffer); > const struct anv_image *image = iview ? iview->image : NULL; > - const struct anv_format *anv_format = > - iview ? anv_format_for_vk_format(iview->vk_format) : NULL; > - const bool has_depth = iview && anv_format->has_depth; > + const bool has_depth = > + image && (image->aspects & VK_IMAGE_ASPECT_DEPTH_BIT); > const uint32_t depth_format = has_depth ? > isl_surf_get_depth_format(&cmd_buffer->device->isl_dev, > &image->depth_surface.isl) : D16_UNORM; > diff --git a/src/intel/vulkan/genX_cmd_buffer.c > b/src/intel/vulkan/genX_cmd_buffer.c > index 0a5c404..a7e20da 100644 > --- a/src/intel/vulkan/genX_cmd_buffer.c > +++ b/src/intel/vulkan/genX_cmd_buffer.c > @@ -927,10 +927,9 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer > *cmd_buffer) > const struct anv_image_view *iview = > anv_cmd_buffer_get_depth_stencil_view(cmd_buffer); > const struct anv_image *image = iview ? iview->image : NULL; > - const struct anv_format *anv_format = > - iview ? anv_format_for_vk_format(iview->vk_format) : NULL; > - const bool has_depth = iview && anv_format->has_depth; > - const bool has_stencil = iview && anv_format->has_stencil; > + const bool has_depth = image && (image->aspects & > VK_IMAGE_ASPECT_DEPTH_BIT); > + const bool has_stencil = > + image && (image->aspects & VK_IMAGE_ASPECT_STENCIL_BIT); > > /* FIXME: Implement the PMA stall W/A */ > /* FIXME: Width and Height are wrong */ > -- > 2.5.0.400.gff86faf > > _______________________________________________ > 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