int i;
int num_modifiers = ARRAY_SIZE(v3d_available_modifiers);
- /* Expose DRM_FORMAT_MOD_BROADCOM_SAND128 only for PIPE_FORMAT_NV12 */
- if (format != PIPE_FORMAT_NV12)
+ /* Expose DRM_FORMAT_MOD_BROADCOM_SAND128 only for PIPE_FORMAT_NV12
+ * and PIPE_FORMAT_P030, in the case of P030 we don't expose LINEAR
+ * or UIF.
+ */
+ if (format != PIPE_FORMAT_NV12 && format != PIPE_FORMAT_P030) {
num_modifiers--;
+ } else if (format == PIPE_FORMAT_P030 ) {
+ *count = 1;
+ if (modifiers && max > 0) {
+ modifiers[0] = DRM_FORMAT_MOD_BROADCOM_SAND128;
+ if (external_only)
+ external_only[0] = true;
+ }
+ return;
+ }
if (!modifiers) {
*count = num_modifiers;
bool *external_only)
{
int i;
- bool is_sand_col128 = (format == PIPE_FORMAT_NV12) &&
+ bool is_sand_col128 = (format == PIPE_FORMAT_NV12 || format == PIPE_FORMAT_P030) &&
(fourcc_mod_broadcom_mod(modifier) == DRM_FORMAT_MOD_BROADCOM_SAND128);
if (is_sand_col128) {
if (external_only)
*external_only = true;
return true;
+ } else if (format == PIPE_FORMAT_P030) {
+ /* For PIPE_FORMAT_P030 we don't expose LINEAR or UIF. */
+ return false;
}
/* We don't want to generally allow DRM_FORMAT_MOD_BROADCOM_SAND128
* modifier, that is the last v3d_available_modifiers. We only accept
- * it in the case of having a PIPE_FORMAT_NV12.
+ * it in the case of having a PIPE_FORMAT_NV12 or PIPE_FORMAT_P030.
*/
assert(v3d_available_modifiers[ARRAY_SIZE(v3d_available_modifiers) - 1] ==
DRM_FORMAT_MOD_BROADCOM_SAND128);