This is a cleanup with no functional change.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25071>
&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,
&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,
}
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)
{
return physical_device->rad_info.family == CHIP_VEGA10 || physical_device->rad_info.family == CHIP_RAVEN ||
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. */
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;
}
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;
}
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)
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);
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);
}
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;
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 |