Merge pull request #1334 from tfarley/hw-depth-modifiers
hwrasterizer: Use depth offset
This commit is contained in:
		| @@ -126,6 +126,7 @@ void RasterizerOpenGL::InitObjects() { | |||||||
|  |  | ||||||
| void RasterizerOpenGL::Reset() { | void RasterizerOpenGL::Reset() { | ||||||
|     SyncCullMode(); |     SyncCullMode(); | ||||||
|  |     SyncDepthModifiers(); | ||||||
|     SyncBlendEnabled(); |     SyncBlendEnabled(); | ||||||
|     SyncBlendFuncs(); |     SyncBlendFuncs(); | ||||||
|     SyncBlendColor(); |     SyncBlendColor(); | ||||||
| @@ -194,6 +195,12 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) { | |||||||
|         SyncCullMode(); |         SyncCullMode(); | ||||||
|         break; |         break; | ||||||
|  |  | ||||||
|  |     // Depth modifiers | ||||||
|  |     case PICA_REG_INDEX(viewport_depth_range): | ||||||
|  |     case PICA_REG_INDEX(viewport_depth_far_plane): | ||||||
|  |         SyncDepthModifiers(); | ||||||
|  |         break; | ||||||
|  |  | ||||||
|     // Blending |     // Blending | ||||||
|     case PICA_REG_INDEX(output_merger.alphablend_enable): |     case PICA_REG_INDEX(output_merger.alphablend_enable): | ||||||
|         SyncBlendEnabled(); |         SyncBlendEnabled(); | ||||||
| @@ -602,6 +609,15 @@ void RasterizerOpenGL::SyncCullMode() { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void RasterizerOpenGL::SyncDepthModifiers() { | ||||||
|  |     float depth_scale = -Pica::float24::FromRawFloat24(Pica::g_state.regs.viewport_depth_range).ToFloat32(); | ||||||
|  |     float depth_offset = Pica::float24::FromRawFloat24(Pica::g_state.regs.viewport_depth_far_plane).ToFloat32() / 2.0f; | ||||||
|  |  | ||||||
|  |     // TODO: Implement scale modifier | ||||||
|  |     uniform_block_data.data.depth_offset = depth_offset; | ||||||
|  |     uniform_block_data.dirty = true; | ||||||
|  | } | ||||||
|  |  | ||||||
| void RasterizerOpenGL::SyncBlendEnabled() { | void RasterizerOpenGL::SyncBlendEnabled() { | ||||||
|     state.blend.enabled = (Pica::g_state.regs.output_merger.alphablend_enable == 1); |     state.blend.enabled = (Pica::g_state.regs.output_merger.alphablend_enable == 1); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -197,7 +197,8 @@ private: | |||||||
|         std::array<GLfloat, 4> const_color[6]; |         std::array<GLfloat, 4> const_color[6]; | ||||||
|         std::array<GLfloat, 4> tev_combiner_buffer_color; |         std::array<GLfloat, 4> tev_combiner_buffer_color; | ||||||
|         GLint alphatest_ref; |         GLint alphatest_ref; | ||||||
|         INSERT_PADDING_BYTES(12); |         GLfloat depth_offset; | ||||||
|  |         INSERT_PADDING_BYTES(8); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     static_assert(sizeof(UniformData) == 0x80, "The size of the UniformData structure has changed, update the structure in the shader"); |     static_assert(sizeof(UniformData) == 0x80, "The size of the UniformData structure has changed, update the structure in the shader"); | ||||||
| @@ -218,6 +219,9 @@ private: | |||||||
|     /// Syncs the cull mode to match the PICA register |     /// Syncs the cull mode to match the PICA register | ||||||
|     void SyncCullMode(); |     void SyncCullMode(); | ||||||
|  |  | ||||||
|  |     /// Syncs the depth scale and offset to match the PICA registers | ||||||
|  |     void SyncDepthModifiers(); | ||||||
|  |  | ||||||
|     /// Syncs the blend enabled status to match the PICA register |     /// Syncs the blend enabled status to match the PICA register | ||||||
|     void SyncBlendEnabled(); |     void SyncBlendEnabled(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -334,6 +334,7 @@ layout (std140) uniform shader_data { | |||||||
|     vec4 const_color[NUM_TEV_STAGES]; |     vec4 const_color[NUM_TEV_STAGES]; | ||||||
|     vec4 tev_combiner_buffer_color; |     vec4 tev_combiner_buffer_color; | ||||||
|     int alphatest_ref; |     int alphatest_ref; | ||||||
|  |     float depth_offset; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| uniform sampler2D tex[3]; | uniform sampler2D tex[3]; | ||||||
| @@ -360,7 +361,8 @@ void main() { | |||||||
|         out += ") discard;\n"; |         out += ") discard;\n"; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     out += "color = last_tex_env_out;\n}"; |     out += "color = last_tex_env_out;\n"; | ||||||
|  |     out += "gl_FragDepth = gl_FragCoord.z + depth_offset;\n}"; | ||||||
|  |  | ||||||
|     return out; |     return out; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei