drm: Allow reading color primaries from EDID on Galileo
This commit is contained in:
parent
a54ffcab0f
commit
4d4cc40440
1 changed files with 22 additions and 28 deletions
50
src/drm.cpp
50
src/drm.cpp
|
@ -502,37 +502,31 @@ drm_hdr_parse_edid(drm_t *drm, struct connector *connector, const struct di_edid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connector->is_steam_deck_display)
|
const char *coloroverride = getenv( "GAMESCOPE_INTERNAL_COLORIMETRY_OVERRIDE" );
|
||||||
|
if (coloroverride && drm_get_connector_type(connector->connector) == DRM_SCREEN_TYPE_INTERNAL)
|
||||||
|
{
|
||||||
|
if (sscanf( coloroverride, "%f %f %f %f %f %f %f %f",
|
||||||
|
&metadata->colorimetry.primaries.r.x, &metadata->colorimetry.primaries.r.y,
|
||||||
|
&metadata->colorimetry.primaries.g.x, &metadata->colorimetry.primaries.g.y,
|
||||||
|
&metadata->colorimetry.primaries.b.x, &metadata->colorimetry.primaries.b.y,
|
||||||
|
&metadata->colorimetry.white.x, &metadata->colorimetry.white.y ) == 8 )
|
||||||
|
{
|
||||||
|
drm_log.infof("[colorimetry]: GAMESCOPE_INTERNAL_COLORIMETRY_OVERRIDE detected");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drm_log.errorf("[colorimetry]: GAMESCOPE_INTERNAL_COLORIMETRY_OVERRIDE specified, but could not parse \"rx ry gx gy bx by wx wy\"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (connector->is_steam_deck_display && !connector->is_galileo_display)
|
||||||
{
|
{
|
||||||
drm_log.infof("[colorimetry]: Steam Deck (internal display) detected.");
|
drm_log.infof("[colorimetry]: Steam Deck (internal display) detected.");
|
||||||
bool bUseDefaultDeckColors = true;
|
|
||||||
|
|
||||||
const char *coloroverride = getenv( "GAMESCOPE_INTERNAL_COLORIMETRY_OVERRIDE" );
|
// Hardcode Steam Deck display info to support
|
||||||
if (coloroverride)
|
// BIOSes with missing info for this in EDID.
|
||||||
{
|
drm_log.infof("[colorimetry]: using default steamdeck colorimetry");
|
||||||
if (sscanf( coloroverride, "%f %f %f %f %f %f %f %f",
|
metadata->colorimetry = displaycolorimetry_steamdeck_measured;
|
||||||
&metadata->colorimetry.primaries.r.x, &metadata->colorimetry.primaries.r.y,
|
metadata->eotf = EOTF_Gamma22;
|
||||||
&metadata->colorimetry.primaries.g.x, &metadata->colorimetry.primaries.g.y,
|
|
||||||
&metadata->colorimetry.primaries.b.x, &metadata->colorimetry.primaries.b.y,
|
|
||||||
&metadata->colorimetry.white.x, &metadata->colorimetry.white.y ) == 8 )
|
|
||||||
{
|
|
||||||
drm_log.infof("[colorimetry]: GAMESCOPE_INTERNAL_COLORIMETRY_OVERRIDE detected");
|
|
||||||
bUseDefaultDeckColors = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
drm_log.errorf("[colorimetry]: GAMESCOPE_INTERNAL_COLORIMETRY_OVERRIDE specified, but could not parse \"rx ry gx gy bx by wx wy\"");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bUseDefaultDeckColors)
|
|
||||||
{
|
|
||||||
// Hardcode Steam Deck display info to support
|
|
||||||
// BIOSes with missing info for this in EDID.
|
|
||||||
drm_log.infof("[colorimetry]: using default steamdeck colorimetry");
|
|
||||||
metadata->colorimetry = displaycolorimetry_steamdeck_measured;
|
|
||||||
metadata->eotf = EOTF_Gamma22;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (chroma && chroma->red_x != 0.0f)
|
else if (chroma && chroma->red_x != 0.0f)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue