Merge pull request #3996 from ReinUsesLisp/front-faces
fixed_pipeline_state,gl_rasterizer: Swap negative viewport checks for front faces
This commit is contained in:
		| @@ -1020,6 +1020,26 @@ void RasterizerOpenGL::SyncViewport() { | ||||
|     const auto& regs = gpu.regs; | ||||
|  | ||||
|     const bool dirty_viewport = flags[Dirty::Viewports]; | ||||
|     const bool dirty_clip_control = flags[Dirty::ClipControl]; | ||||
|  | ||||
|     if (dirty_clip_control || flags[Dirty::FrontFace]) { | ||||
|         flags[Dirty::FrontFace] = false; | ||||
|  | ||||
|         GLenum mode = MaxwellToGL::FrontFace(regs.front_face); | ||||
|         if (regs.screen_y_control.triangle_rast_flip != 0 && | ||||
|             regs.viewport_transform[0].scale_y < 0.0f) { | ||||
|             switch (mode) { | ||||
|             case GL_CW: | ||||
|                 mode = GL_CCW; | ||||
|                 break; | ||||
|             case GL_CCW: | ||||
|                 mode = GL_CW; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         glFrontFace(mode); | ||||
|     } | ||||
|  | ||||
|     if (dirty_viewport || flags[Dirty::ClipControl]) { | ||||
|         flags[Dirty::ClipControl] = false; | ||||
|  | ||||
| @@ -1117,11 +1137,6 @@ void RasterizerOpenGL::SyncCullMode() { | ||||
|             glDisable(GL_CULL_FACE); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (flags[Dirty::FrontFace]) { | ||||
|         flags[Dirty::FrontFace] = false; | ||||
|         glFrontFace(MaxwellToGL::FrontFace(regs.front_face)); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void RasterizerOpenGL::SyncPrimitiveRestart() { | ||||
|   | ||||
| @@ -71,8 +71,7 @@ void FixedPipelineState::Rasterizer::Fill(const Maxwell& regs) noexcept { | ||||
|     const u32 topology_index = static_cast<u32>(regs.draw.topology.Value()); | ||||
|  | ||||
|     u32 packed_front_face = PackFrontFace(regs.front_face); | ||||
|     if (regs.screen_y_control.triangle_rast_flip != 0 && | ||||
|         regs.viewport_transform[0].scale_y > 0.0f) { | ||||
|     if (regs.screen_y_control.triangle_rast_flip != 0) { | ||||
|         // Flip front face | ||||
|         packed_front_face = 1 - packed_front_face; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user