anv/image: Add an aspects field
This makes several checks easier and allows us to avoid calling anv_format_for_vk_format in a number of cases.
This commit is contained in:
@@ -233,12 +233,14 @@ anv_image_create(VkDevice _device,
|
|||||||
image->tiling = pCreateInfo->tiling;
|
image->tiling = pCreateInfo->tiling;
|
||||||
|
|
||||||
if (likely(anv_format_is_color(format))) {
|
if (likely(anv_format_is_color(format))) {
|
||||||
|
image->aspects |= VK_IMAGE_ASPECT_COLOR_BIT;
|
||||||
r = make_surface(device, image, create_info,
|
r = make_surface(device, image, create_info,
|
||||||
VK_IMAGE_ASPECT_COLOR_BIT);
|
VK_IMAGE_ASPECT_COLOR_BIT);
|
||||||
if (r != VK_SUCCESS)
|
if (r != VK_SUCCESS)
|
||||||
goto fail;
|
goto fail;
|
||||||
} else {
|
} else {
|
||||||
if (image->format->has_depth) {
|
if (image->format->has_depth) {
|
||||||
|
image->aspects |= VK_IMAGE_ASPECT_DEPTH_BIT;
|
||||||
r = make_surface(device, image, create_info,
|
r = make_surface(device, image, create_info,
|
||||||
VK_IMAGE_ASPECT_DEPTH_BIT);
|
VK_IMAGE_ASPECT_DEPTH_BIT);
|
||||||
if (r != VK_SUCCESS)
|
if (r != VK_SUCCESS)
|
||||||
@@ -246,6 +248,7 @@ anv_image_create(VkDevice _device,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (image->format->has_stencil) {
|
if (image->format->has_stencil) {
|
||||||
|
image->aspects |= VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||||
r = make_surface(device, image, create_info,
|
r = make_surface(device, image, create_info,
|
||||||
VK_IMAGE_ASPECT_STENCIL_BIT);
|
VK_IMAGE_ASPECT_STENCIL_BIT);
|
||||||
if (r != VK_SUCCESS)
|
if (r != VK_SUCCESS)
|
||||||
|
@@ -1561,6 +1561,7 @@ struct anv_image {
|
|||||||
*/
|
*/
|
||||||
VkFormat vk_format;
|
VkFormat vk_format;
|
||||||
const struct anv_format *format;
|
const struct anv_format *format;
|
||||||
|
VkImageAspectFlags aspects;
|
||||||
VkExtent3D extent;
|
VkExtent3D extent;
|
||||||
uint32_t levels;
|
uint32_t levels;
|
||||||
uint32_t array_size;
|
uint32_t array_size;
|
||||||
@@ -1579,7 +1580,7 @@ struct anv_image {
|
|||||||
* Image subsurfaces
|
* Image subsurfaces
|
||||||
*
|
*
|
||||||
* For each foo, anv_image::foo_surface is valid if and only if
|
* 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
|
* The hardware requires that the depth buffer and stencil buffer be
|
||||||
* separate surfaces. From Vulkan's perspective, though, depth and stencil
|
* separate surfaces. From Vulkan's perspective, though, depth and stencil
|
||||||
|
@@ -415,9 +415,8 @@ genX(cmd_buffer_flush_dynamic_state)(struct anv_cmd_buffer *cmd_buffer)
|
|||||||
const struct anv_image_view *iview =
|
const struct anv_image_view *iview =
|
||||||
anv_cmd_buffer_get_depth_stencil_view(cmd_buffer);
|
anv_cmd_buffer_get_depth_stencil_view(cmd_buffer);
|
||||||
const struct anv_image *image = iview ? iview->image : NULL;
|
const struct anv_image *image = iview ? iview->image : NULL;
|
||||||
const struct anv_format *anv_format =
|
const bool has_depth =
|
||||||
iview ? anv_format_for_vk_format(iview->vk_format) : NULL;
|
image && (image->aspects & VK_IMAGE_ASPECT_DEPTH_BIT);
|
||||||
const bool has_depth = iview && anv_format->has_depth;
|
|
||||||
const uint32_t depth_format = has_depth ?
|
const uint32_t depth_format = has_depth ?
|
||||||
isl_surf_get_depth_format(&cmd_buffer->device->isl_dev,
|
isl_surf_get_depth_format(&cmd_buffer->device->isl_dev,
|
||||||
&image->depth_surface.isl) : D16_UNORM;
|
&image->depth_surface.isl) : D16_UNORM;
|
||||||
|
@@ -927,10 +927,9 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)
|
|||||||
const struct anv_image_view *iview =
|
const struct anv_image_view *iview =
|
||||||
anv_cmd_buffer_get_depth_stencil_view(cmd_buffer);
|
anv_cmd_buffer_get_depth_stencil_view(cmd_buffer);
|
||||||
const struct anv_image *image = iview ? iview->image : NULL;
|
const struct anv_image *image = iview ? iview->image : NULL;
|
||||||
const struct anv_format *anv_format =
|
const bool has_depth = image && (image->aspects & VK_IMAGE_ASPECT_DEPTH_BIT);
|
||||||
iview ? anv_format_for_vk_format(iview->vk_format) : NULL;
|
const bool has_stencil =
|
||||||
const bool has_depth = iview && anv_format->has_depth;
|
image && (image->aspects & VK_IMAGE_ASPECT_STENCIL_BIT);
|
||||||
const bool has_stencil = iview && anv_format->has_stencil;
|
|
||||||
|
|
||||||
/* FIXME: Implement the PMA stall W/A */
|
/* FIXME: Implement the PMA stall W/A */
|
||||||
/* FIXME: Width and Height are wrong */
|
/* FIXME: Width and Height are wrong */
|
||||||
|
Reference in New Issue
Block a user