radv: add radv_is_format_emulated

This is a cleanup with no functional change.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25071>
This commit is contained in:
Chia-I Wu
2023-09-13 15:54:00 -07:00
committed by Marge Bot
parent 9eda61c931
commit 55b7d6e5a3
4 changed files with 24 additions and 14 deletions

View File

@@ -207,12 +207,13 @@ radv_CmdCopyBufferToImage2(VkCommandBuffer commandBuffer, const VkCopyBufferToIm
&pCopyBufferToImageInfo->pRegions[r]);
}
if (cmd_buffer->device->physical_device->emulate_etc2 &&
vk_format_description(dst_image->vk.format)->layout == UTIL_FORMAT_LAYOUT_ETC) {
if (radv_is_format_emulated(cmd_buffer->device->physical_device, dst_image->vk.format)) {
cmd_buffer->state.flush_bits |=
RADV_CMD_FLAG_CS_PARTIAL_FLUSH | RADV_CMD_FLAG_PS_PARTIAL_FLUSH |
radv_src_access_flush(cmd_buffer, VK_ACCESS_TRANSFER_WRITE_BIT, dst_image) |
radv_dst_access_flush(cmd_buffer, VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, dst_image);
assert(vk_format_description(dst_image->vk.format)->layout == UTIL_FORMAT_LAYOUT_ETC);
for (unsigned r = 0; r < pCopyBufferToImageInfo->regionCount; r++) {
radv_meta_decode_etc(cmd_buffer, dst_image, pCopyBufferToImageInfo->dstImageLayout,
&pCopyBufferToImageInfo->pRegions[r].imageSubresource,
@@ -552,12 +553,13 @@ radv_CmdCopyImage2(VkCommandBuffer commandBuffer, const VkCopyImageInfo2 *pCopyI
&pCopyImageInfo->pRegions[r]);
}
if (cmd_buffer->device->physical_device->emulate_etc2 &&
vk_format_description(dst_image->vk.format)->layout == UTIL_FORMAT_LAYOUT_ETC) {
if (radv_is_format_emulated(cmd_buffer->device->physical_device, dst_image->vk.format)) {
cmd_buffer->state.flush_bits |=
RADV_CMD_FLAG_CS_PARTIAL_FLUSH | RADV_CMD_FLAG_PS_PARTIAL_FLUSH |
radv_src_access_flush(cmd_buffer, VK_ACCESS_TRANSFER_WRITE_BIT, dst_image) |
radv_dst_access_flush(cmd_buffer, VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, dst_image);
assert(vk_format_description(dst_image->vk.format)->layout == UTIL_FORMAT_LAYOUT_ETC);
for (unsigned r = 0; r < pCopyImageInfo->regionCount; r++) {
radv_meta_decode_etc(cmd_buffer, dst_image, pCopyImageInfo->dstImageLayout,
&pCopyImageInfo->pRegions[r].dstSubresource, pCopyImageInfo->pRegions[r].dstOffset,

View File

@@ -617,6 +617,15 @@ radv_is_filter_minmax_format_supported(VkFormat format)
}
}
bool
radv_is_format_emulated(const struct radv_physical_device *physical_device, VkFormat format)
{
if (physical_device->emulate_etc2 && vk_texcompress_etc2_emulation_format(format) != VK_FORMAT_UNDEFINED)
return true;
return false;
}
bool
radv_device_supports_etc(const struct radv_physical_device *physical_device)
{
@@ -1201,13 +1210,12 @@ static VkResult
radv_check_modifier_support(struct radv_physical_device *dev, const VkPhysicalDeviceImageFormatInfo2 *info,
VkImageFormatProperties *props, VkFormat format, uint64_t modifier)
{
const struct util_format_description *desc = vk_format_description(format);
uint32_t max_width, max_height;
if (info->type != VK_IMAGE_TYPE_2D)
return VK_ERROR_FORMAT_NOT_SUPPORTED;
if (desc->layout == UTIL_FORMAT_LAYOUT_ETC && dev->emulate_etc2)
if (radv_is_format_emulated(dev, format))
return VK_ERROR_FORMAT_NOT_SUPPORTED;
/* We did not add modifiers for sparse textures. */
@@ -1335,7 +1343,7 @@ radv_get_image_format_properties(struct radv_physical_device *physical_device,
if (format_feature_flags == 0)
goto unsupported;
if (info->type == VK_IMAGE_TYPE_1D && (desc->layout == UTIL_FORMAT_LAYOUT_ETC && physical_device->emulate_etc2))
if (info->type == VK_IMAGE_TYPE_1D && radv_is_format_emulated(physical_device, format))
goto unsupported;
if (info->type != VK_IMAGE_TYPE_2D && vk_format_is_depth_or_stencil(format))
goto unsupported;
@@ -1485,7 +1493,7 @@ radv_get_image_format_properties(struct radv_physical_device *physical_device,
}
if ((info->flags & (VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT | VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT)) &&
(desc->layout == UTIL_FORMAT_LAYOUT_ETC && physical_device->emulate_etc2)) {
radv_is_format_emulated(physical_device, format)) {
goto unsupported;
}
@@ -1531,9 +1539,8 @@ get_external_image_format_properties(struct radv_physical_device *physical_devic
VkExternalMemoryFeatureFlagBits flags = 0;
VkExternalMemoryHandleTypeFlags export_flags = 0;
VkExternalMemoryHandleTypeFlags compat_flags = 0;
const struct util_format_description *desc = vk_format_description(pImageFormatInfo->format);
if (desc->layout == UTIL_FORMAT_LAYOUT_ETC && physical_device->emulate_etc2)
if (radv_is_format_emulated(physical_device, pImageFormatInfo->format))
return;
if (pImageFormatInfo->flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)

View File

@@ -534,7 +534,8 @@ radv_patch_image_from_extra_info(struct radv_device *device, struct radv_image *
static VkFormat
radv_image_get_plane_format(const struct radv_physical_device *pdev, const struct radv_image *image, unsigned plane)
{
if (pdev->emulate_etc2 && vk_format_description(image->vk.format)->layout == UTIL_FORMAT_LAYOUT_ETC) {
if (radv_is_format_emulated(pdev, image->vk.format)) {
assert(vk_format_description(image->vk.format)->layout == UTIL_FORMAT_LAYOUT_ETC);
if (plane == 0)
return image->vk.format;
return vk_texcompress_etc2_emulation_format(image->vk.format);
@@ -1610,7 +1611,7 @@ radv_image_use_comp_to_single(const struct radv_device *device, const struct rad
static unsigned
radv_get_internal_plane_count(const struct radv_physical_device *pdev, VkFormat fmt)
{
if (pdev->emulate_etc2 && vk_format_description(fmt)->layout == UTIL_FORMAT_LAYOUT_ETC)
if (radv_is_format_emulated(pdev, fmt))
return 2;
return vk_format_get_plane_count(fmt);
}
@@ -2167,8 +2168,7 @@ radv_image_view_init(struct radv_image_view *iview, struct radv_device *device,
plane_count = vk_format_get_plane_count(iview->vk.format);
}
if (device->physical_device->emulate_etc2 &&
vk_format_description(image->vk.format)->layout == UTIL_FORMAT_LAYOUT_ETC) {
if (radv_is_format_emulated(device->physical_device, image->vk.format)) {
const struct util_format_description *desc = vk_format_description(iview->vk.format);
if (desc->layout == UTIL_FORMAT_LAYOUT_ETC) {
iview->plane_id = 1;

View File

@@ -2570,6 +2570,7 @@ bool radv_dcc_formats_compatible(enum amd_gfx_level gfx_level, VkFormat format1,
bool *sign_reinterpret);
bool radv_is_atomic_format_supported(VkFormat format);
bool radv_device_supports_etc(const struct radv_physical_device *physical_device);
bool radv_is_format_emulated(const struct radv_physical_device *physical_device, VkFormat format);
static const VkImageUsageFlags RADV_IMAGE_USAGE_WRITE_BITS =
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |