From 5fb8c7e65c451c23716aa1a5ed0cf5a43eb55866 Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Fri, 11 Sep 2015 12:19:49 +0200 Subject: [PATCH] gsdx: initialize members in constructor of objects A couple of useless members were removed too. Also fix wnd initialization Coverity: CID 146955 (#1 of 1): Uninitialized pointer read (UNINIT) 18. uninit_use: Using uninitialized value wnd[i]. --- plugins/GSdx/GS.cpp | 3 +-- plugins/GSdx/GSDevice.cpp | 1 + plugins/GSdx/GSDeviceOGL.cpp | 18 ++++++++++++------ plugins/GSdx/GSDeviceOGL.h | 2 -- plugins/GSdx/GSDump.cpp | 1 + plugins/GSdx/GSLzma.cpp | 5 +++++ plugins/GSdx/GSLzma.h | 2 -- plugins/GSdx/GSRenderer.cpp | 2 ++ plugins/GSdx/GSRenderer.h | 1 - plugins/GSdx/GSRendererHW.cpp | 8 ++++---- plugins/GSdx/GSRendererHW.h | 1 - plugins/GSdx/GSRendererOGL.cpp | 2 ++ plugins/GSdx/GSRendererSW.cpp | 2 ++ plugins/GSdx/GSShaderOGL.cpp | 1 + plugins/GSdx/GSTexture.cpp | 4 ++++ plugins/GSdx/GSTextureCache.cpp | 1 + plugins/GSdx/GSVertexArrayOGL.h | 10 +++++----- plugins/GSdx/GSVertexTrace.cpp | 3 +++ plugins/GSdx/GSWndOGL.cpp | 2 +- 19 files changed, 45 insertions(+), 24 deletions(-) diff --git a/plugins/GSdx/GS.cpp b/plugins/GSdx/GS.cpp index 1447d7c5ee..8d95aff883 100644 --- a/plugins/GSdx/GS.cpp +++ b/plugins/GSdx/GS.cpp @@ -194,7 +194,7 @@ static int _GSopen(void** dsp, char* title, int renderer, int threads = -1) threads = theApp.GetConfig("extrathreads", 0); } - GSWnd* wnd[2]; + GSWnd* wnd[2] = { NULL, NULL }; try { @@ -315,7 +315,6 @@ static int _GSopen(void** dsp, char* title, int renderer, int threads = -1) wnd[1] = new GSWndOGL(); #else wnd[0] = new GSWndOGL(); - wnd[1] = NULL; #endif #endif } diff --git a/plugins/GSdx/GSDevice.cpp b/plugins/GSdx/GSDevice.cpp index 893c35feb7..526ef24991 100644 --- a/plugins/GSdx/GSDevice.cpp +++ b/plugins/GSdx/GSDevice.cpp @@ -35,6 +35,7 @@ GSDevice::GSDevice() , m_fxaa(NULL) , m_shadeboost(NULL) , m_1x1(NULL) + , m_current(NULL) , m_frame(0) { memset(&m_vertex, 0, sizeof(m_vertex)); diff --git a/plugins/GSdx/GSDeviceOGL.cpp b/plugins/GSdx/GSDeviceOGL.cpp index 292e5fed81..977737b3bf 100644 --- a/plugins/GSdx/GSDeviceOGL.cpp +++ b/plugins/GSdx/GSDeviceOGL.cpp @@ -46,12 +46,16 @@ int GSDeviceOGL::s_n = 0; FILE* GSDeviceOGL::m_debug_gl_file = NULL; GSDeviceOGL::GSDeviceOGL() - : m_free_window(false) - , m_window(NULL) - , m_fbo(0) - , m_fbo_read(0) - , m_va(NULL) - , m_shader(NULL) + : m_msaa(0) + , m_window(NULL) + , m_fbo(0) + , m_fbo_read(0) + , m_va(NULL) + , m_apitrace(0) + , m_palette_ss(0) + , m_vs_cb(NULL) + , m_ps_cb(NULL) + , m_shader(NULL) { memset(&m_merge_obj, 0, sizeof(m_merge_obj)); memset(&m_interlace, 0, sizeof(m_interlace)); @@ -59,6 +63,8 @@ GSDeviceOGL::GSDeviceOGL() memset(&m_fxaa, 0, sizeof(m_fxaa)); memset(&m_shaderfx, 0, sizeof(m_shaderfx)); memset(&m_date, 0, sizeof(m_date)); + memset(&m_shadeboost, 0, sizeof(m_shadeboost)); + memset(&m_om_dss, 0, sizeof(m_om_dss)); GLState::Clear(); // Reset the debug file diff --git a/plugins/GSdx/GSDeviceOGL.h b/plugins/GSdx/GSDeviceOGL.h index d170650dfa..c906bf3d22 100644 --- a/plugins/GSdx/GSDeviceOGL.h +++ b/plugins/GSdx/GSDeviceOGL.h @@ -390,7 +390,6 @@ class GSDeviceOGL : public GSDevice static bool m_debug_gl_call; static FILE* m_debug_gl_file; - bool m_free_window; GSWnd* m_window; GLuint m_fbo; // frame buffer container @@ -446,7 +445,6 @@ class GSDeviceOGL : public GSDevice GLuint m_apitrace; GLuint m_palette_ss; - GLuint m_rt_ss; GSUniformBufferOGL* m_vs_cb; GSUniformBufferOGL* m_ps_cb; diff --git a/plugins/GSdx/GSDump.cpp b/plugins/GSdx/GSDump.cpp index 3ab56cfb0f..973fe6acb8 100644 --- a/plugins/GSdx/GSDump.cpp +++ b/plugins/GSdx/GSDump.cpp @@ -25,6 +25,7 @@ GSDump::GSDump() : m_gs(NULL) , m_frames(0) + , m_extra_frames(0) { } diff --git a/plugins/GSdx/GSLzma.cpp b/plugins/GSdx/GSLzma.cpp index 06c8fd9145..77a76dc55e 100644 --- a/plugins/GSdx/GSLzma.cpp +++ b/plugins/GSdx/GSLzma.cpp @@ -130,6 +130,11 @@ GSDumpLzma::~GSDumpLzma() { /******************************************************************/ GSDumpRaw::GSDumpRaw(char* filename) : GSDumpFile(filename) { + m_buff_size = 0; + m_area = NULL; + m_inbuf = NULL; + m_avail = 0; + m_start = 0; } GSDumpRaw::~GSDumpRaw() { diff --git a/plugins/GSdx/GSLzma.h b/plugins/GSdx/GSLzma.h index fac92a44cb..596d97e255 100644 --- a/plugins/GSdx/GSLzma.h +++ b/plugins/GSdx/GSLzma.h @@ -48,7 +48,6 @@ class GSDumpLzma : public GSDumpFile { size_t m_avail; size_t m_start; - bool m_eof; void Decompress(); @@ -70,7 +69,6 @@ class GSDumpRaw : public GSDumpFile { size_t m_avail; size_t m_start; - bool m_eof; void Decompress(); diff --git a/plugins/GSdx/GSRenderer.cpp b/plugins/GSdx/GSRenderer.cpp index a0f8e36e25..a5a5da18eb 100644 --- a/plugins/GSdx/GSRenderer.cpp +++ b/plugins/GSdx/GSRenderer.cpp @@ -29,6 +29,8 @@ GSRenderer::GSRenderer() : m_shader(0) , m_shift_key(false) , m_control_key(false) + , m_framelimit(false) + , m_texture_shuffle(false) , m_wnd(NULL) , m_dev(NULL) { diff --git a/plugins/GSdx/GSRenderer.h b/plugins/GSdx/GSRenderer.h index 4459c5ead5..cca70a3486 100644 --- a/plugins/GSdx/GSRenderer.h +++ b/plugins/GSdx/GSRenderer.h @@ -30,7 +30,6 @@ class GSRenderer : public GSState { GSCapture m_capture; string m_snapshot; - bool m_snapdump; int m_shader; bool Merge(int field); diff --git a/plugins/GSdx/GSRendererHW.cpp b/plugins/GSdx/GSRendererHW.cpp index 6e8b4483f2..284863ea6f 100644 --- a/plugins/GSdx/GSRendererHW.cpp +++ b/plugins/GSdx/GSRendererHW.cpp @@ -49,21 +49,21 @@ GSRendererHW::GSRendererHW(GSTextureCache* tc) void GSRendererHW::SetScaling() { - m_buffer_size = max(m_context->FRAME.FBW * 64, m_regs->DISP[m_regs->PMODE.EN1 == 1 ? 0 : 1].DISPFB.FBW * 64); + int buffer_size = max(m_context->FRAME.FBW * 64, m_regs->DISP[m_regs->PMODE.EN1 == 1 ? 0 : 1].DISPFB.FBW * 64); //Only increase the buffer size, don't make it smaller, it breaks games (GH3) // Also don't change the size for custom resolution (m_upscale_multiplier = 0). - if (m_upscale_multiplier && m_width < (m_buffer_size * m_upscale_multiplier)) { + if (m_upscale_multiplier && m_width < (buffer_size * m_upscale_multiplier)) { m_tc->RemovePartial(); } else { return; } - m_height = m_buffer_size < 1024 ? 512 : 1024; + m_height = buffer_size < 1024 ? 512 : 1024; if (m_upscale_multiplier > 1) { - m_width = m_buffer_size * m_upscale_multiplier; + m_width = buffer_size * m_upscale_multiplier; m_height *= m_upscale_multiplier; } diff --git a/plugins/GSdx/GSRendererHW.h b/plugins/GSdx/GSRendererHW.h index 2f2c5f8237..dd5d866ac5 100644 --- a/plugins/GSdx/GSRendererHW.h +++ b/plugins/GSdx/GSRendererHW.h @@ -35,7 +35,6 @@ private: int m_skip; bool m_reset; int m_upscale_multiplier; - int m_buffer_size; int m_userhacks_skipdraw; bool m_userhacks_align_sprite_X; diff --git a/plugins/GSdx/GSRendererOGL.cpp b/plugins/GSdx/GSRendererOGL.cpp index e114466172..9bdc7972ab 100644 --- a/plugins/GSdx/GSRendererOGL.cpp +++ b/plugins/GSdx/GSRendererOGL.cpp @@ -35,6 +35,8 @@ GSRendererOGL::GSRendererOGL() UserHacks_TCO_x = (UserHacks_TCOffset & 0xFFFF) / -1000.0f; UserHacks_TCO_y = ((UserHacks_TCOffset >> 16) & 0xFFFF) / -1000.0f; + m_prim_overlap = PRIM_OVERLAP_UNKNOW; + if (!theApp.GetConfig("UserHacks", 0)) { UserHacks_TCOffset = 0; UserHacks_TCO_x = 0; diff --git a/plugins/GSdx/GSRendererSW.cpp b/plugins/GSdx/GSRendererSW.cpp index 0a62b65840..2398e200bc 100644 --- a/plugins/GSdx/GSRendererSW.cpp +++ b/plugins/GSdx/GSRendererSW.cpp @@ -1534,6 +1534,8 @@ GSRendererSW::SharedData::SharedData(GSRendererSW* parent) : m_parent(parent) , m_fb_pages(NULL) , m_zb_pages(NULL) + , m_fpsm(0) + , m_zpsm(0) , m_using_pages(false) , m_syncpoint(SyncNone) { diff --git a/plugins/GSdx/GSShaderOGL.cpp b/plugins/GSdx/GSShaderOGL.cpp index fadbbca92e..778d840ab3 100644 --- a/plugins/GSdx/GSShaderOGL.cpp +++ b/plugins/GSdx/GSShaderOGL.cpp @@ -24,6 +24,7 @@ #include "GLState.h" GSShaderOGL::GSShaderOGL(bool debug) : + m_pipeline(0), m_debug_shader(debug) { m_single_prog.clear(); diff --git a/plugins/GSdx/GSTexture.cpp b/plugins/GSdx/GSTexture.cpp index c71b0ac4fb..9460deb5bf 100644 --- a/plugins/GSdx/GSTexture.cpp +++ b/plugins/GSdx/GSTexture.cpp @@ -26,7 +26,11 @@ GSTexture::GSTexture() : m_scale(1, 1) , m_size(0, 0) , m_type(0) + , m_format(0) , m_msaa(false) + , last_frame_used(0) , LikelyOffset(false) + , OffsetHack_modx(0.0f) + , OffsetHack_mody(0.0f) { } diff --git a/plugins/GSdx/GSTextureCache.cpp b/plugins/GSdx/GSTextureCache.cpp index 933b0d351c..0fcf6f87f3 100644 --- a/plugins/GSdx/GSTextureCache.cpp +++ b/plugins/GSdx/GSTextureCache.cpp @@ -1251,6 +1251,7 @@ GSTextureCache::Source::Source(GSRenderer* r, const GIFRegTEX0& TEX0, const GIFR , m_initpalette(true) , m_target(false) , m_complete(false) + , m_spritehack_t(false) , m_p2t(NULL) { m_TEX0 = TEX0; diff --git a/plugins/GSdx/GSVertexArrayOGL.h b/plugins/GSdx/GSVertexArrayOGL.h index 59ddaae0eb..9134dd5efb 100644 --- a/plugins/GSdx/GSVertexArrayOGL.h +++ b/plugins/GSdx/GSVertexArrayOGL.h @@ -60,11 +60,11 @@ class GSBufferOGL { // Warning m_limit is the number of object (not the size in Bytes) m_limit = 8 * 1024 * 1024 / m_stride; - if (m_buffer_storage) { - for (size_t i = 0; i < 5; i++) { - m_fence[i] = 0; - } + for (size_t i = 0; i < 5; i++) { + m_fence[i] = 0; + } + if (m_buffer_storage) { // TODO: if we do manually the synchronization, I'm not sure size is important. It worths to investigate it. // => bigger buffer => less sync bind(); @@ -254,7 +254,7 @@ class GSVertexBufferStateOGL { GLenum m_topology; public: - GSVertexBufferStateOGL(size_t stride, GSInputLayoutOGL* layout, uint32 layout_nbr) : m_vb(NULL), m_ib(NULL) + GSVertexBufferStateOGL(size_t stride, GSInputLayoutOGL* layout, uint32 layout_nbr) : m_vb(NULL), m_ib(NULL), m_topology(0) { gl_GenVertexArrays(1, &m_va); gl_BindVertexArray(m_va); diff --git a/plugins/GSdx/GSVertexTrace.cpp b/plugins/GSdx/GSVertexTrace.cpp index 1a979f0411..9ef65d86bb 100644 --- a/plugins/GSdx/GSVertexTrace.cpp +++ b/plugins/GSdx/GSVertexTrace.cpp @@ -29,6 +29,9 @@ const GSVector4 GSVertexTrace::s_minmax(FLT_MAX, -FLT_MAX); GSVertexTrace::GSVertexTrace(const GSState* state) : m_state(state) { + m_primclass = GS_INVALID_CLASS; + memset(&m_alpha, 0, sizeof(m_alpha)); + #define InitUpdate3(P, IIP, TME, FST, COLOR) \ m_fmm[COLOR][FST][TME][IIP][P] = &GSVertexTrace::FindMinMax; diff --git a/plugins/GSdx/GSWndOGL.cpp b/plugins/GSdx/GSWndOGL.cpp index e89b7ae9a3..6e085666f8 100644 --- a/plugins/GSdx/GSWndOGL.cpp +++ b/plugins/GSdx/GSWndOGL.cpp @@ -24,7 +24,7 @@ #if defined(__linux__) GSWndOGL::GSWndOGL() - : m_NativeWindow(0), m_NativeDisplay(NULL), m_swapinterval(NULL) + : m_NativeWindow(0), m_NativeDisplay(NULL), m_context(0), m_swapinterval(NULL) { }