From a9fdcd959bb81044308761ceea398bf9ab67573a Mon Sep 17 00:00:00 2001 From: DH Date: Tue, 27 Aug 2013 18:18:01 +0300 Subject: [PATCH] OpenGL renderer: - Disabled dump vertex data. - Fixed fragment constants loader. - Fixed fbo creation. - Implemented texture filtering. --- .../TEST12345/USRDIR/handle_system_cmd.elf | Bin 0 -> 274528 bytes rpcs3/Emu/GS/GL/GLBuffers.cpp | 4 +- rpcs3/Emu/GS/GL/GLGSRender.cpp | 117 +++++++++++++++--- rpcs3/Emu/GS/GL/GLGSRender.h | 39 +++++- rpcs3/Emu/GS/GSRender.cpp | 1 + rpcs3/Emu/GS/RSXThread.h | 16 ++- 6 files changed, 153 insertions(+), 24 deletions(-) create mode 100644 bin/dev_hdd0/game/TEST12345/USRDIR/handle_system_cmd.elf diff --git a/bin/dev_hdd0/game/TEST12345/USRDIR/handle_system_cmd.elf b/bin/dev_hdd0/game/TEST12345/USRDIR/handle_system_cmd.elf new file mode 100644 index 0000000000000000000000000000000000000000..2937c9e4ba25fb0b39ef24e76362b47baf6f3e4f GIT binary patch literal 274528 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 literal 0 HcmV?d00001 diff --git a/rpcs3/Emu/GS/GL/GLBuffers.cpp b/rpcs3/Emu/GS/GL/GLBuffers.cpp index 053b64c324..bf4d94a177 100644 --- a/rpcs3/Emu/GS/GL/GLBuffers.cpp +++ b/rpcs3/Emu/GS/GL/GLBuffers.cpp @@ -178,7 +178,7 @@ u32 GLrbo::GetId(u32 num) const return m_id[num]; } -GLfbo::GLfbo() +GLfbo::GLfbo() : m_id(0) { } @@ -188,7 +188,7 @@ GLfbo::~GLfbo() void GLfbo::Create() { - if(m_id) + if(IsCreated()) { return; } diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index b7d15d2323..cca4498174 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -3,7 +3,7 @@ #include "Emu/Cell/PPCInstrTable.h" #define CMD_DEBUG 0 -#define DUMP_VERTEX_DATA 1 +#define DUMP_VERTEX_DATA 0 #if CMD_DEBUG #define CMD_LOG ConLog.Write @@ -477,9 +477,7 @@ void GLGSRender::InitFragmentData() { const TransformConstant& c = m_fragment_constants[i]; - u32 id = c.id - m_cur_shader_prog->offset; - if(id < 32) - id = 32; + u32 id = c.id - m_cur_shader_prog->offset + 2 * 4 * 4; const wxString name = wxString::Format("fc%u", id); const int l = m_program.GetLocation(name); @@ -563,13 +561,15 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c m_fbo.Bind(GL_READ_FRAMEBUFFER); m_fbo.Bind(GL_DRAW_FRAMEBUFFER, 0); m_fbo.Blit( - 0, 0, m_width, m_height, - 0, 0, m_width, m_height, + m_surface_clip_x, m_surface_clip_y, m_surface_clip_x + m_surface_clip_w, m_surface_clip_y + m_surface_clip_h, + m_surface_clip_x, m_surface_clip_y, m_surface_clip_x + m_surface_clip_w, m_surface_clip_y + m_surface_clip_h, GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST); m_fbo.Bind(); + checkForGlError("m_fbo.Blit"); } m_frame->Flip(); + glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } m_gcm_current_buffer = args[0]; @@ -708,7 +708,20 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c break; case_16(NV4097_SET_TEXTURE_FILTER, 0x20): - //TODO + { + GLTexture& tex = m_frame->GetTexture(index); + u32 a0 = args[0]; + u16 bias = a0 & 0x1fff; + u8 conv = (a0 >> 13) & 0xf; + u8 min = (a0 >> 16) & 0x7; + u8 mag = (a0 >> 24) & 0x7; + u8 a_signed = (a0 >> 28) & 0x1; + u8 r_signed = (a0 >> 29) & 0x1; + u8 g_signed = (a0 >> 30) & 0x1; + u8 b_signed = (a0 >> 31) & 0x1; + + tex.SetFilter(bias, min, mag, conv, a_signed, r_signed, g_signed, b_signed); + } break; case_16(NV4097_SET_TEXTURE_ADDRESS, 0x20): @@ -801,7 +814,11 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c } */ - if(0) + gcmBuffer* buffers = (gcmBuffer*)Memory.GetMemFromAddr(m_gcm_buffers_addr); + m_width = re(buffers[m_gcm_current_buffer].width); + m_height = re(buffers[m_gcm_current_buffer].height); + + if(1) { m_rbo.Create(2); checkForGlError("m_rbo.Create"); @@ -809,7 +826,7 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c m_rbo.Storage(GL_RGBA, m_width, m_height); checkForGlError("m_rbo.Storage(GL_RGBA)"); m_rbo.Bind(1); - m_rbo.Storage(GL_DEPTH_STENCIL, m_width, m_height); + m_rbo.Storage(GL_DEPTH24_STENCIL8, m_width, m_height); checkForGlError("m_rbo.Storage(GL_DEPTH24_STENCIL8)"); m_fbo.Create(); checkForGlError("m_fbo.Create"); @@ -854,11 +871,24 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c break; case NV4097_SET_ALPHA_FUNC: - glAlphaFunc(args[0], args[1]); + m_set_alpha_func = true; + m_alpha_func = args[0]; + + if(count >= 2) + { + m_set_alpha_ref = true; + m_alpha_ref = args[1]; + } + break; + + case NV4097_SET_ALPHA_REF: + m_set_alpha_ref = true; + m_alpha_ref = args[0]; break; case NV4097_SET_CULL_FACE: - glCullFace(args[0]); + m_set_cull_face = true; + m_cull_face = args[0]; break; case NV4097_SET_VIEWPORT_VERTICAL: @@ -922,6 +952,7 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c if (a0 & 0x2) f |= GL_STENCIL_BUFFER_BIT; if (a0 & 0xF0) f |= GL_COLOR_BUFFER_BIT; glClear(f); + checkForGlError("glClear"); /* if(m_set_clear_surface) { @@ -1088,6 +1119,7 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c m_clear_color_g / 255.0f, m_clear_color_b / 255.0f, m_clear_color_a / 255.0f); + checkForGlError("glClearColor"); } break; @@ -1190,7 +1222,7 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c break; case NV4097_SET_CULL_FACE_ENABLE: - m_set_cull_face = args[0] ? true : false; + m_set_cull_face_enable = args[0] ? true : false; break; case NV4097_SET_DITHER_ENABLE: @@ -1546,9 +1578,46 @@ void GLGSRender::DoCmd(const u32 fcmd, const u32 cmd, mem32_t& args, const u32 c break; case NV4097_SET_ZSTENCIL_CLEAR_VALUE: + { + u32 clear_valuei = args[0]; + //double clear_valuef = (double)clear_valuei / 0xffffffff; + //glClearDepth(clear_valuef); + glClearStencil(clear_valuei); + glClear(GL_STENCIL_BUFFER_BIT); + } + break; + case NV4097_SET_ZCULL_CONTROL0: + { + m_set_depth_func = true; + m_depth_func = args[0] >> 4; + } + break; + case NV4097_SET_ZCULL_CONTROL1: + { + //TODO + } + break; + case NV4097_SET_SCULL_CONTROL: + { + u32 a0 = args[0]; + m_set_stencil_func = m_set_stencil_func_ref = m_set_stencil_func_mask = true; + + m_stencil_func = a0 & 0xffff; + m_stencil_func_ref = (a0 >> 16) & 0xff; + m_stencil_func_mask = (a0 >> 24) & 0xff; + } + break; + + case NV4097_SET_ZCULL_EN: + { + u32 a0 = args[0]; + + m_depth_test_enable = a0 & 0x1 ? true : false; + m_set_stencil_test = a0 & 0x2 ? true : false; + } break; case NV4097_GET_REPORT: @@ -1800,8 +1869,9 @@ bool GLGSRender::LoadProgram() else { m_program.Create(m_cur_vertex_prog->id, m_cur_shader_prog->id); + checkForGlError("m_program.Create"); m_prog_buffer.Add(m_program, *m_cur_shader_prog, *m_cur_vertex_prog); - + checkForGlError("m_prog_buffer.Add"); m_program.Use(); GLint r = GL_FALSE; @@ -1833,9 +1903,7 @@ void GLGSRender::ExecCMD() { if(m_set_surface_clip_horizontal && m_set_surface_clip_vertical) { - m_width = m_surface_clip_w; - m_height = m_surface_clip_h; - //ConLog.Write("width: %d, height: %d, x: %d, y: %d", m_width, m_height, m_surface_clip_x, m_surface_clip_y); + //ConLog.Write("surface clip width: %d, height: %d, x: %d, y: %d", m_width, m_height, m_surface_clip_x, m_surface_clip_y); } if(m_set_color_mask) @@ -1885,7 +1953,7 @@ void GLGSRender::ExecCMD() Enable(m_set_depth_bounds_test, GL_DEPTH_CLAMP); Enable(m_set_blend, GL_BLEND); Enable(m_set_logic_op, GL_LOGIC_OP); - Enable(m_set_cull_face, GL_CULL_FACE); + Enable(m_set_cull_face_enable, GL_CULL_FACE); Enable(m_set_dither, GL_DITHER); Enable(m_set_stencil_test, GL_STENCIL_TEST); Enable(m_set_line_smooth, GL_LINE_SMOOTH); @@ -1991,15 +2059,30 @@ void GLGSRender::ExecCMD() checkForGlError("glBlendColor"); } + if(m_set_cull_face) + { + glCullFace(m_cull_face); + checkForGlError("glCullFace"); + } + + if(m_set_alpha_func && m_set_alpha_ref) + { + glAlphaFunc(m_alpha_func, m_alpha_ref); + checkForGlError("glAlphaFunc"); + } + 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_indexed_array.m_count && m_draw_array_count) diff --git a/rpcs3/Emu/GS/GL/GLGSRender.h b/rpcs3/Emu/GS/GL/GLGSRender.h index 805c694b3c..0040935796 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.h +++ b/rpcs3/Emu/GS/GL/GLGSRender.h @@ -41,6 +41,15 @@ class GLTexture u8 m_aniso_bias; u8 m_signed_remap; + u16 m_bias; + u8 m_min_filter; + u8 m_mag_filter; + u8 m_conv; + u8 m_a_signed; + u8 m_r_signed; + u8 m_g_signed; + u8 m_b_signed; + u32 m_remap; public: @@ -127,6 +136,18 @@ public: m_pitch = pitch; } + void SetFilter(u16 bias, u8 min, u8 mag, u8 conv, u8 a_signed, u8 r_signed, u8 g_signed, u8 b_signed) + { + m_bias = bias; + m_min_filter = min; + m_mag_filter = mag; + m_conv = conv; + m_a_signed = a_signed; + m_r_signed = r_signed; + m_g_signed = g_signed; + m_b_signed = b_signed; + } + u32 GetFormat() const { return m_format; } void SetOffset(const u32 offset) @@ -289,13 +310,25 @@ public: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GetGlWrap(m_wrapr)); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, gl_tex_zfunc[m_zfunc]); - glTexEnvf(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, m_aniso_bias); + glTexEnvf(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, m_bias); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, m_minlod); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, m_maxlod); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, m_maxaniso); - //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + static const int gl_tex_filter[] = + { + GL_NEAREST, + GL_NEAREST, + GL_LINEAR, + GL_NEAREST_MIPMAP_NEAREST, + GL_LINEAR_MIPMAP_NEAREST, + GL_NEAREST_MIPMAP_LINEAR, + GL_LINEAR_MIPMAP_LINEAR, + GL_NEAREST, + }; + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_tex_filter[m_min_filter]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_tex_filter[m_mag_filter]); //Unbind(); } diff --git a/rpcs3/Emu/GS/GSRender.cpp b/rpcs3/Emu/GS/GSRender.cpp index 225ae860de..75664a9a1a 100644 --- a/rpcs3/Emu/GS/GSRender.cpp +++ b/rpcs3/Emu/GS/GSRender.cpp @@ -94,6 +94,7 @@ u32 GSRender::GetAddress(u32 offset, u8 location) } ConLog.Error("GetAddress(offset=0x%x, location=0x%x", location); + assert(0); return 0; } diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 28a61a0898..78dc31eae3 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -22,7 +22,7 @@ public: bool m_set_depth_bounds_test; bool m_depth_test_enable; bool m_set_logic_op; - bool m_set_cull_face; + bool m_set_cull_face_enable; bool m_set_dither; bool m_set_stencil_test; bool m_set_line_smooth; @@ -196,6 +196,15 @@ public: u16 m_surface_clip_y; u16 m_surface_clip_h; + bool m_set_cull_face; + u32 m_cull_face; + + bool m_set_alpha_func; + u32 m_alpha_func; + + bool m_set_alpha_ref; + u32 m_alpha_ref; + u8 m_begin_end; public: @@ -222,7 +231,7 @@ public: m_set_blend_sfactor = false; m_set_blend_dfactor = false; m_set_logic_op = false; - m_set_cull_face = false; + m_set_cull_face_enable = false; m_set_dither = false; m_set_stencil_test = false; m_set_stencil_mask = false; @@ -259,6 +268,9 @@ public: m_set_context_dma_z = false; m_set_surface_clip_horizontal = false; m_set_surface_clip_vertical = false; + m_set_cull_face = false; + m_set_alpha_func = false; + m_set_alpha_ref = false; m_begin_end = 0; }