VkRect2D dst_box, VkSampler sampler)
{
struct radv_device *device = cmd_buffer->device;
- uint32_t src_width = radv_minify(src_iview->image->info.width, src_iview->vk.base_mip_level);
- uint32_t src_height = radv_minify(src_iview->image->info.height, src_iview->vk.base_mip_level);
- uint32_t src_depth = radv_minify(src_iview->image->info.depth, src_iview->vk.base_mip_level);
- uint32_t dst_width = radv_minify(dst_iview->image->info.width, dst_iview->vk.base_mip_level);
- uint32_t dst_height = radv_minify(dst_iview->image->info.height, dst_iview->vk.base_mip_level);
+ uint32_t src_width = radv_minify(src_iview->image->vk.extent.width, src_iview->vk.base_mip_level);
+ uint32_t src_height = radv_minify(src_iview->image->vk.extent.height, src_iview->vk.base_mip_level);
+ uint32_t src_depth = radv_minify(src_iview->image->vk.extent.depth, src_iview->vk.base_mip_level);
+ uint32_t dst_width = radv_minify(dst_iview->image->vk.extent.width, dst_iview->vk.base_mip_level);
+ uint32_t dst_height = radv_minify(dst_iview->image->vk.extent.height, dst_iview->vk.base_mip_level);
assert(src_image->vk.samples == dst_image->vk.samples);
device->meta_state.cleari_r32g32b32.img_p_layout,
VK_SHADER_STAGE_COMPUTE_BIT, 0, 16, push_constants);
- radv_unaligned_dispatch(cmd_buffer, dst->image->info.width, dst->image->info.height, 1);
+ radv_unaligned_dispatch(cmd_buffer, dst->image->vk.extent.width, dst->image->vk.extent.height, 1);
radv_buffer_view_finish(&dst_view);
radv_DestroyBuffer(radv_device_to_handle(device), buffer, NULL);
device->meta_state.cleari.img_p_layout, VK_SHADER_STAGE_COMPUTE_BIT, 0, 20,
push_constants);
- radv_unaligned_dispatch(cmd_buffer, dst->image->info.width, dst->image->info.height, 1);
+ radv_unaligned_dispatch(cmd_buffer, dst->image->vk.extent.width, dst->image->vk.extent.height, 1);
radv_image_view_finish(&dst_iview);
}
return false;
if (clear_rect->rect.offset.x || clear_rect->rect.offset.y ||
- clear_rect->rect.extent.width != iview->image->info.width ||
- clear_rect->rect.extent.height != iview->image->info.height)
+ clear_rect->rect.extent.width != iview->image->vk.extent.width ||
+ clear_rect->rect.extent.height != iview->image->vk.extent.height)
return false;
if (view_mask && (iview->image->vk.array_layers >= 32 ||
if (!radv_dcc_enabled(image, range->baseMipLevel + l))
continue;
- width = radv_minify(image->info.width, range->baseMipLevel + l);
- height = radv_minify(image->info.height, range->baseMipLevel + l);
+ width = radv_minify(image->vk.extent.width, range->baseMipLevel + l);
+ height = radv_minify(image->vk.extent.height, range->baseMipLevel + l);
radv_image_view_init(
&iview, cmd_buffer->device,
return false;
if (clear_rect->rect.offset.x || clear_rect->rect.offset.y ||
- clear_rect->rect.extent.width != iview->image->info.width ||
- clear_rect->rect.extent.height != iview->image->info.height)
+ clear_rect->rect.extent.width != iview->image->vk.extent.width ||
+ clear_rect->rect.extent.height != iview->image->vk.extent.height)
return false;
if (view_mask && (iview->image->vk.array_layers >= 32 ||
const VkClearValue *clear_val)
{
struct radv_image_view iview;
- uint32_t width = radv_minify(image->info.width, range->baseMipLevel + level);
- uint32_t height = radv_minify(image->info.height, range->baseMipLevel + level);
+ uint32_t width = radv_minify(image->vk.extent.width, range->baseMipLevel + level);
+ uint32_t height = radv_minify(image->vk.extent.height, range->baseMipLevel + level);
radv_image_view_init(&iview, cmd_buffer->device,
&(VkImageViewCreateInfo){
.offset = {0, 0},
.extent =
{
- radv_minify(image->info.width, range->baseMipLevel),
- radv_minify(image->info.height, range->baseMipLevel),
+ radv_minify(image->vk.extent.width, range->baseMipLevel),
+ radv_minify(image->vk.extent.height, range->baseMipLevel),
},
},
.baseArrayLayer = range->baseArrayLayer,
for (uint32_t l = 0; l < vk_image_subresource_level_count(&image->vk, range); ++l) {
const uint32_t layer_count = image->vk.image_type == VK_IMAGE_TYPE_3D
- ? radv_minify(image->info.depth, range->baseMipLevel + l)
+ ? radv_minify(image->vk.extent.depth, range->baseMipLevel + l)
: vk_image_subresource_layer_count(&image->vk, range);
-
if (cs) {
for (uint32_t s = 0; s < layer_count; ++s) {
struct radv_meta_blit2d_surf surf;
/* RADV_QUEUE_TRANSFER should only be used for the prime blit */
assert(!region->imageOffset.x && !region->imageOffset.y && !region->imageOffset.z);
assert(image->vk.image_type == VK_IMAGE_TYPE_2D);
- assert(image->info.width == region->imageExtent.width);
- assert(image->info.height == region->imageExtent.height);
+ assert(image->vk.extent.width == region->imageExtent.width);
+ assert(image->vk.extent.height == region->imageExtent.height);
ASSERTED bool res = radv_sdma_copy_image(device, cs, image, buffer, region);
assert(res);
radv_cs_add_buffer(device->ws, cs, image->bindings[0].bo);
if (radv_layout_is_htile_compressed(cmd_buffer->device, dst_image, dst_image_layout,
queue_mask) &&
(region->dstOffset.x || region->dstOffset.y || region->dstOffset.z ||
- region->extent.width != dst_image->info.width ||
- region->extent.height != dst_image->info.height ||
- region->extent.depth != dst_image->info.depth)) {
+ region->extent.width != dst_image->vk.extent.width ||
+ region->extent.height != dst_image->vk.extent.height ||
+ region->extent.depth != dst_image->vk.extent.depth)) {
u_foreach_bit(i, region->dstSubresource.aspectMask) {
unsigned aspect_mask = 1u << i;
radv_expand_depth_stencil(cmd_buffer, dst_image,
},
});
- unsigned width = DIV_ROUND_UP(image->info.width, vk_format_get_blockwidth(image->vk.format));
- unsigned height = DIV_ROUND_UP(image->info.height, vk_format_get_blockheight(image->vk.format));
+ unsigned width = DIV_ROUND_UP(image->vk.extent.width, vk_format_get_blockwidth(image->vk.format));
+ unsigned height = DIV_ROUND_UP(image->vk.extent.height, vk_format_get_blockheight(image->vk.format));
unsigned dcc_width = DIV_ROUND_UP(width, image->planes[0].surface.u.gfx9.color.dcc_block_width);
unsigned dcc_height =
struct radv_image_view iview;
uint32_t width, height;
- width = radv_minify(image->info.width, range->baseMipLevel + level);
- height = radv_minify(image->info.height, range->baseMipLevel + level);
+ width = radv_minify(image->vk.extent.width, range->baseMipLevel + level);
+ height = radv_minify(image->vk.extent.height, range->baseMipLevel + level);
radv_image_view_init(&iview, device,
&(VkImageViewCreateInfo){
if (!radv_htile_enabled(image, subresourceRange->baseMipLevel + l))
continue;
- uint32_t width = radv_minify(image->info.width, subresourceRange->baseMipLevel + l);
- uint32_t height = radv_minify(image->info.height, subresourceRange->baseMipLevel + l);
+ uint32_t width = radv_minify(image->vk.extent.width, subresourceRange->baseMipLevel + l);
+ uint32_t height = radv_minify(image->vk.extent.height, subresourceRange->baseMipLevel + l);
radv_CmdSetViewport(cmd_buffer_h, 0, 1,
&(VkViewport){.x = 0,
if (!radv_htile_enabled(image, subresourceRange->baseMipLevel + l))
continue;
- width = radv_minify(image->info.width, subresourceRange->baseMipLevel + l);
- height = radv_minify(image->info.height, subresourceRange->baseMipLevel + l);
+ width = radv_minify(image->vk.extent.width, subresourceRange->baseMipLevel + l);
+ height = radv_minify(image->vk.extent.height, subresourceRange->baseMipLevel + l);
for (uint32_t s = 0; s < vk_image_subresource_layer_count(&image->vk, subresourceRange); s++) {
radv_image_view_init(
struct radv_image_view iview;
uint32_t width, height;
- width = radv_minify(image->info.width, range->baseMipLevel + level);
- height = radv_minify(image->info.height, range->baseMipLevel + level);
+ width = radv_minify(image->vk.extent.width, range->baseMipLevel + level);
+ height = radv_minify(image->vk.extent.height, range->baseMipLevel + level);
radv_image_view_init(&iview, device,
&(VkImageViewCreateInfo){
if (op == DCC_DECOMPRESS && !radv_dcc_enabled(image, subresourceRange->baseMipLevel + l))
continue;
- width = radv_minify(image->info.width, subresourceRange->baseMipLevel + l);
- height = radv_minify(image->info.height, subresourceRange->baseMipLevel + l);
+ width = radv_minify(image->vk.extent.width, subresourceRange->baseMipLevel + l);
+ height = radv_minify(image->vk.extent.height, subresourceRange->baseMipLevel + l);
radv_CmdSetViewport(radv_cmd_buffer_to_handle(cmd_buffer), 0, 1,
&(VkViewport){.x = 0,
if (!radv_dcc_enabled(image, subresourceRange->baseMipLevel + l))
continue;
- width = radv_minify(image->info.width, subresourceRange->baseMipLevel + l);
- height = radv_minify(image->info.height, subresourceRange->baseMipLevel + l);
+ width = radv_minify(image->vk.extent.width, subresourceRange->baseMipLevel + l);
+ height = radv_minify(image->vk.extent.height, subresourceRange->baseMipLevel + l);
for (uint32_t s = 0; s < vk_image_subresource_layer_count(&image->vk, subresourceRange); s++) {
radv_image_view_init(
/* The region must be a whole image copy. */
if (num_rects != 1 ||
(rects[0].src_x || rects[0].src_y || rects[0].dst_x || rects[0].dst_y ||
- rects[0].width != src_image->info.width || rects[0].height != src_image->info.height))
+ rects[0].width != src_image->vk.extent.width || rects[0].height != src_image->vk.extent.height))
return false;
/* Source/destination images must have identical size. */
- if (src_image->info.width != dst_image->info.width ||
- src_image->info.height != dst_image->info.height)
+ if (src_image->vk.extent.width != dst_image->vk.extent.width ||
+ src_image->vk.extent.height != dst_image->vk.extent.height)
return false;
/* Source/destination images must have identical swizzle. */
.imageLayout = VK_IMAGE_LAYOUT_GENERAL},
}}});
- radv_unaligned_dispatch(cmd_buffer, src->image->info.width, src->image->info.height, 1);
+ radv_unaligned_dispatch(cmd_buffer, src->image->vk.extent.width, src->image->vk.extent.height, 1);
/* Fixup destination image metadata by copying CMASK/FMASK from the source image. */
radv_fixup_copy_dst_metadata(cmd_buffer, src->image, dst->image);
.imageLayout = VK_IMAGE_LAYOUT_GENERAL},
}}});
- radv_unaligned_dispatch(cmd_buffer, image->info.width, image->info.height, layer_count);
+ radv_unaligned_dispatch(cmd_buffer, image->vk.extent.width, image->vk.extent.height, layer_count);
radv_image_view_finish(&iview);
pResolveImageInfo->pRegions[0].dstOffset.y || pResolveImageInfo->pRegions[0].dstOffset.z)
resolve_method = RESOLVE_COMPUTE;
- if (pResolveImageInfo->pRegions[0].extent.width != src_image->info.width ||
- pResolveImageInfo->pRegions[0].extent.height != src_image->info.height ||
- pResolveImageInfo->pRegions[0].extent.depth != src_image->info.depth)
+ if (pResolveImageInfo->pRegions[0].extent.width != src_image->vk.extent.width ||
+ pResolveImageInfo->pRegions[0].extent.height != src_image->vk.extent.height ||
+ pResolveImageInfo->pRegions[0].extent.depth != src_image->vk.extent.depth)
resolve_method = RESOLVE_COMPUTE;
} else
resolve_method = RESOLVE_COMPUTE;
radv_layout_dcc_compressed(cmd_buffer->device, dst_image, region->dstSubresource.mipLevel,
dst_image_layout, queue_mask) &&
(region->dstOffset.x || region->dstOffset.y || region->dstOffset.z ||
- region->extent.width != dst_image->info.width ||
- region->extent.height != dst_image->info.height ||
- region->extent.depth != dst_image->info.depth)) {
+ region->extent.width != dst_image->vk.extent.width ||
+ region->extent.height != dst_image->vk.extent.height ||
+ region->extent.depth != dst_image->vk.extent.depth)) {
radv_decompress_dcc(cmd_buffer, dst_image,
&(VkImageSubresourceRange){
.aspectMask = region->dstSubresource.aspectMask,
va = radv_buffer_get_va(vrs_image->bindings[0].bo) + vrs_image->bindings[0].offset;
va |= vrs_image->planes[0].surface.tile_swizzle << 8;
- xmax = vrs_image->info.width - 1;
- ymax = vrs_image->info.height - 1;
+ xmax = vrs_image->vk.extent.width - 1;
+ ymax = vrs_image->vk.extent.height - 1;
}
radeon_set_context_reg_seq(cmd_buffer->cs, R_0283F0_PA_SC_VRS_RATE_BASE, 3);
radv_buffer_init(&htile_buffer, cmd_buffer->device, ds_image->bindings[0].bo, htile_size, htile_offset);
- assert(render->area.offset.x + render->area.extent.width <= ds_image->info.width &&
- render->area.offset.x + render->area.extent.height <= ds_image->info.height);
+ assert(render->area.offset.x + render->area.extent.width <= ds_image->vk.extent.width &&
+ render->area.offset.x + render->area.extent.height <= ds_image->vk.extent.height);
/* Copy the VRS rates to the HTILE buffer. */
radv_copy_vrs_htile(cmd_buffer, render->vrs_att.iview->image, &render->area, ds_image,
*/
struct radv_image *ds_image = radv_cmd_buffer_get_vrs_image(cmd_buffer);
- if (ds_image && render->area.offset.x < ds_image->info.width &&
- render->area.offset.y < ds_image->info.height) {
+ if (ds_image && render->area.offset.x < ds_image->vk.extent.width &&
+ render->area.offset.y < ds_image->vk.extent.height) {
/* HTILE buffer */
struct radv_buffer *htile_buffer = cmd_buffer->device->vrs.buffer;
VkRect2D area = render->area;
- area.extent.width = MIN2(area.extent.width, ds_image->info.width - area.offset.x);
- area.extent.height = MIN2(area.extent.height, ds_image->info.height - area.offset.y);
+ area.extent.width = MIN2(area.extent.width, ds_image->vk.extent.width - area.offset.x);
+ area.extent.height = MIN2(area.extent.height, ds_image->vk.extent.height - area.offset.y);
/* Copy the VRS rates to the HTILE buffer. */
radv_copy_vrs_htile(cmd_buffer, render->vrs_att.iview->image, &area, ds_image,
S_028038_TILE_SURFACE_ENABLE(1);
ds->db_stencil_info = S_02803C_FORMAT(V_028044_STENCIL_INVALID);
- ds->db_depth_size = S_02801C_X_MAX(image->info.width - 1) |
- S_02801C_Y_MAX(image->info.height - 1);
+ ds->db_depth_size = S_02801C_X_MAX(image->vk.extent.width - 1) |
+ S_02801C_Y_MAX(image->vk.extent.height - 1);
ds->db_htile_data_base = radv_buffer_get_va(htile_buffer->bo) >> 8;
ds->db_htile_surface = S_028ABC_FULL_CACHE(1) | S_028ABC_PIPE_ALIGNED(1) |
}
ds->db_depth_view |= S_028008_MIPID(level);
- ds->db_depth_size = S_02801C_X_MAX(iview->image->info.width - 1) |
- S_02801C_Y_MAX(iview->image->info.height - 1);
+ ds->db_depth_size = S_02801C_X_MAX(iview->image->vk.extent.width - 1) |
+ S_02801C_Y_MAX(iview->image->vk.extent.height - 1);
if (radv_htile_enabled(iview->image, level)) {
ds->db_z_info |= S_028038_TILE_SURFACE_ENABLE(1);
if (device->instance->debug_flags & RADV_DEBUG_FORCE_COMPRESS)
return true;
- if (image->vk.samples <= 1 && image->info.width * image->info.height <= 512 * 512) {
+ if (image->vk.samples <= 1 && image->vk.extent.width * image->vk.extent.height <= 512 * 512) {
/* Do not enable CMASK or DCC for small surfaces where the cost
* of the eliminate pass can be higher than the benefit of fast
* clear. RadeonSI does this, but the image threshold is
/* Do not enable HTILE for very small images because it seems less performant but make sure it's
* allowed with VRS attachments because we need HTILE on GFX10.3.
*/
- if (image->info.width * image->info.height < 8 * 8 &&
+ if (image->vk.extent.width * image->vk.extent.height < 8 * 8 &&
!(device->instance->debug_flags & RADV_DEBUG_FORCE_COMPRESS) &&
!(gfx_level == GFX10_3 && device->attachment_vrs_enabled))
return false;
const struct radv_image_create_info *create_info,
struct ac_surf_info *image_info)
{
- unsigned width = image->info.width;
- unsigned height = image->info.height;
+ unsigned width = image->vk.extent.width;
+ unsigned height = image->vk.extent.height;
/*
* minigbm sometimes allocates bigger images which is going to result in
}
}
- if (image->info.width == width && image->info.height == height)
+ if (image->vk.extent.width == width && image->vk.extent.height == height)
return VK_SUCCESS;
- if (width < image->info.width || height < image->info.height) {
+ if (width < image->vk.extent.width || height < image->vk.extent.height) {
fprintf(stderr,
"The imported image has smaller dimensions than the internal\n"
"dimensions. Using it is going to fail badly, so we reject\n"
"this import.\n"
"(internal dimensions: %d x %d, external dimensions: %d x %d)\n",
- image->info.width, image->info.height, width, height);
+ image->vk.extent.width, image->vk.extent.height, width, height);
return VK_ERROR_INVALID_EXTERNAL_HANDLE;
} else if (device->physical_device->rad_info.gfx_level >= GFX10) {
fprintf(stderr,
"As GFX10 has no separate stride fields we cannot cope with\n"
"an inconsistency in width and will fail this import.\n"
"(internal dimensions: %d x %d, external dimensions: %d x %d)\n",
- image->info.width, image->info.height, width, height);
+ image->vk.extent.width, image->vk.extent.height, width, height);
return VK_ERROR_INVALID_EXTERNAL_HANDLE;
} else {
fprintf(stderr,
"As GFX10 has no separate stride fields we cannot cope with\n"
"an inconsistency and would fail on GFX10.\n"
"(internal dimensions: %d x %d, external dimensions: %d x %d)\n",
- image->info.width, image->info.height, width, height);
+ image->vk.extent.width, image->vk.extent.height, width, height);
}
image_info->width = width;
image_info->height = height;
radv_make_texture_descriptor(device, image, false, (VkImageViewType)image->vk.image_type,
image->vk.format, &fixedmapping, 0, image->vk.mip_levels - 1, 0,
- image->vk.array_layers - 1, image->info.width, image->info.height,
- image->info.depth, 0.0f, desc, NULL, 0, NULL, NULL);
+ image->vk.array_layers - 1, image->vk.extent.width, image->vk.extent.height,
+ image->vk.extent.depth, 0.0f, desc, NULL, 0, NULL, NULL);
si_set_mutable_tex_desc_fields(device, image, &image->planes[0].surface.u.legacy.level[0], 0, 0,
0, image->planes[0].surface.blk_w, false, false, false, false,
const struct radv_image *image, struct radeon_surf *surf)
{
if (!surf->cmask_size || surf->cmask_offset || surf->bpe > 8 || image->vk.mip_levels > 1 ||
- image->info.depth > 1 || radv_image_has_dcc(image) ||
+ image->vk.extent.depth > 1 || radv_image_has_dcc(image) ||
!radv_image_use_fast_clear_for_image(device, image) ||
(image->vk.create_flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT))
return;
" Info: size=%" PRIu64 ", alignment=%" PRIu32 ", "
"width=%" PRIu32 ", height=%" PRIu32 ", depth=%" PRIu32 ", "
"array_size=%" PRIu32 ", levels=%" PRIu32 "\n",
- image->size, image->alignment, image->info.width, image->info.height, image->info.depth,
+ image->size, image->alignment, image->vk.extent.width, image->vk.extent.height, image->vk.extent.depth,
image->vk.array_layers, image->vk.mip_levels);
for (unsigned i = 0; i < image->plane_count; ++i) {
const struct radv_image_plane *plane = &image->planes[i];
break;
case VK_IMAGE_TYPE_3D:
assert(range->baseArrayLayer + vk_image_subresource_layer_count(&image->vk, range) - 1 <=
- radv_minify(image->info.depth, range->baseMipLevel));
+ radv_minify(image->vk.extent.depth, range->baseMipLevel));
break;
default:
unreachable("bad VkImageType");
if (device->physical_device->rad_info.gfx_level >= GFX9) {
iview->extent = (VkExtent3D){
- .width = image->info.width,
- .height = image->info.height,
- .depth = image->info.depth,
+ .width = image->vk.extent.width,
+ .height = image->vk.extent.height,
+ .depth = image->vk.extent.depth,
};
} else {
iview->extent = iview->vk.extent;
iview->extent.width = iview->image->planes[0].surface.u.gfx9.base_mip_width;
iview->extent.height = iview->image->planes[0].surface.u.gfx9.base_mip_height;
} else {
- unsigned lvl_width = radv_minify(image->info.width, range->baseMipLevel);
- unsigned lvl_height = radv_minify(image->info.height, range->baseMipLevel);
+ unsigned lvl_width = radv_minify(image->vk.extent.width, range->baseMipLevel);
+ unsigned lvl_height = radv_minify(image->vk.extent.height, range->baseMipLevel);
lvl_width = round_up_u32(lvl_width * view_bw, img_bw);
lvl_height = round_up_u32(lvl_height * view_bh, img_bh);
pLayout->depthPitch = surface->u.gfx9.surf_slice_size;
pLayout->size = surface->u.gfx9.surf_slice_size;
if (image->vk.image_type == VK_IMAGE_TYPE_3D)
- pLayout->size *= u_minify(image->info.depth, level);
+ pLayout->size *= u_minify(image->vk.extent.depth, level);
} else {
pLayout->offset = (uint64_t)surface->u.legacy.level[level].offset_256B * 256 +
(uint64_t)surface->u.legacy.level[level].slice_size_dw * 4 * layer;
pLayout->depthPitch = (uint64_t)surface->u.legacy.level[level].slice_size_dw * 4;
pLayout->size = (uint64_t)surface->u.legacy.level[level].slice_size_dw * 4;
if (image->vk.image_type == VK_IMAGE_TYPE_3D)
- pLayout->size *= u_minify(image->info.depth, level);
+ pLayout->size *= u_minify(image->vk.extent.depth, level);
}
}
static inline bool
radv_image_extent_compare(const struct radv_image *image, const VkExtent3D *extent)
{
- if (extent->width != image->info.width || extent->height != image->info.height ||
- extent->depth != image->info.depth)
+ if (extent->width != image->vk.extent.width || extent->height != image->vk.extent.height ||
+ extent->depth != image->vk.extent.depth)
return false;
return true;
}
uint64_t dst_address = buffer->bo->va;
uint64_t src_address = image->bindings[0].bo->va + image->planes[0].surface.u.gfx9.surf_offset;
unsigned src_pitch = image->planes[0].surface.u.gfx9.surf_pitch;
- unsigned copy_width = DIV_ROUND_UP(image->info.width, image->planes[0].surface.blk_w);
- unsigned copy_height = DIV_ROUND_UP(image->info.height, image->planes[0].surface.blk_h);
+ unsigned copy_width = DIV_ROUND_UP(image->vk.extent.width, image->planes[0].surface.blk_w);
+ unsigned copy_height = DIV_ROUND_UP(image->vk.extent.height, image->planes[0].surface.blk_h);
bool tmz = false;
/* Linear -> linear sub-window copy. */
src_va += csize;
size -= csize;
}
-}
\ No newline at end of file
+}