Mesa (main): anv,vulkan: Move VkImageSubresource* helpers from ANV
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Aug 17 21:47:45 UTC 2021
Module: Mesa
Branch: main
Commit: 83b4d4f17d87ec8c271b004730d8951f66720027
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=83b4d4f17d87ec8c271b004730d8951f66720027
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Wed Jul 21 20:48:30 2021 -0500
anv,vulkan: Move VkImageSubresource* helpers from ANV
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12023>
---
src/intel/vulkan/anv_blorp.c | 37 ++++++++++++++++++++++++-------------
src/intel/vulkan/anv_image.c | 11 ++++++-----
src/intel/vulkan/anv_private.h | 15 ---------------
src/intel/vulkan/genX_cmd_buffer.c | 10 +++++-----
src/vulkan/util/vk_image.h | 15 +++++++++++++++
5 files changed, 50 insertions(+), 38 deletions(-)
diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index ea5cdd31ca2..765df4c5cf2 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -317,8 +317,8 @@ copy_image(struct anv_cmd_buffer *cmd_buffer,
layer_count = region->extent.depth;
} else {
dst_base_layer = region->dstSubresource.baseArrayLayer;
- layer_count =
- anv_get_layerCount(dst_image, ®ion->dstSubresource);
+ layer_count = vk_image_subresource_layer_count(&dst_image->vk,
+ ®ion->dstSubresource);
}
const uint32_t src_level = region->srcSubresource.mipLevel;
@@ -328,7 +328,8 @@ copy_image(struct anv_cmd_buffer *cmd_buffer,
} else {
src_base_layer = region->srcSubresource.baseArrayLayer;
assert(layer_count ==
- anv_get_layerCount(src_image, ®ion->srcSubresource));
+ vk_image_subresource_layer_count(&src_image->vk,
+ ®ion->srcSubresource));
}
VkImageAspectFlags src_mask = region->srcSubresource.aspectMask,
@@ -494,7 +495,9 @@ copy_buffer_to_image(struct anv_cmd_buffer *cmd_buffer,
anv_sanitize_image_extent(anv_image->vk.image_type, region->imageExtent);
if (anv_image->vk.image_type != VK_IMAGE_TYPE_3D) {
image.offset.z = region->imageSubresource.baseArrayLayer;
- extent.depth = anv_get_layerCount(anv_image, ®ion->imageSubresource);
+ extent.depth =
+ vk_image_subresource_layer_count(&anv_image->vk,
+ ®ion->imageSubresource);
}
const enum isl_format linear_format =
@@ -701,7 +704,8 @@ blit_image(struct anv_cmd_buffer *cmd_buffer,
dst_end = region->dstOffsets[1].z;
} else {
dst_start = dst_res->baseArrayLayer;
- dst_end = dst_start + anv_get_layerCount(dst_image, dst_res);
+ dst_end = dst_start +
+ vk_image_subresource_layer_count(&dst_image->vk, dst_res);
}
unsigned src_start, src_end;
@@ -711,7 +715,8 @@ blit_image(struct anv_cmd_buffer *cmd_buffer,
src_end = region->srcOffsets[1].z;
} else {
src_start = src_res->baseArrayLayer;
- src_end = src_start + anv_get_layerCount(src_image, src_res);
+ src_end = src_start +
+ vk_image_subresource_layer_count(&src_image->vk, src_res);
}
bool flip_z = flip_coords(&src_start, &src_end, &dst_start, &dst_end);
@@ -1034,9 +1039,12 @@ void anv_CmdClearColorImage(
VK_IMAGE_ASPECT_COLOR_BIT, image->vk.tiling);
unsigned base_layer = pRanges[r].baseArrayLayer;
- unsigned layer_count = anv_get_layerCount(image, &pRanges[r]);
+ uint32_t layer_count =
+ vk_image_subresource_layer_count(&image->vk, &pRanges[r]);
+ uint32_t level_count =
+ vk_image_subresource_level_count(&image->vk, &pRanges[r]);
- for (unsigned i = 0; i < anv_get_levelCount(image, &pRanges[r]); i++) {
+ for (uint32_t i = 0; i < level_count; i++) {
const unsigned level = pRanges[r].baseMipLevel + i;
const unsigned level_width = anv_minify(image->vk.extent.width, level);
const unsigned level_height = anv_minify(image->vk.extent.height, level);
@@ -1109,9 +1117,12 @@ void anv_CmdClearDepthStencilImage(
bool clear_stencil = pRanges[r].aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT;
unsigned base_layer = pRanges[r].baseArrayLayer;
- unsigned layer_count = anv_get_layerCount(image, &pRanges[r]);
+ uint32_t layer_count =
+ vk_image_subresource_layer_count(&image->vk, &pRanges[r]);
+ uint32_t level_count =
+ vk_image_subresource_level_count(&image->vk, &pRanges[r]);
- for (unsigned i = 0; i < anv_get_levelCount(image, &pRanges[r]); i++) {
+ for (uint32_t i = 0; i < level_count; i++) {
const unsigned level = pRanges[r].baseMipLevel + i;
const unsigned level_width = anv_minify(image->vk.extent.width, level);
const unsigned level_height = anv_minify(image->vk.extent.height, level);
@@ -1444,11 +1455,11 @@ resolve_image(struct anv_cmd_buffer *cmd_buffer,
const VkImageResolve2KHR *region)
{
assert(region->srcSubresource.aspectMask == region->dstSubresource.aspectMask);
- assert(anv_get_layerCount(src_image, ®ion->srcSubresource) ==
- anv_get_layerCount(dst_image, ®ion->dstSubresource));
+ assert(vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource) ==
+ vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource));
const uint32_t layer_count =
- anv_get_layerCount(dst_image, ®ion->dstSubresource);
+ vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource);
anv_foreach_image_aspect_bit(aspect_bit, src_image,
region->srcSubresource.aspectMask) {
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index 7bd4bece096..6e2ef8b88ac 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -2675,16 +2675,17 @@ anv_CreateImageView(VkDevice _device,
VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT));
+ uint32_t layer_count = vk_image_subresource_layer_count(&image->vk, range);
switch (image->vk.image_type) {
default:
unreachable("bad VkImageType");
case VK_IMAGE_TYPE_1D:
case VK_IMAGE_TYPE_2D:
- assert(range->baseArrayLayer + anv_get_layerCount(image, range) - 1 <=
- image->vk.array_layers);
+ assert(range->baseArrayLayer + layer_count - 1
+ <= image->vk.array_layers);
break;
case VK_IMAGE_TYPE_3D:
- assert(range->baseArrayLayer + anv_get_layerCount(image, range) - 1
+ assert(range->baseArrayLayer + layer_count - 1
<= anv_minify(image->vk.extent.depth, range->baseMipLevel));
break;
}
@@ -2760,9 +2761,9 @@ anv_CreateImageView(VkDevice _device,
iview->planes[vplane].isl = (struct isl_view) {
.format = format.isl_format,
.base_level = range->baseMipLevel,
- .levels = anv_get_levelCount(image, range),
+ .levels = vk_image_subresource_level_count(&image->vk, range),
.base_array_layer = range->baseArrayLayer,
- .array_len = anv_get_layerCount(image, range),
+ .array_len = layer_count,
.swizzle = {
.r = remap_swizzle(pCreateInfo->components.r,
VK_COMPONENT_SWIZZLE_R, format.swizzle),
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index fd4a6f8f68d..9da83af7ba2 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -4331,21 +4331,6 @@ anv_layout_to_fast_clear_type(const struct intel_device_info * const devinfo,
const VkImageAspectFlagBits aspect,
const VkImageLayout layout);
-/* This is defined as a macro so that it works for both
- * VkImageSubresourceRange and VkImageSubresourceLayers
- */
-#define anv_get_layerCount(_image, _range) \
- ((_range)->layerCount == VK_REMAINING_ARRAY_LAYERS ? \
- (_image)->vk.array_layers - (_range)->baseArrayLayer : (_range)->layerCount)
-
-static inline uint32_t
-anv_get_levelCount(const struct anv_image *image,
- const VkImageSubresourceRange *range)
-{
- return range->levelCount == VK_REMAINING_MIP_LEVELS ?
- image->vk.mip_levels - range->baseMipLevel : range->levelCount;
-}
-
static inline bool
anv_image_aspects_compatible(VkImageAspectFlags aspects1,
VkImageAspectFlags aspects2)
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index 58893c3327b..b177fffd47b 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -2436,8 +2436,10 @@ void genX(CmdPipelineBarrier)(
layer_count = anv_minify(image->vk.extent.depth, range->baseMipLevel);
} else {
base_layer = range->baseArrayLayer;
- layer_count = anv_get_layerCount(image, range);
+ layer_count = vk_image_subresource_layer_count(&image->vk, range);
}
+ const uint32_t level_count =
+ vk_image_subresource_level_count(&image->vk, range);
if (range->aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) {
transition_depth_buffer(cmd_buffer, image,
@@ -2449,8 +2451,7 @@ void genX(CmdPipelineBarrier)(
if (range->aspectMask & VK_IMAGE_ASPECT_STENCIL_BIT) {
transition_stencil_buffer(cmd_buffer, image,
- range->baseMipLevel,
- anv_get_levelCount(image, range),
+ range->baseMipLevel, level_count,
base_layer, layer_count,
pImageMemoryBarriers[i].oldLayout,
pImageMemoryBarriers[i].newLayout,
@@ -2462,8 +2463,7 @@ void genX(CmdPipelineBarrier)(
vk_image_expand_aspect_mask(&image->vk, range->aspectMask);
anv_foreach_image_aspect_bit(aspect_bit, image, color_aspects) {
transition_color_buffer(cmd_buffer, image, 1UL << aspect_bit,
- range->baseMipLevel,
- anv_get_levelCount(image, range),
+ range->baseMipLevel, level_count,
base_layer, layer_count,
pImageMemoryBarriers[i].oldLayout,
pImageMemoryBarriers[i].newLayout,
diff --git a/src/vulkan/util/vk_image.h b/src/vulkan/util/vk_image.h
index c35b99b700d..ff8c3523693 100644
--- a/src/vulkan/util/vk_image.h
+++ b/src/vulkan/util/vk_image.h
@@ -92,6 +92,21 @@ vk_image_mip_level_extent(const struct vk_image *image,
return extent;
}
+/* This is defined as a macro so that it works for both
+ * VkImageSubresourceRange and VkImageSubresourceLayers
+ */
+#define vk_image_subresource_layer_count(_image, _range) \
+ ((_range)->layerCount == VK_REMAINING_ARRAY_LAYERS ? \
+ (_image)->array_layers - (_range)->baseArrayLayer : (_range)->layerCount)
+
+static inline uint32_t
+vk_image_subresource_level_count(const struct vk_image *image,
+ const VkImageSubresourceRange *range)
+{
+ return range->levelCount == VK_REMAINING_MIP_LEVELS ?
+ image->mip_levels - range->baseMipLevel : range->levelCount;
+}
+
#ifdef __cplusplus
}
#endif
More information about the mesa-commit
mailing list