Browse Source
Merge pull request #3211 from FernandoS27/depth-mode
Maxwell3D: Implement Depth Mode.
pull/15/merge
Rodrigo Locatti
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
15 additions and
8 deletions
-
src/video_core/engines/maxwell_3d.h
-
src/video_core/renderer_opengl/gl_rasterizer.cpp
-
src/video_core/renderer_opengl/gl_state.cpp
-
src/video_core/renderer_opengl/gl_state.h
|
|
|
@ -310,6 +310,11 @@ public: |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
enum class DepthMode : u32 { |
|
|
|
MinusOneToOne = 0, |
|
|
|
ZeroToOne = 1, |
|
|
|
}; |
|
|
|
|
|
|
|
enum class PrimitiveTopology : u32 { |
|
|
|
Points = 0x0, |
|
|
|
Lines = 0x1, |
|
|
|
@ -491,11 +496,6 @@ public: |
|
|
|
INSERT_UNION_PADDING_WORDS(1); |
|
|
|
}; |
|
|
|
|
|
|
|
enum class DepthMode : u32 { |
|
|
|
MinusOneToOne = 0, |
|
|
|
ZeroToOne = 1, |
|
|
|
}; |
|
|
|
|
|
|
|
enum class TessellationPrimitive : u32 { |
|
|
|
Isolines = 0, |
|
|
|
Triangles = 1, |
|
|
|
@ -676,7 +676,7 @@ public: |
|
|
|
u32 count; |
|
|
|
} vertex_buffer; |
|
|
|
|
|
|
|
INSERT_UNION_PADDING_WORDS(1); |
|
|
|
DepthMode depth_mode; |
|
|
|
|
|
|
|
float clear_color[4]; |
|
|
|
float clear_depth; |
|
|
|
@ -1425,6 +1425,7 @@ ASSERT_REG_POSITION(rt, 0x200); |
|
|
|
ASSERT_REG_POSITION(viewport_transform, 0x280); |
|
|
|
ASSERT_REG_POSITION(viewports, 0x300); |
|
|
|
ASSERT_REG_POSITION(vertex_buffer, 0x35D); |
|
|
|
ASSERT_REG_POSITION(depth_mode, 0x35F); |
|
|
|
ASSERT_REG_POSITION(clear_color[0], 0x360); |
|
|
|
ASSERT_REG_POSITION(clear_depth, 0x364); |
|
|
|
ASSERT_REG_POSITION(clear_stencil, 0x368); |
|
|
|
|
|
|
|
@ -1028,6 +1028,10 @@ void RasterizerOpenGL::SyncViewport(OpenGLState& current_state) { |
|
|
|
flip_y = !flip_y; |
|
|
|
} |
|
|
|
state.clip_control.origin = flip_y ? GL_UPPER_LEFT : GL_LOWER_LEFT; |
|
|
|
state.clip_control.depth_mode = |
|
|
|
regs.depth_mode == Tegra::Engines::Maxwell3D::Regs::DepthMode::ZeroToOne |
|
|
|
? GL_ZERO_TO_ONE |
|
|
|
: GL_NEGATIVE_ONE_TO_ONE; |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerOpenGL::SyncClipEnabled( |
|
|
|
|
|
|
|
@ -411,8 +411,9 @@ void OpenGLState::ApplyAlphaTest() { |
|
|
|
} |
|
|
|
|
|
|
|
void OpenGLState::ApplyClipControl() { |
|
|
|
if (UpdateValue(cur_state.clip_control.origin, clip_control.origin)) { |
|
|
|
glClipControl(clip_control.origin, GL_NEGATIVE_ONE_TO_ONE); |
|
|
|
if (UpdateTie(std::tie(cur_state.clip_control.origin, cur_state.clip_control.depth_mode), |
|
|
|
std::tie(clip_control.origin, clip_control.depth_mode))) { |
|
|
|
glClipControl(clip_control.origin, clip_control.depth_mode); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -150,6 +150,7 @@ public: |
|
|
|
|
|
|
|
struct { |
|
|
|
GLenum origin = GL_LOWER_LEFT; |
|
|
|
GLenum depth_mode = GL_NEGATIVE_ONE_TO_ONE; |
|
|
|
} clip_control; |
|
|
|
|
|
|
|
OpenGLState(); |
|
|
|
|