From d2e6f6fef0b59c1f97713d828f01b54d0a074b50 Mon Sep 17 00:00:00 2001 From: raven02 Date: Sun, 4 Jan 2015 00:34:05 +0800 Subject: [PATCH] RSX : few more cmd refactoring --- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 246 +++++++++++++++--------------- rpcs3/Emu/RSX/GL/GLGSRender.h | 19 +++ rpcs3/Emu/RSX/Null/NullGSRender.h | 107 +++++-------- rpcs3/Emu/RSX/RSXThread.cpp | 172 +++++++++++---------- rpcs3/Emu/RSX/RSXThread.h | 19 +++ 5 files changed, 290 insertions(+), 273 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index e430c6a4d5..ab6ed0302b 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -1771,6 +1771,130 @@ void GLGSRender::DepthMask(u32 flag) checkForGlError("glDepthMask"); } +void GLGSRender::PolygonMode(u32 face, u32 mode) +{ + switch (face) + { + case NV4097_SET_FRONT_POLYGON_MODE: + glPolygonMode(GL_FRONT, mode); + break; + case NV4097_SET_BACK_POLYGON_MODE: + glPolygonMode(GL_BACK, mode); + break; + } + checkForGlError("glPolygonMode"); +} + +void GLGSRender::PointSize(float size) +{ + glPointSize(m_point_size); + checkForGlError("glPointSize"); +} + +void GLGSRender::LogicOp(u32 opcdoe) +{ + glLogicOp(opcdoe); + checkForGlError("glLogicOp"); +} + +void GLGSRender::LineWidth(float width) +{ + glLineWidth(width); + checkForGlError("glLineWidth"); +} + +void GLGSRender::LineStipple(u16 factor, u16 pattern) +{ + glLineStipple(factor, pattern); + checkForGlError("glLineStipple"); +} + +void GLGSRender::PrimitiveRestartIndex(u32 index) +{ + glPrimitiveRestartIndex(index); + checkForGlError("glPrimitiveRestartIndex"); +} + +void GLGSRender::CullFace(u32 mode) +{ + glCullFace(mode); + checkForGlError("glCullFace"); +} + +void GLGSRender::FrontFace(u32 mode) +{ + glFrontFace(mode); + checkForGlError("glFrontFace"); +} + +void GLGSRender::Fogi(u32 mode) +{ + glFogi(GL_FOG_MODE, mode); + checkForGlError("glFogi(GL_FOG_MODE)"); +} + +void GLGSRender::Fogf(float start, float end) +{ + glFogf(GL_FOG_START, start); + checkForGlError("glFogf(GL_FOG_START)"); + glFogf(GL_FOG_END, end); + checkForGlError("glFogf(GL_FOG_END)"); +} + +void GLGSRender::PolygonOffset(float factor , float bias) +{ + glPolygonOffset(factor, bias); + checkForGlError("glPolygonOffset"); +} + +void GLGSRender::DepthRangef(float min, float max) +{ + glDepthRangef(min, max); + checkForGlError("glDepthRangef"); +} + +void GLGSRender::BlendEquationSeparate(u16 rgb, u16 a) +{ + glBlendEquationSeparate(rgb, a); + checkForGlError("glBlendEquationSeparate"); +} + +void GLGSRender::BlendFuncSeparate(u16 srcRGB, u16 dstRGB, u16 srcAlpha, u16 dstAlpha) +{ + glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); + checkForGlError("glBlendFuncSeparate"); +} + +void GLGSRender::BlendColor(u8 r, u8 g, u8 b, u8 a) +{ + glBlendColor(r, g, b, a); + checkForGlError("glBlendColor"); +} + +void GLGSRender::LightModeli(u32 enable) +{ + enable ? glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE) : glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); + checkForGlError("glLightModeli"); +} + +void GLGSRender::ShadeModel(u32 mode) +{ + glShadeModel(m_shade_mode); + checkForGlError("glShadeModel"); +} + +void GLGSRender::DepthBoundsEXT(float min, float max) +{ + glDepthBoundsEXT(min, max); + checkForGlError("glDepthBoundsEXT"); +} + +void GLGSRender::Scissor(u16 x, u16 y, u16 width, u16 height) +{ + glScissor(x, y, width, height); + checkForGlError("glScissor"); +} + void GLGSRender::ExecCMD() { if (!LoadProgram()) @@ -1781,42 +1905,6 @@ void GLGSRender::ExecCMD() } InitDrawBuffers(); - - if (m_set_front_polygon_mode) - { - glPolygonMode(GL_FRONT, m_front_polygon_mode); - checkForGlError("glPolygonMode(Front)"); - } - - if (m_set_back_polygon_mode) - { - glPolygonMode(GL_BACK, m_back_polygon_mode); - checkForGlError("glPolygonMode(Back)"); - } - - if (m_set_point_size) - { - glPointSize(m_point_size); - checkForGlError("glPointSize"); - } - - if (m_set_poly_offset_mode) - { - glPolygonOffset(m_poly_offset_scale_factor, m_poly_offset_bias); - checkForGlError("glPolygonOffset"); - } - - if (m_set_logic_op) - { - glLogicOp(m_logic_op); - checkForGlError("glLogicOp"); - } - - if (m_set_scissor_horizontal && m_set_scissor_vertical) - { - glScissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); - checkForGlError("glScissor"); - } if (m_set_two_sided_stencil_test_enable) { @@ -1877,97 +1965,11 @@ void GLGSRender::ExecCMD() } } - if (m_set_two_side_light_enable) - { - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); - checkForGlError("glLightModeli"); - } - - if (m_set_shade_mode) - { - glShadeModel(m_shade_mode); - checkForGlError("glShadeModel"); - } - - if (m_set_depth_bounds) - { - glDepthBoundsEXT(m_depth_bounds_min, m_depth_bounds_max); - checkForGlError("glDepthBounds"); - } - - if (m_set_clip) - { - glDepthRangef(m_clip_min, m_clip_max); - checkForGlError("glDepthRangef"); - } - - if (m_set_line_width) - { - glLineWidth(m_line_width); - checkForGlError("glLineWidth"); - } - - if (m_set_line_stipple) - { - glLineStipple(m_line_stipple_factor, m_line_stipple_pattern); - checkForGlError("glLineStipple"); - } - if (m_set_polygon_stipple) { glPolygonStipple((const GLubyte*)m_polygon_stipple_pattern); checkForGlError("glPolygonStipple"); } - - if (m_set_blend_equation) - { - glBlendEquationSeparate(m_blend_equation_rgb, m_blend_equation_alpha); - checkForGlError("glBlendEquationSeparate"); - } - - if (m_set_blend_sfactor && m_set_blend_dfactor) - { - glBlendFuncSeparate(m_blend_sfactor_rgb, m_blend_dfactor_rgb, m_blend_sfactor_alpha, m_blend_dfactor_alpha); - checkForGlError("glBlendFuncSeparate"); - } - - if (m_set_blend_color) - { - glBlendColor(m_blend_color_r, m_blend_color_g, m_blend_color_b, m_blend_color_a); - checkForGlError("glBlendColor"); - } - - if (m_set_cull_face) - { - glCullFace(m_cull_face); - checkForGlError("glCullFace"); - } - - if (m_set_front_face) - { - glFrontFace(m_front_face); - checkForGlError("glFrontFace"); - } - - if (m_set_fog_mode) - { - glFogi(GL_FOG_MODE, m_fog_mode); - checkForGlError("glFogi(GL_FOG_MODE)"); - } - - if (m_set_fog_params) - { - glFogf(GL_FOG_START, m_fog_param0); - checkForGlError("glFogf(GL_FOG_START)"); - glFogf(GL_FOG_END, m_fog_param1); - checkForGlError("glFogf(GL_FOG_END)"); - } - - if (m_set_restart_index) - { - glPrimitiveRestartIndex(m_restart_index); - checkForGlError("glPrimitiveRestartIndex"); - } if (m_indexed_array.m_count && m_draw_array_count) { diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.h b/rpcs3/Emu/RSX/GL/GLGSRender.h index b7146a8ff7..dbaa1135ea 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.h +++ b/rpcs3/Emu/RSX/GL/GLGSRender.h @@ -199,5 +199,24 @@ protected: virtual void AlphaFunc(u32 func, float ref); virtual void DepthFunc(u32 func); virtual void DepthMask(u32 flag); + virtual void PolygonMode(u32 face, u32 mode); + virtual void PointSize(float size); + virtual void LogicOp(u32 opcdoe); + virtual void LineWidth(float width); + virtual void LineStipple(u16 factor, u16 pattern); + virtual void PrimitiveRestartIndex(u32 index); + virtual void CullFace(u32 mode); + virtual void FrontFace(u32 mode); + virtual void Fogi(u32 mode); + virtual void Fogf(float start, float end); + virtual void PolygonOffset(float factor, float bias); + virtual void DepthRangef(float min, float max); + virtual void BlendEquationSeparate(u16 rgb, u16 a); + virtual void BlendFuncSeparate(u16 srcRGB, u16 dstRGB, u16 srcAlpha, u16 dstAlpha); + virtual void BlendColor(u8 r, u8 g, u8 b, u8 a); + virtual void LightModeli(u32 enable); + virtual void ShadeModel(u32 mode); + virtual void DepthBoundsEXT(float min, float max); + virtual void Scissor(u16 x, u16 y, u16 width, u16 height); virtual void Flip(); }; diff --git a/rpcs3/Emu/RSX/Null/NullGSRender.h b/rpcs3/Emu/RSX/Null/NullGSRender.h index 3e1fd72eb6..de2167a8b7 100644 --- a/rpcs3/Emu/RSX/Null/NullGSRender.h +++ b/rpcs3/Emu/RSX/Null/NullGSRender.h @@ -6,76 +6,43 @@ class NullGSRender { public: - NullGSRender() - { - } - - virtual ~NullGSRender() - { - } + NullGSRender() {} + virtual ~NullGSRender() {} private: - virtual void OnInit() - { - } - - virtual void OnInitThread() - { - } - - virtual void OnExitThread() - { - } - - virtual void OnReset() - { - } - - virtual void Enable(u32 cmd, u32 enable) - { - } - - virtual void ClearColor(u32 a, u32 r, u32 g, u32 b) - { - } - - virtual void ClearStencil(u32 stencil) - { - } - - virtual void ClearDepth(u32 depth) - { - } - - virtual void ClearSurface(u32 mask) - { - } - - virtual void ColorMask(bool a, bool r, bool g, bool b) - { - } - - virtual void ExecCMD() - { - } - - virtual void AlphaFunc(u32 func, float ref) - { - } - - virtual void DepthFunc(u32 func) - { - } - - virtual void DepthMask(u32 flag) - { - } - - virtual void Flip() - { - } - - virtual void Close() - { - } + virtual void OnInit() {} + virtual void OnInitThread() {} + virtual void OnExitThread() {} + virtual void OnReset() {} + virtual void Enable(u32 cmd, u32 enable) {} + virtual void ClearColor(u32 a, u32 r, u32 g, u32 b) {} + virtual void ClearStencil(u32 stencil) {} + virtual void ClearDepth(u32 depth) {} + virtual void ClearSurface(u32 mask) {} + virtual void ColorMask(bool a, bool r, bool g, bool b) {} + virtual void ExecCMD() {} + virtual void AlphaFunc(u32 func, float ref) {} + virtual void DepthFunc(u32 func) {} + virtual void DepthMask(u32 flag) {} + virtual void PolygonMode(u32 face, u32 mode) {} + virtual void PointSize(float size) {} + virtual void LogicOp(u32 opcdoe) {} + virtual void LineWidth(float width) {} + virtual void LineStipple(u16 factor, u16 pattern) {} + virtual void PrimitiveRestartIndex(u32 index) {} + virtual void CullFace(u32 mode) {} + virtual void FrontFace(u32 mode) {} + virtual void Fogi(u32 mode) {} + virtual void Fogf(float start, float end) {} + virtual void PolygonOffset(float factor, float bias) {} + virtual void DepthRangef(float min, float max) {} + virtual void BlendEquationSeparate(u16 rgb, u16 a) {} + virtual void BlendFuncSeparate(u16 srcRGB, u16 dstRGB, u16 srcAlpha, u16 dstAlpha) {} + virtual void BlendColor(u8 r, u8 g, u8 b, u8 a) {} + virtual void LightModeli(u32 enable) {} + virtual void ShadeModel(u32 mode) {} + virtual void DepthBoundsEXT(float min, float max) {} + virtual void Scissor(u16 x, u16 y, u16 width, u16 height) {} + virtual void Flip() {} + virtual void Close() {} }; diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index ac5894d869..d12f163ad6 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -599,14 +599,15 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_CULL_FACE: { const u32 value = ARGS(0); - Enable(cmd, value); + CullFace(value); } break; // Front face case NV4097_SET_FRONT_FACE: { - m_front_face = ARGS(0); + const u32 value = ARGS(0); + FrontFace(value); } break; @@ -628,34 +629,38 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_BLEND_FUNC_SFACTOR: { + const u32 value = ARGS(0); m_set_blend_sfactor = true; - m_blend_sfactor_rgb = ARGS(0) & 0xffff; - m_blend_sfactor_alpha = ARGS(0) >> 16; + m_blend_sfactor_rgb = value & 0xffff; + m_blend_sfactor_alpha = value >> 16; if (count == 2) { - m_set_blend_dfactor = true; - m_blend_dfactor_rgb = ARGS(1) & 0xffff; - m_blend_dfactor_alpha = ARGS(1) >> 16; + const u32 value1 = ARGS(1); + m_blend_dfactor_rgb = value1 & 0xffff; + m_blend_dfactor_alpha = value1 >> 16; + BlendFuncSeparate(m_blend_sfactor_rgb, m_blend_dfactor_rgb, m_blend_sfactor_alpha, m_blend_dfactor_alpha); } } break; case NV4097_SET_BLEND_FUNC_DFACTOR: { - m_set_blend_dfactor = true; - m_blend_dfactor_rgb = ARGS(0) & 0xffff; - m_blend_dfactor_alpha = ARGS(0) >> 16; + const u32 value = ARGS(0); + m_blend_dfactor_rgb = value & 0xffff; + m_blend_dfactor_alpha = value >> 16; + + if (m_set_blend_sfactor) + { + BlendFuncSeparate(m_blend_sfactor_rgb, m_blend_dfactor_rgb, m_blend_sfactor_alpha, m_blend_dfactor_alpha); + } } break; case NV4097_SET_BLEND_COLOR: { - m_set_blend_color = true; - m_blend_color_r = ARGS(0) & 0xff; - m_blend_color_g = (ARGS(0) >> 8) & 0xff; - m_blend_color_b = (ARGS(0) >> 16) & 0xff; - m_blend_color_a = (ARGS(0) >> 24) & 0xff; + const u32 value = ARGS(0); + BlendColor(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff); } break; @@ -670,9 +675,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_BLEND_EQUATION: { - m_set_blend_equation = true; - m_blend_equation_rgb = ARGS(0) & 0xffff; - m_blend_equation_alpha = ARGS(0) >> 16; + const u32 value = ARGS(0); + BlendEquationSeparate(value & 0xffff, value >> 16); } break; @@ -695,23 +699,28 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_DEPTH_BOUNDS_MIN: { + const u32 value = ARGS(0); m_set_depth_bounds = true; - const u32 a0 = ARGS(0); - m_depth_bounds_min = (float&)a0; + m_depth_bounds_min = (float&)value; if (count == 2) { - const u32 a1 = ARGS(1); - m_depth_bounds_max = (float&)a1; + const u32 value1 = ARGS(1); + m_depth_bounds_max = (float&)value1; + DepthBoundsEXT(m_depth_bounds_min, m_depth_bounds_max); } } break; case NV4097_SET_DEPTH_BOUNDS_MAX: { - m_set_depth_bounds = true; - const u32 a0 = ARGS(0); - m_depth_bounds_max = (float&)a0; + const u32 value = ARGS(0); + m_depth_bounds_max = (float&)value; + + if (m_set_depth_bounds) + { + DepthBoundsEXT(m_depth_bounds_min, m_depth_bounds_max); + } } break; @@ -753,25 +762,17 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const // Clipping case NV4097_SET_CLIP_MIN: { - const u32 a0 = ARGS(0); - const u32 a1 = ARGS(1); - - m_set_clip = true; - m_clip_min = (float&)a0; - m_clip_max = (float&)a1; - - //LOG_NOTICE(RSX, "NV4097_SET_CLIP_MIN: clip_min=%.01f, clip_max=%.01f", m_clip_min, m_clip_max); + const u32 value = ARGS(0); + m_clip_min = (float&)value; + DepthRangef(m_clip_min, m_clip_max); } break; case NV4097_SET_CLIP_MAX: { - const u32 a0 = ARGS(0); - - m_set_clip = true; - m_clip_max = (float&)a0; - - //LOG_NOTICE(RSX, "NV4097_SET_CLIP_MAX: clip_max=%.01f", m_clip_max); + const u32 value = ARGS(0); + m_clip_max = (float&)value; + DepthRangef(m_clip_min, m_clip_max); } break; @@ -804,15 +805,15 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const // Polygon mode/offset case NV4097_SET_FRONT_POLYGON_MODE: { - m_set_front_polygon_mode = true; - m_front_polygon_mode = ARGS(0); + const u32 value = ARGS(0); + PolygonMode(cmd, value); } break; case NV4097_SET_BACK_POLYGON_MODE: { - m_set_back_polygon_mode = true; - m_back_polygon_mode = ARGS(0); + const u32 value = ARGS(0); + PolygonMode(cmd, value); } break; @@ -839,15 +840,16 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_POLYGON_OFFSET_SCALE_FACTOR: { Enable(NV4097_SET_DEPTH_TEST_ENABLE, 1); + + const u32 value = ARGS(0); m_set_poly_offset_mode = true; - - const u32 a0 = ARGS(0); - m_poly_offset_scale_factor = (float&)a0; + m_poly_offset_scale_factor = (float&)value; if (count == 2) { - const u32 a1 = ARGS(1); - m_poly_offset_bias = (float&)a1; + const u32 value1 = ARGS(1); + m_poly_offset_bias = (float&)value1; + PolygonOffset(m_poly_offset_scale_factor, m_poly_offset_bias); } } break; @@ -855,10 +857,14 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_POLYGON_OFFSET_BIAS: { Enable(NV4097_SET_DEPTH_TEST_ENABLE, 1); - m_set_poly_offset_mode = true; - const u32 a0 = ARGS(0); - m_poly_offset_bias = (float&)a0; + const u32 value = ARGS(0); + m_poly_offset_bias = (float&)value; + + if (m_set_poly_offset_mode) + { + PolygonOffset(m_poly_offset_scale_factor, m_poly_offset_bias); + } } break; @@ -1085,8 +1091,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_SHADE_MODE: { - m_set_shade_mode = true; - m_shade_mode = ARGS(0); + const u32 value = ARGS(0); + ShadeModel(value); } break; @@ -1241,7 +1247,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_LOGIC_OP: { - m_logic_op = ARGS(0); + const u32 value = ARGS(0); + LogicOp(value); } break; @@ -1269,7 +1276,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_TWO_SIDE_LIGHT_EN: { - m_set_two_side_light_enable = ARGS(0) ? true : false; + const u32 value = ARGS(0); + LightModeli(value); } break; @@ -1410,16 +1418,16 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_RESTART_INDEX: { - m_restart_index = ARGS(0); + const u32 value = ARGS(0); + PrimitiveRestartIndex(value); } break; // Point size case NV4097_SET_POINT_SIZE: { - m_set_point_size = true; - const u32 a0 = ARGS(0); - m_point_size = (float&)a0; + const u32 value = ARGS(0); + PointSize((float&)value); } break; @@ -1454,24 +1462,31 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const // Scissor case NV4097_SET_SCISSOR_HORIZONTAL: { + const u32 value = ARGS(0); m_set_scissor_horizontal = true; - m_scissor_x = ARGS(0) & 0xffff; - m_scissor_w = ARGS(0) >> 16; + m_scissor_x = value & 0xffff; + m_scissor_w = value >> 16; if (count == 2) { - m_set_scissor_vertical = true; - m_scissor_y = ARGS(1) & 0xffff; - m_scissor_h = ARGS(1) >> 16; + const u32 value1 = ARGS(1); + m_scissor_y = value1 & 0xffff; + m_scissor_h = value1 >> 16; + Scissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); } } break; case NV4097_SET_SCISSOR_VERTICAL: { - m_set_scissor_vertical = true; - m_scissor_y = ARGS(0) & 0xffff; - m_scissor_h = ARGS(0) >> 16; + const u32 value = ARGS(0); + m_scissor_y = value & 0xffff; + m_scissor_h = value >> 16; + + if (m_set_scissor_horizontal) + { + Scissor(m_scissor_x, m_scissor_y, m_scissor_w, m_scissor_h); + } } break; @@ -1720,9 +1735,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const // Line width case NV4097_SET_LINE_WIDTH: { - m_set_line_width = true; - const u32 a0 = ARGS(0); - m_line_width = (float)a0 / 8.0f; + const u32 value = ARGS(0); + LineWidth((float)value / 8.0f); } break; @@ -1736,10 +1750,8 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const case NV4097_SET_LINE_STIPPLE_PATTERN: { - m_set_line_stipple = true; - const u32 a0 = ARGS(0); - m_line_stipple_factor = a0 & 0xffff; - m_line_stipple_pattern = a0 >> 16; + const u32 value = ARGS(0); + LineStipple(value & 0xffff, value >> 16); } break; @@ -1869,18 +1881,16 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const // Fog case NV4097_SET_FOG_MODE: { - m_set_fog_mode = true; - m_fog_mode = ARGS(0); + const u32 value = ARGS(0); + Fogi(value); } break; case NV4097_SET_FOG_PARAMS: { - m_set_fog_params = true; - const u32 a0 = ARGS(0); - const u32 a1 = ARGS(1); - m_fog_param0 = (float&)a0; - m_fog_param1 = (float&)a1; + const u32 start = ARGS(0); + const u32 end = ARGS(1); + Fogf((float&)start, (float&)end); } break; diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index 5263485a9f..ed74dbf027 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -641,6 +641,25 @@ protected: virtual void AlphaFunc(u32 func, float ref) = 0; virtual void DepthFunc(u32 func) = 0; virtual void DepthMask(u32 flag) = 0; + virtual void PolygonMode(u32 face, u32 mode) = 0; + virtual void PointSize(float size) = 0; + virtual void LogicOp(u32 opcdoe) = 0; + virtual void LineWidth(float width) = 0; + virtual void LineStipple(u16 factor, u16 pattern) = 0; + virtual void PrimitiveRestartIndex(u32 index) = 0; + virtual void CullFace(u32 mode) = 0; + virtual void FrontFace(u32 mode) = 0; + virtual void Fogi(u32 mode) = 0; + virtual void Fogf(float start, float end) = 0; + virtual void PolygonOffset(float factor, float bias) = 0; + virtual void DepthRangef(float min, float max) = 0; + virtual void BlendEquationSeparate(u16 rgb, u16 a) = 0; + virtual void BlendFuncSeparate(u16 srcRGB, u16 dstRGB, u16 srcAlpha, u16 dstAlpha) = 0; + virtual void BlendColor(u8 r, u8 g, u8 b, u8 a) = 0; + virtual void LightModeli(u32 enable) = 0; + virtual void ShadeModel(u32 mode) = 0; + virtual void DepthBoundsEXT(float min, float max) = 0; + virtual void Scissor(u16 x, u16 y, u16 width, u16 height) = 0; virtual void Flip() = 0; void LoadVertexData(u32 first, u32 count)