mirror of
https://github.com/hyprwm/aquamarine.git
synced 2025-12-20 05:50:15 +01:00
fix hdr modeset
This commit is contained in:
parent
be166e11d8
commit
c320e68d44
1 changed files with 27 additions and 29 deletions
|
|
@ -136,29 +136,8 @@ void Aquamarine::CDRMAtomicRequest::addConnector(Hyprutils::Memory::CSharedPoint
|
||||||
TRACE(backend->log(AQ_LOG_TRACE, std::format("atomic addConnector values: CRTC {}, mode {}", enable ? connector->crtc->id : 0, data.atomic.modeBlob)));
|
TRACE(backend->log(AQ_LOG_TRACE, std::format("atomic addConnector values: CRTC {}, mode {}", enable ? connector->crtc->id : 0, data.atomic.modeBlob)));
|
||||||
|
|
||||||
conn = connector;
|
conn = connector;
|
||||||
if (enable) {
|
|
||||||
drmModeModeInfo* currentMode = connector->getCurrentMode();
|
|
||||||
bool modeDiffers = true;
|
|
||||||
if (currentMode) {
|
|
||||||
modeDiffers = memcmp(currentMode, &data.modeInfo, sizeof(drmModeModeInfo)) != 0;
|
|
||||||
free(currentMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modeDiffers)
|
|
||||||
addConnectorModeset(connector, data);
|
|
||||||
|
|
||||||
// Setup HDR
|
|
||||||
if (connector->props.values.max_bpc && connector->maxBpcBounds.at(1))
|
|
||||||
add(connector->id, connector->props.values.max_bpc, getMaxBPC(data.mainFB->buffer->dmabuf().format));
|
|
||||||
|
|
||||||
if (connector->props.values.Colorspace && connector->colorspace.values.BT2020_RGB)
|
|
||||||
add(connector->id, connector->props.values.Colorspace, STATE.wideColorGamut ? connector->colorspace.values.BT2020_RGB : connector->colorspace.values.Default);
|
|
||||||
|
|
||||||
if (connector->props.values.hdr_output_metadata && data.atomic.hdrd)
|
|
||||||
add(connector->id, connector->props.values.hdr_output_metadata, data.atomic.hdrBlob);
|
|
||||||
} else
|
|
||||||
addConnectorModeset(connector, data);
|
|
||||||
|
|
||||||
|
addConnectorModeset(connector, data);
|
||||||
addConnectorCursor(connector, data);
|
addConnectorCursor(connector, data);
|
||||||
|
|
||||||
add(connector->id, connector->props.values.crtc_id, enable ? connector->crtc->id : 0);
|
add(connector->id, connector->props.values.crtc_id, enable ? connector->crtc->id : 0);
|
||||||
|
|
@ -196,7 +175,6 @@ void Aquamarine::CDRMAtomicRequest::addConnector(Hyprutils::Memory::CSharedPoint
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Aquamarine::CDRMAtomicRequest::addConnectorModeset(Hyprutils::Memory::CSharedPointer<SDRMConnector> connector, SDRMConnectorCommitData& data) {
|
void Aquamarine::CDRMAtomicRequest::addConnectorModeset(Hyprutils::Memory::CSharedPointer<SDRMConnector> connector, SDRMConnectorCommitData& data) {
|
||||||
if (!data.modeset)
|
if (!data.modeset)
|
||||||
return;
|
return;
|
||||||
|
|
@ -204,14 +182,34 @@ void Aquamarine::CDRMAtomicRequest::addConnectorModeset(Hyprutils::Memory::CShar
|
||||||
const auto& STATE = connector->output->state->state();
|
const auto& STATE = connector->output->state->state();
|
||||||
const bool enable = STATE.enabled && data.mainFB;
|
const bool enable = STATE.enabled && data.mainFB;
|
||||||
|
|
||||||
data.atomic.blobbed = true;
|
if (!enable) {
|
||||||
|
add(connector->crtc->id, connector->crtc->props.values.mode_id, data.atomic.modeBlob);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (enable) {
|
drmModeModeInfo* currentMode = connector->getCurrentMode();
|
||||||
add(connector->crtc->id, connector->crtc->props.values.mode_id, data.atomic.modeBlob);
|
bool modeDiffers = true;
|
||||||
if (connector->props.values.link_status)
|
if (currentMode) {
|
||||||
add(connector->id, connector->props.values.link_status, DRM_MODE_LINK_STATUS_GOOD);
|
modeDiffers = memcmp(currentMode, &data.modeInfo, sizeof(drmModeModeInfo)) != 0;
|
||||||
} else
|
free(currentMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modeDiffers) {
|
||||||
add(connector->crtc->id, connector->crtc->props.values.mode_id, data.atomic.modeBlob);
|
add(connector->crtc->id, connector->crtc->props.values.mode_id, data.atomic.modeBlob);
|
||||||
|
data.atomic.blobbed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (connector->props.values.link_status)
|
||||||
|
add(connector->id, connector->props.values.link_status, DRM_MODE_LINK_STATUS_GOOD);
|
||||||
|
|
||||||
|
if (connector->props.values.max_bpc && connector->maxBpcBounds.at(1))
|
||||||
|
add(connector->id, connector->props.values.max_bpc, getMaxBPC(data.mainFB->buffer->dmabuf().format));
|
||||||
|
|
||||||
|
if (connector->props.values.Colorspace && connector->colorspace.values.BT2020_RGB)
|
||||||
|
add(connector->id, connector->props.values.Colorspace, STATE.wideColorGamut ? connector->colorspace.values.BT2020_RGB : connector->colorspace.values.Default);
|
||||||
|
|
||||||
|
if (connector->props.values.hdr_output_metadata && data.atomic.hdrd)
|
||||||
|
add(connector->id, connector->props.values.hdr_output_metadata, data.atomic.hdrBlob);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Aquamarine::CDRMAtomicRequest::addConnectorCursor(Hyprutils::Memory::CSharedPointer<SDRMConnector> connector, SDRMConnectorCommitData& data) {
|
void Aquamarine::CDRMAtomicRequest::addConnectorCursor(Hyprutils::Memory::CSharedPointer<SDRMConnector> connector, SDRMConnectorCommitData& data) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue