drm: Handle not having CRTC 3D LUT/Shaper

This commit is contained in:
Joshua Ashton 2023-06-10 06:07:44 +01:00
parent 789cfc9057
commit 9b70b3b9e3
2 changed files with 5 additions and 24 deletions

View file

@ -936,9 +936,6 @@ static bool refresh_state( drm_t *drm )
if (!crtc->has_valve1_regamma_tf)
drm_log.infof("CRTC %" PRIu32 " has no VALVE1_CRTC_REGAMMA_TF support", crtc->id);
crtc->lut3d_size = crtc->props.contains( "VALVE1_LUT3D_SIZE" ) ? uint32_t(crtc->initial_prop_values["VALVE1_LUT3D_SIZE"]) : 0;
crtc->shaperlut_size = crtc->props.contains( "VALVE1_SHAPER_LUT_SIZE" ) ? uint32_t(crtc->initial_prop_values["VALVE1_SHAPER_LUT_SIZE"]) : 0;
crtc->current.active = crtc->initial_prop_values["ACTIVE"];
if (crtc->has_vrr_enabled)
drm->current.vrr_enabled = crtc->initial_prop_values["VRR_ENABLED"];
@ -951,6 +948,7 @@ static bool refresh_state( drm_t *drm )
if (!get_object_properties(drm, plane->id, DRM_MODE_OBJECT_PLANE, plane->props, plane->initial_prop_values)) {
return false;
}
plane->has_color_mgmt = plane->props.contains( "VALVE1_PLANE_BLEND_TF" );
}
return true;
@ -1450,10 +1448,6 @@ void finish_drm(struct drm_t *drm)
add_crtc_property(req, &drm->crtcs[i], "DEGAMMA_LUT", 0);
if ( drm->crtcs[i].has_ctm )
add_crtc_property(req, &drm->crtcs[i], "CTM", 0);
if ( drm->crtcs[i].lut3d_size )
add_crtc_property(req, &drm->crtcs[i], "VALVE1_LUT3D", 0);
if ( drm->crtcs[i].shaperlut_size )
add_crtc_property(req, &drm->crtcs[i], "VALVE1_SHAPER_LUT", 0);
if ( drm->crtcs[i].has_vrr_enabled )
add_crtc_property(req, &drm->crtcs[i], "VRR_ENABLED", 0);
if ( drm->crtcs[i].has_valve1_regamma_tf )
@ -2500,18 +2494,6 @@ int drm_prepare( struct drm_t *drm, bool async, const struct FrameInfo_t *frameI
if (ret < 0)
return ret;
}
if (crtc->lut3d_size)
{
int ret = add_crtc_property(drm->req, crtc, "VALVE1_LUT3D", 0);
if (ret < 0)
return ret;
}
if (crtc->shaperlut_size)
{
int ret = add_crtc_property(drm->req, crtc, "VALVE1_SHAPER_LUT", 0);
if (ret < 0)
return ret;
}
if (crtc->has_vrr_enabled)
{
int ret = add_crtc_property(drm->req, crtc, "VRR_ENABLED", 0);
@ -2780,7 +2762,7 @@ drm_screen_type drm_get_screen_type(struct drm_t *drm)
bool drm_update_color_mgmt(struct drm_t *drm)
{
if ( !drm->crtc || !drm->connector || !drm->crtc->shaperlut_size || !drm->crtc->lut3d_size )
if ( !drm_supports_color_mgmt( drm ) )
return true;
if ( g_ColorMgmt.serial == drm->current.color_mgmt_serial )
@ -3038,10 +3020,10 @@ bool drm_supports_color_mgmt(struct drm_t *drm)
if (g_bForceDisableColorMgmt)
return false;
if (!drm->crtc)
if (!drm->primary)
return false;
return drm->crtc->has_valve1_regamma_tf;
return drm->primary->has_color_mgmt;
}
void drm_get_native_colorimetry( struct drm_t *drm,

View file

@ -105,6 +105,7 @@ struct plane {
drmModePlane *plane;
std::map<std::string, const drmModePropertyRes *> props;
std::map<std::string, uint64_t> initial_prop_values;
bool has_color_mgmt;
};
struct crtc {
@ -117,8 +118,6 @@ struct crtc {
bool has_ctm;
bool has_vrr_enabled;
bool has_valve1_regamma_tf;
uint32_t lut3d_size;
uint32_t shaperlut_size;
struct {
bool active;