drm: Handle not having CRTC 3D LUT/Shaper
This commit is contained in:
parent
789cfc9057
commit
9b70b3b9e3
2 changed files with 5 additions and 24 deletions
26
src/drm.cpp
26
src/drm.cpp
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue