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:
@@ -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,
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
@@ -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 |
|
||||
|
Reference in New Issue
Block a user