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)
|
if (!crtc->has_valve1_regamma_tf)
|
||||||
drm_log.infof("CRTC %" PRIu32 " has no VALVE1_CRTC_REGAMMA_TF support", crtc->id);
|
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"];
|
crtc->current.active = crtc->initial_prop_values["ACTIVE"];
|
||||||
if (crtc->has_vrr_enabled)
|
if (crtc->has_vrr_enabled)
|
||||||
drm->current.vrr_enabled = crtc->initial_prop_values["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)) {
|
if (!get_object_properties(drm, plane->id, DRM_MODE_OBJECT_PLANE, plane->props, plane->initial_prop_values)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
plane->has_color_mgmt = plane->props.contains( "VALVE1_PLANE_BLEND_TF" );
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -1450,10 +1448,6 @@ void finish_drm(struct drm_t *drm)
|
||||||
add_crtc_property(req, &drm->crtcs[i], "DEGAMMA_LUT", 0);
|
add_crtc_property(req, &drm->crtcs[i], "DEGAMMA_LUT", 0);
|
||||||
if ( drm->crtcs[i].has_ctm )
|
if ( drm->crtcs[i].has_ctm )
|
||||||
add_crtc_property(req, &drm->crtcs[i], "CTM", 0);
|
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 )
|
if ( drm->crtcs[i].has_vrr_enabled )
|
||||||
add_crtc_property(req, &drm->crtcs[i], "VRR_ENABLED", 0);
|
add_crtc_property(req, &drm->crtcs[i], "VRR_ENABLED", 0);
|
||||||
if ( drm->crtcs[i].has_valve1_regamma_tf )
|
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)
|
if (ret < 0)
|
||||||
return ret;
|
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)
|
if (crtc->has_vrr_enabled)
|
||||||
{
|
{
|
||||||
int ret = add_crtc_property(drm->req, crtc, "VRR_ENABLED", 0);
|
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)
|
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;
|
return true;
|
||||||
|
|
||||||
if ( g_ColorMgmt.serial == drm->current.color_mgmt_serial )
|
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)
|
if (g_bForceDisableColorMgmt)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!drm->crtc)
|
if (!drm->primary)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return drm->crtc->has_valve1_regamma_tf;
|
return drm->primary->has_color_mgmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void drm_get_native_colorimetry( struct drm_t *drm,
|
void drm_get_native_colorimetry( struct drm_t *drm,
|
||||||
|
|
|
@ -105,6 +105,7 @@ struct plane {
|
||||||
drmModePlane *plane;
|
drmModePlane *plane;
|
||||||
std::map<std::string, const drmModePropertyRes *> props;
|
std::map<std::string, const drmModePropertyRes *> props;
|
||||||
std::map<std::string, uint64_t> initial_prop_values;
|
std::map<std::string, uint64_t> initial_prop_values;
|
||||||
|
bool has_color_mgmt;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct crtc {
|
struct crtc {
|
||||||
|
@ -117,8 +118,6 @@ struct crtc {
|
||||||
bool has_ctm;
|
bool has_ctm;
|
||||||
bool has_vrr_enabled;
|
bool has_vrr_enabled;
|
||||||
bool has_valve1_regamma_tf;
|
bool has_valve1_regamma_tf;
|
||||||
uint32_t lut3d_size;
|
|
||||||
uint32_t shaperlut_size;
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
bool active;
|
bool active;
|
||||||
|
|
Loading…
Reference in a new issue