dst_end = region->dstOffsets[1].z;
} else {
dst_start = dst_res->baseArrayLayer;
- dst_end = dst_start + dst_res->layerCount;
+ dst_end = dst_start + vk_image_subresource_layer_count(&dst_image->vk, dst_res);
}
unsigned src_start, src_end;
src_end = region->srcOffsets[1].z;
} else {
src_start = src_res->baseArrayLayer;
- src_end = src_start + src_res->layerCount;
+ 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);
.baseMipLevel = region->imageSubresource.mipLevel,
.levelCount = 1,
.baseArrayLayer = region->imageSubresource.baseArrayLayer,
- .layerCount = region->imageSubresource.layerCount,
+ .layerCount = vk_image_subresource_layer_count(&image->vk, ®ion->imageSubresource),
});
img_bsurf.disable_compression = true;
img_bsurf.layer = img_offset_el.z;
/* Loop through each 3D or array slice */
unsigned num_slices_3d = img_extent_el.depth;
- unsigned num_slices_array = region->imageSubresource.layerCount;
+ unsigned num_slices_array = vk_image_subresource_layer_count(&image->vk, ®ion->imageSubresource);
unsigned slice_3d = 0;
unsigned slice_array = 0;
while (slice_3d < num_slices_3d && slice_array < num_slices_array) {
.baseMipLevel = region->imageSubresource.mipLevel,
.levelCount = 1,
.baseArrayLayer = region->imageSubresource.baseArrayLayer,
- .layerCount = region->imageSubresource.layerCount,
+ .layerCount = vk_image_subresource_layer_count(&image->vk, ®ion->imageSubresource),
});
img_info.disable_compression = true;
img_info.layer = img_offset_el.z;
/* Loop through each 3D or array slice */
unsigned num_slices_3d = img_extent_el.depth;
- unsigned num_slices_array = region->imageSubresource.layerCount;
+ unsigned num_slices_array = vk_image_subresource_layer_count(&image->vk, ®ion->imageSubresource);
unsigned slice_3d = 0;
unsigned slice_array = 0;
while (slice_3d < num_slices_3d && slice_array < num_slices_array) {
u_foreach_bit (i, region->dstSubresource.aspectMask) {
unsigned aspect_mask = 1u << i;
- radv_expand_depth_stencil(cmd_buffer, dst_image,
- &(VkImageSubresourceRange){
- .aspectMask = aspect_mask,
- .baseMipLevel = region->dstSubresource.mipLevel,
- .levelCount = 1,
- .baseArrayLayer = region->dstSubresource.baseArrayLayer,
- .layerCount = region->dstSubresource.layerCount,
- },
- NULL);
+ radv_expand_depth_stencil(
+ cmd_buffer, dst_image,
+ &(VkImageSubresourceRange){
+ .aspectMask = aspect_mask,
+ .baseMipLevel = region->dstSubresource.mipLevel,
+ .levelCount = 1,
+ .baseArrayLayer = region->dstSubresource.baseArrayLayer,
+ .layerCount = vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource),
+ },
+ NULL);
}
radv_describe_barrier_end(cmd_buffer);
.baseMipLevel = region->dstSubresource.mipLevel,
.levelCount = 1,
.baseArrayLayer = region->dstSubresource.baseArrayLayer,
- .layerCount = region->dstSubresource.layerCount,
+ .layerCount = vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource),
});
b_dst.format = b_src.format;
b_dst.disable_compression = true;
.height = img_extent_el.height,
};
- unsigned num_slices = region->srcSubresource.layerCount;
+ unsigned num_slices = vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource);
if (src_image->vk.image_type == VK_IMAGE_TYPE_3D) {
b_src.layer = src_offset_el.z;
.baseMipLevel = region->dstSubresource.mipLevel,
.levelCount = 1,
.baseArrayLayer = region->dstSubresource.baseArrayLayer,
- .layerCount = region->dstSubresource.layerCount,
+ .layerCount = vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource),
};
uint32_t htile_value = radv_get_htile_initial_value(cmd_buffer->device, dst_image);
RADV_META_SUSPEND_PREDICATING);
uint32_t base_slice = radv_meta_get_iview_layer(image, subresource, &offset);
- uint32_t slice_count = image->vk.image_type == VK_IMAGE_TYPE_3D ? extent.depth : subresource->layerCount;
+ uint32_t slice_count = image->vk.image_type == VK_IMAGE_TYPE_3D
+ ? extent.depth
+ : vk_image_subresource_layer_count(&image->vk, subresource);
extent = vk_image_sanitize_extent(&image->vk, extent);
offset = vk_image_sanitize_offset(&image->vk, offset);
VkFormat load_format =
vk_format_get_blocksize(image->vk.format) == 16 ? VK_FORMAT_R32G32B32A32_UINT : VK_FORMAT_R32G32_UINT;
struct radv_image_view src_iview;
- radv_image_view_init(&src_iview, cmd_buffer->device,
- &(VkImageViewCreateInfo){
- .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
- .image = radv_image_to_handle(image),
- .viewType = radv_meta_get_view_type(image),
- .format = load_format,
- .subresourceRange =
- {
- .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
- .baseMipLevel = subresource->mipLevel,
- .levelCount = 1,
- .baseArrayLayer = 0,
- .layerCount = subresource->baseArrayLayer + subresource->layerCount,
- },
- },
- 0, NULL);
+ radv_image_view_init(
+ &src_iview, cmd_buffer->device,
+ &(VkImageViewCreateInfo){
+ .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+ .image = radv_image_to_handle(image),
+ .viewType = radv_meta_get_view_type(image),
+ .format = load_format,
+ .subresourceRange =
+ {
+ .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+ .baseMipLevel = subresource->mipLevel,
+ .levelCount = 1,
+ .baseArrayLayer = 0,
+ .layerCount = subresource->baseArrayLayer + vk_image_subresource_layer_count(&image->vk, subresource),
+ },
+ },
+ 0, NULL);
VkFormat store_format;
switch (image->vk.format) {
store_format = VK_FORMAT_R8G8B8A8_UNORM;
}
struct radv_image_view dst_iview;
- radv_image_view_init(&dst_iview, cmd_buffer->device,
- &(VkImageViewCreateInfo){
- .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
- .image = radv_image_to_handle(image),
- .viewType = radv_meta_get_view_type(image),
- .format = store_format,
- .subresourceRange =
- {
- .aspectMask = VK_IMAGE_ASPECT_PLANE_1_BIT,
- .baseMipLevel = subresource->mipLevel,
- .levelCount = 1,
- .baseArrayLayer = 0,
- .layerCount = subresource->baseArrayLayer + subresource->layerCount,
- },
- },
- 0, NULL);
+ radv_image_view_init(
+ &dst_iview, cmd_buffer->device,
+ &(VkImageViewCreateInfo){
+ .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
+ .image = radv_image_to_handle(image),
+ .viewType = radv_meta_get_view_type(image),
+ .format = store_format,
+ .subresourceRange =
+ {
+ .aspectMask = VK_IMAGE_ASPECT_PLANE_1_BIT,
+ .baseMipLevel = subresource->mipLevel,
+ .levelCount = 1,
+ .baseArrayLayer = 0,
+ .layerCount = subresource->baseArrayLayer + vk_image_subresource_layer_count(&image->vk, subresource),
+ },
+ },
+ 0, NULL);
decode_etc(cmd_buffer, &src_iview, &dst_iview, &(VkOffset3D){offset.x, offset.y, base_slice},
&(VkExtent3D){extent.width, extent.height, slice_count});
*/
assert(region->srcSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT);
assert(region->dstSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT);
- assert(region->srcSubresource.layerCount == region->dstSubresource.layerCount);
+ assert(vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource) ==
+ vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource));
const uint32_t src_base_layer = radv_meta_get_iview_layer(src_image, ®ion->srcSubresource, ®ion->srcOffset);
.baseMipLevel = region->dstSubresource.mipLevel,
.levelCount = 1,
.baseArrayLayer = dst_base_layer,
- .layerCount = region->dstSubresource.layerCount,
+ .layerCount = vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource),
};
cmd_buffer->state.flush_bits |= radv_init_dcc(cmd_buffer, dst_image, &range, 0xffffffff);
radv_CmdSetScissor(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &resolve_area);
- for (uint32_t layer = 0; layer < region->srcSubresource.layerCount; ++layer) {
+ const unsigned src_layer_count = vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource);
+
+ for (uint32_t layer = 0; layer < src_layer_count; ++layer) {
VkResult ret = build_resolve_pipeline(device, fs_key);
if (ret != VK_SUCCESS) {
.oldLayout = src_image_layout,
.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
.image = radv_image_to_handle(src_image),
- .subresourceRange =
- (VkImageSubresourceRange){
- .aspectMask = region->srcSubresource.aspectMask,
- .baseMipLevel = region->srcSubresource.mipLevel,
- .levelCount = 1,
- .baseArrayLayer = src_base_layer,
- .layerCount = region->srcSubresource.layerCount,
- },
- };
+ .subresourceRange = (VkImageSubresourceRange){
+ .aspectMask = region->srcSubresource.aspectMask,
+ .baseMipLevel = region->srcSubresource.mipLevel,
+ .levelCount = 1,
+ .baseArrayLayer = src_base_layer,
+ .layerCount = vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource),
+ }};
VkSampleLocationsInfoEXT sample_loc_info;
if (src_image->vk.create_flags & VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT) {
.baseMipLevel = region->dstSubresource.mipLevel,
.levelCount = 1,
.baseArrayLayer = region->dstSubresource.baseArrayLayer,
- .layerCount = region->dstSubresource.layerCount,
+ .layerCount = vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource),
});
}
assert(region->srcSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT);
assert(region->dstSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT);
- assert(region->srcSubresource.layerCount == region->dstSubresource.layerCount);
+ assert(vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource) ==
+ vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource));
const uint32_t src_base_layer = radv_meta_get_iview_layer(src_image, ®ion->srcSubresource, ®ion->srcOffset);
const struct VkExtent3D extent = vk_image_sanitize_extent(&src_image->vk, region->extent);
const struct VkOffset3D srcOffset = vk_image_sanitize_offset(&src_image->vk, region->srcOffset);
const struct VkOffset3D dstOffset = vk_image_sanitize_offset(&dst_image->vk, region->dstOffset);
+ const unsigned src_layer_count = vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource);
- for (uint32_t layer = 0; layer < region->srcSubresource.layerCount; ++layer) {
+ for (uint32_t layer = 0; layer < src_layer_count; ++layer) {
struct radv_image_view src_iview;
radv_image_view_init(&src_iview, cmd_buffer->device,
.baseMipLevel = region->dstSubresource.mipLevel,
.levelCount = 1,
.baseArrayLayer = dst_base_layer,
- .layerCount = region->dstSubresource.layerCount,
+ .layerCount = vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource),
};
cmd_buffer->state.flush_bits |= radv_init_dcc(cmd_buffer, dst_image, &range, 0xffffffff);
assert(region->srcSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT);
assert(region->dstSubresource.aspectMask == VK_IMAGE_ASPECT_COLOR_BIT);
- assert(region->srcSubresource.layerCount == region->dstSubresource.layerCount);
+ assert(vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource) ==
+ vk_image_subresource_layer_count(&dst_image->vk, ®ion->dstSubresource));
const uint32_t src_base_layer = radv_meta_get_iview_layer(src_image, ®ion->srcSubresource, ®ion->srcOffset);
radv_CmdSetScissor(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1, &resolve_area);
- for (uint32_t layer = 0; layer < region->srcSubresource.layerCount; ++layer) {
+ const unsigned src_layer_count = vk_image_subresource_layer_count(&src_image->vk, ®ion->srcSubresource);
+
+ for (uint32_t layer = 0; layer < src_layer_count; ++layer) {
struct radv_image_view src_iview;
radv_image_view_init(&src_iview, cmd_buffer->device,