Commit 0389e425 authored by Ville Syrjälä's avatar Ville Syrjälä
Browse files

drm: Pass pixel_format+modifier to .get_format_info()



Decouple .get_format_info() from struct drm_mode_fb_cmd2 and just
pass the pixel format+modifier combo in by hand.

We may want to use .get_format_info() outside of the normal
addfb paths where we won't have a struct drm_mode_fb_cmd2, and
creating a temporary one just for this seems silly.

v2: Fix intel_fb_get_format_info() docs (Laurent)

Cc: Harry Wentland <harry.wentland@amd.com>
Cc: Leo Li <sunpeng.li@amd.com>
Cc: Rodrigo Siqueira <siqueira@igalia.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: amd-gfx@lists.freedesktop.org
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Acked-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-2-ville.syrjala@linux.intel.com
parent d618363a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -92,9 +92,9 @@ enum dm_micro_swizzle {
	MICRO_SWIZZLE_R = 3
};

const struct drm_format_info *amdgpu_dm_plane_get_format_info(const struct drm_mode_fb_cmd2 *cmd)
const struct drm_format_info *amdgpu_dm_plane_get_format_info(u32 pixel_format, u64 modifier)
{
	return amdgpu_lookup_format_info(cmd->pixel_format, cmd->modifier[0]);
	return amdgpu_lookup_format_info(pixel_format, modifier);
}

void amdgpu_dm_plane_fill_blending_from_plane_state(const struct drm_plane_state *plane_state,
+1 −1
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
			 unsigned long possible_crtcs,
			 const struct dc_plane_cap *plane_cap);

const struct drm_format_info *amdgpu_dm_plane_get_format_info(const struct drm_mode_fb_cmd2 *cmd);
const struct drm_format_info *amdgpu_dm_plane_get_format_info(u32 pixel_format, u64 modifier);

void amdgpu_dm_plane_fill_blending_from_plane_state(const struct drm_plane_state *plane_state,
				    bool *per_pixel_alpha, bool *pre_multiplied_alpha,
+2 −1
Original line number Diff line number Diff line
@@ -430,7 +430,8 @@ drm_get_format_info(struct drm_device *dev,
	const struct drm_format_info *info = NULL;

	if (dev->mode_config.funcs->get_format_info)
		info = dev->mode_config.funcs->get_format_info(mode_cmd);
		info = dev->mode_config.funcs->get_format_info(mode_cmd->pixel_format,
							       mode_cmd->modifier[0]);

	if (!info)
		info = drm_format_info(mode_cmd->pixel_format);
+6 −5
Original line number Diff line number Diff line
@@ -422,21 +422,22 @@ unsigned int intel_fb_modifier_to_tiling(u64 fb_modifier)

/**
 * intel_fb_get_format_info: Get a modifier specific format information
 * @cmd: FB add command structure
 * @pixel_format: pixel format
 * @modifier: modifier
 *
 * Returns:
 * Returns the format information for @cmd->pixel_format specific to @cmd->modifier[0],
 * Returns the format information for @pixel_format specific to @modifier,
 * or %NULL if the modifier doesn't override the format.
 */
const struct drm_format_info *
intel_fb_get_format_info(const struct drm_mode_fb_cmd2 *cmd)
intel_fb_get_format_info(u32 pixel_format, u64 modifier)
{
	const struct intel_modifier_desc *md = lookup_modifier_or_null(cmd->modifier[0]);
	const struct intel_modifier_desc *md = lookup_modifier_or_null(modifier);

	if (!md || !md->formats)
		return NULL;

	return lookup_format_info(md->formats, md->format_count, cmd->pixel_format);
	return lookup_format_info(md->formats, md->format_count, pixel_format);
}

static bool plane_caps_contain_any(u8 caps, u8 mask)
+1 −1
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ u64 *intel_fb_plane_get_modifiers(struct intel_display *display,
bool intel_fb_plane_supports_modifier(struct intel_plane *plane, u64 modifier);

const struct drm_format_info *
intel_fb_get_format_info(const struct drm_mode_fb_cmd2 *cmd);
intel_fb_get_format_info(u32 pixel_format, u64 modifier);

bool
intel_format_info_is_yuv_semiplanar(const struct drm_format_info *info,
Loading