radv: implement VK_EXT_image_2d_view_of_3d
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16294>
This commit is contained in:

committed by
Marge Bot

parent
6d53922863
commit
3dc86e4080
@@ -2582,7 +2582,7 @@ radv_emit_framebuffer_state(struct radv_cmd_buffer *cmd_buffer)
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
radv_initialise_vrs_surface(image, htile_buffer, &ds);
|
radv_initialise_vrs_surface(image, htile_buffer, &ds);
|
||||||
|
|
||||||
|
@@ -952,7 +952,8 @@ gfx10_make_texture_descriptor(struct radv_device *device, struct radv_image *ima
|
|||||||
const VkComponentMapping *mapping, unsigned first_level,
|
const VkComponentMapping *mapping, unsigned first_level,
|
||||||
unsigned last_level, unsigned first_layer, unsigned last_layer,
|
unsigned last_level, unsigned first_layer, unsigned last_layer,
|
||||||
unsigned width, unsigned height, unsigned depth, float min_lod,
|
unsigned width, unsigned height, unsigned depth, float min_lod,
|
||||||
uint32_t *state, uint32_t *fmask_state)
|
uint32_t *state, uint32_t *fmask_state,
|
||||||
|
VkImageCreateFlags img_create_flags)
|
||||||
{
|
{
|
||||||
const struct util_format_description *desc;
|
const struct util_format_description *desc;
|
||||||
enum pipe_swizzle swizzle[4];
|
enum pipe_swizzle swizzle[4];
|
||||||
@@ -976,8 +977,14 @@ gfx10_make_texture_descriptor(struct radv_device *device, struct radv_image *ima
|
|||||||
|
|
||||||
radv_compose_swizzle(desc, mapping, swizzle);
|
radv_compose_swizzle(desc, mapping, swizzle);
|
||||||
|
|
||||||
|
if (img_create_flags & VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT) {
|
||||||
|
assert(image->type == VK_IMAGE_TYPE_3D);
|
||||||
|
type = V_008F1C_SQ_RSRC_IMG_3D;
|
||||||
|
} else {
|
||||||
type = radv_tex_dim(image->type, view_type, image->info.array_size, image->info.samples,
|
type = radv_tex_dim(image->type, view_type, image->info.array_size, image->info.samples,
|
||||||
is_storage_image, device->physical_device->rad_info.chip_class == GFX9);
|
is_storage_image, device->physical_device->rad_info.chip_class == GFX9);
|
||||||
|
}
|
||||||
|
|
||||||
if (type == V_008F1C_SQ_RSRC_IMG_1D_ARRAY) {
|
if (type == V_008F1C_SQ_RSRC_IMG_1D_ARRAY) {
|
||||||
height = 1;
|
height = 1;
|
||||||
depth = image->info.array_size;
|
depth = image->info.array_size;
|
||||||
@@ -1013,6 +1020,18 @@ gfx10_make_texture_descriptor(struct radv_device *device, struct radv_image *ima
|
|||||||
state[6] = 0;
|
state[6] = 0;
|
||||||
state[7] = 0;
|
state[7] = 0;
|
||||||
|
|
||||||
|
if (img_create_flags & VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT) {
|
||||||
|
assert(type == V_008F1C_SQ_RSRC_IMG_3D);
|
||||||
|
|
||||||
|
/* ARRAY_PITCH is only meaningful for 3D images, 0 means SRV, 1 means UAV.
|
||||||
|
* In SRV mode, BASE_ARRAY is ignored and DEPTH is the last slice of mipmap level 0.
|
||||||
|
* In UAV mode, BASE_ARRAY is the first slice and DEPTH is the last slice of the bound level.
|
||||||
|
*/
|
||||||
|
state[4] &= C_00A010_DEPTH;
|
||||||
|
state[4] |= S_00A010_DEPTH(!is_storage_image ? depth - 1 : u_minify(depth, first_level) - 1);
|
||||||
|
state[5] |= S_00A014_ARRAY_PITCH(is_storage_image);
|
||||||
|
}
|
||||||
|
|
||||||
if (radv_dcc_enabled(image, first_level)) {
|
if (radv_dcc_enabled(image, first_level)) {
|
||||||
state[6] |= S_00A018_MAX_UNCOMPRESSED_BLOCK_SIZE(V_028C78_MAX_BLOCK_SIZE_256B) |
|
state[6] |= S_00A018_MAX_UNCOMPRESSED_BLOCK_SIZE(V_028C78_MAX_BLOCK_SIZE_256B) |
|
||||||
S_00A018_MAX_COMPRESSED_BLOCK_SIZE(
|
S_00A018_MAX_COMPRESSED_BLOCK_SIZE(
|
||||||
@@ -1086,7 +1105,8 @@ si_make_texture_descriptor(struct radv_device *device, struct radv_image *image,
|
|||||||
const VkComponentMapping *mapping, unsigned first_level,
|
const VkComponentMapping *mapping, unsigned first_level,
|
||||||
unsigned last_level, unsigned first_layer, unsigned last_layer,
|
unsigned last_level, unsigned first_layer, unsigned last_layer,
|
||||||
unsigned width, unsigned height, unsigned depth, float min_lod,
|
unsigned width, unsigned height, unsigned depth, float min_lod,
|
||||||
uint32_t *state, uint32_t *fmask_state)
|
uint32_t *state, uint32_t *fmask_state,
|
||||||
|
VkImageCreateFlags img_create_flags)
|
||||||
{
|
{
|
||||||
const struct util_format_description *desc;
|
const struct util_format_description *desc;
|
||||||
enum pipe_swizzle swizzle[4];
|
enum pipe_swizzle swizzle[4];
|
||||||
@@ -1128,8 +1148,16 @@ si_make_texture_descriptor(struct radv_device *device, struct radv_image *image,
|
|||||||
else if (image->vk_format == VK_FORMAT_D16_UNORM_S8_UINT)
|
else if (image->vk_format == VK_FORMAT_D16_UNORM_S8_UINT)
|
||||||
data_format = V_008F14_IMG_DATA_FORMAT_S8_16;
|
data_format = V_008F14_IMG_DATA_FORMAT_S8_16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (device->physical_device->rad_info.chip_class == GFX9 &&
|
||||||
|
img_create_flags & VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT) {
|
||||||
|
assert(image->type == VK_IMAGE_TYPE_3D);
|
||||||
|
type = V_008F1C_SQ_RSRC_IMG_3D;
|
||||||
|
} else {
|
||||||
type = radv_tex_dim(image->type, view_type, image->info.array_size, image->info.samples,
|
type = radv_tex_dim(image->type, view_type, image->info.array_size, image->info.samples,
|
||||||
is_storage_image, device->physical_device->rad_info.chip_class == GFX9);
|
is_storage_image, device->physical_device->rad_info.chip_class == GFX9);
|
||||||
|
}
|
||||||
|
|
||||||
if (type == V_008F1C_SQ_RSRC_IMG_1D_ARRAY) {
|
if (type == V_008F1C_SQ_RSRC_IMG_1D_ARRAY) {
|
||||||
height = 1;
|
height = 1;
|
||||||
depth = image->info.array_size;
|
depth = image->info.array_size;
|
||||||
@@ -1291,16 +1319,16 @@ radv_make_texture_descriptor(struct radv_device *device, struct radv_image *imag
|
|||||||
const VkComponentMapping *mapping, unsigned first_level,
|
const VkComponentMapping *mapping, unsigned first_level,
|
||||||
unsigned last_level, unsigned first_layer, unsigned last_layer,
|
unsigned last_level, unsigned first_layer, unsigned last_layer,
|
||||||
unsigned width, unsigned height, unsigned depth, float min_lod, uint32_t *state,
|
unsigned width, unsigned height, unsigned depth, float min_lod, uint32_t *state,
|
||||||
uint32_t *fmask_state)
|
uint32_t *fmask_state, VkImageCreateFlags img_create_flags)
|
||||||
{
|
{
|
||||||
if (device->physical_device->rad_info.chip_class >= GFX10) {
|
if (device->physical_device->rad_info.chip_class >= GFX10) {
|
||||||
gfx10_make_texture_descriptor(device, image, is_storage_image, view_type, vk_format, mapping,
|
gfx10_make_texture_descriptor(device, image, is_storage_image, view_type, vk_format, mapping,
|
||||||
first_level, last_level, first_layer, last_layer, width, height,
|
first_level, last_level, first_layer, last_layer, width, height,
|
||||||
depth, min_lod, state, fmask_state);
|
depth, min_lod, state, fmask_state, img_create_flags);
|
||||||
} else {
|
} else {
|
||||||
si_make_texture_descriptor(device, image, is_storage_image, view_type, vk_format, mapping,
|
si_make_texture_descriptor(device, image, is_storage_image, view_type, vk_format, mapping,
|
||||||
first_level, last_level, first_layer, last_layer, width, height,
|
first_level, last_level, first_layer, last_layer, width, height,
|
||||||
depth, min_lod, state, fmask_state);
|
depth, min_lod, state, fmask_state, img_create_flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1316,7 +1344,7 @@ radv_query_opaque_metadata(struct radv_device *device, struct radv_image *image,
|
|||||||
radv_make_texture_descriptor(device, image, false, (VkImageViewType)image->type,
|
radv_make_texture_descriptor(device, image, false, (VkImageViewType)image->type,
|
||||||
image->vk_format, &fixedmapping, 0, image->info.levels - 1, 0,
|
image->vk_format, &fixedmapping, 0, image->info.levels - 1, 0,
|
||||||
image->info.array_size - 1, image->info.width, image->info.height,
|
image->info.array_size - 1, image->info.width, image->info.height,
|
||||||
image->info.depth, 0.0f, desc, NULL);
|
image->info.depth, 0.0f, desc, NULL, 0);
|
||||||
|
|
||||||
si_set_mutable_tex_desc_fields(device, image, &image->planes[0].surface.u.legacy.level[0], 0, 0,
|
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,
|
0, image->planes[0].surface.blk_w, false, false, false, false,
|
||||||
@@ -1899,7 +1927,7 @@ radv_image_view_make_descriptor(struct radv_image_view *iview, struct radv_devic
|
|||||||
float min_lod,
|
float min_lod,
|
||||||
bool is_storage_image, bool disable_compression,
|
bool is_storage_image, bool disable_compression,
|
||||||
bool enable_compression, unsigned plane_id,
|
bool enable_compression, unsigned plane_id,
|
||||||
unsigned descriptor_plane_id)
|
unsigned descriptor_plane_id, VkImageCreateFlags img_create_flags)
|
||||||
{
|
{
|
||||||
struct radv_image *image = iview->image;
|
struct radv_image *image = iview->image;
|
||||||
struct radv_image_plane *plane = &image->planes[plane_id];
|
struct radv_image_plane *plane = &image->planes[plane_id];
|
||||||
@@ -1928,7 +1956,8 @@ radv_image_view_make_descriptor(struct radv_image_view *iview, struct radv_devic
|
|||||||
vk_format_get_plane_width(image->vk_format, plane_id, iview->extent.width),
|
vk_format_get_plane_width(image->vk_format, plane_id, iview->extent.width),
|
||||||
vk_format_get_plane_height(image->vk_format, plane_id, iview->extent.height),
|
vk_format_get_plane_height(image->vk_format, plane_id, iview->extent.height),
|
||||||
iview->extent.depth, min_lod, descriptor->plane_descriptors[descriptor_plane_id],
|
iview->extent.depth, min_lod, descriptor->plane_descriptors[descriptor_plane_id],
|
||||||
descriptor_plane_id || is_storage_image ? NULL : descriptor->fmask_descriptor);
|
descriptor_plane_id || is_storage_image ? NULL : descriptor->fmask_descriptor,
|
||||||
|
img_create_flags);
|
||||||
|
|
||||||
const struct legacy_surf_level *base_level_info = NULL;
|
const struct legacy_surf_level *base_level_info = NULL;
|
||||||
if (device->physical_device->rad_info.chip_class <= GFX9) {
|
if (device->physical_device->rad_info.chip_class <= GFX9) {
|
||||||
@@ -2016,6 +2045,7 @@ radv_image_view_can_fast_clear(const struct radv_device *device,
|
|||||||
void
|
void
|
||||||
radv_image_view_init(struct radv_image_view *iview, struct radv_device *device,
|
radv_image_view_init(struct radv_image_view *iview, struct radv_device *device,
|
||||||
const VkImageViewCreateInfo *pCreateInfo,
|
const VkImageViewCreateInfo *pCreateInfo,
|
||||||
|
VkImageCreateFlags img_create_flags,
|
||||||
const struct radv_image_view_extra_create_info *extra_create_info)
|
const struct radv_image_view_extra_create_info *extra_create_info)
|
||||||
{
|
{
|
||||||
RADV_FROM_HANDLE(radv_image, image, pCreateInfo->image);
|
RADV_FROM_HANDLE(radv_image, image, pCreateInfo->image);
|
||||||
@@ -2172,10 +2202,10 @@ radv_image_view_init(struct radv_image_view *iview, struct radv_device *device,
|
|||||||
VkFormat format = vk_format_get_plane_format(iview->vk_format, i);
|
VkFormat format = vk_format_get_plane_format(iview->vk_format, i);
|
||||||
radv_image_view_make_descriptor(iview, device, format, &pCreateInfo->components, min_lod, false,
|
radv_image_view_make_descriptor(iview, device, format, &pCreateInfo->components, min_lod, false,
|
||||||
disable_compression, enable_compression, iview->plane_id + i,
|
disable_compression, enable_compression, iview->plane_id + i,
|
||||||
i);
|
i, img_create_flags);
|
||||||
radv_image_view_make_descriptor(iview, device, format, &pCreateInfo->components, min_lod, true,
|
radv_image_view_make_descriptor(iview, device, format, &pCreateInfo->components, min_lod, true,
|
||||||
disable_compression, enable_compression, iview->plane_id + i,
|
disable_compression, enable_compression, iview->plane_id + i,
|
||||||
i);
|
i, img_create_flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2432,6 +2462,7 @@ VKAPI_ATTR VkResult VKAPI_CALL
|
|||||||
radv_CreateImageView(VkDevice _device, const VkImageViewCreateInfo *pCreateInfo,
|
radv_CreateImageView(VkDevice _device, const VkImageViewCreateInfo *pCreateInfo,
|
||||||
const VkAllocationCallbacks *pAllocator, VkImageView *pView)
|
const VkAllocationCallbacks *pAllocator, VkImageView *pView)
|
||||||
{
|
{
|
||||||
|
RADV_FROM_HANDLE(radv_image, image, pCreateInfo->image);
|
||||||
RADV_FROM_HANDLE(radv_device, device, _device);
|
RADV_FROM_HANDLE(radv_device, device, _device);
|
||||||
struct radv_image_view *view;
|
struct radv_image_view *view;
|
||||||
|
|
||||||
@@ -2440,7 +2471,7 @@ radv_CreateImageView(VkDevice _device, const VkImageViewCreateInfo *pCreateInfo,
|
|||||||
if (view == NULL)
|
if (view == NULL)
|
||||||
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||||
|
|
||||||
radv_image_view_init(view, device, pCreateInfo, NULL);
|
radv_image_view_init(view, device, pCreateInfo, image->flags, NULL);
|
||||||
|
|
||||||
*pView = radv_image_view_to_handle(view);
|
*pView = radv_image_view_to_handle(view);
|
||||||
|
|
||||||
|
@@ -579,7 +579,7 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
|
|||||||
.baseArrayLayer = dst_array_slice,
|
.baseArrayLayer = dst_array_slice,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
radv_image_view_init(&src_iview, cmd_buffer->device,
|
radv_image_view_init(&src_iview, cmd_buffer->device,
|
||||||
&(VkImageViewCreateInfo){
|
&(VkImageViewCreateInfo){
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
||||||
@@ -592,7 +592,7 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
|
|||||||
.baseArrayLayer = src_array_slice,
|
.baseArrayLayer = src_array_slice,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
meta_emit_blit(cmd_buffer, src_image, &src_iview, src_image_layout, src_offset_0,
|
meta_emit_blit(cmd_buffer, src_image, &src_iview, src_image_layout, src_offset_0,
|
||||||
src_offset_1, dst_image, &dst_iview, dst_image_layout, dst_offset_0,
|
src_offset_1, dst_image, &dst_iview, dst_image_layout, dst_offset_0,
|
||||||
dst_offset_1, dst_box, sampler);
|
dst_offset_1, dst_box, sampler);
|
||||||
|
@@ -70,7 +70,7 @@ create_iview(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *s
|
|||||||
.baseArrayLayer = surf->layer,
|
.baseArrayLayer = surf->layer,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
&(struct radv_image_view_extra_create_info){
|
0, &(struct radv_image_view_extra_create_info){
|
||||||
.disable_dcc_mrt = surf->disable_compression
|
.disable_dcc_mrt = surf->disable_compression
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -1237,7 +1237,7 @@ create_iview(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf *s
|
|||||||
.baseArrayLayer = surf->layer,
|
.baseArrayLayer = surf->layer,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
&(struct radv_image_view_extra_create_info){
|
0, &(struct radv_image_view_extra_create_info){
|
||||||
.disable_compression = surf->disable_compression,
|
.disable_compression = surf->disable_compression,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -1414,7 +1414,7 @@ radv_clear_dcc_comp_to_single(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.baseArrayLayer = range->baseArrayLayer,
|
.baseArrayLayer = range->baseArrayLayer,
|
||||||
.layerCount = layer_count},
|
.layerCount = layer_count},
|
||||||
},
|
},
|
||||||
&(struct radv_image_view_extra_create_info){.disable_compression = true});
|
0, &(struct radv_image_view_extra_create_info){.disable_compression = true});
|
||||||
|
|
||||||
radv_meta_push_descriptor_set(
|
radv_meta_push_descriptor_set(
|
||||||
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
@@ -1973,7 +1973,7 @@ radv_clear_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_image *im
|
|||||||
.baseArrayLayer = range->baseArrayLayer,
|
.baseArrayLayer = range->baseArrayLayer,
|
||||||
.layerCount = layer_count},
|
.layerCount = layer_count},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
VkClearAttachment clear_att = {
|
VkClearAttachment clear_att = {
|
||||||
.aspectMask = range->aspectMask,
|
.aspectMask = range->aspectMask,
|
||||||
@@ -2071,7 +2071,7 @@ radv_fast_clear_range(struct radv_cmd_buffer *cmd_buffer, struct radv_image *ima
|
|||||||
.layerCount = range->layerCount,
|
.layerCount = range->layerCount,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
VkClearRect clear_rect = {
|
VkClearRect clear_rect = {
|
||||||
.rect =
|
.rect =
|
||||||
|
@@ -252,7 +252,7 @@ radv_copy_vrs_htile(struct radv_cmd_buffer *cmd_buffer, struct radv_image *vrs_i
|
|||||||
.baseArrayLayer = 0,
|
.baseArrayLayer = 0,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
radv_meta_push_descriptor_set(
|
radv_meta_push_descriptor_set(
|
||||||
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, state->copy_vrs_htile_p_layout, 0, /* set */
|
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, state->copy_vrs_htile_p_layout, 0, /* set */
|
||||||
|
@@ -429,7 +429,7 @@ radv_process_depth_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_i
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
const VkRenderingAttachmentInfo depth_att = {
|
const VkRenderingAttachmentInfo depth_att = {
|
||||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||||
@@ -576,7 +576,7 @@ radv_expand_depth_stencil_compute(struct radv_cmd_buffer *cmd_buffer, struct rad
|
|||||||
.baseArrayLayer = subresourceRange->baseArrayLayer + s,
|
.baseArrayLayer = subresourceRange->baseArrayLayer + s,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
&(struct radv_image_view_extra_create_info){.enable_compression = true});
|
0, &(struct radv_image_view_extra_create_info){.enable_compression = true});
|
||||||
radv_image_view_init(
|
radv_image_view_init(
|
||||||
&store_iview, cmd_buffer->device,
|
&store_iview, cmd_buffer->device,
|
||||||
&(VkImageViewCreateInfo){
|
&(VkImageViewCreateInfo){
|
||||||
@@ -590,7 +590,7 @@ radv_expand_depth_stencil_compute(struct radv_cmd_buffer *cmd_buffer, struct rad
|
|||||||
.baseArrayLayer = subresourceRange->baseArrayLayer + s,
|
.baseArrayLayer = subresourceRange->baseArrayLayer + s,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
&(struct radv_image_view_extra_create_info){.disable_compression = true});
|
0, &(struct radv_image_view_extra_create_info){.disable_compression = true});
|
||||||
|
|
||||||
radv_meta_push_descriptor_set(
|
radv_meta_push_descriptor_set(
|
||||||
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
@@ -753,7 +753,7 @@ radv_meta_decode_etc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag
|
|||||||
.layerCount = subresource->baseArrayLayer + subresource->layerCount,
|
.layerCount = subresource->baseArrayLayer + subresource->layerCount,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
VkFormat store_format;
|
VkFormat store_format;
|
||||||
switch (image->vk_format) {
|
switch (image->vk_format) {
|
||||||
@@ -789,7 +789,7 @@ radv_meta_decode_etc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag
|
|||||||
.layerCount = subresource->baseArrayLayer + subresource->layerCount,
|
.layerCount = subresource->baseArrayLayer + subresource->layerCount,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
decode_etc(cmd_buffer, &src_iview, &dest_iview, &(VkOffset3D){offset.x, offset.y, base_slice},
|
decode_etc(cmd_buffer, &src_iview, &dest_iview, &(VkOffset3D){offset.x, offset.y, base_slice},
|
||||||
&(VkExtent3D){extent.width, extent.height, slice_count});
|
&(VkExtent3D){extent.width, extent.height, slice_count});
|
||||||
|
@@ -504,7 +504,7 @@ radv_process_color_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_i
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
const VkRenderingAttachmentInfo color_att = {
|
const VkRenderingAttachmentInfo color_att = {
|
||||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||||
@@ -765,7 +765,7 @@ radv_decompress_dcc_compute(struct radv_cmd_buffer *cmd_buffer, struct radv_imag
|
|||||||
.baseArrayLayer = subresourceRange->baseArrayLayer + s,
|
.baseArrayLayer = subresourceRange->baseArrayLayer + s,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
&(struct radv_image_view_extra_create_info){.enable_compression = true});
|
0, &(struct radv_image_view_extra_create_info){.enable_compression = true});
|
||||||
radv_image_view_init(
|
radv_image_view_init(
|
||||||
&store_iview, cmd_buffer->device,
|
&store_iview, cmd_buffer->device,
|
||||||
&(VkImageViewCreateInfo){
|
&(VkImageViewCreateInfo){
|
||||||
@@ -779,7 +779,7 @@ radv_decompress_dcc_compute(struct radv_cmd_buffer *cmd_buffer, struct radv_imag
|
|||||||
.baseArrayLayer = subresourceRange->baseArrayLayer + s,
|
.baseArrayLayer = subresourceRange->baseArrayLayer + s,
|
||||||
.layerCount = 1},
|
.layerCount = 1},
|
||||||
},
|
},
|
||||||
&(struct radv_image_view_extra_create_info){.disable_compression = true});
|
0, &(struct radv_image_view_extra_create_info){.disable_compression = true});
|
||||||
|
|
||||||
radv_meta_push_descriptor_set(
|
radv_meta_push_descriptor_set(
|
||||||
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
@@ -314,7 +314,7 @@ radv_fmask_copy(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
radv_image_view_init(&dst_iview, device,
|
radv_image_view_init(&dst_iview, device,
|
||||||
&(VkImageViewCreateInfo){
|
&(VkImageViewCreateInfo){
|
||||||
@@ -331,7 +331,7 @@ radv_fmask_copy(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
radv_meta_push_descriptor_set(
|
radv_meta_push_descriptor_set(
|
||||||
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
@@ -124,7 +124,7 @@ radv_expand_fmask_image_inplace(struct radv_cmd_buffer *cmd_buffer, struct radv_
|
|||||||
.layerCount = layer_count,
|
.layerCount = layer_count,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
radv_meta_push_descriptor_set(
|
radv_meta_push_descriptor_set(
|
||||||
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
cmd_buffer, VK_PIPELINE_BIND_POINT_COMPUTE,
|
||||||
|
@@ -446,7 +446,7 @@ radv_meta_resolve_hardware_image(struct radv_cmd_buffer *cmd_buffer, struct radv
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
struct radv_image_view dst_iview;
|
struct radv_image_view dst_iview;
|
||||||
radv_image_view_init(&dst_iview, cmd_buffer->device,
|
radv_image_view_init(&dst_iview, cmd_buffer->device,
|
||||||
@@ -464,7 +464,7 @@ radv_meta_resolve_hardware_image(struct radv_cmd_buffer *cmd_buffer, struct radv
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
const VkRenderingAttachmentInfo color_atts[2] = {
|
const VkRenderingAttachmentInfo color_atts[2] = {
|
||||||
{
|
{
|
||||||
|
@@ -724,7 +724,7 @@ radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer, struct radv_
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
struct radv_image_view dest_iview;
|
struct radv_image_view dest_iview;
|
||||||
radv_image_view_init(&dest_iview, cmd_buffer->device,
|
radv_image_view_init(&dest_iview, cmd_buffer->device,
|
||||||
@@ -742,7 +742,7 @@ radv_meta_resolve_compute_image(struct radv_cmd_buffer *cmd_buffer, struct radv_
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
emit_resolve(cmd_buffer, &src_iview, &dest_iview, &(VkOffset2D){srcOffset.x, srcOffset.y},
|
emit_resolve(cmd_buffer, &src_iview, &dest_iview, &(VkOffset2D){srcOffset.x, srcOffset.y},
|
||||||
&(VkOffset2D){dstOffset.x, dstOffset.y},
|
&(VkOffset2D){dstOffset.x, dstOffset.y},
|
||||||
@@ -892,7 +892,7 @@ radv_depth_stencil_resolve_subpass_cs(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.layerCount = layer_count,
|
.layerCount = layer_count,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
struct radv_image_view tdst_iview;
|
struct radv_image_view tdst_iview;
|
||||||
radv_image_view_init(&tdst_iview, cmd_buffer->device,
|
radv_image_view_init(&tdst_iview, cmd_buffer->device,
|
||||||
@@ -910,7 +910,7 @@ radv_depth_stencil_resolve_subpass_cs(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.layerCount = layer_count,
|
.layerCount = layer_count,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
emit_depth_stencil_resolve(cmd_buffer, &tsrc_iview, &tdst_iview,
|
emit_depth_stencil_resolve(cmd_buffer, &tsrc_iview, &tdst_iview,
|
||||||
&(VkExtent3D){fb->width, fb->height, layer_count}, aspects,
|
&(VkExtent3D){fb->width, fb->height, layer_count}, aspects,
|
||||||
|
@@ -839,7 +839,7 @@ radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer, struct radv
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
struct radv_image_view dest_iview;
|
struct radv_image_view dest_iview;
|
||||||
radv_image_view_init(&dest_iview, cmd_buffer->device,
|
radv_image_view_init(&dest_iview, cmd_buffer->device,
|
||||||
@@ -857,7 +857,7 @@ radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer, struct radv
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
const VkRenderingAttachmentInfo color_att = {
|
const VkRenderingAttachmentInfo color_att = {
|
||||||
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
|
||||||
@@ -1007,7 +1007,7 @@ radv_depth_stencil_resolve_subpass_fs(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.layerCount = 1,
|
.layerCount = 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
NULL);
|
0, NULL);
|
||||||
|
|
||||||
emit_depth_stencil_resolve(cmd_buffer, &tsrc_iview, dst_iview,
|
emit_depth_stencil_resolve(cmd_buffer, &tsrc_iview, dst_iview,
|
||||||
&(VkExtent2D){fb->width, fb->height}, aspects, resolve_mode);
|
&(VkExtent2D){fb->width, fb->height}, aspects, resolve_mode);
|
||||||
|
@@ -2509,6 +2509,7 @@ struct radv_image_view_extra_create_info {
|
|||||||
|
|
||||||
void radv_image_view_init(struct radv_image_view *view, struct radv_device *device,
|
void radv_image_view_init(struct radv_image_view *view, struct radv_device *device,
|
||||||
const VkImageViewCreateInfo *pCreateInfo,
|
const VkImageViewCreateInfo *pCreateInfo,
|
||||||
|
VkImageCreateFlags img_create_flags,
|
||||||
const struct radv_image_view_extra_create_info *extra_create_info);
|
const struct radv_image_view_extra_create_info *extra_create_info);
|
||||||
void radv_image_view_finish(struct radv_image_view *iview);
|
void radv_image_view_finish(struct radv_image_view *iview);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user