diff --git a/src/imagination/vulkan/pvr_blit.c b/src/imagination/vulkan/pvr_blit.c index a70bf472606..3c50fb70dee 100644 --- a/src/imagination/vulkan/pvr_blit.c +++ b/src/imagination/vulkan/pvr_blit.c @@ -427,6 +427,7 @@ static VkFormat pvr_get_copy_format(VkFormat format) case VK_FORMAT_R8_SNORM: return VK_FORMAT_R8_SINT; case VK_FORMAT_R8G8_SNORM: + case VK_FORMAT_R8G8_SSCALED: return VK_FORMAT_R8G8_SINT; case VK_FORMAT_R8G8B8_SNORM: return VK_FORMAT_R8G8B8_SINT; diff --git a/src/imagination/vulkan/pvr_formats.c b/src/imagination/vulkan/pvr_formats.c index b1002c2edab..203fb76d5cc 100644 --- a/src/imagination/vulkan/pvr_formats.c +++ b/src/imagination/vulkan/pvr_formats.c @@ -107,6 +107,8 @@ static const struct pvr_format pvr_format_table[] = { FORMAT(R8G8_UNORM, U8U8, U8U8, U8), /* VK_FORMAT_R8G8_SNORM = 17. */ FORMAT(R8G8_SNORM, S8S8, S8S8, S8), + /* VK_FORMAT_R8G8_SSCALED = 19. */ + FORMAT(R8G8_SSCALED, S8S8, S8S8, INVALID), /* VK_FORMAT_R8G8_UINT = 20. */ FORMAT(R8G8_UINT, U8U8, U8U8, UINT8), /* VK_FORMAT_R8G8_SINT = 21. */ @@ -607,6 +609,9 @@ pvr_get_image_format_features2(const struct pvr_format *pvr_format, vk_format = pvr_format->vk_format; + if (vk_format_is_scaled(vk_format)) + return 0; + if (pvr_get_tex_format(vk_format) != ROGUE_TEXSTATE_FORMAT_INVALID) { if (vk_tiling == VK_IMAGE_TILING_OPTIMAL) { const uint32_t first_component_size = @@ -761,6 +766,9 @@ pvr_get_buffer_format_features2(const struct pvr_format *pvr_format) desc = vk_format_description(vk_format); + if (vk_format_is_scaled(vk_format)) + return VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT; + flags |= VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT | VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT; diff --git a/src/vulkan/util/vk_format.h b/src/vulkan/util/vk_format.h index 2bfa8c486e7..ca44c9c413c 100644 --- a/src/vulkan/util/vk_format.h +++ b/src/vulkan/util/vk_format.h @@ -215,6 +215,11 @@ static inline bool vk_format_is_alpha_on_msb(VkFormat vk_format) #endif } +static inline bool vk_format_is_scaled(VkFormat vk_format) +{ + return util_format_is_scaled(vk_format_to_pipe_format(vk_format)); +} + static inline unsigned vk_format_get_blocksize(VkFormat format) {