diff --git a/src/imagination/vulkan/pvr_formats.c b/src/imagination/vulkan/pvr_formats.c index 22a8dabbd7e..15995f86ed8 100644 --- a/src/imagination/vulkan/pvr_formats.c +++ b/src/imagination/vulkan/pvr_formats.c @@ -1259,3 +1259,160 @@ uint32_t pvr_pbe_pixel_num_loads(enum pvr_transfer_pbe_pixel_src pbe_format) return 0U; } } + +bool pvr_pbe_pixel_is_norm(enum pvr_transfer_pbe_pixel_src pbe_format) +{ + switch (pbe_format) { + case PVR_TRANSFER_PBE_PIXEL_SRC_Y_U_V: + case PVR_TRANSFER_PBE_PIXEL_SRC_YUV_PACKED: + + case PVR_TRANSFER_PBE_PIXEL_SRC_Y_UV_INTERLEAVED: + case PVR_TRANSFER_PBE_PIXEL_SRC_YVU_PACKED: + + case PVR_TRANSFER_PBE_PIXEL_SRC_F16F16: + case PVR_TRANSFER_PBE_PIXEL_SRC_U16NORM: + case PVR_TRANSFER_PBE_PIXEL_SRC_S16NORM: + case PVR_TRANSFER_PBE_PIXEL_SRC_F32: + case PVR_TRANSFER_PBE_PIXEL_SRC_F32X2: + case PVR_TRANSFER_PBE_PIXEL_SRC_F32X4: + case PVR_TRANSFER_PBE_PIXEL_SRC_F16_U8: + case PVR_TRANSFER_PBE_PIXEL_SRC_CONV_D32_D24S8: + return true; + + case PVR_TRANSFER_PBE_PIXEL_SRC_UU8888: + case PVR_TRANSFER_PBE_PIXEL_SRC_US8888: + case PVR_TRANSFER_PBE_PIXEL_SRC_UU16U16: + case PVR_TRANSFER_PBE_PIXEL_SRC_US16S16: + case PVR_TRANSFER_PBE_PIXEL_SRC_SU8888: + case PVR_TRANSFER_PBE_PIXEL_SRC_SS8888: + case PVR_TRANSFER_PBE_PIXEL_SRC_SU16U16: + case PVR_TRANSFER_PBE_PIXEL_SRC_SS16S16: + case PVR_TRANSFER_PBE_PIXEL_SRC_UU1010102: + case PVR_TRANSFER_PBE_PIXEL_SRC_SU1010102: + case PVR_TRANSFER_PBE_PIXEL_SRC_RBSWAP_UU1010102: + case PVR_TRANSFER_PBE_PIXEL_SRC_RBSWAP_SU1010102: + case PVR_TRANSFER_PBE_PIXEL_SRC_SU32U32: + case PVR_TRANSFER_PBE_PIXEL_SRC_S4XU32: + case PVR_TRANSFER_PBE_PIXEL_SRC_US32S32: + case PVR_TRANSFER_PBE_PIXEL_SRC_U4XS32: + case PVR_TRANSFER_PBE_PIXEL_SRC_RAW32: + case PVR_TRANSFER_PBE_PIXEL_SRC_RAW64: + case PVR_TRANSFER_PBE_PIXEL_SRC_RAW128: + case PVR_TRANSFER_PBE_PIXEL_SRC_SWAP_LMSB: + case PVR_TRANSFER_PBE_PIXEL_SRC_MOV_BY45: + case PVR_TRANSFER_PBE_PIXEL_SRC_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_S8D24: + case PVR_TRANSFER_PBE_PIXEL_SRC_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_S8_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_D24S8_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_D32S8_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_DMRG_D32S8_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_CONV_D24_D32: + case PVR_TRANSFER_PBE_PIXEL_SRC_CONV_D32U_D32F: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_S8_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_D24S8_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_DMRG_D24S8_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK16: + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK32: + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK48: + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK64: + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK96: + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK128: + case PVR_TRANSFER_PBE_PIXEL_SRC_CONV_S8D24_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_DMRG_D32_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_DMRG_D32U_D24S8: + return false; + + default: + UNREACHABLE("Invalid pvr_transfer_pbe_pixel_src"); + } + + return false; +} + +uint32_t pvr_pbe_pixel_size(enum pvr_transfer_pbe_pixel_src pbe_format) +{ + switch (pbe_format) { + case PVR_TRANSFER_PBE_PIXEL_SRC_UU8888: + case PVR_TRANSFER_PBE_PIXEL_SRC_US8888: + case PVR_TRANSFER_PBE_PIXEL_SRC_SU8888: + case PVR_TRANSFER_PBE_PIXEL_SRC_SS8888: + case PVR_TRANSFER_PBE_PIXEL_SRC_UU1010102: + case PVR_TRANSFER_PBE_PIXEL_SRC_SU1010102: + case PVR_TRANSFER_PBE_PIXEL_SRC_RBSWAP_UU1010102: + case PVR_TRANSFER_PBE_PIXEL_SRC_RBSWAP_SU1010102: + + case PVR_TRANSFER_PBE_PIXEL_SRC_F16_U8: + + case PVR_TRANSFER_PBE_PIXEL_SRC_SWAP_LMSB: + + case PVR_TRANSFER_PBE_PIXEL_SRC_F32: + case PVR_TRANSFER_PBE_PIXEL_SRC_RAW32: + + case PVR_TRANSFER_PBE_PIXEL_SRC_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_S8D24: + + case PVR_TRANSFER_PBE_PIXEL_SRC_CONV_D24_D32: + case PVR_TRANSFER_PBE_PIXEL_SRC_CONV_D32U_D32F: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_S8_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_D24S8_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_DMRG_D24S8_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_CONV_D32_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_DMRG_D32_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_DMRG_D32U_D24S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_CONV_S8D24_D24S8: + + case PVR_TRANSFER_PBE_PIXEL_SRC_YUV_PACKED: + case PVR_TRANSFER_PBE_PIXEL_SRC_YVU_PACKED: + + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK16: + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK32: + return 1; + + case PVR_TRANSFER_PBE_PIXEL_SRC_UU16U16: + case PVR_TRANSFER_PBE_PIXEL_SRC_US16S16: + case PVR_TRANSFER_PBE_PIXEL_SRC_SU16U16: + case PVR_TRANSFER_PBE_PIXEL_SRC_SS16S16: + case PVR_TRANSFER_PBE_PIXEL_SRC_SU32U32: + case PVR_TRANSFER_PBE_PIXEL_SRC_US32S32: + + case PVR_TRANSFER_PBE_PIXEL_SRC_F16F16: + case PVR_TRANSFER_PBE_PIXEL_SRC_U16NORM: + case PVR_TRANSFER_PBE_PIXEL_SRC_S16NORM: + + case PVR_TRANSFER_PBE_PIXEL_SRC_MOV_BY45: + + case PVR_TRANSFER_PBE_PIXEL_SRC_F32X2: + case PVR_TRANSFER_PBE_PIXEL_SRC_RAW64: + + case PVR_TRANSFER_PBE_PIXEL_SRC_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_S8_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_D24S8_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_SMRG_D32S8_D32S8: + case PVR_TRANSFER_PBE_PIXEL_SRC_DMRG_D32S8_D32S8: + + case PVR_TRANSFER_PBE_PIXEL_SRC_Y_U_V: + case PVR_TRANSFER_PBE_PIXEL_SRC_Y_UV_INTERLEAVED: + + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK48: + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK64: + return 2; + + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK96: + return 3; + + case PVR_TRANSFER_PBE_PIXEL_SRC_U4XS32: + case PVR_TRANSFER_PBE_PIXEL_SRC_S4XU32: + + case PVR_TRANSFER_PBE_PIXEL_SRC_F32X4: + case PVR_TRANSFER_PBE_PIXEL_SRC_RAW128: + + case PVR_TRANSFER_PBE_PIXEL_SRC_MASK128: + return 4; + + default: + UNREACHABLE("Invalid pvr_transfer_pbe_pixel_src"); + } + + return 0; +} diff --git a/src/imagination/vulkan/pvr_formats.h b/src/imagination/vulkan/pvr_formats.h index b85fe16f31f..1de6277dd88 100644 --- a/src/imagination/vulkan/pvr_formats.h +++ b/src/imagination/vulkan/pvr_formats.h @@ -252,6 +252,8 @@ void pvr_get_hw_clear_color(VkFormat vk_format, uint32_t packed_out[static const 4]); uint32_t pvr_pbe_pixel_num_loads(enum pvr_transfer_pbe_pixel_src pbe_format); +bool pvr_pbe_pixel_is_norm(enum pvr_transfer_pbe_pixel_src pbe_format); +uint32_t pvr_pbe_pixel_size(enum pvr_transfer_pbe_pixel_src pbe_format); static inline bool pvr_vk_format_has_32bit_component(VkFormat vk_format) {