diff --git a/src/imagination/vulkan/pvr_formats.c b/src/imagination/vulkan/pvr_formats.c index 2db7b0fc00d..94fdcb9bf20 100644 --- a/src/imagination/vulkan/pvr_formats.c +++ b/src/imagination/vulkan/pvr_formats.c @@ -138,7 +138,7 @@ static const struct pvr_format pvr_format_table[] = { /* VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64. */ FORMAT(A2B10G10R10_UNORM_PACK32, A2R10B10G10, A2R10B10G10, F16), /* VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68. */ - FORMAT(A2B10G10R10_UINT_PACK32, A2R10B10G10, U32, UINT32), + FORMAT(A2B10G10R10_UINT_PACK32, A2R10B10G10, U32, U1010102), /* VK_FORMAT_R16_UNORM = 70. */ FORMAT(R16_UNORM, U16, U16, U16), /* VK_FORMAT_R16_SNORM = 71. */ @@ -423,10 +423,6 @@ uint32_t pvr_get_pbe_accum_format_size_in_bytes(VkFormat vk_format) enum pvr_pbe_accum_format pbe_accum_format; uint32_t nr_components; - /* FIXME: Can we encode this in the format table somehow? */ - if (vk_format == VK_FORMAT_A2B10G10R10_UINT_PACK32) - return 4; - pbe_accum_format = pvr_get_pbe_accum_format(vk_format); nr_components = vk_format_get_nr_components(vk_format); @@ -449,10 +445,13 @@ uint32_t pvr_get_pbe_accum_format_size_in_bytes(VkFormat vk_format) case PVR_PBE_ACCUM_FORMAT_SINT32: case PVR_PBE_ACCUM_FORMAT_UINT32_MEDP: case PVR_PBE_ACCUM_FORMAT_SINT32_MEDP: - case PVR_PBE_ACCUM_FORMAT_U1010102: case PVR_PBE_ACCUM_FORMAT_U24: return nr_components * 4; + case PVR_PBE_ACCUM_FORMAT_U1010102: + assert(nr_components == 4); + return 4; + default: unreachable("Unknown pbe accum format. Implementation error"); } @@ -560,18 +559,17 @@ void pvr_get_hw_clear_color( COPY_4V(packed_val.i16, value.int32); break; + case PVR_PBE_ACCUM_FORMAT_U1010102: + /* The PBE can't handle swizzled 1010102 UINT. */ + packed_val.u32[0] = pvr_pack_a2x10y10z10_uint( + value.uint32, + vk_format == VK_FORMAT_A2B10G10R10_UINT_PACK32); + break; + case PVR_PBE_ACCUM_FORMAT_F32: COPY_4V(packed_val.u32, value.uint32); break; case PVR_PBE_ACCUM_FORMAT_UINT32: - /* The PBE can't pack 1010102 UINT. */ - if (vk_format == VK_FORMAT_A2B10G10R10_UINT_PACK32) { - packed_val.u32[0] = pvr_pack_a2x10y10z10_uint(value.uint32, true); - break; - } else if (vk_format == VK_FORMAT_A2R10G10B10_UINT_PACK32) { - packed_val.u32[0] = pvr_pack_a2x10y10z10_uint(value.uint32, false); - break; - } COPY_4V(packed_val.u32, value.uint32); break; case PVR_PBE_ACCUM_FORMAT_SINT32: