mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
drm/nouveau/kms/nv50-: Add .blend_modes to nv50_wndw_func
At the moment, we currently (incorrectly) only expose a blend property on
the plane if we have a nv50_wndw_func->blend_set function for the given
wndw type. But we need to expose a blend property for all types of planes
that can display color formats with an alpha channel.
Prepare for doing this by introducing a way of looking up the supported
blend modes for a type of wndw by introducing .blend_modes, which describes
all possible blending modes nouveau currently supports for a type of wndw.
Signed-off-by: Lyude Paul <lyude@redhat.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Fixes: 860e748bdd ("drm: ensure blend mode supported if pixel format with alpha exposed")
Link: https://patch.msgid.link/20260720215058.398210-2-lyude@redhat.com
This commit is contained in:
parent
a2a3348028
commit
a7e8cf887a
|
|
@ -1,5 +1,7 @@
|
|||
#ifndef __NV50_KMS_BASE_H__
|
||||
#define __NV50_KMS_BASE_H__
|
||||
#include <drm/drm_blend.h>
|
||||
|
||||
#include "wndw.h"
|
||||
|
||||
int base507c_new(struct nouveau_drm *, int, s32, struct nv50_wndw **);
|
||||
|
|
@ -24,4 +26,8 @@ extern const struct nv50_wndw_func base907c;
|
|||
int base917c_new(struct nouveau_drm *, int, s32, struct nv50_wndw **);
|
||||
|
||||
int nv50_base_new(struct nouveau_drm *, int head, struct nv50_wndw **);
|
||||
|
||||
/* The only blend mode supported by base channels */
|
||||
#define BASE_BLEND_MODES BIT(DRM_MODE_BLEND_PIXEL_NONE)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -297,6 +297,7 @@ base507c = {
|
|||
.image_set = base507c_image_set,
|
||||
.image_clr = base507c_image_clr,
|
||||
.update = base507c_update,
|
||||
.blend_modes = BASE_BLEND_MODES,
|
||||
};
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@ base827c = {
|
|||
.image_set = base827c_image_set,
|
||||
.image_clr = base507c_image_clr,
|
||||
.update = base507c_update,
|
||||
.blend_modes = BASE_BLEND_MODES,
|
||||
};
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ base907c = {
|
|||
.image_set = base907c_image_set,
|
||||
.image_clr = base507c_image_clr,
|
||||
.update = base507c_update,
|
||||
.blend_modes = BASE_BLEND_MODES,
|
||||
};
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include <nvhw/class/cl507a.h>
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_blend.h>
|
||||
#include <drm/drm_fourcc.h>
|
||||
|
||||
bool
|
||||
|
|
@ -164,6 +165,8 @@ curs507a_wndw = {
|
|||
.acquire = curs507a_acquire,
|
||||
.release = curs507a_release,
|
||||
.prepare = curs507a_prepare,
|
||||
// TODO: Cursors also support premulti, but we haven't hooked it up anywhere yet.
|
||||
.blend_modes = BIT(DRM_MODE_BLEND_COVERAGE),
|
||||
};
|
||||
|
||||
int
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef __NV50_KMS_WNDW_H__
|
||||
#define __NV50_KMS_WNDW_H__
|
||||
#define nv50_wndw(p) container_of((p), struct nv50_wndw, plane)
|
||||
#include <drm/drm_blend.h>
|
||||
|
||||
#include "disp.h"
|
||||
#include "atom.h"
|
||||
#include "lut.h"
|
||||
|
|
@ -74,6 +76,7 @@ struct nv50_wndw_func {
|
|||
int (*image_clr)(struct nv50_wndw *);
|
||||
int (*scale_set)(struct nv50_wndw *, struct nv50_wndw_atom *);
|
||||
int (*blend_set)(struct nv50_wndw *, struct nv50_wndw_atom *);
|
||||
unsigned int blend_modes;
|
||||
|
||||
int (*update)(struct nv50_wndw *, u32 *interlock);
|
||||
};
|
||||
|
|
@ -139,4 +142,11 @@ int wndwca7e_new(struct nouveau_drm *, enum drm_plane_type, int, s32,
|
|||
|
||||
int nv50_wndw_new(struct nouveau_drm *, enum drm_plane_type, int index,
|
||||
struct nv50_wndw **);
|
||||
|
||||
/* A set of blend modes supported by all wndws */
|
||||
#define WNDW_BLEND_MODES \
|
||||
( BIT(DRM_MODE_BLEND_COVERAGE) \
|
||||
| BIT(DRM_MODE_BLEND_PREMULTI) \
|
||||
| BIT(DRM_MODE_BLEND_PIXEL_NONE))
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -343,6 +343,7 @@ wndwc37e = {
|
|||
.image_set = wndwc37e_image_set,
|
||||
.image_clr = wndwc37e_image_clr,
|
||||
.blend_set = wndwc37e_blend_set,
|
||||
.blend_modes = WNDW_BLEND_MODES,
|
||||
.update = wndwc37e_update,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@ wndwc57e = {
|
|||
.image_set = wndwc57e_image_set,
|
||||
.image_clr = wndwc37e_image_clr,
|
||||
.blend_set = wndwc37e_blend_set,
|
||||
.blend_modes = WNDW_BLEND_MODES,
|
||||
.update = wndwc37e_update,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ wndwc67e = {
|
|||
.image_set = wndwc67e_image_set,
|
||||
.image_clr = wndwc37e_image_clr,
|
||||
.blend_set = wndwc37e_blend_set,
|
||||
.blend_modes = WNDW_BLEND_MODES,
|
||||
.update = wndwc37e_update,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -231,6 +231,7 @@ wndwca7e = {
|
|||
.image_set = wndwca7e_image_set,
|
||||
.image_clr = wndwca7e_image_clr,
|
||||
.blend_set = wndwc37e_blend_set,
|
||||
.blend_modes = WNDW_BLEND_MODES,
|
||||
.update = wndwc37e_update,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user