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