output: use bool instead of optional to not break API

use bool instead of std::optional to not break API.
This commit is contained in:
Tom Englund 2025-12-25 02:22:10 +01:00
parent 81598c2291
commit 156ddca90f
3 changed files with 13 additions and 10 deletions

View file

@ -76,10 +76,12 @@ namespace Aquamarine {
uint32_t drmFormat = DRM_FORMAT_INVALID;
Hyprutils::Memory::CSharedPointer<IBuffer> buffer;
int32_t explicitInFence = -1, explicitOutFence = -1;
std::optional<Hyprutils::Math::Mat3x3> ctm;
Hyprutils::Math::Mat3x3 ctm;
bool hasCtm = false;
bool wideColorGamut = false;
std::optional<hdr_output_metadata> hdrMetadata;
uint16_t contentType = DRM_MODE_CONTENT_TYPE_GRAPHICS;
hdr_output_metadata hdrMetadata;
bool hasHdrMetadata = false;
uint16_t contentType = DRM_MODE_CONTENT_TYPE_GRAPHICS;
};
const SInternalState& state();

View file

@ -422,9 +422,7 @@ void Aquamarine::CDRMBackend::restoreAfterVT() {
newState.committed |= COutputState::AQ_OUTPUT_STATE_BUFFER;
if (c->crtc->props.values.ctm) {
if (STATE.ctm.has_value())
newState.ctm = STATE.ctm;
else
if (!STATE.hasCtm)
newState.ctm = Hyprutils::Math::Mat3x3::identity();
newState.committed |= COutputState::AQ_OUTPUT_STATE_CTM;
@ -440,7 +438,7 @@ void Aquamarine::CDRMBackend::restoreAfterVT() {
newState.committed |= COutputState::AQ_OUTPUT_STATE_WCG;
if (c->props.values.hdr_output_metadata) {
if (!STATE.hdrMetadata.has_value())
if (!STATE.hasHdrMetadata)
newState.hdrMetadata = {.hdmi_metadata_type1 = hdr_metadata_infoframe{.eotf = 0}};
newState.committed |= COutputState::AQ_OUTPUT_STATE_HDR;
@ -1824,10 +1822,10 @@ bool Aquamarine::CDRMOutput::commitState(bool onlyTest) {
}
}
if (COMMITTED & COutputState::eOutputStateProperties::AQ_OUTPUT_STATE_CTM && STATE.ctm.has_value())
if (COMMITTED & COutputState::eOutputStateProperties::AQ_OUTPUT_STATE_CTM)
data.ctm = STATE.ctm;
if (COMMITTED & COutputState::eOutputStateProperties::AQ_OUTPUT_STATE_HDR && STATE.hdrMetadata.has_value())
if (COMMITTED & COutputState::eOutputStateProperties::AQ_OUTPUT_STATE_HDR)
data.hdrMetadata = STATE.hdrMetadata;
data.blocking = BLOCKING || formatMismatch;

View file

@ -164,6 +164,8 @@ void Aquamarine::COutputState::resetExplicitFences() {
}
void Aquamarine::COutputState::setCTM(const Hyprutils::Math::Mat3x3& ctm) {
internalState.hasCtm = ctm != Hyprutils::Math::Mat3x3::identity();
if (internalState.ctm == ctm)
return;
@ -180,7 +182,8 @@ void Aquamarine::COutputState::setWideColorGamut(bool wcg) {
}
void Aquamarine::COutputState::setHDRMetadata(const hdr_output_metadata& metadata) {
internalState.hdrMetadata = metadata;
internalState.hasHdrMetadata = metadata.hdmi_metadata_type1.eotf != 0;
internalState.hdrMetadata = metadata;
internalState.committed |= AQ_OUTPUT_STATE_HDR;
}