diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index 3f67ca42..31f4c68c 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -729,6 +729,13 @@ void Renderer::applyMsaaChange() { VkSampleCountFlagBits samples = pendingMsaaSamples_; msaaChangePending_ = false; + // FSR2 requires non-MSAA render pass — if FSR2 was enabled after the MSAA + // change was queued (startup race), force 1x to avoid framebuffer mismatch. + if (samples > VK_SAMPLE_COUNT_1_BIT && + postProcessPipeline_ && postProcessPipeline_->isFsr2BlockingMsaa()) { + samples = VK_SAMPLE_COUNT_1_BIT; + } + VkSampleCountFlagBits current = vkCtx->getMsaaSamples(); if (samples == current) return; @@ -1916,6 +1923,11 @@ void Renderer::setFSR2Enabled(bool enabled) { pendingMsaaSamples_ = req.samples; msaaChangePending_ = true; } + // If enabling FSR2 and there's already a pending MSAA change to >1x + // (e.g. startup settings loaded MSAA before FSR2), override it to 1x. + if (enabled && msaaChangePending_ && pendingMsaaSamples_ > VK_SAMPLE_COUNT_1_BIT) { + pendingMsaaSamples_ = VK_SAMPLE_COUNT_1_BIT; + } } bool Renderer::isFSR2Enabled() const { return postProcessPipeline_ && postProcessPipeline_->isFSR2Enabled();