mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 11:36:13 +00:00
Merge pull request #950 from raven02/patch-1
RSX : few more refactoring
This commit is contained in:
commit
1d914d820b
5 changed files with 290 additions and 273 deletions
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
|
|
@ -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() {}
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue