gl_rasterizer: Fix rescale dirty state checking
This commit is contained in:
parent
f086c82e1f
commit
9bc7b04ca5
1 changed files with 9 additions and 4 deletions
|
@ -533,7 +533,8 @@ void RasterizerOpenGL::SyncViewport() {
|
|||
auto& flags = maxwell3d.dirty.flags;
|
||||
const auto& regs = maxwell3d.regs;
|
||||
|
||||
const bool dirty_viewport = flags[Dirty::Viewports];
|
||||
const bool rescale_viewports = flags[VideoCommon::Dirty::RescaleViewports];
|
||||
const bool dirty_viewport = flags[Dirty::Viewports] || rescale_viewports;
|
||||
const bool dirty_clip_control = flags[Dirty::ClipControl];
|
||||
|
||||
if (dirty_clip_control || flags[Dirty::FrontFace]) {
|
||||
|
@ -574,8 +575,9 @@ void RasterizerOpenGL::SyncViewport() {
|
|||
if (dirty_viewport) {
|
||||
flags[Dirty::Viewports] = false;
|
||||
|
||||
const bool force = flags[Dirty::ViewportTransform];
|
||||
const bool force = flags[Dirty::ViewportTransform] || rescale_viewports;
|
||||
flags[Dirty::ViewportTransform] = false;
|
||||
flags[VideoCommon::Dirty::RescaleViewports] = false;
|
||||
|
||||
const auto& resolution = Settings::values.resolution_info;
|
||||
const auto scale_up = [&](u32 value) -> u32 {
|
||||
|
@ -911,11 +913,14 @@ void RasterizerOpenGL::SyncLogicOpState() {
|
|||
|
||||
void RasterizerOpenGL::SyncScissorTest() {
|
||||
auto& flags = maxwell3d.dirty.flags;
|
||||
if (!flags[Dirty::Scissors]) {
|
||||
if (!flags[Dirty::Scissors] && !flags[VideoCommon::Dirty::RescaleScissors]) {
|
||||
return;
|
||||
}
|
||||
flags[Dirty::Scissors] = false;
|
||||
|
||||
const bool force = flags[VideoCommon::Dirty::RescaleScissors];
|
||||
flags[VideoCommon::Dirty::RescaleScissors] = false;
|
||||
|
||||
const auto& regs = maxwell3d.regs;
|
||||
|
||||
const auto& resolution = Settings::values.resolution_info;
|
||||
|
@ -927,7 +932,7 @@ void RasterizerOpenGL::SyncScissorTest() {
|
|||
return std::max<u32>(converted_value, 1U);
|
||||
};
|
||||
for (std::size_t index = 0; index < Maxwell::NumViewports; ++index) {
|
||||
if (!flags[Dirty::Scissor0 + index]) {
|
||||
if (!force && !flags[Dirty::Scissor0 + index]) {
|
||||
continue;
|
||||
}
|
||||
flags[Dirty::Scissor0 + index] = false;
|
||||
|
|
Loading…
Reference in a new issue