From 97529ade6e4f3def593dae1225964775ccd0943f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 02:48:08 +0100 Subject: [PATCH 01/85] OSX PowerPC might not define O_CLOEXEC --- libretro-common/file/nbio/nbio_unixmmap.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libretro-common/file/nbio/nbio_unixmmap.c b/libretro-common/file/nbio/nbio_unixmmap.c index 40703ae138..80325da393 100644 --- a/libretro-common/file/nbio/nbio_unixmmap.c +++ b/libretro-common/file/nbio/nbio_unixmmap.c @@ -39,6 +39,20 @@ #include #include +#ifdef __APPLE__ + +#ifndef O_CLOEXEC +#define O_CLOEXEC 0x1000000 +#endif + +#else + +#ifndef O_CLOEXEC +#define O_CLOEXEC 0 +#endif + +#endif + struct nbio_mmap_unix_t { int fd; From 43f6a03110a03ec1216e645645fa087fd91ba96c Mon Sep 17 00:00:00 2001 From: neville Date: Mon, 4 Dec 2017 02:59:06 +0100 Subject: [PATCH 02/85] (OSX PPC) Buildfixes --- gfx/common/gl_common.h | 5 +---- input/input_driver.c | 3 +++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index 5d5c1fa284..04f2d6e3f4 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -33,15 +33,12 @@ #include "../video_coord_array.h" #include "../video_driver.h" #include "../drivers/gl_symlinks.h" +#include RETRO_BEGIN_DECLS #define MAX_FENCES 4 -#ifndef ARB_sync -typedef struct __GLsync *GLsync; -#endif - typedef struct gl { GLenum internal_fmt; diff --git a/input/input_driver.c b/input/input_driver.c index abfba95a91..b2e216c191 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -806,6 +806,9 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) uint8_t port_max = settings->bools.input_all_users_control_menu ? max_users : 1; + + joypad_info.joy_idx = 0; + joypad_info.auto_binds = NULL; RARCH_INPUT_STATE_CLEAR_PTR( p_new_state ); From f53093de4d4e8e5893dd7bd20b30989ea6a2d9dd Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 03:12:27 +0100 Subject: [PATCH 03/85] Default to nbio stdio for PowerPC Mac --- libretro-common/file/nbio/nbio_intf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/file/nbio/nbio_intf.c b/libretro-common/file/nbio/nbio_intf.c index 57d3eb6484..925cd6884e 100644 --- a/libretro-common/file/nbio/nbio_intf.c +++ b/libretro-common/file/nbio/nbio_intf.c @@ -36,7 +36,7 @@ extern nbio_intf_t nbio_stdio; #if defined(_linux__) static nbio_intf_t *internal_nbio = &nbio_linux; -#elif defined(HAVE_MMAP) && defined(BSD) +#elif defined(HAVE_MMAP) && defined(BSD) && !defined(__powerpc__) && !defined(__ppc__) static nbio_intf_t *internal_nbio = &nbio_mmap_unix; #elif defined(_WIN32) && !defined(_XBOX) static nbio_intf_t *internal_nbio = &nbio_mmap_win32; From 0bf461c40ff2a78dc6695f0a56bec8348ba11a93 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 03:27:03 +0100 Subject: [PATCH 04/85] Try to get past OSX PowerPC crash on exit --- gfx/drivers_renderchain/gl2_renderchain.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 0c9733e35f..5f68e6005e 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -420,19 +420,25 @@ static void gl2_renderchain_deinit_fbo(void *data) { gl_t *gl = (gl_t*)data; + if (!gl) + return; + glDeleteTextures(gl->fbo_pass, gl->fbo_texture); - glDeleteFramebuffers(gl->fbo_pass, gl->fbo); + + if (gl->fbo) + glDeleteFramebuffers(gl->fbo_pass, gl->fbo); + memset(gl->fbo_texture, 0, sizeof(gl->fbo_texture)); - memset(gl->fbo, 0, sizeof(gl->fbo)); - gl->fbo_inited = false; - gl->fbo_pass = 0; + memset(gl->fbo, 0, sizeof(gl->fbo)); if (gl->fbo_feedback) glDeleteFramebuffers(1, &gl->fbo_feedback); if (gl->fbo_feedback_texture) glDeleteTextures(1, &gl->fbo_feedback_texture); + gl->fbo_inited = false; gl->fbo_feedback_enable = false; + gl->fbo_pass = 0; gl->fbo_feedback_pass = 0; gl->fbo_feedback_texture = 0; gl->fbo_feedback = 0; From 62215129115cf9e6f5bea6859a52f90cfd7eaad5 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 04:04:07 +0100 Subject: [PATCH 05/85] use EXT version of Framebuffer/Renderbuffer functions for MacOS X PowerPC --- gfx/drivers/gl_symlinks.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gfx/drivers/gl_symlinks.h b/gfx/drivers/gl_symlinks.h index 8628698f3e..fb84a8b182 100644 --- a/gfx/drivers/gl_symlinks.h +++ b/gfx/drivers/gl_symlinks.h @@ -38,6 +38,17 @@ #define glFramebufferRenderbuffer glFramebufferRenderbufferOES #define glRenderbufferStorage glRenderbufferStorageOES #define glDeleteRenderbuffers glDeleteRenderbuffersOES +#elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) +#define glGenFramebuffers glGenFramebuffersEXT +#define glBindFramebuffer glBindFramebufferEXT +#define glFramebufferTexture2D glFramebufferTexture2DEXT +#define glCheckFramebufferStatus glCheckFramebufferStatusEXT +#define glDeleteFramebuffers glDeleteFramebuffersEXT +#define glGenRenderbuffers glGenRenderbuffersEXT +#define glBindRenderbuffer glBindRenderbufferEXT +#define glFramebufferRenderbuffer glFramebufferRenderbufferEXT +#define glRenderbufferStorage glRenderbufferStorageEXT +#define glDeleteRenderbuffers glDeleteRenderbuffersEXT #endif #if defined(HAVE_PSGL) From 52e7a533f096dd71ada1cb3daf691414660fe0a5 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 04:12:46 +0100 Subject: [PATCH 06/85] Improve FBO check --- libretro-common/gfx/gl_capabilities.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/libretro-common/gfx/gl_capabilities.c b/libretro-common/gfx/gl_capabilities.c index 221aa2a0b7..695650eee0 100644 --- a/libretro-common/gfx/gl_capabilities.c +++ b/libretro-common/gfx/gl_capabilities.c @@ -179,16 +179,13 @@ bool gl_check_capability(enum gl_capability_enum enum_idx) && !gl_query_extension("EXT_framebuffer_object")) return false; - if (glGenFramebuffers - && glBindFramebuffer - && glFramebufferTexture2D - && glCheckFramebufferStatus - && glDeleteFramebuffers - && glGenRenderbuffers - && glBindRenderbuffer - && glFramebufferRenderbuffer - && glRenderbufferStorage - && glDeleteRenderbuffers) + if (gl_query_extension("ARB_framebuffer_object")) + return true; + + if (gl_query_extension("EXT_framebuffer_object")) + return true; + + if (major >= 3) return true; break; #endif From b2fbb9aeda9bfb270920131ee76fe21464790f89 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 04:18:28 +0100 Subject: [PATCH 07/85] Prepare to map DeleteFramebuffersEXT like this --- gfx/drivers/gl_symlinks.h | 11 ----------- gfx/drivers_renderchain/gl2_renderchain.c | 4 +--- libretro-common/glsym/glsym_gl.c | 4 ++++ 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/gfx/drivers/gl_symlinks.h b/gfx/drivers/gl_symlinks.h index fb84a8b182..8628698f3e 100644 --- a/gfx/drivers/gl_symlinks.h +++ b/gfx/drivers/gl_symlinks.h @@ -38,17 +38,6 @@ #define glFramebufferRenderbuffer glFramebufferRenderbufferOES #define glRenderbufferStorage glRenderbufferStorageOES #define glDeleteRenderbuffers glDeleteRenderbuffersOES -#elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) -#define glGenFramebuffers glGenFramebuffersEXT -#define glBindFramebuffer glBindFramebufferEXT -#define glFramebufferTexture2D glFramebufferTexture2DEXT -#define glCheckFramebufferStatus glCheckFramebufferStatusEXT -#define glDeleteFramebuffers glDeleteFramebuffersEXT -#define glGenRenderbuffers glGenRenderbuffersEXT -#define glBindRenderbuffer glBindRenderbufferEXT -#define glFramebufferRenderbuffer glFramebufferRenderbufferEXT -#define glRenderbufferStorage glRenderbufferStorageEXT -#define glDeleteRenderbuffers glDeleteRenderbuffersEXT #endif #if defined(HAVE_PSGL) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 5f68e6005e..69b70b71fa 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -424,9 +424,7 @@ static void gl2_renderchain_deinit_fbo(void *data) return; glDeleteTextures(gl->fbo_pass, gl->fbo_texture); - - if (gl->fbo) - glDeleteFramebuffers(gl->fbo_pass, gl->fbo); + glDeleteFramebuffers(gl->fbo_pass, gl->fbo); memset(gl->fbo_texture, 0, sizeof(gl->fbo_texture)); memset(gl->fbo, 0, sizeof(gl->fbo)); diff --git a/libretro-common/glsym/glsym_gl.c b/libretro-common/glsym/glsym_gl.c index 5aa92fdca2..41680ffcd1 100644 --- a/libretro-common/glsym/glsym_gl.c +++ b/libretro-common/glsym/glsym_gl.c @@ -308,7 +308,11 @@ const struct rglgen_sym_map rglgen_symbol_map[] = { SYM(GetRenderbufferParameteriv), SYM(IsFramebuffer), SYM(BindFramebuffer), +#if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) + SYM(DeleteFramebuffersEXT), +#else SYM(DeleteFramebuffers), +#endif SYM(GenFramebuffers), SYM(CheckFramebufferStatus), SYM(FramebufferTexture1D), From e9af9f1b092a24699fc6023817d8ae21fc582a55 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 04:20:54 +0100 Subject: [PATCH 08/85] Add EXT version --- libretro-common/glsym/glsym_gl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libretro-common/glsym/glsym_gl.c b/libretro-common/glsym/glsym_gl.c index 41680ffcd1..585e7c320c 100644 --- a/libretro-common/glsym/glsym_gl.c +++ b/libretro-common/glsym/glsym_gl.c @@ -1341,6 +1341,7 @@ RGLSYMGLGETRENDERBUFFERPARAMETERIVPROC __rglgen_glGetRenderbufferParameteriv; RGLSYMGLISFRAMEBUFFERPROC __rglgen_glIsFramebuffer; RGLSYMGLBINDFRAMEBUFFERPROC __rglgen_glBindFramebuffer; RGLSYMGLDELETEFRAMEBUFFERSPROC __rglgen_glDeleteFramebuffers; +RGLSYMGLDELETEFRAMEBUFFERSPROC __rglgen_glDeleteFramebuffersEXT; RGLSYMGLGENFRAMEBUFFERSPROC __rglgen_glGenFramebuffers; RGLSYMGLCHECKFRAMEBUFFERSTATUSPROC __rglgen_glCheckFramebufferStatus; RGLSYMGLFRAMEBUFFERTEXTURE1DPROC __rglgen_glFramebufferTexture1D; From 19d7afd0c26778fc1e50dab9f31fd72048c75c57 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 04:30:28 +0100 Subject: [PATCH 09/85] remove --- libretro-common/glsym/glsym_gl.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/libretro-common/glsym/glsym_gl.c b/libretro-common/glsym/glsym_gl.c index 585e7c320c..5aa92fdca2 100644 --- a/libretro-common/glsym/glsym_gl.c +++ b/libretro-common/glsym/glsym_gl.c @@ -308,11 +308,7 @@ const struct rglgen_sym_map rglgen_symbol_map[] = { SYM(GetRenderbufferParameteriv), SYM(IsFramebuffer), SYM(BindFramebuffer), -#if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) - SYM(DeleteFramebuffersEXT), -#else SYM(DeleteFramebuffers), -#endif SYM(GenFramebuffers), SYM(CheckFramebufferStatus), SYM(FramebufferTexture1D), @@ -1341,7 +1337,6 @@ RGLSYMGLGETRENDERBUFFERPARAMETERIVPROC __rglgen_glGetRenderbufferParameteriv; RGLSYMGLISFRAMEBUFFERPROC __rglgen_glIsFramebuffer; RGLSYMGLBINDFRAMEBUFFERPROC __rglgen_glBindFramebuffer; RGLSYMGLDELETEFRAMEBUFFERSPROC __rglgen_glDeleteFramebuffers; -RGLSYMGLDELETEFRAMEBUFFERSPROC __rglgen_glDeleteFramebuffersEXT; RGLSYMGLGENFRAMEBUFFERSPROC __rglgen_glGenFramebuffers; RGLSYMGLCHECKFRAMEBUFFERSTATUSPROC __rglgen_glCheckFramebufferStatus; RGLSYMGLFRAMEBUFFERTEXTURE1DPROC __rglgen_glFramebufferTexture1D; From 44f3341ffe20323e2ed4b357e5b0dc33cfc3131f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 04:42:40 +0100 Subject: [PATCH 10/85] Add EXT versions for OSX PPC --- gfx/drivers_renderchain/gl2_renderchain.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 69b70b71fa..22eb9bc558 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -67,7 +67,14 @@ typedef struct gl2_renderchain coords[5] = yamt; \ coords[7] = yamt -#define gl2_bind_fb(id) glBindFramebuffer(RARCH_GL_FRAMEBUFFER, id) +#if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) +#define gl2_delete_fb(n, fb) glDeleteFramebuffersEXT(n, fb) +#define gl2_bind_fb(id) glBindFramebufferEXT(RARCH_GL_FRAMEBUFFER, id) +#else +#define gl2_delete_fb(n, fb) glDeleteFramebuffers(n, fb) +#define gl2_bind_fb(id) glBindFramebuffer(RARCH_GL_FRAMEBUFFER, id) +#endif + #ifndef GL_SYNC_GPU_COMMANDS_COMPLETE #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 @@ -424,13 +431,13 @@ static void gl2_renderchain_deinit_fbo(void *data) return; glDeleteTextures(gl->fbo_pass, gl->fbo_texture); - glDeleteFramebuffers(gl->fbo_pass, gl->fbo); + gl2_delete_fb(gl->fbo_pass, gl->fbo); memset(gl->fbo_texture, 0, sizeof(gl->fbo_texture)); memset(gl->fbo, 0, sizeof(gl->fbo)); if (gl->fbo_feedback) - glDeleteFramebuffers(1, &gl->fbo_feedback); + gl2_delete_fb(1, &gl->fbo_feedback); if (gl->fbo_feedback_texture) glDeleteTextures(1, &gl->fbo_feedback_texture); @@ -451,7 +458,7 @@ static void gl2_renderchain_deinit_hw_render(void *data) context_bind_hw_render(true); if (gl->hw_render_fbo_init) - glDeleteFramebuffers(gl->textures, gl->hw_render_fbo); + gl2_delete_fb(gl->textures, gl->hw_render_fbo); if (gl->hw_render_depth_init) glDeleteRenderbuffers(gl->textures, gl->hw_render_depth); gl->hw_render_fbo_init = false; @@ -510,9 +517,9 @@ static bool gl_create_fbo_targets(gl_t *gl) return true; error: - glDeleteFramebuffers(gl->fbo_pass, gl->fbo); + gl2_delete_fb(gl->fbo_pass, gl->fbo); if (gl->fbo_feedback) - glDeleteFramebuffers(1, &gl->fbo_feedback); + gl2_delete_fb(1, &gl->fbo_feedback); RARCH_ERR("[GL]: Failed to set up frame buffer objects. Multi-pass shading will not work.\n"); return false; } From 5a341acb5fe0dee96920ef2e7e32e1dbd8762985 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 04:57:58 +0100 Subject: [PATCH 11/85] Wrap more GL framebuffer functions --- gfx/drivers_renderchain/gl2_renderchain.c | 28 ++++++++++++++--------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 22eb9bc558..82038df196 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -68,9 +68,15 @@ typedef struct gl2_renderchain coords[7] = yamt #if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) +#define gl2_fb_texture_2d(a, b, c, d, e) glFramebufferTexture2DEXT(a, b, c, d, e) +#define gl2_check_fb_status(target) glCheckFramebufferStatusEXT(target) +#define gl2_gen_fb(n, ids) glGenFramebuffersEXT(n, ids) #define gl2_delete_fb(n, fb) glDeleteFramebuffersEXT(n, fb) #define gl2_bind_fb(id) glBindFramebufferEXT(RARCH_GL_FRAMEBUFFER, id) #else +#define gl2_fb_texture_2d(a, b, c, d, e) glFramebufferTexture2D(a, b, c, d, e) +#define gl2_check_fb_status(target) glCheckFramebufferStatus(target) +#define gl2_gen_fb(n, ids) glGenFramebuffers(n, ids) #define gl2_delete_fb(n, fb) glDeleteFramebuffers(n, fb) #define gl2_bind_fb(id) glBindFramebuffer(RARCH_GL_FRAMEBUFFER, id) #endif @@ -176,11 +182,11 @@ static bool gl_recreate_fbo( 0, RARCH_GL_TEXTURE_TYPE32, RARCH_GL_FORMAT32, NULL); - glFramebufferTexture2D(RARCH_GL_FRAMEBUFFER, + gl2_fb_texture_2d(RARCH_GL_FRAMEBUFFER, RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, *texture, 0); - if (glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER) + if (gl2_check_fb_status(RARCH_GL_FRAMEBUFFER) == RARCH_GL_FRAMEBUFFER_COMPLETE) return true; @@ -479,17 +485,17 @@ static bool gl_create_fbo_targets(gl_t *gl) int i; glBindTexture(GL_TEXTURE_2D, 0); - glGenFramebuffers(gl->fbo_pass, gl->fbo); + gl2_gen_fb(gl->fbo_pass, gl->fbo); for (i = 0; i < gl->fbo_pass; i++) { GLenum status; gl2_bind_fb(gl->fbo[i]); - glFramebufferTexture2D(RARCH_GL_FRAMEBUFFER, + gl2_fb_texture_2d(RARCH_GL_FRAMEBUFFER, RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl->fbo_texture[i], 0); - status = glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER); + status = gl2_check_fb_status(RARCH_GL_FRAMEBUFFER); if (status != RARCH_GL_FRAMEBUFFER_COMPLETE) goto error; } @@ -498,13 +504,13 @@ static bool gl_create_fbo_targets(gl_t *gl) { GLenum status; - glGenFramebuffers(1, &gl->fbo_feedback); + gl2_gen_fb(1, &gl->fbo_feedback); gl2_bind_fb(gl->fbo_feedback); - glFramebufferTexture2D(RARCH_GL_FRAMEBUFFER, + gl2_fb_texture_2d(RARCH_GL_FRAMEBUFFER, RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl->fbo_feedback_texture, 0); - status = glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER); + status = gl2_check_fb_status(RARCH_GL_FRAMEBUFFER); if (status != RARCH_GL_FRAMEBUFFER_COMPLETE) goto error; @@ -883,7 +889,7 @@ static bool gl2_renderchain_init_hw_render( RARCH_LOG("[GL]: Supports FBO (render-to-texture).\n"); glBindTexture(GL_TEXTURE_2D, 0); - glGenFramebuffers(gl->textures, gl->hw_render_fbo); + gl2_gen_fb(gl->textures, gl->hw_render_fbo); depth = hwr->depth; stencil = hwr->stencil; @@ -897,7 +903,7 @@ static bool gl2_renderchain_init_hw_render( for (i = 0; i < gl->textures; i++) { gl2_bind_fb(gl->hw_render_fbo[i]); - glFramebufferTexture2D(RARCH_GL_FRAMEBUFFER, + gl2_fb_texture_2d(RARCH_GL_FRAMEBUFFER, RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl->texture[i], 0); if (depth) @@ -934,7 +940,7 @@ static bool gl2_renderchain_init_hw_render( } } - status = glCheckFramebufferStatus(RARCH_GL_FRAMEBUFFER); + status = gl2_check_fb_status(RARCH_GL_FRAMEBUFFER); if (status != RARCH_GL_FRAMEBUFFER_COMPLETE) { RARCH_ERR("[GL]: Failed to create HW render FBO #%u, error: 0x%u.\n", From c869cc51025d7ac04ded8825c64720fd5aa74ce4 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 05:55:18 +0100 Subject: [PATCH 12/85] Refactor GL code --- gfx/common/gl_common.c | 2 + gfx/drivers/gl.c | 1 + gfx/drivers/gl_symlinks.h | 15 -------- gfx/drivers_renderchain/gl2_renderchain.c | 46 ++++++++++++++++++----- 4 files changed, 39 insertions(+), 25 deletions(-) diff --git a/gfx/common/gl_common.c b/gfx/common/gl_common.c index f349938427..bf8aab5059 100644 --- a/gfx/common/gl_common.c +++ b/gfx/common/gl_common.c @@ -21,6 +21,8 @@ #include "../../config.h" #endif +#include + #include "../drivers/gl_symlinks.h" #include "../video_coord_array.h" diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 8c2d230194..ba037d574d 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -40,6 +40,7 @@ #include #include +#include #include "../../configuration.h" #include "../../dynamic.h" diff --git a/gfx/drivers/gl_symlinks.h b/gfx/drivers/gl_symlinks.h index 8628698f3e..91d618776d 100644 --- a/gfx/drivers/gl_symlinks.h +++ b/gfx/drivers/gl_symlinks.h @@ -21,25 +21,10 @@ #include #include -#include - #ifdef HAVE_CONFIG_H #include "config.h" #endif -#if defined(HAVE_PSGL) -#define glGenFramebuffers glGenFramebuffersOES -#define glBindFramebuffer glBindFramebufferOES -#define glFramebufferTexture2D glFramebufferTexture2DOES -#define glCheckFramebufferStatus glCheckFramebufferStatusOES -#define glDeleteFramebuffers glDeleteFramebuffersOES -#define glGenRenderbuffers glGenRenderbuffersOES -#define glBindRenderbuffer glBindRenderbufferOES -#define glFramebufferRenderbuffer glFramebufferRenderbufferOES -#define glRenderbufferStorage glRenderbufferStorageOES -#define glDeleteRenderbuffers glDeleteRenderbuffersOES -#endif - #if defined(HAVE_PSGL) #define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_OES #define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_OES diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 82038df196..a9320732b3 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -41,6 +41,7 @@ #include #include +#include #include "../video_driver.h" #include "../video_shader_parse.h" @@ -67,18 +68,43 @@ typedef struct gl2_renderchain coords[5] = yamt; \ coords[7] = yamt -#if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) +#if defined(HAVE_PSGL) +#define gl2_fb_texture_2d(a, b, c, d, e) glFramebufferTexture2DOES(a, b, c, d, e) +#define gl2_check_fb_status(target) glCheckFramebufferStatusOES(target) +#define gl2_gen_fb(n, ids) glGenFramebuffersOES(n, ids) +#define gl2_delete_fb(n, fb) glDeleteFramebuffersOES(n, fb) +#define gl2_bind_fb(id) glBindFramebufferOES(RARCH_GL_FRAMEBUFFER, id) +#define gl2_gen_rb glGenRenderbuffersOES +#define gl2_bind_rb glBindRenderbufferOES +#define gl2_fb_rb glFramebufferRenderbufferOES +#define gl2_rb_storage glRenderbufferStorageOES +#define gl2_delete_rb glDeleteRenderbuffersOES + +#elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) #define gl2_fb_texture_2d(a, b, c, d, e) glFramebufferTexture2DEXT(a, b, c, d, e) #define gl2_check_fb_status(target) glCheckFramebufferStatusEXT(target) #define gl2_gen_fb(n, ids) glGenFramebuffersEXT(n, ids) #define gl2_delete_fb(n, fb) glDeleteFramebuffersEXT(n, fb) #define gl2_bind_fb(id) glBindFramebufferEXT(RARCH_GL_FRAMEBUFFER, id) +#define gl2_gen_rb glGenRenderbuffersEXT +#define gl2_bind_rb glBindRenderbufferEXT +#define gl2_fb_rb glFramebufferRenderbufferEXT +#define gl2_rb_storage glRenderbufferStorageEXT +#define gl2_delete_rb glDeleteRenderbuffersEXT + #else + #define gl2_fb_texture_2d(a, b, c, d, e) glFramebufferTexture2D(a, b, c, d, e) #define gl2_check_fb_status(target) glCheckFramebufferStatus(target) #define gl2_gen_fb(n, ids) glGenFramebuffers(n, ids) #define gl2_delete_fb(n, fb) glDeleteFramebuffers(n, fb) #define gl2_bind_fb(id) glBindFramebuffer(RARCH_GL_FRAMEBUFFER, id) +#define gl2_gen_rb glGenRenderbuffers +#define gl2_bind_rb glBindRenderbuffer +#define gl2_fb_rb glFramebufferRenderbuffer +#define gl2_rb_storage glRenderbufferStorage +#define gl2_delete_rb glDeleteRenderbuffers + #endif @@ -466,7 +492,7 @@ static void gl2_renderchain_deinit_hw_render(void *data) if (gl->hw_render_fbo_init) gl2_delete_fb(gl->textures, gl->hw_render_fbo); if (gl->hw_render_depth_init) - glDeleteRenderbuffers(gl->textures, gl->hw_render_depth); + gl2_delete_rb(gl->textures, gl->hw_render_depth); gl->hw_render_fbo_init = false; context_bind_hw_render(false); @@ -896,7 +922,7 @@ static bool gl2_renderchain_init_hw_render( if (depth) { - glGenRenderbuffers(gl->textures, gl->hw_render_depth); + gl2_gen_rb(gl->textures, gl->hw_render_depth); gl->hw_render_depth_init = true; } @@ -908,33 +934,33 @@ static bool gl2_renderchain_init_hw_render( if (depth) { - glBindRenderbuffer(RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); - glRenderbufferStorage(RARCH_GL_RENDERBUFFER, + gl2_bind_rb(RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); + gl2_rb_storage(RARCH_GL_RENDERBUFFER, stencil ? RARCH_GL_DEPTH24_STENCIL8 : GL_DEPTH_COMPONENT16, width, height); - glBindRenderbuffer(RARCH_GL_RENDERBUFFER, 0); + gl2_bind_rb(RARCH_GL_RENDERBUFFER, 0); if (stencil) { #if defined(HAVE_OPENGLES2) || defined(HAVE_OPENGLES1) || ((defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__)))) /* GLES2 is a bit weird, as always. * There's no GL_DEPTH_STENCIL_ATTACHMENT like in desktop GL. */ - glFramebufferRenderbuffer(RARCH_GL_FRAMEBUFFER, + gl2_fb_rb(RARCH_GL_FRAMEBUFFER, RARCH_GL_DEPTH_ATTACHMENT, RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); - glFramebufferRenderbuffer(RARCH_GL_FRAMEBUFFER, + gl2_fb_rb(RARCH_GL_FRAMEBUFFER, RARCH_GL_STENCIL_ATTACHMENT, RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); #else /* We use ARB FBO extensions, no need to check. */ - glFramebufferRenderbuffer(RARCH_GL_FRAMEBUFFER, + gl2_fb_rb(RARCH_GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); #endif } else { - glFramebufferRenderbuffer(RARCH_GL_FRAMEBUFFER, + gl2_fb_rb(RARCH_GL_FRAMEBUFFER, RARCH_GL_DEPTH_ATTACHMENT, RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); } From 9558e569f10f924321c6c9541144cd505b2573c9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 05:56:03 +0100 Subject: [PATCH 13/85] We can still make use of this for PowerPC Mac --- libretro-common/file/nbio/nbio_intf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/file/nbio/nbio_intf.c b/libretro-common/file/nbio/nbio_intf.c index 925cd6884e..57d3eb6484 100644 --- a/libretro-common/file/nbio/nbio_intf.c +++ b/libretro-common/file/nbio/nbio_intf.c @@ -36,7 +36,7 @@ extern nbio_intf_t nbio_stdio; #if defined(_linux__) static nbio_intf_t *internal_nbio = &nbio_linux; -#elif defined(HAVE_MMAP) && defined(BSD) && !defined(__powerpc__) && !defined(__ppc__) +#elif defined(HAVE_MMAP) && defined(BSD) static nbio_intf_t *internal_nbio = &nbio_mmap_unix; #elif defined(_WIN32) && !defined(_XBOX) static nbio_intf_t *internal_nbio = &nbio_mmap_win32; From 512a1b4cb65ac1294b84b0b3453ab4f5fc68262d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 06:03:11 +0100 Subject: [PATCH 14/85] Cleanups --- gfx/common/gl_common.c | 7 +- gfx/common/gl_common.h | 119 ++++++++++++++++++++++++++++++- gfx/drivers/gl_symlinks.h | 144 -------------------------------------- 3 files changed, 119 insertions(+), 151 deletions(-) delete mode 100644 gfx/drivers/gl_symlinks.h diff --git a/gfx/common/gl_common.c b/gfx/common/gl_common.c index bf8aab5059..10c139bef0 100644 --- a/gfx/common/gl_common.c +++ b/gfx/common/gl_common.c @@ -14,18 +14,13 @@ * If not, see . */ -#include #include #ifdef HAVE_CONFIG_H #include "../../config.h" #endif -#include - -#include "../drivers/gl_symlinks.h" -#include "../video_coord_array.h" - +#include "gl_common.h" static void gl_size_format(GLint* internalFormat) { diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index 04f2d6e3f4..7eb88af66e 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -17,7 +17,9 @@ #ifndef __GL_COMMON_H #define __GL_COMMON_H +#include #include +#include #ifdef HAVE_CONFIG_H #include "../../config.h" @@ -32,13 +34,128 @@ #include "../font_driver.h" #include "../video_coord_array.h" #include "../video_driver.h" -#include "../drivers/gl_symlinks.h" #include RETRO_BEGIN_DECLS #define MAX_FENCES 4 +#if defined(HAVE_PSGL) +#define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_OES +#define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_OES +#define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT +#elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) +#define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT +#define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_EXT +#define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT +#else +#define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER +#define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE +#define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0 +#endif + +#if defined(HAVE_OPENGLES2) || defined(HAVE_OPENGLES3) || defined(HAVE_OPENGLES_3_1) || defined(HAVE_OPENGLES_3_2) +#define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER +#if defined(HAVE_OPENGLES2) +#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES +#else +#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8 +#endif +#define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT +#define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT +#elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) +#define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER_EXT +#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_EXT +#define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_EXT +#define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_EXT +#elif defined(HAVE_PSGL) +#define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER_OES +#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_SCE +#define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_OES +#define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_OES +#else +#define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER +#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8 +#define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT +#define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT +#endif + +#if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) +#define RARCH_GL_MAX_RENDERBUFFER_SIZE GL_MAX_RENDERBUFFER_SIZE_EXT +#elif defined(HAVE_PSGL) +#define RARCH_GL_MAX_RENDERBUFFER_SIZE GL_MAX_RENDERBUFFER_SIZE_OES +#else +#define RARCH_GL_MAX_RENDERBUFFER_SIZE GL_MAX_RENDERBUFFER_SIZE +#endif + +#if defined(HAVE_PSGL) +#define glGenerateMipmap glGenerateMipmapOES +#endif + +#if defined(__APPLE__) || defined(HAVE_PSGL) +#define GL_RGBA32F GL_RGBA32F_ARB +#endif + +#if defined(HAVE_PSGL) +#define RARCH_GL_INTERNAL_FORMAT32 GL_ARGB_SCE +#define RARCH_GL_INTERNAL_FORMAT16 GL_RGB5 /* TODO: Verify if this is really 565 or just 555. */ +#define RARCH_GL_TEXTURE_TYPE32 GL_BGRA +#define RARCH_GL_TEXTURE_TYPE16 GL_BGRA +#define RARCH_GL_FORMAT32 GL_UNSIGNED_INT_8_8_8_8_REV +#define RARCH_GL_FORMAT16 GL_RGB5 +#elif defined(HAVE_OPENGLES) +/* Imgtec/SGX headers have this missing. */ +#ifndef GL_BGRA_EXT +#define GL_BGRA_EXT 0x80E1 +#endif +#ifndef GL_BGRA8_EXT +#define GL_BGRA8_EXT 0x93A1 +#endif +#ifdef IOS +/* Stupid Apple */ +#define RARCH_GL_INTERNAL_FORMAT32 GL_RGBA +#else +#define RARCH_GL_INTERNAL_FORMAT32 GL_BGRA_EXT +#endif +#define RARCH_GL_INTERNAL_FORMAT16 GL_RGB +#define RARCH_GL_TEXTURE_TYPE32 GL_BGRA_EXT +#define RARCH_GL_TEXTURE_TYPE16 GL_RGB +#define RARCH_GL_FORMAT32 GL_UNSIGNED_BYTE +#define RARCH_GL_FORMAT16 GL_UNSIGNED_SHORT_5_6_5 +#else +/* On desktop, we always use 32-bit. */ +#define RARCH_GL_INTERNAL_FORMAT32 GL_RGBA8 +#define RARCH_GL_INTERNAL_FORMAT16 GL_RGBA8 +#define RARCH_GL_TEXTURE_TYPE32 GL_BGRA +#define RARCH_GL_TEXTURE_TYPE16 GL_BGRA +#define RARCH_GL_FORMAT32 GL_UNSIGNED_INT_8_8_8_8_REV +#define RARCH_GL_FORMAT16 GL_UNSIGNED_INT_8_8_8_8_REV + +/* GL_RGB565 internal format isn't in desktop GL + * until 4.1 core (ARB_ES2_compatibility). + * Check for this. */ +#ifndef GL_RGB565 +#define GL_RGB565 0x8D62 +#endif +#define RARCH_GL_INTERNAL_FORMAT16_565 GL_RGB565 +#define RARCH_GL_TEXTURE_TYPE16_565 GL_RGB +#define RARCH_GL_FORMAT16_565 GL_UNSIGNED_SHORT_5_6_5 +#endif + +#if defined(HAVE_OPENGLES2) /* TODO: Figure out exactly what. */ +#define NO_GL_CLAMP_TO_BORDER +#endif + +#if defined(HAVE_OPENGLES) +#ifndef GL_UNPACK_ROW_LENGTH +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#endif + +#ifndef GL_SRGB_ALPHA_EXT +#define GL_SRGB_ALPHA_EXT 0x8C42 +#endif +#endif + typedef struct gl { GLenum internal_fmt; diff --git a/gfx/drivers/gl_symlinks.h b/gfx/drivers/gl_symlinks.h deleted file mode 100644 index 91d618776d..0000000000 --- a/gfx/drivers/gl_symlinks.h +++ /dev/null @@ -1,144 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2014 - Hans-Kristian Arntzen - * Copyright (C) 2011-2017 - Daniel De Matteis - * Copyright (C) 2012-2015 - Michael Lelli - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#ifndef _GL_SYMLINKS_H -#define _GL_SYMLINKS_H - -#include -#include - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#if defined(HAVE_PSGL) -#define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_OES -#define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_OES -#define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT -#elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) -#define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT -#define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_EXT -#define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT -#else -#define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER -#define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE -#define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0 -#endif - -#if defined(HAVE_OPENGLES2) || defined(HAVE_OPENGLES3) || defined(HAVE_OPENGLES_3_1) || defined(HAVE_OPENGLES_3_2) -#define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER -#if defined(HAVE_OPENGLES2) -#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES -#else -#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8 -#endif -#define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT -#define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT -#elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) -#define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER_EXT -#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_EXT -#define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_EXT -#define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_EXT -#elif defined(HAVE_PSGL) -#define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER_OES -#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_SCE -#define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_OES -#define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_OES -#else -#define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER -#define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8 -#define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT -#define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT -#endif - -#if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) -#define RARCH_GL_MAX_RENDERBUFFER_SIZE GL_MAX_RENDERBUFFER_SIZE_EXT -#elif defined(HAVE_PSGL) -#define RARCH_GL_MAX_RENDERBUFFER_SIZE GL_MAX_RENDERBUFFER_SIZE_OES -#else -#define RARCH_GL_MAX_RENDERBUFFER_SIZE GL_MAX_RENDERBUFFER_SIZE -#endif - -#if defined(HAVE_PSGL) -#define glGenerateMipmap glGenerateMipmapOES -#endif - -#if defined(__APPLE__) || defined(HAVE_PSGL) -#define GL_RGBA32F GL_RGBA32F_ARB -#endif - -#if defined(HAVE_PSGL) -#define RARCH_GL_INTERNAL_FORMAT32 GL_ARGB_SCE -#define RARCH_GL_INTERNAL_FORMAT16 GL_RGB5 /* TODO: Verify if this is really 565 or just 555. */ -#define RARCH_GL_TEXTURE_TYPE32 GL_BGRA -#define RARCH_GL_TEXTURE_TYPE16 GL_BGRA -#define RARCH_GL_FORMAT32 GL_UNSIGNED_INT_8_8_8_8_REV -#define RARCH_GL_FORMAT16 GL_RGB5 -#elif defined(HAVE_OPENGLES) -/* Imgtec/SGX headers have this missing. */ -#ifndef GL_BGRA_EXT -#define GL_BGRA_EXT 0x80E1 -#endif -#ifndef GL_BGRA8_EXT -#define GL_BGRA8_EXT 0x93A1 -#endif -#ifdef IOS -/* Stupid Apple */ -#define RARCH_GL_INTERNAL_FORMAT32 GL_RGBA -#else -#define RARCH_GL_INTERNAL_FORMAT32 GL_BGRA_EXT -#endif -#define RARCH_GL_INTERNAL_FORMAT16 GL_RGB -#define RARCH_GL_TEXTURE_TYPE32 GL_BGRA_EXT -#define RARCH_GL_TEXTURE_TYPE16 GL_RGB -#define RARCH_GL_FORMAT32 GL_UNSIGNED_BYTE -#define RARCH_GL_FORMAT16 GL_UNSIGNED_SHORT_5_6_5 -#else -/* On desktop, we always use 32-bit. */ -#define RARCH_GL_INTERNAL_FORMAT32 GL_RGBA8 -#define RARCH_GL_INTERNAL_FORMAT16 GL_RGBA8 -#define RARCH_GL_TEXTURE_TYPE32 GL_BGRA -#define RARCH_GL_TEXTURE_TYPE16 GL_BGRA -#define RARCH_GL_FORMAT32 GL_UNSIGNED_INT_8_8_8_8_REV -#define RARCH_GL_FORMAT16 GL_UNSIGNED_INT_8_8_8_8_REV - -/* GL_RGB565 internal format isn't in desktop GL - * until 4.1 core (ARB_ES2_compatibility). - * Check for this. */ -#ifndef GL_RGB565 -#define GL_RGB565 0x8D62 -#endif -#define RARCH_GL_INTERNAL_FORMAT16_565 GL_RGB565 -#define RARCH_GL_TEXTURE_TYPE16_565 GL_RGB -#define RARCH_GL_FORMAT16_565 GL_UNSIGNED_SHORT_5_6_5 -#endif - -#if defined(HAVE_OPENGLES2) /* TODO: Figure out exactly what. */ -#define NO_GL_CLAMP_TO_BORDER -#endif - -#if defined(HAVE_OPENGLES) -#ifndef GL_UNPACK_ROW_LENGTH -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#endif - -#ifndef GL_SRGB_ALPHA_EXT -#define GL_SRGB_ALPHA_EXT 0x8C42 -#endif -#endif - -#endif From 4e342956c10e774363666157bfe58a6e97f83374 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 06:13:01 +0100 Subject: [PATCH 15/85] Update comment --- gfx/drivers_renderchain/gl1_renderchain.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gfx/drivers_renderchain/gl1_renderchain.c b/gfx/drivers_renderchain/gl1_renderchain.c index 04e8fa6199..9cc36d8a36 100644 --- a/gfx/drivers_renderchain/gl1_renderchain.c +++ b/gfx/drivers_renderchain/gl1_renderchain.c @@ -108,14 +108,12 @@ static bool gl1_renderchain_read_viewport( /* Use slow synchronous readbacks. Use this with plain screenshots as we don't really care about performance in this case. */ - /* GLES2 only guarantees GL_RGBA/GL_UNSIGNED_BYTE + /* GL1 only guarantees GL_RGBA/GL_UNSIGNED_BYTE * readbacks so do just that. - * GLES2 also doesn't support reading back data + * GL1 also doesn't support reading back data * from front buffer, so render a cached frame * and have gl_frame() do the readback while it's * in the back buffer. - * - * Keep codepath similar for GLES and desktop GL. */ gl->readback_buffer_screenshot = malloc(num_pixels * sizeof(uint32_t)); From 241df59771d5b9d1048162b15c7c53fdd38a48f8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 11:20:18 +0100 Subject: [PATCH 16/85] Get rid of include --- gfx/video_driver.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index d06252fb90..c4174e6726 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -46,10 +46,6 @@ #include "../menu/menu_setting.h" #endif -#ifdef HAVE_OPENGL -#include "common/gl_common.h" -#endif - #include "video_thread_wrapper.h" #include "video_driver.h" From 05ab278aca22bdbf47773a53618a1598d93ae30a Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 11:54:30 +0100 Subject: [PATCH 17/85] Pass chain userdata to renderchain driver --- gfx/drivers/gl.c | 80 +++++++++++++---------- gfx/drivers_renderchain/gl1_renderchain.c | 4 +- gfx/drivers_renderchain/gl2_renderchain.c | 77 +++++++++++++++------- gfx/video_driver.h | 56 +++++++++------- 4 files changed, 134 insertions(+), 83 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index ba037d574d..3cc6adf629 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -595,7 +595,7 @@ static void gl_init_textures(gl_t *gl, const video_info_t *video) if (gl->renderchain_driver->init_texture_reference) gl->renderchain_driver->init_texture_reference( - gl, i, internal_fmt, + gl, gl->renderchain_data, i, internal_fmt, texture_fmt, texture_type); } @@ -894,11 +894,11 @@ static void gl_pbo_async_readback(gl_t *gl) gl->pbo_readback_valid[gl->pbo_readback_index] = true; if (gl->renderchain_driver->readback) - gl->renderchain_driver->readback(gl, + gl->renderchain_driver->readback(gl, gl->renderchain_data, video_pixel_get_alignment(gl->vp.width * sizeof(uint32_t)), fmt, type, NULL); if (gl->renderchain_driver->unbind_pbo) - gl->renderchain_driver->unbind_pbo(); + gl->renderchain_driver->unbind_pbo(gl, gl->renderchain_data); } static INLINE void gl_draw_texture(gl_t *gl, video_frame_info_t *video_info) @@ -983,7 +983,7 @@ static bool gl_frame(void *data, const void *frame, context_bind_hw_render(false); if (gl->core_context_in_use && gl->renderchain_driver->bind_vao) - gl->renderchain_driver->bind_vao(gl); + gl->renderchain_driver->bind_vao(gl, gl->renderchain_data); video_info->cb_shader_use(gl, video_info->shader_data, 1, true); @@ -997,11 +997,12 @@ static bool gl_frame(void *data, const void *frame, { if (gl->renderchain_driver->recompute_pass_sizes) gl->renderchain_driver->recompute_pass_sizes( - gl, frame_width, frame_height, + gl, gl->renderchain_data, frame_width, frame_height, gl->vp_out_width, gl->vp_out_height); if (gl->renderchain_driver->start_render) - gl->renderchain_driver->start_render(gl, video_info); + gl->renderchain_driver->start_render(gl, gl->renderchain_data, + video_info); } if (gl->should_resize) @@ -1019,12 +1020,14 @@ static bool gl_frame(void *data, const void *frame, if (gl->fbo_inited) { if (gl->renderchain_driver->check_fbo_dimensions) - gl->renderchain_driver->check_fbo_dimensions(gl); + gl->renderchain_driver->check_fbo_dimensions(gl, + gl->renderchain_data); /* Go back to what we're supposed to do, * render to FBO #0. */ if (gl->renderchain_driver->start_render) - gl->renderchain_driver->start_render(gl, video_info); + gl->renderchain_driver->start_render(gl, gl->renderchain_data, + video_info); } else gl_set_viewport(gl, video_info, width, height, false, true); @@ -1043,7 +1046,7 @@ static bool gl_frame(void *data, const void *frame, gl_update_input_size(gl, frame_width, frame_height, pitch, true); if (gl->renderchain_driver->copy_frame) - gl->renderchain_driver->copy_frame(gl, + gl->renderchain_driver->copy_frame(gl, gl->renderchain_data, video_info, frame, frame_width, frame_height, pitch); } @@ -1061,12 +1064,12 @@ static bool gl_frame(void *data, const void *frame, if (!gl->fbo_inited) { if (gl->renderchain_driver->bind_backbuffer) - gl->renderchain_driver->bind_backbuffer(); + gl->renderchain_driver->bind_backbuffer(gl, gl->renderchain_data); gl_set_viewport(gl, video_info, width, height, false, true); } if (gl->renderchain_driver->restore_default_state) - gl->renderchain_driver->restore_default_state(gl); + gl->renderchain_driver->restore_default_state(gl, gl->renderchain_data); glDisable(GL_STENCIL_TEST); glDisable(GL_BLEND); @@ -1128,12 +1131,14 @@ static bool gl_frame(void *data, const void *frame, glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); if (gl->fbo_inited && gl->renderchain_driver->renderchain_render) - gl->renderchain_driver->renderchain_render(gl, video_info, + gl->renderchain_driver->renderchain_render(gl, gl->renderchain_data, + video_info, frame_count, &gl->tex_info, &feedback_info); /* Set prev textures. */ if (gl->renderchain_driver->bind_prev_texture) - gl->renderchain_driver->bind_prev_texture(gl, &gl->tex_info); + gl->renderchain_driver->bind_prev_texture(gl, gl->renderchain_data, + &gl->tex_info); #if defined(HAVE_MENU) if (gl->menu_texture_enable) @@ -1168,7 +1173,8 @@ static bool gl_frame(void *data, const void *frame, glBindTexture(GL_TEXTURE_2D, 0); if (gl->renderchain_driver->disable_client_arrays) - gl->renderchain_driver->disable_client_arrays(); + gl->renderchain_driver->disable_client_arrays(gl, + gl->renderchain_data); } /* Screenshots. */ @@ -1176,6 +1182,7 @@ static bool gl_frame(void *data, const void *frame, { if (gl->renderchain_driver->readback) gl->renderchain_driver->readback(gl, + gl->renderchain_data, 4, GL_RGBA, GL_UNSIGNED_BYTE, gl->readback_buffer_screenshot); } @@ -1208,12 +1215,14 @@ static bool gl_frame(void *data, const void *frame, if (gl->renderchain_driver->fence_iterate) gl->renderchain_driver->fence_iterate(gl, + gl->renderchain_data, video_info->hard_sync_frames); } if (gl->core_context_in_use && gl->renderchain_driver->unbind_vao) - gl->renderchain_driver->unbind_vao(gl); + gl->renderchain_driver->unbind_vao(gl, + gl->renderchain_data); context_bind_hw_render(true); @@ -1243,7 +1252,7 @@ static void gl_deinit_chain(gl_t *gl) return; if (gl->renderchain_driver->chain_free) - gl->renderchain_driver->chain_free(gl->renderchain_data); + gl->renderchain_driver->chain_free(gl, gl->renderchain_data); gl->renderchain_driver = NULL; gl->renderchain_data = NULL; @@ -1260,14 +1269,14 @@ static void gl_free(void *data) if (gl->have_sync) { if (gl->renderchain_driver->fence_free) - gl->renderchain_driver->fence_free(gl); + gl->renderchain_driver->fence_free(gl, gl->renderchain_data); } font_driver_free_osd(); video_shader_driver_deinit(); if (gl->renderchain_driver->disable_client_arrays) - gl->renderchain_driver->disable_client_arrays(); + gl->renderchain_driver->disable_client_arrays(gl, gl->renderchain_data); glDeleteTextures(gl->textures, gl->texture); @@ -1296,13 +1305,13 @@ static void gl_free(void *data) if (gl->core_context_in_use) { if (gl->renderchain_driver->unbind_vao) - gl->renderchain_driver->unbind_vao(gl); + gl->renderchain_driver->unbind_vao(gl, gl->renderchain_data); if (gl->renderchain_driver->free_vao) - gl->renderchain_driver->free_vao(gl); + gl->renderchain_driver->free_vao(gl, gl->renderchain_data); } if (gl->renderchain_driver->free) - gl->renderchain_driver->free(gl); + gl->renderchain_driver->free(gl, gl->renderchain_data); gl_deinit_chain(gl); video_context_driver_free(); @@ -1464,7 +1473,7 @@ static bool gl_init_pbo_readback(gl_t *gl) gl->vp.height * sizeof(uint32_t), NULL); } if (gl->renderchain_driver->unbind_pbo) - gl->renderchain_driver->unbind_pbo(); + gl->renderchain_driver->unbind_pbo(gl, gl->renderchain_data); #ifndef HAVE_OPENGLES3 { @@ -1776,11 +1785,11 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo } if (gl->renderchain_driver->restore_default_state) - gl->renderchain_driver->restore_default_state(gl); + gl->renderchain_driver->restore_default_state(gl, gl->renderchain_data); if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) if (gl->renderchain_driver->new_vao) - gl->renderchain_driver->new_vao(gl); + gl->renderchain_driver->new_vao(gl, gl->renderchain_data); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendEquation(GL_FUNC_ADD); @@ -1928,13 +1937,13 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo gl_init_textures_data(gl); if (gl->renderchain_driver->init) - gl->renderchain_driver->init(gl, gl->tex_w, gl->tex_h); + gl->renderchain_driver->init(gl, gl->renderchain_data, gl->tex_w, gl->tex_h); if (gl->has_fbo) { if (gl->hw_render_use && gl->renderchain_driver->init_hw_render && - !gl->renderchain_driver->init_hw_render(gl, gl->tex_w, gl->tex_h)) + !gl->renderchain_driver->init_hw_render(gl, gl->renderchain_data, gl->tex_w, gl->tex_h)) { RARCH_ERR("[GL]: Hardware rendering context initialization failed.\n"); goto error; @@ -2112,7 +2121,7 @@ static bool gl_set_shader(void *data, if (gl->fbo_inited) { if (gl->renderchain_driver->deinit_fbo) - gl->renderchain_driver->deinit_fbo(gl); + gl->renderchain_driver->deinit_fbo(gl, gl->renderchain_data); glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); } @@ -2144,7 +2153,7 @@ static bool gl_set_shader(void *data, { if (gl->hw_render_use && gl->fbo_inited && gl->renderchain_driver->deinit_hw_render) - gl->renderchain_driver->deinit_hw_render(gl); + gl->renderchain_driver->deinit_hw_render(gl, gl->renderchain_data); glDeleteTextures(gl->textures, gl->texture); #if defined(HAVE_PSGL) @@ -2158,11 +2167,13 @@ static bool gl_set_shader(void *data, gl_init_textures_data(gl); if (gl->hw_render_use && gl->renderchain_driver->init_hw_render) - gl->renderchain_driver->init_hw_render(gl, gl->tex_w, gl->tex_h); + gl->renderchain_driver->init_hw_render(gl, gl->renderchain_data, + gl->tex_w, gl->tex_h); } if (gl->renderchain_driver->init) - gl->renderchain_driver->init(gl, gl->tex_w, gl->tex_h); + gl->renderchain_driver->init(gl, gl->renderchain_data, + gl->tex_w, gl->tex_h); /* Apparently need to set viewport for passes when we aren't using FBOs. */ gl_set_shader_viewports(gl); @@ -2186,7 +2197,7 @@ static void gl_viewport_info(void *data, struct video_viewport *vp) gl_t *gl = (gl_t*)data; if (!gl->renderchain_driver || !gl->renderchain_driver->viewport_info) return; - gl->renderchain_driver->viewport_info(data, vp); + gl->renderchain_driver->viewport_info(gl, gl->renderchain_data, vp); } static bool gl_read_viewport(void *data, uint8_t *buffer, bool is_idle) @@ -2194,7 +2205,8 @@ static bool gl_read_viewport(void *data, uint8_t *buffer, bool is_idle) gl_t *gl = (gl_t*)data; if (!gl->renderchain_driver || !gl->renderchain_driver->read_viewport) return false; - return gl->renderchain_driver->read_viewport(data, buffer, is_idle); + return gl->renderchain_driver->read_viewport(gl, gl->renderchain_data, + buffer, is_idle); } #if 0 @@ -2525,7 +2537,7 @@ static void gl_set_coords(void *handle_data, void *shader_data, { gl_t *gl = (gl_t*)handle_data; if (gl && gl->renderchain_driver->set_coords) - gl->renderchain_driver->set_coords(handle_data, + gl->renderchain_driver->set_coords(gl, gl->renderchain_data, shader_data, coords); } @@ -2534,7 +2546,7 @@ static void gl_set_mvp(void *data, void *shader_data, { gl_t *gl = (gl_t*)data; if (gl && gl->renderchain_driver->set_mvp) - gl->renderchain_driver->set_mvp(data, + gl->renderchain_driver->set_mvp(gl, gl->renderchain_data, shader_data, mat_data); } diff --git a/gfx/drivers_renderchain/gl1_renderchain.c b/gfx/drivers_renderchain/gl1_renderchain.c index 9cc36d8a36..04a756db9f 100644 --- a/gfx/drivers_renderchain/gl1_renderchain.c +++ b/gfx/drivers_renderchain/gl1_renderchain.c @@ -57,9 +57,9 @@ typedef struct gl1_renderchain GLenum min_filter_to_mag(GLenum type); -void gl1_renderchain_free(void *data) +void gl1_renderchain_free(void *data, void *chain_data) { - gl_t *gl = (gl_t*)data; + (void)chain_data; (void)gl; } diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index a9320732b3..f52f77f5e7 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -117,7 +117,8 @@ typedef struct gl2_renderchain #endif /* Prototypes */ -static void gl2_renderchain_bind_backbuffer(void) +static void gl2_renderchain_bind_backbuffer(void *data, + void *chain_data) { #ifdef IOS /* There is no default frame buffer on iOS. */ @@ -257,7 +258,8 @@ static void gl_check_fbo_dimension(gl_t *gl, unsigned i, /* On resize, we might have to recreate our FBOs * due to "Viewport" scale, and set a new viewport. */ -static void gl2_renderchain_check_fbo_dimensions(void *data) +static void gl2_renderchain_check_fbo_dimensions(void *data, + void *chain_data) { int i; gl_t *gl = (gl_t*)data; @@ -280,6 +282,7 @@ static void gl2_renderchain_check_fbo_dimensions(void *data) static void gl2_renderchain_render( void *data, + void *chain_data, video_frame_info_t *video_info, uint64_t frame_count, const struct video_tex_info *tex_info, @@ -391,7 +394,7 @@ static void gl2_renderchain_render( set_texture_coords(fbo_tex_coords, xamt, yamt); /* Push final FBO to list. */ - fbo_info = &fbo_tex_info[gl->fbo_pass - 1]; + fbo_info = &fbo_tex_info[gl->fbo_pass - 1]; fbo_info->tex = gl->fbo_texture[gl->fbo_pass - 1]; fbo_info->input_size[0] = prev_rect->img_width; @@ -402,7 +405,7 @@ static void gl2_renderchain_render( fbo_tex_info_cnt++; /* Render our FBO texture to back buffer. */ - gl2_renderchain_bind_backbuffer(); + gl2_renderchain_bind_backbuffer(gl, chain_data); shader_info.data = gl; shader_info.idx = gl->fbo_pass + 1; @@ -455,7 +458,8 @@ static void gl2_renderchain_render( gl->coords.tex_coord = gl->tex_info.coord; } -static void gl2_renderchain_deinit_fbo(void *data) +static void gl2_renderchain_deinit_fbo(void *data, + void *chain_data) { gl_t *gl = (gl_t*)data; @@ -481,7 +485,9 @@ static void gl2_renderchain_deinit_fbo(void *data) gl->fbo_feedback = 0; } -static void gl2_renderchain_deinit_hw_render(void *data) +static void gl2_renderchain_deinit_hw_render( + void *data, + void *chain_data) { gl_t *gl = (gl_t*)data; if (!gl) @@ -498,12 +504,12 @@ static void gl2_renderchain_deinit_hw_render(void *data) context_bind_hw_render(false); } -void gl2_renderchain_free(void *data) +static void gl2_renderchain_free(void *data, void *chain_data) { gl_t *gl = (gl_t*)data; - gl2_renderchain_deinit_fbo(gl); - gl2_renderchain_deinit_hw_render(gl); + gl2_renderchain_deinit_fbo(gl, chain_data); + gl2_renderchain_deinit_hw_render(gl, chain_data); } static bool gl_create_fbo_targets(gl_t *gl) @@ -683,6 +689,7 @@ static void gl_create_fbo_textures(gl_t *gl) static void gl2_renderchain_recompute_pass_sizes( void *data, + void *chain_data, unsigned width, unsigned height, unsigned vp_width, unsigned vp_height) { @@ -745,6 +752,7 @@ static void gl2_renderchain_recompute_pass_sizes( } static void gl2_renderchain_start_render(void *data, + void *chain_data, video_frame_info_t *video_info) { /* Used when rendering to an FBO. @@ -779,7 +787,8 @@ static void gl2_renderchain_start_render(void *data, /* Set up render to texture. */ void gl2_renderchain_init( - void *data, unsigned fbo_width, unsigned fbo_height) + void *data, void *chain_data, + unsigned fbo_width, unsigned fbo_height) { int i; unsigned width, height; @@ -847,6 +856,7 @@ void gl2_renderchain_init( } gl2_renderchain_recompute_pass_sizes(gl, + chain_data, fbo_width, fbo_height, width, height); for (i = 0; i < gl->fbo_pass; i++) @@ -887,6 +897,7 @@ void gl2_renderchain_init( static bool gl2_renderchain_init_hw_render( void *data, + void *chain_data, unsigned width, unsigned height) { GLenum status; @@ -975,7 +986,7 @@ static bool gl2_renderchain_init_hw_render( } } - gl2_renderchain_bind_backbuffer(); + gl2_renderchain_bind_backbuffer(gl, chain_data); gl->hw_render_fbo_init = true; context_bind_hw_render(false); @@ -984,6 +995,7 @@ static bool gl2_renderchain_init_hw_render( static void gl2_renderchain_bind_prev_texture( void *data, + void *chain_data, const struct video_tex_info *tex_info) { gl_t *gl = (gl_t*)data; @@ -1007,7 +1019,8 @@ static void gl2_renderchain_bind_prev_texture( } static void gl2_renderchain_viewport_info( - void *data, struct video_viewport *vp) + void *data, void *chain_data, + struct video_viewport *vp) { unsigned width, height; unsigned top_y, top_dist; @@ -1026,7 +1039,9 @@ static void gl2_renderchain_viewport_info( } static bool gl2_renderchain_read_viewport( - void *data, uint8_t *buffer, bool is_idle) + void *data, + void *chain_data, + uint8_t *buffer, bool is_idle) { unsigned num_pixels = 0; gl_t *gl = (gl_t*)data; @@ -1127,9 +1142,9 @@ error: return false; } -void gl2_renderchain_free_internal(void *data) +void gl2_renderchain_free_internal(void *data, void *chain_data) { - gl2_renderchain_t *cg_data = (gl2_renderchain_t*)data; + gl2_renderchain_t *cg_data = (gl2_renderchain_t*)chain_data; if (!cg_data) return; @@ -1147,7 +1162,8 @@ static void *gl2_renderchain_new(void) } #ifndef HAVE_OPENGLES -static void gl2_renderchain_bind_vao(void *data) +static void gl2_renderchain_bind_vao(void *data, + void *chain_data) { gl_t *gl = (gl_t*)data; if (!gl) @@ -1155,7 +1171,8 @@ static void gl2_renderchain_bind_vao(void *data) glBindVertexArray(gl->vao); } -static void gl2_renderchain_unbind_vao(void *data) +static void gl2_renderchain_unbind_vao(void *data, + void *chain_data) { gl_t *gl = (gl_t*)data; if (!gl) @@ -1163,7 +1180,8 @@ static void gl2_renderchain_unbind_vao(void *data) glBindVertexArray(0); } -static void gl2_renderchain_new_vao(void *data) +static void gl2_renderchain_new_vao(void *data, + void *chain_data) { gl_t *gl = (gl_t*)data; if (!gl) @@ -1171,7 +1189,8 @@ static void gl2_renderchain_new_vao(void *data) glGenVertexArrays(1, &gl->vao); } -static void gl2_renderchain_free_vao(void *data) +static void gl2_renderchain_free_vao(void *data, + void *chain_data) { gl_t *gl = (gl_t*)data; if (!gl) @@ -1180,7 +1199,9 @@ static void gl2_renderchain_free_vao(void *data) } #endif -static void gl2_renderchain_restore_default_state(void *data) +static void gl2_renderchain_restore_default_state( + void *data, + void *chain_data) { gl_t *gl = (gl_t*)data; if (!gl) @@ -1196,6 +1217,7 @@ static void gl2_renderchain_restore_default_state(void *data) static void gl2_renderchain_copy_frame( void *data, + void *chain_data, video_frame_info_t *video_info, const void *frame, unsigned width, unsigned height, unsigned pitch) @@ -1338,7 +1360,8 @@ static void gl2_renderchain_bind_pbo(unsigned idx) glBindBuffer(GL_PIXEL_PACK_BUFFER, (GLuint)idx); } -static void gl2_renderchain_unbind_pbo(void) +static void gl2_renderchain_unbind_pbo(void *data, + void *chain_data) { glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } @@ -1352,6 +1375,7 @@ static void gl2_renderchain_init_pbo(unsigned size, #endif static void gl2_renderchain_readback(void *data, + void *chain_data, unsigned alignment, unsigned fmt, unsigned type, void *src) @@ -1370,8 +1394,10 @@ static void gl2_renderchain_readback(void *data, } #ifndef HAVE_OPENGLES -static void gl2_renderchain_fence_iterate(void *data, unsigned - hard_sync_frames) +static void gl2_renderchain_fence_iterate( + void *data, + void *chain_data, + unsigned hard_sync_frames) { gl_t *gl = (gl_t*)data; @@ -1390,7 +1416,8 @@ static void gl2_renderchain_fence_iterate(void *data, unsigned } } -static void gl2_renderchain_fence_free(void *data) +static void gl2_renderchain_fence_free(void *data, + void *chain_data) { unsigned i; gl_t *gl = (gl_t*)data; @@ -1406,7 +1433,7 @@ static void gl2_renderchain_fence_free(void *data) #endif static void gl2_renderchain_init_textures_reference( - void *data, unsigned i, + void *data, void *chain_data, unsigned i, unsigned internal_fmt, unsigned texture_fmt, unsigned texture_type) { diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 6836ede817..33765da5dd 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -838,56 +838,68 @@ typedef struct d3d_renderchain_driver typedef struct gl_renderchain_driver { void (*set_coords)(void *handle_data, + void *chain_data, void *shader_data, const struct video_coords *coords); - void (*set_mvp)(void *data, void *shader_data, + void (*set_mvp)(void *data, + void *chain_data, + void *shader_data, const void *mat_data); void (*init_texture_reference)( - void *data, unsigned i, + void *data, void *chain_data, unsigned i, unsigned internal_fmt, unsigned texture_fmt, unsigned texture_type); - void (*fence_iterate)(void *data, unsigned hard_sync_frames); - void (*fence_free)(void *data); + void (*fence_iterate)(void *data, void *chain_data, + unsigned hard_sync_frames); + void (*fence_free)(void *data, void *chain_data); void (*readback)(void *data, + void *chain_data, unsigned alignment, unsigned fmt, unsigned type, void *src); void (*init_pbo)(unsigned size, const void *data); void (*bind_pbo)(unsigned idx); - void (*unbind_pbo)(void); + void (*unbind_pbo)(void *data, void *chain_data); void (*copy_frame)( void *data, + void *chain_data, video_frame_info_t *video_info, const void *frame, unsigned width, unsigned height, unsigned pitch); - void (*restore_default_state)(void *data); - void (*new_vao)(void *data); - void (*free_vao)(void *data); - void (*bind_vao)(void *data); - void (*unbind_vao)(void *data); - void (*disable_client_arrays)(void); + void (*restore_default_state)(void *data, void *chain_data); + void (*new_vao)(void *data, void *chain_data); + void (*free_vao)(void *data, void *chain_data); + void (*bind_vao)(void *data, void *chain_data); + void (*unbind_vao)(void *data, void *chain_data); + void (*disable_client_arrays)(void *data, void *chain_data); void (*ff_vertex)(const void *data); void (*ff_matrix)(const void *data); - void (*bind_backbuffer)(void); - void (*deinit_fbo)(void *data); + void (*bind_backbuffer)(void *data, void *chain_data); + void (*deinit_fbo)(void *data, void *chain_data); void (*viewport_info)( - void *data, struct video_viewport *vp); + void *data, void *chain_data, struct video_viewport *vp); bool (*read_viewport)( - void *data, uint8_t *buffer, bool is_idle); + void *data, void *chain_data, uint8_t *buffer, bool is_idle); void (*bind_prev_texture)( void *data, + void *chain_data, const struct video_tex_info *tex_info); - void (*chain_free)(void *data); + void (*chain_free)(void *data, void *chain_data); void *(*chain_new)(void); - void (*init)(void *data, unsigned fbo_width, unsigned fbo_height); - bool (*init_hw_render)(void *data, unsigned width, unsigned height); - void (*free)(void *data); - void (*deinit_hw_render)(void *data); - void (*start_render)(void *data, video_frame_info_t *video_info); - void (*check_fbo_dimensions)(void *data); + void (*init)(void *data, void *chain_data, + unsigned fbo_width, unsigned fbo_height); + bool (*init_hw_render)(void *data, void *chain_data, + unsigned width, unsigned height); + void (*free)(void *data, void *chain_data); + void (*deinit_hw_render)(void *data, void *chain_data); + void (*start_render)(void *data, void *chain_data, + video_frame_info_t *video_info); + void (*check_fbo_dimensions)(void *data, void *chain_data); void (*recompute_pass_sizes)(void *data, + void *chain_data, unsigned width, unsigned height, unsigned vp_width, unsigned vp_height); void (*renderchain_render)(void *data, + void *chain_data, video_frame_info_t *video_info, uint64_t frame_count, const struct video_tex_info *tex_info, From 072570bbf3f90273474c14380b50e77fd2429482 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 11:58:16 +0100 Subject: [PATCH 18/85] (GL) Update GL1 renderchain too --- gfx/drivers_renderchain/gl1_renderchain.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/gfx/drivers_renderchain/gl1_renderchain.c b/gfx/drivers_renderchain/gl1_renderchain.c index 04a756db9f..a9762cf0ba 100644 --- a/gfx/drivers_renderchain/gl1_renderchain.c +++ b/gfx/drivers_renderchain/gl1_renderchain.c @@ -60,11 +60,12 @@ GLenum min_filter_to_mag(GLenum type); void gl1_renderchain_free(void *data, void *chain_data) { (void)chain_data; - (void)gl; + (void)data; } static void gl1_renderchain_bind_prev_texture( void *data, + void *chain_data, const struct video_tex_info *tex_info) { gl_t *gl = (gl_t*)data; @@ -76,7 +77,8 @@ static void gl1_renderchain_bind_prev_texture( } static void gl1_renderchain_viewport_info( - void *data, struct video_viewport *vp) + void *data, void *chain_data, + struct video_viewport *vp) { unsigned width, height; unsigned top_y, top_dist; @@ -95,7 +97,8 @@ static void gl1_renderchain_viewport_info( } static bool gl1_renderchain_read_viewport( - void *data, uint8_t *buffer, bool is_idle) + void *data, void *chain_data, + uint8_t *buffer, bool is_idle) { unsigned num_pixels = 0; gl_t *gl = (gl_t*)data; @@ -134,9 +137,9 @@ static bool gl1_renderchain_read_viewport( return true; } -void gl1_renderchain_free_internal(void *data) +void gl1_renderchain_free_internal(void *data, void *chain_data) { - gl1_renderchain_t *cg_data = (gl1_renderchain_t*)data; + gl1_renderchain_t *cg_data = (gl1_renderchain_t*)chain_data; if (!cg_data) return; @@ -183,7 +186,8 @@ static void gl1_renderchain_ff_matrix(const void *data) glLoadMatrixf(ident.data); } -static void gl1_renderchain_disable_client_arrays(void) +static void gl1_renderchain_disable_client_arrays(void *data, + void *chain_data) { if (gl_query_core_context_in_use()) return; @@ -196,7 +200,8 @@ static void gl1_renderchain_disable_client_arrays(void) glDisableClientState(GL_TEXTURE_COORD_ARRAY); } -static void gl1_renderchain_restore_default_state(void *data) +static void gl1_renderchain_restore_default_state(void *data, + void *chain_data) { gl_t *gl = (gl_t*)data; if (!gl) @@ -209,6 +214,7 @@ static void gl1_renderchain_restore_default_state(void *data) static void gl1_renderchain_copy_frame( void *data, + void *chain_data, video_frame_info_t *video_info, const void *frame, unsigned width, unsigned height, unsigned pitch) @@ -244,6 +250,7 @@ static void gl1_renderchain_copy_frame( } static void gl1_renderchain_readback(void *data, + void *chain_data, unsigned alignment, unsigned fmt, unsigned type, void *src) @@ -260,6 +267,7 @@ static void gl1_renderchain_readback(void *data, } static void gl1_renderchain_set_mvp(void *data, + void *chain_data, void *shader_data, const void *mat_data) { math_matrix_4x4 ident; @@ -274,6 +282,7 @@ static void gl1_renderchain_set_mvp(void *data, } static void gl1_renderchain_set_coords(void *handle_data, + void *chain_data, void *shader_data, const struct video_coords *coords) { /* Fall back to fixed function-style if needed and possible. */ From 267e6fe85fb45dd53adb9d7dc4b1b672401224c4 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 12:02:53 +0100 Subject: [PATCH 19/85] Move fence variables to renderchain data struct --- gfx/common/gl_common.h | 3 -- gfx/drivers_renderchain/gl2_renderchain.c | 37 ++++++++++++----------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index 7eb88af66e..535dd15ada 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -38,8 +38,6 @@ RETRO_BEGIN_DECLS -#define MAX_FENCES 4 - #if defined(HAVE_PSGL) #define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_OES #define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_OES @@ -250,7 +248,6 @@ typedef struct gl struct video_fbo_rect fbo_rect[GFX_MAX_SHADERS]; struct gfx_fbo_scale fbo_scale[GFX_MAX_SHADERS]; - GLsync fences[MAX_FENCES]; const gl_renderchain_driver_t *renderchain_driver; void *renderchain_data; } gl_t; diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index f52f77f5e7..07934a6d52 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -51,9 +51,12 @@ #include "../../configuration.h" #include "../../verbosity.h" +#define MAX_FENCES 4 + typedef struct gl2_renderchain { - void *empty; + unsigned fence_count; + GLsync fences[MAX_FENCES]; } gl2_renderchain_t; #if (!defined(HAVE_OPENGLES) || defined(HAVE_OPENGLES3)) @@ -1144,12 +1147,12 @@ error: void gl2_renderchain_free_internal(void *data, void *chain_data) { - gl2_renderchain_t *cg_data = (gl2_renderchain_t*)chain_data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; - if (!cg_data) + if (!chain) return; - free(cg_data); + free(chain); } static void *gl2_renderchain_new(void) @@ -1399,20 +1402,20 @@ static void gl2_renderchain_fence_iterate( void *chain_data, unsigned hard_sync_frames) { - gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; - gl->fences[gl->fence_count++] = + chain->fences[chain->fence_count++] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); - while (gl->fence_count > hard_sync_frames) + while (chain->fence_count > hard_sync_frames) { - glClientWaitSync(gl->fences[0], + glClientWaitSync(chain->fences[0], GL_SYNC_FLUSH_COMMANDS_BIT, 1000000000); - glDeleteSync(gl->fences[0]); + glDeleteSync(chain->fences[0]); - gl->fence_count--; - memmove(gl->fences, gl->fences + 1, - gl->fence_count * sizeof(GLsync)); + chain->fence_count--; + memmove(chain->fences, chain->fences + 1, + chain->fence_count * sizeof(GLsync)); } } @@ -1420,15 +1423,15 @@ static void gl2_renderchain_fence_free(void *data, void *chain_data) { unsigned i; - gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; - for (i = 0; i < gl->fence_count; i++) + for (i = 0; i < chain->fence_count; i++) { - glClientWaitSync(gl->fences[i], + glClientWaitSync(chain->fences[i], GL_SYNC_FLUSH_COMMANDS_BIT, 1000000000); - glDeleteSync(gl->fences[i]); + glDeleteSync(chain->fences[i]); } - gl->fence_count = 0; + chain->fence_count = 0; } #endif From 69d3fd5047e4c0898e4082632ee56f3c4f87a9bc Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 12:03:29 +0100 Subject: [PATCH 20/85] Get rid of fence_count in gl struct --- gfx/common/gl_common.h | 1 - 1 file changed, 1 deletion(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index 535dd15ada..bf0a8b3ac4 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -222,7 +222,6 @@ typedef struct gl unsigned base_size; /* 2 or 4 */ unsigned overlays; unsigned pbo_readback_index; - unsigned fence_count; unsigned last_width[GFX_MAX_TEXTURES]; unsigned last_height[GFX_MAX_TEXTURES]; From 19ad9aa1cb58691c8a0188260b5799e823363094 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 12:43:22 +0100 Subject: [PATCH 21/85] Add resolve extensions callback --- gfx/drivers/gl.c | 3 +++ gfx/drivers_renderchain/gl1_renderchain.c | 7 ++++--- gfx/drivers_renderchain/gl2_renderchain.c | 6 ++++++ gfx/video_driver.h | 4 ++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 3cc6adf629..b7302756e8 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1371,6 +1371,9 @@ static bool resolve_extensions(gl_t *gl, const char *context_ident) video_driver_unset_rgba(); + if (gl->renderchain_driver->resolve_extensions) + gl->renderchain_driver->resolve_extensions(gl, gl->renderchain_data, context_ident); + #if defined(HAVE_OPENGLES) && !defined(HAVE_PSGL) if (!gl_check_capability(GL_CAPS_BGRA8888)) { diff --git a/gfx/drivers_renderchain/gl1_renderchain.c b/gfx/drivers_renderchain/gl1_renderchain.c index a9762cf0ba..56a5d27650 100644 --- a/gfx/drivers_renderchain/gl1_renderchain.c +++ b/gfx/drivers_renderchain/gl1_renderchain.c @@ -327,10 +327,11 @@ gl_renderchain_driver_t gl2_renderchain = { NULL, /* renderchain_init */ NULL, /* init_hw_render */ gl1_renderchain_free, - NULL, /* deinit_hw_render */ - NULL, /* start_render */ + NULL, /* deinit_hw_render */ + NULL, /* start_render */ NULL, /* check_fbo_dimensions */ NULL, /* recompute_pass_sizes */ - NULL, /* renderchain_render */ + NULL, /* renderchain_render */ + NULL, /* resolve_extensions */ "gl1", }; diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 07934a6d52..5e6d5bcad5 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -1461,6 +1461,11 @@ static void gl2_renderchain_init_textures_reference( #endif } +static void gl2_renderchain_resolve_extensions(void *data, + void *chain_data, const char *context_ident) +{ +} + gl_renderchain_driver_t gl2_renderchain = { NULL, /* set_coords */ NULL, /* set_mvp */ @@ -1513,5 +1518,6 @@ gl_renderchain_driver_t gl2_renderchain = { gl2_renderchain_check_fbo_dimensions, gl2_renderchain_recompute_pass_sizes, gl2_renderchain_render, + gl2_renderchain_resolve_extensions, "gl2", }; diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 33765da5dd..1519bdc7a3 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -904,6 +904,10 @@ typedef struct gl_renderchain_driver uint64_t frame_count, const struct video_tex_info *tex_info, const struct video_tex_info *feedback_info); + void (*resolve_extensions)( + void *data, + void *chain_data, + const char *context_ident); const char *ident; } gl_renderchain_driver_t; From f47888aeda777a317f98e5125cf1e0ee7ab523df Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 12:50:22 +0100 Subject: [PATCH 22/85] Move more variables to renderchain data --- gfx/common/gl_common.h | 3 -- gfx/drivers/gl.c | 7 ---- gfx/drivers_renderchain/gl2_renderchain.c | 42 +++++++++++++++++------ 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index bf0a8b3ac4..8fe344e433 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -168,9 +168,6 @@ typedef struct gl bool hw_render_fbo_init; bool hw_render_depth_init; bool has_fbo; - bool has_srgb_fbo_gles3; - bool has_fp_fbo; - bool has_srgb_fbo; bool hw_render_use; bool core_context_in_use; diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index b7302756e8..262292ca93 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1352,19 +1352,12 @@ static bool resolve_extensions(gl_t *gl, const char *context_ident) * * have_sync - Use ARB_sync to reduce latency. */ - gl->has_srgb_fbo = false; gl->has_fbo = gl_check_capability(GL_CAPS_FBO); gl->have_full_npot_support = gl_check_capability(GL_CAPS_FULL_NPOT_SUPPORT); gl->have_mipmap = gl_check_capability(GL_CAPS_MIPMAP); gl->have_es2_compat = gl_check_capability(GL_CAPS_ES2_COMPAT); - gl->has_fp_fbo = gl_check_capability(GL_CAPS_FP_FBO); gl->support_unpack_row_length = gl_check_capability(GL_CAPS_UNPACK_ROW_LENGTH); gl->have_sync = gl_check_capability(GL_CAPS_SYNC); - /* GLES3 has unpack_subimage and sRGB in core. */ - gl->has_srgb_fbo_gles3 = gl_check_capability(GL_CAPS_SRGB_FBO_ES3); - - if (!settings->bools.video_force_srgb_disable) - gl->has_srgb_fbo = gl_check_capability(GL_CAPS_SRGB_FBO); if (gl->have_sync && settings->bools.video_hard_sync) RARCH_LOG("[GL]: Using ARB_sync to reduce latency.\n"); diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 5e6d5bcad5..97e1a36c45 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -55,6 +55,9 @@ typedef struct gl2_renderchain { + bool has_fp_fbo; + bool has_srgb_fbo_gles3; + bool has_srgb_fbo; unsigned fence_count; GLsync fences[MAX_FENCES]; } gl2_renderchain_t; @@ -296,6 +299,7 @@ static void gl2_renderchain_render( video_shader_ctx_params_t params; video_shader_ctx_info_t shader_info; gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; static GLfloat fbo_tex_coords[8] = {0.0f}; struct video_tex_info fbo_tex_info[GFX_MAX_SHADERS]; struct video_tex_info *fbo_info = NULL; @@ -385,7 +389,7 @@ static void gl2_renderchain_render( } #if defined(GL_FRAMEBUFFER_SRGB) && !defined(HAVE_OPENGLES) - if (gl->has_srgb_fbo) + if (chain->has_srgb_fbo) glDisable(GL_FRAMEBUFFER_SRGB); #endif @@ -565,13 +569,15 @@ error: return false; } -static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) +static void gl_create_fbo_texture(gl_t *gl, + void *chain_data, unsigned i, GLuint texture) { GLenum mag_filter, wrap_enum; video_shader_ctx_filter_t filter_type; video_shader_ctx_wrap_t wrap = {0}; bool fp_fbo = false; bool smooth = false; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; settings_t *settings = config_get_ptr(); GLuint base_filt = settings->bools.video_smooth ? GL_LINEAR : GL_NEAREST; GLuint base_mip_filt = settings->bools.video_smooth ? @@ -603,12 +609,12 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) if (fp_fbo) { - if (!gl->has_fp_fbo) + if (!chain->has_fp_fbo) RARCH_ERR("[GL]: Floating-point FBO was requested, but is not supported. Falling back to UNORM. Result may band/clip/etc.!\n"); } #if !defined(HAVE_OPENGLES2) - if (fp_fbo && gl->has_fp_fbo) + if (fp_fbo && chain->has_fp_fbo) { RARCH_LOG("[GL]: FBO pass #%d is floating-point.\n", i); gl_load_texture_image(GL_TEXTURE_2D, 0, GL_RGBA32F, @@ -623,14 +629,14 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) if (!fp_fbo && srgb_fbo) { - if (!gl->has_srgb_fbo) + if (!chain->has_srgb_fbo) RARCH_ERR("[GL]: sRGB FBO was requested, but it is not supported. Falling back to UNORM. Result may have banding!\n"); } if (settings->bools.video_force_srgb_disable) srgb_fbo = false; - if (srgb_fbo && gl->has_srgb_fbo) + if (srgb_fbo && chain->has_srgb_fbo) { RARCH_LOG("[GL]: FBO pass #%d is sRGB.\n", i); #ifdef HAVE_OPENGLES2 @@ -639,7 +645,7 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) glTexImage2D(GL_TEXTURE_2D, 0, GL_SRGB_ALPHA_EXT, gl->fbo_rect[i].width, gl->fbo_rect[i].height, 0, - gl->has_srgb_fbo_gles3 ? GL_RGBA : GL_SRGB_ALPHA_EXT, + chain->has_srgb_fbo_gles3 ? GL_RGBA : GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE, NULL); #else gl_load_texture_image(GL_TEXTURE_2D, @@ -674,12 +680,14 @@ static void gl_create_fbo_textures(gl_t *gl) glGenTextures(gl->fbo_pass, gl->fbo_texture); for (i = 0; i < gl->fbo_pass; i++) - gl_create_fbo_texture(gl, i, gl->fbo_texture[i]); + gl_create_fbo_texture(gl, gl->renderchain_data, + i, gl->fbo_texture[i]); if (gl->fbo_feedback_enable) { glGenTextures(1, &gl->fbo_feedback_texture); gl_create_fbo_texture(gl, + gl->renderchain_data, gl->fbo_feedback_pass, gl->fbo_feedback_texture); } @@ -767,7 +775,8 @@ static void gl2_renderchain_start_render(void *data, 0, 1, 1, 1 }; - gl_t *gl = (gl_t*)data; + gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); gl2_bind_fb(gl->fbo[0]); @@ -783,7 +792,7 @@ static void gl2_renderchain_start_render(void *data, gl->coords.vertex = fbo_vertexes; #if defined(GL_FRAMEBUFFER_SRGB) && !defined(HAVE_OPENGLES) - if (gl->has_srgb_fbo) + if (chain->has_srgb_fbo) glEnable(GL_FRAMEBUFFER_SRGB); #endif } @@ -1464,6 +1473,19 @@ static void gl2_renderchain_init_textures_reference( static void gl2_renderchain_resolve_extensions(void *data, void *chain_data, const char *context_ident) { + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; + settings_t *settings = config_get_ptr(); + + if (!chain) + return; + + chain->has_srgb_fbo = false; + chain->has_fp_fbo = gl_check_capability(GL_CAPS_FP_FBO); + /* GLES3 has unpack_subimage and sRGB in core. */ + chain->has_srgb_fbo_gles3 = gl_check_capability(GL_CAPS_SRGB_FBO_ES3); + + if (!settings->bools.video_force_srgb_disable) + chain->has_srgb_fbo = gl_check_capability(GL_CAPS_SRGB_FBO); } gl_renderchain_driver_t gl2_renderchain = { From 48c3a509320031a91a7de1bec2a358f972b9e33d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 13:03:14 +0100 Subject: [PATCH 23/85] Move more variables --- gfx/common/gl_common.h | 1 - gfx/drivers/gl.c | 18 ++++++------------ gfx/drivers_renderchain/gl2_renderchain.c | 16 ++++++++++++---- gfx/video_driver.h | 3 ++- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index 8fe344e433..db94c1a268 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -180,7 +180,6 @@ typedef struct gl bool have_full_npot_support; bool have_mipmap; - bool egl_images; bool overlay_enable; bool overlay_full_screen; bool menu_texture_enable; diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 262292ca93..c717513f74 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -544,11 +544,9 @@ static void gl_init_textures_data(gl_t *gl) static void gl_init_textures(gl_t *gl, const video_info_t *video) { unsigned i; - GLenum internal_fmt, texture_type = 0, texture_fmt = 0; - - /* Use regular textures if we use HW render. */ - gl->egl_images = !gl->hw_render_use && gl_check_capability(GL_CAPS_EGLIMAGE) && - video_context_driver_init_image_buffer(video); + GLenum internal_fmt = gl->internal_fmt; + GLenum texture_type = gl->texture_type; + GLenum texture_fmt = gl->texture_fmt; #ifdef HAVE_PSGL if (!gl->pbo) @@ -560,10 +558,6 @@ static void gl_init_textures(gl_t *gl, const video_info_t *video) NULL, GL_STREAM_DRAW); #endif - internal_fmt = gl->internal_fmt; - texture_type = gl->texture_type; - texture_fmt = gl->texture_fmt; - #if defined(HAVE_OPENGLES) && !defined(HAVE_PSGL) /* GLES is picky about which format we use here. * Without extensions, we can *only* render to 16-bit FBOs. */ @@ -1339,7 +1333,7 @@ static void gl_set_nonblock_state(void *data, bool state) context_bind_hw_render(true); } -static bool resolve_extensions(gl_t *gl, const char *context_ident) +static bool resolve_extensions(gl_t *gl, const char *context_ident, const video_info_t *video) { settings_t *settings = config_get_ptr(); @@ -1365,7 +1359,7 @@ static bool resolve_extensions(gl_t *gl, const char *context_ident) video_driver_unset_rgba(); if (gl->renderchain_driver->resolve_extensions) - gl->renderchain_driver->resolve_extensions(gl, gl->renderchain_data, context_ident); + gl->renderchain_driver->resolve_extensions(gl, gl->renderchain_data, context_ident, video); #if defined(HAVE_OPENGLES) && !defined(HAVE_PSGL) if (!gl_check_capability(GL_CAPS_BGRA8888)) @@ -1790,7 +1784,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendEquation(GL_FUNC_ADD); - if (!resolve_extensions(gl, ctx_driver->ident)) + if (!resolve_extensions(gl, ctx_driver->ident, video)) goto error; #ifdef GL_DEBUG diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 97e1a36c45..3ed9b0eb1e 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -55,6 +55,7 @@ typedef struct gl2_renderchain { + bool egl_images; bool has_fp_fbo; bool has_srgb_fbo_gles3; bool has_srgb_fbo; @@ -1253,7 +1254,7 @@ static void gl2_renderchain_copy_frame( } #elif defined(HAVE_OPENGLES) #if defined(HAVE_EGL) - if (gl->egl_images) + if (chain->egl_images) { gfx_ctx_image_t img_info; bool new_egl = false; @@ -1449,7 +1450,8 @@ static void gl2_renderchain_init_textures_reference( unsigned internal_fmt, unsigned texture_fmt, unsigned texture_type) { - gl_t *gl = (gl_t*)data; + gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; #ifdef HAVE_PSGL glTextureReferenceSCE(GL_TEXTURE_2D, 1, gl->tex_w, gl->tex_h, 0, @@ -1457,7 +1459,7 @@ static void gl2_renderchain_init_textures_reference( gl->tex_w * gl->base_size, gl->tex_w * gl->tex_h * i * gl->base_size); #else - if (gl->egl_images) + if (chain->egl_images) return; gl_load_texture_image(GL_TEXTURE_2D, @@ -1471,8 +1473,10 @@ static void gl2_renderchain_init_textures_reference( } static void gl2_renderchain_resolve_extensions(void *data, - void *chain_data, const char *context_ident) + void *chain_data, const char *context_ident, + const video_info_t *video) { + gl_t *gl = (gl_t*)data; gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; settings_t *settings = config_get_ptr(); @@ -1486,6 +1490,10 @@ static void gl2_renderchain_resolve_extensions(void *data, if (!settings->bools.video_force_srgb_disable) chain->has_srgb_fbo = gl_check_capability(GL_CAPS_SRGB_FBO); + + /* Use regular textures if we use HW render. */ + chain->egl_images = !gl->hw_render_use && gl_check_capability(GL_CAPS_EGLIMAGE) && + video_context_driver_init_image_buffer(video); } gl_renderchain_driver_t gl2_renderchain = { diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 1519bdc7a3..43bbef97ca 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -907,7 +907,8 @@ typedef struct gl_renderchain_driver void (*resolve_extensions)( void *data, void *chain_data, - const char *context_ident); + const char *context_ident, + const video_info_t *video); const char *ident; } gl_renderchain_driver_t; From 9a8f73fb6cd472a7e5204464347344ba815d4df0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 13:18:34 +0100 Subject: [PATCH 24/85] Move variables --- gfx/common/gl_common.h | 5 - gfx/drivers_renderchain/gl2_renderchain.c | 152 +++++++++++++--------- 2 files changed, 88 insertions(+), 69 deletions(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index db94c1a268..c413d653c0 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -166,7 +166,6 @@ typedef struct gl bool fbo_inited; bool fbo_feedback_enable; bool hw_render_fbo_init; - bool hw_render_depth_init; bool has_fbo; bool hw_render_use; bool core_context_in_use; @@ -190,7 +189,6 @@ typedef struct gl int version_major; int version_minor; - int fbo_pass; GLuint tex_mag_filter; GLuint tex_min_filter; @@ -199,13 +197,10 @@ typedef struct gl GLuint pbo; GLuint *overlay_tex; GLuint menu_texture; - GLuint vao; GLuint pbo_readback[4]; GLuint texture[GFX_MAX_TEXTURES]; GLuint fbo[GFX_MAX_SHADERS]; - GLuint fbo_texture[GFX_MAX_SHADERS]; GLuint hw_render_fbo[GFX_MAX_TEXTURES]; - GLuint hw_render_depth[GFX_MAX_TEXTURES]; unsigned tex_index; /* For use with PREV. */ unsigned textures; diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 3ed9b0eb1e..0b0eff8ff3 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -59,7 +59,16 @@ typedef struct gl2_renderchain bool has_fp_fbo; bool has_srgb_fbo_gles3; bool has_srgb_fbo; + bool hw_render_depth_init; + + int fbo_pass; + + GLuint vao; + GLuint fbo_texture[GFX_MAX_SHADERS]; + GLuint hw_render_depth[GFX_MAX_TEXTURES]; + unsigned fence_count; + GLsync fences[MAX_FENCES]; } gl2_renderchain_t; @@ -228,12 +237,15 @@ static bool gl_recreate_fbo( return false; } -static void gl_check_fbo_dimension(gl_t *gl, unsigned i, +static void gl_check_fbo_dimension(gl_t *gl, + void *chain_data, + unsigned i, bool update_feedback) { struct video_fbo_rect *fbo_rect = &gl->fbo_rect[i]; /* Check proactively since we might suddently * get sizes of tex_w width or tex_h height. */ + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; unsigned img_width = fbo_rect->max_img_width; unsigned img_height = fbo_rect->max_img_height; unsigned max = img_width > img_height ? img_width : img_height; @@ -242,7 +254,7 @@ static void gl_check_fbo_dimension(gl_t *gl, unsigned i, fbo_rect->width = pow2_size; fbo_rect->height = pow2_size; - gl_recreate_fbo(fbo_rect, gl->fbo[i], &gl->fbo_texture[i]); + gl_recreate_fbo(fbo_rect, gl->fbo[i], &chain->fbo_texture[i]); /* Update feedback texture in-place so we avoid having to * juggle two different fbo_rect structs since they get updated here. */ @@ -269,10 +281,11 @@ static void gl2_renderchain_check_fbo_dimensions(void *data, void *chain_data) { int i; - gl_t *gl = (gl_t*)data; + gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; /* Check if we have to recreate our FBO textures. */ - for (i = 0; i < gl->fbo_pass; i++) + for (i = 0; i < chain->fbo_pass; i++) { struct video_fbo_rect *fbo_rect = &gl->fbo_rect[i]; if (fbo_rect) @@ -282,7 +295,7 @@ static void gl2_renderchain_check_fbo_dimensions(void *data, if ((fbo_rect->max_img_width > fbo_rect->width) || (fbo_rect->max_img_height > fbo_rect->height)) - gl_check_fbo_dimension(gl, i, update_feedback); + gl_check_fbo_dimension(gl, chain_data, i, update_feedback); } } } @@ -317,7 +330,7 @@ static void gl2_renderchain_render( /* Calculate viewports, texture coordinates etc, * and render all passes from FBOs, to another FBO. */ - for (i = 1; i < gl->fbo_pass; i++) + for (i = 1; i < chain->fbo_pass; i++) { video_shader_ctx_coords_t coords; video_shader_ctx_params_t params; @@ -331,7 +344,7 @@ static void gl2_renderchain_render( set_texture_coords(fbo_tex_coords, xamt, yamt); - fbo_info->tex = gl->fbo_texture[i - 1]; + fbo_info->tex = chain->fbo_texture[i - 1]; fbo_info->input_size[0] = prev_rect->img_width; fbo_info->input_size[1] = prev_rect->img_height; fbo_info->tex_size[0] = prev_rect->width; @@ -346,7 +359,7 @@ static void gl2_renderchain_render( shader_info.set_active = true; video_shader_driver_use(shader_info); - glBindTexture(GL_TEXTURE_2D, gl->fbo_texture[i - 1]); + glBindTexture(GL_TEXTURE_2D, chain->fbo_texture[i - 1]); mip_level = i + 1; @@ -395,16 +408,16 @@ static void gl2_renderchain_render( #endif /* Render our last FBO texture directly to screen. */ - prev_rect = &gl->fbo_rect[gl->fbo_pass - 1]; + prev_rect = &gl->fbo_rect[chain->fbo_pass - 1]; xamt = (GLfloat)prev_rect->img_width / prev_rect->width; yamt = (GLfloat)prev_rect->img_height / prev_rect->height; set_texture_coords(fbo_tex_coords, xamt, yamt); /* Push final FBO to list. */ - fbo_info = &fbo_tex_info[gl->fbo_pass - 1]; + fbo_info = &fbo_tex_info[chain->fbo_pass - 1]; - fbo_info->tex = gl->fbo_texture[gl->fbo_pass - 1]; + fbo_info->tex = chain->fbo_texture[chain->fbo_pass - 1]; fbo_info->input_size[0] = prev_rect->img_width; fbo_info->input_size[1] = prev_rect->img_height; fbo_info->tex_size[0] = prev_rect->width; @@ -416,14 +429,14 @@ static void gl2_renderchain_render( gl2_renderchain_bind_backbuffer(gl, chain_data); shader_info.data = gl; - shader_info.idx = gl->fbo_pass + 1; + shader_info.idx = chain->fbo_pass + 1; shader_info.set_active = true; video_shader_driver_use(shader_info); - glBindTexture(GL_TEXTURE_2D, gl->fbo_texture[gl->fbo_pass - 1]); + glBindTexture(GL_TEXTURE_2D, chain->fbo_texture[chain->fbo_pass - 1]); - mip_level = gl->fbo_pass + 1; + mip_level = chain->fbo_pass + 1; if (video_shader_driver_mipmap_input(&mip_level) && gl->have_mipmap) @@ -469,15 +482,16 @@ static void gl2_renderchain_render( static void gl2_renderchain_deinit_fbo(void *data, void *chain_data) { - gl_t *gl = (gl_t*)data; + gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; if (!gl) return; - glDeleteTextures(gl->fbo_pass, gl->fbo_texture); - gl2_delete_fb(gl->fbo_pass, gl->fbo); + glDeleteTextures(chain->fbo_pass, chain->fbo_texture); + gl2_delete_fb(chain->fbo_pass, gl->fbo); - memset(gl->fbo_texture, 0, sizeof(gl->fbo_texture)); + memset(chain->fbo_texture, 0, sizeof(chain->fbo_texture)); memset(gl->fbo, 0, sizeof(gl->fbo)); if (gl->fbo_feedback) @@ -485,9 +499,10 @@ static void gl2_renderchain_deinit_fbo(void *data, if (gl->fbo_feedback_texture) glDeleteTextures(1, &gl->fbo_feedback_texture); + chain->fbo_pass = 0; + gl->fbo_inited = false; gl->fbo_feedback_enable = false; - gl->fbo_pass = 0; gl->fbo_feedback_pass = 0; gl->fbo_feedback_texture = 0; gl->fbo_feedback = 0; @@ -497,7 +512,8 @@ static void gl2_renderchain_deinit_hw_render( void *data, void *chain_data) { - gl_t *gl = (gl_t*)data; + gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; if (!gl) return; @@ -505,8 +521,8 @@ static void gl2_renderchain_deinit_hw_render( if (gl->hw_render_fbo_init) gl2_delete_fb(gl->textures, gl->hw_render_fbo); - if (gl->hw_render_depth_init) - gl2_delete_rb(gl->textures, gl->hw_render_depth); + if (chain->hw_render_depth_init) + gl2_delete_rb(gl->textures, chain->hw_render_depth); gl->hw_render_fbo_init = false; context_bind_hw_render(false); @@ -520,20 +536,21 @@ static void gl2_renderchain_free(void *data, void *chain_data) gl2_renderchain_deinit_hw_render(gl, chain_data); } -static bool gl_create_fbo_targets(gl_t *gl) +static bool gl_create_fbo_targets(gl_t *gl, void *chain_data) { int i; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; glBindTexture(GL_TEXTURE_2D, 0); - gl2_gen_fb(gl->fbo_pass, gl->fbo); + gl2_gen_fb(chain->fbo_pass, gl->fbo); - for (i = 0; i < gl->fbo_pass; i++) + for (i = 0; i < chain->fbo_pass; i++) { GLenum status; gl2_bind_fb(gl->fbo[i]); gl2_fb_texture_2d(RARCH_GL_FRAMEBUFFER, - RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl->fbo_texture[i], 0); + RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, chain->fbo_texture[i], 0); status = gl2_check_fb_status(RARCH_GL_FRAMEBUFFER); if (status != RARCH_GL_FRAMEBUFFER_COMPLETE) @@ -563,7 +580,7 @@ static bool gl_create_fbo_targets(gl_t *gl) return true; error: - gl2_delete_fb(gl->fbo_pass, gl->fbo); + gl2_delete_fb(chain->fbo_pass, gl->fbo); if (gl->fbo_feedback) gl2_delete_fb(1, &gl->fbo_feedback); RARCH_ERR("[GL]: Failed to set up frame buffer objects. Multi-pass shading will not work.\n"); @@ -675,14 +692,16 @@ static void gl_create_fbo_texture(gl_t *gl, } } -static void gl_create_fbo_textures(gl_t *gl) +static void gl_create_fbo_textures(gl_t *gl, void *chain_data) { int i; - glGenTextures(gl->fbo_pass, gl->fbo_texture); + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; - for (i = 0; i < gl->fbo_pass; i++) + glGenTextures(chain->fbo_pass, chain->fbo_texture); + + for (i = 0; i < chain->fbo_pass; i++) gl_create_fbo_texture(gl, gl->renderchain_data, - i, gl->fbo_texture[i]); + i, chain->fbo_texture[i]); if (gl->fbo_feedback_enable) { @@ -707,6 +726,7 @@ static void gl2_renderchain_recompute_pass_sizes( { int i; gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; bool size_modified = false; GLint max_size = 0; unsigned last_width = width; @@ -717,7 +737,7 @@ static void gl2_renderchain_recompute_pass_sizes( glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_size); /* Calculate viewports for FBOs. */ - for (i = 0; i < gl->fbo_pass; i++) + for (i = 0; i < chain->fbo_pass; i++) { struct video_fbo_rect *fbo_rect = &gl->fbo_rect[i]; struct gfx_fbo_scale *fbo_scale = &gl->fbo_scale[i]; @@ -808,7 +828,8 @@ void gl2_renderchain_init( video_shader_ctx_scale_t scaler; video_shader_ctx_info_t shader_info; struct gfx_fbo_scale scale, scale_last; - gl_t *gl = (gl_t*)data; + gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; if (!video_shader_driver_info(&shader_info)) return; @@ -838,9 +859,9 @@ void gl2_renderchain_init( return; } - gl->fbo_pass = shader_info.num - 1; + chain->fbo_pass = shader_info.num - 1; if (scale_last.valid) - gl->fbo_pass++; + chain->fbo_pass++; if (!scale.valid) { @@ -852,7 +873,7 @@ void gl2_renderchain_init( gl->fbo_scale[0] = scale; - for (i = 1; i < gl->fbo_pass; i++) + for (i = 1; i < chain->fbo_pass; i++) { scaler.idx = i + 1; scaler.scale = &gl->fbo_scale[i]; @@ -872,7 +893,7 @@ void gl2_renderchain_init( chain_data, fbo_width, fbo_height, width, height); - for (i = 0; i < gl->fbo_pass; i++) + for (i = 0; i < chain->fbo_pass; i++) { gl->fbo_rect[i].width = next_pow2(gl->fbo_rect[i].img_width); gl->fbo_rect[i].height = next_pow2(gl->fbo_rect[i].img_height); @@ -884,7 +905,7 @@ void gl2_renderchain_init( &gl->fbo_feedback_pass); if (gl->fbo_feedback_enable && gl->fbo_feedback_pass - < (unsigned)gl->fbo_pass) + < (unsigned)chain->fbo_pass) { RARCH_LOG("[GL]: Creating feedback FBO %d @ %ux%u\n", i, gl->fbo_rect[gl->fbo_feedback_pass].width, @@ -893,14 +914,14 @@ void gl2_renderchain_init( else if (gl->fbo_feedback_enable) { RARCH_WARN("[GL]: Tried to create feedback FBO of pass #%u, but there are only %d FBO passes. Will use input texture as feedback texture.\n", - gl->fbo_feedback_pass, gl->fbo_pass); + gl->fbo_feedback_pass, chain->fbo_pass); gl->fbo_feedback_enable = false; } - gl_create_fbo_textures(gl); - if (!gl || !gl_create_fbo_targets(gl)) + gl_create_fbo_textures(gl, chain); + if (!gl || !gl_create_fbo_targets(gl, chain)) { - glDeleteTextures(gl->fbo_pass, gl->fbo_texture); + glDeleteTextures(chain->fbo_pass, chain->fbo_texture); RARCH_ERR("[GL]: Failed to create FBO targets. Will continue without FBO.\n"); return; } @@ -922,6 +943,7 @@ static bool gl2_renderchain_init_hw_render( struct retro_hw_render_callback *hwr = video_driver_get_hw_context(); gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; /* We can only share texture objects through contexts. * FBOs are "abstract" objects and are not shared. */ @@ -946,8 +968,8 @@ static bool gl2_renderchain_init_hw_render( if (depth) { - gl2_gen_rb(gl->textures, gl->hw_render_depth); - gl->hw_render_depth_init = true; + gl2_gen_rb(gl->textures, chain->hw_render_depth); + chain->hw_render_depth_init = true; } for (i = 0; i < gl->textures; i++) @@ -958,7 +980,7 @@ static bool gl2_renderchain_init_hw_render( if (depth) { - gl2_bind_rb(RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); + gl2_bind_rb(RARCH_GL_RENDERBUFFER, chain->hw_render_depth[i]); gl2_rb_storage(RARCH_GL_RENDERBUFFER, stencil ? RARCH_GL_DEPTH24_STENCIL8 : GL_DEPTH_COMPONENT16, width, height); @@ -971,22 +993,26 @@ static bool gl2_renderchain_init_hw_render( * There's no GL_DEPTH_STENCIL_ATTACHMENT like in desktop GL. */ gl2_fb_rb(RARCH_GL_FRAMEBUFFER, RARCH_GL_DEPTH_ATTACHMENT, - RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); + RARCH_GL_RENDERBUFFER, + chain->hw_render_depth[i]); gl2_fb_rb(RARCH_GL_FRAMEBUFFER, RARCH_GL_STENCIL_ATTACHMENT, - RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); + RARCH_GL_RENDERBUFFER, + chain->hw_render_depth[i]); #else /* We use ARB FBO extensions, no need to check. */ gl2_fb_rb(RARCH_GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, - RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); + RARCH_GL_RENDERBUFFER, + chain->hw_render_depth[i]); #endif } else { gl2_fb_rb(RARCH_GL_FRAMEBUFFER, RARCH_GL_DEPTH_ATTACHMENT, - RARCH_GL_RENDERBUFFER, gl->hw_render_depth[i]); + RARCH_GL_RENDERBUFFER, + chain->hw_render_depth[i]); } } @@ -1011,7 +1037,8 @@ static void gl2_renderchain_bind_prev_texture( void *chain_data, const struct video_tex_info *tex_info) { - gl_t *gl = (gl_t*)data; + gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; memmove(gl->prev_info + 1, gl->prev_info, sizeof(*tex_info) * (gl->textures - 1)); @@ -1025,9 +1052,9 @@ static void gl2_renderchain_bind_prev_texture( GLuint tmp_fbo = gl->fbo_feedback; GLuint tmp_tex = gl->fbo_feedback_texture; gl->fbo_feedback = gl->fbo[gl->fbo_feedback_pass]; - gl->fbo_feedback_texture = gl->fbo_texture[gl->fbo_feedback_pass]; + gl->fbo_feedback_texture = chain->fbo_texture[gl->fbo_feedback_pass]; gl->fbo[gl->fbo_feedback_pass] = tmp_fbo; - gl->fbo_texture[gl->fbo_feedback_pass] = tmp_tex; + chain->fbo_texture[gl->fbo_feedback_pass] = tmp_tex; } } @@ -1178,37 +1205,34 @@ static void *gl2_renderchain_new(void) static void gl2_renderchain_bind_vao(void *data, void *chain_data) { - gl_t *gl = (gl_t*)data; - if (!gl) + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; + if (!chain) return; - glBindVertexArray(gl->vao); + glBindVertexArray(chain->vao); } static void gl2_renderchain_unbind_vao(void *data, void *chain_data) { - gl_t *gl = (gl_t*)data; - if (!gl) - return; glBindVertexArray(0); } static void gl2_renderchain_new_vao(void *data, void *chain_data) { - gl_t *gl = (gl_t*)data; - if (!gl) + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; + if (!chain) return; - glGenVertexArrays(1, &gl->vao); + glGenVertexArrays(1, &chain->vao); } static void gl2_renderchain_free_vao(void *data, void *chain_data) { - gl_t *gl = (gl_t*)data; - if (!gl) + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; + if (!chain) return; - glDeleteVertexArrays(1, &gl->vao); + glDeleteVertexArrays(1, &chain->vao); } #endif From 2fd720bcb349043ae973ff4788deb8f0badb458b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 13:21:23 +0100 Subject: [PATCH 25/85] move more variables over --- gfx/common/gl_common.h | 1 - gfx/drivers_renderchain/gl2_renderchain.c | 20 +++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index c413d653c0..48458363c3 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -236,7 +236,6 @@ typedef struct gl video_info_t video_info; struct video_tex_info prev_info[GFX_MAX_TEXTURES]; struct video_fbo_rect fbo_rect[GFX_MAX_SHADERS]; - struct gfx_fbo_scale fbo_scale[GFX_MAX_SHADERS]; const gl_renderchain_driver_t *renderchain_driver; void *renderchain_data; diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 0b0eff8ff3..972d93844c 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -70,6 +70,8 @@ typedef struct gl2_renderchain unsigned fence_count; GLsync fences[MAX_FENCES]; + + struct gfx_fbo_scale fbo_scale[GFX_MAX_SHADERS]; } gl2_renderchain_t; #if (!defined(HAVE_OPENGLES) || defined(HAVE_OPENGLES3)) @@ -623,7 +625,7 @@ static void gl_create_fbo_texture(gl_t *gl, gl_bind_texture(texture, wrap_enum, mag_filter, min_filter); - fp_fbo = gl->fbo_scale[i].fp_fbo; + fp_fbo = chain->fbo_scale[i].fp_fbo; if (fp_fbo) { @@ -643,7 +645,7 @@ static void gl_create_fbo_texture(gl_t *gl, #endif { #ifndef HAVE_OPENGLES - bool srgb_fbo = gl->fbo_scale[i].srgb_fbo; + bool srgb_fbo = chain->fbo_scale[i].srgb_fbo; if (!fp_fbo && srgb_fbo) { @@ -740,7 +742,7 @@ static void gl2_renderchain_recompute_pass_sizes( for (i = 0; i < chain->fbo_pass; i++) { struct video_fbo_rect *fbo_rect = &gl->fbo_rect[i]; - struct gfx_fbo_scale *fbo_scale = &gl->fbo_scale[i]; + struct gfx_fbo_scale *fbo_scale = &chain->fbo_scale[i]; gl2_renderchain_convert_geometry( gl, fbo_rect, fbo_scale, @@ -871,21 +873,21 @@ void gl2_renderchain_init( scale.valid = true; } - gl->fbo_scale[0] = scale; + chain->fbo_scale[0] = scale; for (i = 1; i < chain->fbo_pass; i++) { scaler.idx = i + 1; - scaler.scale = &gl->fbo_scale[i]; + scaler.scale = &chain->fbo_scale[i]; video_shader_driver_scale(&scaler); - if (!gl->fbo_scale[i].valid) + if (!chain->fbo_scale[i].valid) { - gl->fbo_scale[i].scale_x = gl->fbo_scale[i].scale_y = 1.0f; - gl->fbo_scale[i].type_x = gl->fbo_scale[i].type_y = + chain->fbo_scale[i].scale_x = chain->fbo_scale[i].scale_y = 1.0f; + chain->fbo_scale[i].type_x = chain->fbo_scale[i].type_y = RARCH_SCALE_INPUT; - gl->fbo_scale[i].valid = true; + chain->fbo_scale[i].valid = true; } } From f08b04952004397f51478184b5c3b63de314340e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 13:24:27 +0100 Subject: [PATCH 26/85] Move more variables --- gfx/common/gl_common.h | 1 - gfx/drivers_renderchain/gl2_renderchain.c | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/gfx/common/gl_common.h b/gfx/common/gl_common.h index 48458363c3..7fb5527dcf 100644 --- a/gfx/common/gl_common.h +++ b/gfx/common/gl_common.h @@ -199,7 +199,6 @@ typedef struct gl GLuint menu_texture; GLuint pbo_readback[4]; GLuint texture[GFX_MAX_TEXTURES]; - GLuint fbo[GFX_MAX_SHADERS]; GLuint hw_render_fbo[GFX_MAX_TEXTURES]; unsigned tex_index; /* For use with PREV. */ diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 972d93844c..a74e0d6637 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -64,6 +64,7 @@ typedef struct gl2_renderchain int fbo_pass; GLuint vao; + GLuint fbo[GFX_MAX_SHADERS]; GLuint fbo_texture[GFX_MAX_SHADERS]; GLuint hw_render_depth[GFX_MAX_TEXTURES]; @@ -256,7 +257,7 @@ static void gl_check_fbo_dimension(gl_t *gl, fbo_rect->width = pow2_size; fbo_rect->height = pow2_size; - gl_recreate_fbo(fbo_rect, gl->fbo[i], &chain->fbo_texture[i]); + gl_recreate_fbo(fbo_rect, chain->fbo[i], &chain->fbo_texture[i]); /* Update feedback texture in-place so we avoid having to * juggle two different fbo_rect structs since they get updated here. */ @@ -354,7 +355,7 @@ static void gl2_renderchain_render( memcpy(fbo_info->coord, fbo_tex_coords, sizeof(fbo_tex_coords)); fbo_tex_info_cnt++; - gl2_bind_fb(gl->fbo[i]); + gl2_bind_fb(chain->fbo[i]); shader_info.data = gl; shader_info.idx = i + 1; @@ -491,10 +492,10 @@ static void gl2_renderchain_deinit_fbo(void *data, return; glDeleteTextures(chain->fbo_pass, chain->fbo_texture); - gl2_delete_fb(chain->fbo_pass, gl->fbo); + gl2_delete_fb(chain->fbo_pass, chain->fbo); memset(chain->fbo_texture, 0, sizeof(chain->fbo_texture)); - memset(gl->fbo, 0, sizeof(gl->fbo)); + memset(chain->fbo, 0, sizeof(chain->fbo)); if (gl->fbo_feedback) gl2_delete_fb(1, &gl->fbo_feedback); @@ -544,13 +545,13 @@ static bool gl_create_fbo_targets(gl_t *gl, void *chain_data) gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; glBindTexture(GL_TEXTURE_2D, 0); - gl2_gen_fb(chain->fbo_pass, gl->fbo); + gl2_gen_fb(chain->fbo_pass, chain->fbo); for (i = 0; i < chain->fbo_pass; i++) { GLenum status; - gl2_bind_fb(gl->fbo[i]); + gl2_bind_fb(chain->fbo[i]); gl2_fb_texture_2d(RARCH_GL_FRAMEBUFFER, RARCH_GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, chain->fbo_texture[i], 0); @@ -582,7 +583,7 @@ static bool gl_create_fbo_targets(gl_t *gl, void *chain_data) return true; error: - gl2_delete_fb(chain->fbo_pass, gl->fbo); + gl2_delete_fb(chain->fbo_pass, chain->fbo); if (gl->fbo_feedback) gl2_delete_fb(1, &gl->fbo_feedback); RARCH_ERR("[GL]: Failed to set up frame buffer objects. Multi-pass shading will not work.\n"); @@ -802,7 +803,7 @@ static void gl2_renderchain_start_render(void *data, gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; glBindTexture(GL_TEXTURE_2D, gl->texture[gl->tex_index]); - gl2_bind_fb(gl->fbo[0]); + gl2_bind_fb(chain->fbo[0]); gl_set_viewport(gl, video_info, gl->fbo_rect[0].img_width, @@ -1053,9 +1054,9 @@ static void gl2_renderchain_bind_prev_texture( { GLuint tmp_fbo = gl->fbo_feedback; GLuint tmp_tex = gl->fbo_feedback_texture; - gl->fbo_feedback = gl->fbo[gl->fbo_feedback_pass]; + gl->fbo_feedback = chain->fbo[gl->fbo_feedback_pass]; gl->fbo_feedback_texture = chain->fbo_texture[gl->fbo_feedback_pass]; - gl->fbo[gl->fbo_feedback_pass] = tmp_fbo; + chain->fbo[gl->fbo_feedback_pass] = tmp_fbo; chain->fbo_texture[gl->fbo_feedback_pass] = tmp_tex; } } From 50148c03e27083af64f194ab32595566b9442718 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 13:27:05 +0100 Subject: [PATCH 27/85] not used anymore https://github.com/libretro/RetroArch/commit/4e66962ba83941b85b206778828596c6ad20be33 --- libretro-common/include/streams/file_stream.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libretro-common/include/streams/file_stream.h b/libretro-common/include/streams/file_stream.h index e6d6bbca1c..c57731d76a 100644 --- a/libretro-common/include/streams/file_stream.h +++ b/libretro-common/include/streams/file_stream.h @@ -63,10 +63,9 @@ const char *filestream_get_ext(RFILE *stream); * @bufsize : optional buffer size (-1 or 0 to use default) * * Opens a file for reading or writing, depending on the requested mode. - * If bufsize is > 0 for unbuffered modes (like RFILE_MODE_WRITE), file will instead be fully buffered. * Returns a pointer to an RFILE if opened successfully, otherwise NULL. **/ -RFILE *filestream_open(const char *path, unsigned mode, ssize_t bufsize); +RFILE *filestream_open(const char *path, unsigned mode, ssize_t unused); ssize_t filestream_seek(RFILE *stream, ssize_t offset, int whence); From 89f7afdc8f28a3e28f6a14c707671ea62f44bfb3 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 13:28:38 +0100 Subject: [PATCH 28/85] silence warning --- libretro-common/streams/file_stream.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index c4dcddf0a7..ff742674b7 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -166,7 +166,6 @@ void filestream_set_size(RFILE *stream) * @bufsize : optional buffer size (-1 or 0 to use default) * * Opens a file for reading or writing, depending on the requested mode. - * If bufsize is > 0 for unbuffered modes (like RFILE_MODE_WRITE), file will instead be fully buffered. * Returns a pointer to an RFILE if opened successfully, otherwise NULL. **/ RFILE *filestream_open(const char *path, unsigned mode, ssize_t unused) @@ -192,6 +191,7 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t unused) (void)mode_int; (void)flags; + (void)bufsize; stream->hints = mode; From df55e6b4d1b094794bc08356eea01468f2fa6e06 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 13:30:38 +0100 Subject: [PATCH 29/85] actually, let's just completely remove it --- libretro-common/streams/file_stream.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index ff742674b7..f8db1c9442 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -170,7 +170,6 @@ void filestream_set_size(RFILE *stream) **/ RFILE *filestream_open(const char *path, unsigned mode, ssize_t unused) { - ssize_t bufsize = 0x4000; int flags = 0; int mode_int = 0; #if defined(HAVE_BUFFERED_IO) @@ -191,7 +190,6 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t unused) (void)mode_int; (void)flags; - (void)bufsize; stream->hints = mode; @@ -298,20 +296,17 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t unused) if (!stream->fp) goto error; - if (bufsize > 0) - { - /* Regarding setvbuf: - * - * https://www.freebsd.org/cgi/man.cgi?query=setvbuf&apropos=0&sektion=0&manpath=FreeBSD+11.1-RELEASE&arch=default&format=html - * - * If the size argument is not zero but buf is NULL, a buffer of the given size will be allocated immediately, and - * released on close. This is an extension to ANSI C. - * - * Since C89 does not support specifying a null buffer with a non-zero size, we create and track our own buffer for it. - */ - stream->buf = (char*)calloc(1, bufsize); - setvbuf(stream->fp, stream->buf, _IOFBF, bufsize); - } + /* Regarding setvbuf: + * + * https://www.freebsd.org/cgi/man.cgi?query=setvbuf&apropos=0&sektion=0&manpath=FreeBSD+11.1-RELEASE&arch=default&format=html + * + * If the size argument is not zero but buf is NULL, a buffer of the given size will be allocated immediately, and + * released on close. This is an extension to ANSI C. + * + * Since C89 does not support specifying a null buffer with a non-zero size, we create and track our own buffer for it. + */ + stream->buf = (char*)calloc(1, 0x4000); + setvbuf(stream->fp, stream->buf, _IOFBF, 0x4000); } else #endif From 0d4ac123100f8c473a30064eb0fa7ea9982f5a9c Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 13:34:15 +0100 Subject: [PATCH 30/85] Update file_stream.c --- libretro-common/streams/file_stream.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index f8db1c9442..5703a69b1d 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -305,6 +305,7 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t unused) * * Since C89 does not support specifying a null buffer with a non-zero size, we create and track our own buffer for it. */ + /* TODO: this is only useful for a few platforms, find which and add ifdef */ stream->buf = (char*)calloc(1, 0x4000); setvbuf(stream->fp, stream->buf, _IOFBF, 0x4000); } From 2b3cc8898a0ae2312feba3c40d1ba7639b7fd9dc Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 13:41:04 +0100 Subject: [PATCH 31/85] Fix this one for non-stdio backends Why does filestream_get_fp exist --- playlist.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/playlist.c b/playlist.c index 2c22d9243d..5ccc40cd2e 100644 --- a/playlist.c +++ b/playlist.c @@ -381,7 +381,6 @@ void playlist_write_file(playlist_t *playlist) { size_t i; RFILE *file = NULL; - FILE *fp = NULL; if (!playlist || !playlist->modified) return; @@ -394,10 +393,8 @@ void playlist_write_file(playlist_t *playlist) return; } - fp = filestream_get_fp(file); - for (i = 0; i < playlist->size; i++) - fprintf(fp, "%s\n%s\n%s\n%s\n%s\n%s\n", + filestream_printf(file, "%s\n%s\n%s\n%s\n%s\n%s\n", playlist->entries[i].path ? playlist->entries[i].path : "", playlist->entries[i].label ? playlist->entries[i].label : "", playlist->entries[i].core_path, From 130e4522e2c580dec7989736dfe898dcd9dc188c Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 13:51:25 +0100 Subject: [PATCH 32/85] Update file_stream.h --- libretro-common/include/streams/file_stream.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libretro-common/include/streams/file_stream.h b/libretro-common/include/streams/file_stream.h index c57731d76a..ee8cc8e0ba 100644 --- a/libretro-common/include/streams/file_stream.h +++ b/libretro-common/include/streams/file_stream.h @@ -99,8 +99,11 @@ int filestream_printf(RFILE *stream, const char* format, ...); int filestream_error(RFILE *stream); -int filestream_get_fd(RFILE *stream); +/* DO NOT put this function back, unless you want to deal with + the UNAVOIDABLE REGRESSIONS on platforms using unexpected rfile backends +int filestream_get_fd(RFILE *stream); */ +/* TODO: remove, for the same reason as the above */ FILE* filestream_get_fp(RFILE *stream); int filestream_flush(RFILE *stream); From e4bb8e7aeb286b2c3e4e0bc890b72ee2a435c3f0 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 13:52:11 +0100 Subject: [PATCH 33/85] Update file_stream.c --- libretro-common/streams/file_stream.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index 5703a69b1d..fce0934a92 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -121,17 +121,6 @@ FILE* filestream_get_fp(RFILE *stream) return stream->fp; } -int filestream_get_fd(RFILE *stream) -{ - if (!stream) - return -1; -#if defined(HAVE_BUFFERED_IO) - if ((stream->hints & RFILE_HINT_UNBUFFERED) == 0) - return fileno(stream->fp); -#endif - return stream->fd; -} - const char *filestream_get_ext(RFILE *stream) { if (!stream) From 1aa6ae1b389c2a18ca2ec48161b9a5b4cd53e812 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 14:25:16 +0100 Subject: [PATCH 34/85] Use FILE* all the way Fixes platforms where RFILE isn't using the FILE* backend, needed for #5664 --- verbosity.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/verbosity.c b/verbosity.c index 83dca5d02f..368067fa96 100644 --- a/verbosity.c +++ b/verbosity.c @@ -49,8 +49,8 @@ /* If this is non-NULL. RARCH_LOG and friends * will write to this file. */ -static RFILE *log_file = NULL; static FILE *log_file_fp = NULL; +static void* log_file_buf = NULL; static bool main_verbosity = false; static bool log_file_initialized = false; @@ -96,17 +96,21 @@ void retro_main_log_file_init(const char *path) if (path == NULL) return; - log_file = filestream_open(path, RFILE_MODE_WRITE, -1); - log_file_fp = filestream_get_fp(log_file); + log_file_fp = fopen(path, "wb"); log_file_initialized = true; + + /* TODO: this is only useful for a few platforms, find which and add ifdef */ + log_file_buf = (char*)calloc(1, 0x4000); + setvbuf(log_file_fp, log_file_buf, _IOFBF, 0x4000); } void retro_main_log_file_deinit(void) { - if (log_file && log_file_fp != stderr) - filestream_close(log_file); - log_file = NULL; + if (log_file_fp && log_file_fp != stderr) + fclose(log_file_fp); + if (log_file_buf) free(log_file_buf); log_file_fp = NULL; + log_file_buf = NULL; } #if !defined(HAVE_LOGGER) From b9900b1fb8e7c570d338325dd827badc044e98ab Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 14:27:36 +0100 Subject: [PATCH 35/85] This cast isn't needed, and probably breaks CXX_BUILD --- verbosity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/verbosity.c b/verbosity.c index 368067fa96..2fb735e6bf 100644 --- a/verbosity.c +++ b/verbosity.c @@ -100,7 +100,7 @@ void retro_main_log_file_init(const char *path) log_file_initialized = true; /* TODO: this is only useful for a few platforms, find which and add ifdef */ - log_file_buf = (char*)calloc(1, 0x4000); + log_file_buf = calloc(1, 0x4000); setvbuf(log_file_fp, log_file_buf, _IOFBF, 0x4000); } From 300052626fc4db994a1e94a46c4ed93d3dd179b4 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 14:30:32 +0100 Subject: [PATCH 36/85] Use FILE* all the way Fixes platforms where RFILE isn't using the FILE* backend, needed for #5664 --- libretro-common/file/config_file.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 70f7b64aab..67c0703ff6 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -912,20 +912,28 @@ void config_set_bool(config_file_t *conf, const char *key, bool val) bool config_file_write(config_file_t *conf, const char *path) { - RFILE *file = NULL; + FILE* file = NULL; + void* buf = NULL; if (!string_is_empty(path)) { - file = filestream_open(path, RFILE_MODE_WRITE, 0x4000); + file = fopen(path, "wb"); if (!file) return false; - config_file_dump(conf, filestream_get_fp(file)); + + /* TODO: this is only useful for a few platforms, find which and add ifdef */ + buf = calloc(1, 0x4000); + setvbuf(file, buf, _IOFBF, 0x4000); + + config_file_dump(conf, file); } else config_file_dump(conf, stdout); - if (file) - filestream_close(file); + if (file && file != stdout) + fclose(file); + if (buf) + free(buf); return true; } From dca30d533fc415d04a03a79965e223f2f3a4d39e Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 14:31:11 +0100 Subject: [PATCH 37/85] Update file_stream.h --- libretro-common/include/streams/file_stream.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libretro-common/include/streams/file_stream.h b/libretro-common/include/streams/file_stream.h index ee8cc8e0ba..06cdf33ded 100644 --- a/libretro-common/include/streams/file_stream.h +++ b/libretro-common/include/streams/file_stream.h @@ -99,12 +99,10 @@ int filestream_printf(RFILE *stream, const char* format, ...); int filestream_error(RFILE *stream); -/* DO NOT put this function back, unless you want to deal with +/* DO NOT put these functions back, unless you want to deal with the UNAVOIDABLE REGRESSIONS on platforms using unexpected rfile backends -int filestream_get_fd(RFILE *stream); */ - -/* TODO: remove, for the same reason as the above */ -FILE* filestream_get_fp(RFILE *stream); +int filestream_get_fd(RFILE *stream); +FILE* filestream_get_fp(RFILE *stream); */ int filestream_flush(RFILE *stream); From c10859b745cfd902246b646c05e666c7461345a4 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 14:31:31 +0100 Subject: [PATCH 38/85] Update file_stream.c --- libretro-common/streams/file_stream.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index fce0934a92..9fdf995d8f 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -114,13 +114,6 @@ struct RFILE char *buf; }; -FILE* filestream_get_fp(RFILE *stream) -{ - if (!stream) - return NULL; - return stream->fp; -} - const char *filestream_get_ext(RFILE *stream) { if (!stream) From fbd3a435d2f93ed6d217257b055e411d700a66c5 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 15:01:57 +0100 Subject: [PATCH 39/85] Turns out this is char*, let's cast because CXX_BUILD wants that --- verbosity.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/verbosity.c b/verbosity.c index 2fb735e6bf..734dcaba39 100644 --- a/verbosity.c +++ b/verbosity.c @@ -101,7 +101,7 @@ void retro_main_log_file_init(const char *path) /* TODO: this is only useful for a few platforms, find which and add ifdef */ log_file_buf = calloc(1, 0x4000); - setvbuf(log_file_fp, log_file_buf, _IOFBF, 0x4000); + setvbuf(log_file_fp, (char*)log_file_buf, _IOFBF, 0x4000); } void retro_main_log_file_deinit(void) From ff4dca86f95ab0cf34004ddca9cacc353127bda4 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 15:01:58 +0100 Subject: [PATCH 40/85] Turns out this is char*, let's cast because CXX_BUILD wants that --- libretro-common/file/config_file.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 67c0703ff6..66e03f3f7b 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -923,7 +923,7 @@ bool config_file_write(config_file_t *conf, const char *path) /* TODO: this is only useful for a few platforms, find which and add ifdef */ buf = calloc(1, 0x4000); - setvbuf(file, buf, _IOFBF, 0x4000); + setvbuf(file, (char*)buf, _IOFBF, 0x4000); config_file_dump(conf, file); } From 059354de2f60e14c3894382d53641a1cb1d09845 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 4 Dec 2017 16:26:28 +0100 Subject: [PATCH 41/85] Cleanup for config_file_write --- libretro-common/file/config_file.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 66e03f3f7b..9e23012168 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -912,12 +912,10 @@ void config_set_bool(config_file_t *conf, const char *key, bool val) bool config_file_write(config_file_t *conf, const char *path) { - FILE* file = NULL; - void* buf = NULL; - if (!string_is_empty(path)) { - file = fopen(path, "wb"); + void* buf = NULL; + FILE *file = fopen(path, "wb"); if (!file) return false; @@ -926,15 +924,14 @@ bool config_file_write(config_file_t *conf, const char *path) setvbuf(file, (char*)buf, _IOFBF, 0x4000); config_file_dump(conf, file); + + if (file != stdout) + fclose(file); + free(buf); } else config_file_dump(conf, stdout); - if (file && file != stdout) - fclose(file); - if (buf) - free(buf); - return true; } From d74ad6cd5e9fe19bcba0e299369aaa9960533c0b Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 16:32:40 +0100 Subject: [PATCH 42/85] Create fopen_utf8.h --- libretro-common/include/compat/fopen_utf8.h | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 libretro-common/include/compat/fopen_utf8.h diff --git a/libretro-common/include/compat/fopen_utf8.h b/libretro-common/include/compat/fopen_utf8.h new file mode 100644 index 0000000000..0c6d44d778 --- /dev/null +++ b/libretro-common/include/compat/fopen_utf8.h @@ -0,0 +1,5 @@ +#include +#ifdef _WIN32 +#define fopen fopen_utf8 +FILE* fopen_utf8(const char * filename, const char * mode); +#endif From 8df699984ea1820fa6ce64b0921db6689acbbf24 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 16:34:56 +0100 Subject: [PATCH 43/85] Update fopen_utf8.h --- libretro-common/include/compat/fopen_utf8.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libretro-common/include/compat/fopen_utf8.h b/libretro-common/include/compat/fopen_utf8.h index 0c6d44d778..583b558a26 100644 --- a/libretro-common/include/compat/fopen_utf8.h +++ b/libretro-common/include/compat/fopen_utf8.h @@ -1,5 +1,9 @@ #include #ifdef _WIN32 -#define fopen fopen_utf8 +/* defined to error rather than fopen_utf8, to make clear to everyone reading the code that not worrying about utf16 is fine */ +/* TODO: enable */ +/* #define fopen (use fopen_utf8 instead) */ FILE* fopen_utf8(const char * filename, const char * mode); +#else +#define fopen_utf8 fopen #endif From 8a93a9eb8eac185850f79eb54653cdb4bec2de7c Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 16:44:34 +0100 Subject: [PATCH 44/85] Create fopen_utf8.c --- libretro-common/compat/fopen_utf8.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 libretro-common/compat/fopen_utf8.c diff --git a/libretro-common/compat/fopen_utf8.c b/libretro-common/compat/fopen_utf8.c new file mode 100644 index 0000000000..a17ad81542 --- /dev/null +++ b/libretro-common/compat/fopen_utf8.c @@ -0,0 +1,25 @@ +#include +#include + +#ifdef _WIN32 +#undef fopen + +FILE* fopen_utf8(const char * filename, const char * mode) +{ +#if defined(_XBOX) + return fopen(filename, mode); +#elif defined(LEGACY_WIN32) + char * filename_local = utf8_to_local_string_alloc(path); + FILE* ret = fopen(filename_local, mode); + free(filename_local); + return ret; +#else + wchar_t * filename_w = utf8_to_utf16_string_alloc(filename); + wchar_t * mode_w = utf8_to_utf16_string_alloc(mode); + FILE* ret = _wfopen(filename_w, mode_w); + free(filename_w); + free(mode_w); + return ret; +#endif +} +#endif From cc2dd827b568a05f68bf6beeea2d90dff8bc5e75 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 16:46:59 +0100 Subject: [PATCH 45/85] Update Makefile.common --- Makefile.common | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.common b/Makefile.common index 58158f33aa..14caf2e201 100644 --- a/Makefile.common +++ b/Makefile.common @@ -170,6 +170,7 @@ OBJ += frontend/frontend.o \ tasks/task_audio_mixer.o \ $(LIBRETRO_COMM_DIR)/encodings/encoding_utf.o \ $(LIBRETRO_COMM_DIR)/encodings/encoding_crc32.o \ + $(LIBRETRO_COMM_DIR)/compat/fopen_utf8.o \ $(LIBRETRO_COMM_DIR)/lists/file_list.o \ $(LIBRETRO_COMM_DIR)/lists/dir_list.o \ $(LIBRETRO_COMM_DIR)/file/retro_dirent.o \ From a6ef704369348a6cc57c35b847379d42d7e373ba Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 16:47:27 +0100 Subject: [PATCH 46/85] Update config_file.c --- libretro-common/file/config_file.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 9e23012168..cf105bbc3a 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -915,7 +916,7 @@ bool config_file_write(config_file_t *conf, const char *path) if (!string_is_empty(path)) { void* buf = NULL; - FILE *file = fopen(path, "wb"); + FILE *file = fopen_utf8(path, "wb"); if (!file) return false; From 486d5e77e3015e44c0df9334ca3b60b281ac7f25 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 16:48:17 +0100 Subject: [PATCH 47/85] Update verbosity.c --- verbosity.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/verbosity.c b/verbosity.c index 734dcaba39..a260f79949 100644 --- a/verbosity.c +++ b/verbosity.c @@ -35,6 +35,7 @@ #include #include +#include #ifdef HAVE_CONFIG_H #include "config.h" @@ -96,7 +97,7 @@ void retro_main_log_file_init(const char *path) if (path == NULL) return; - log_file_fp = fopen(path, "wb"); + log_file_fp = fopen_utf8(path, "wb"); log_file_initialized = true; /* TODO: this is only useful for a few platforms, find which and add ifdef */ From 6359aee509704c6488ef174d899b3d6233fafc9e Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 17:03:53 +0100 Subject: [PATCH 48/85] Update fopen_utf8.c --- libretro-common/compat/fopen_utf8.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libretro-common/compat/fopen_utf8.c b/libretro-common/compat/fopen_utf8.c index a17ad81542..843c449cc1 100644 --- a/libretro-common/compat/fopen_utf8.c +++ b/libretro-common/compat/fopen_utf8.c @@ -1,6 +1,12 @@ #include #include +#if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) +#ifndef LEGACY_WIN32 +#define LEGACY_WIN32 +#endif +#endif + #ifdef _WIN32 #undef fopen From 90dd2892b0449231f7d66eb33c85ec1ef8445b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Jos=C3=A9=20Garc=C3=ADa=20Garc=C3=ADa?= Date: Mon, 4 Dec 2017 18:09:37 +0100 Subject: [PATCH 49/85] FIX sceIoOpen return error --- libretro-common/streams/file_stream.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index 9fdf995d8f..fd792bc40c 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -251,7 +251,7 @@ RFILE *filestream_open(const char *path, unsigned mode, ssize_t unused) #if defined(PSP) stream->fd = sceIoOpen(path, flags, mode_int); - if (stream->fd == -1) + if (stream->fd < 0) goto error; #else #if defined(HAVE_BUFFERED_IO) From 84691c7b9bb2c294b6cad03ca5096aa308238aa2 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 19:15:35 +0100 Subject: [PATCH 50/85] Update retro_miscellaneous.h --- libretro-common/include/retro_miscellaneous.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index bfa3fcb741..c2e11b021f 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -80,7 +80,7 @@ #define BIT128_SET(a, bit) ((a).data[(bit) >> 5] |= (1 << ((bit) & 31))) #define BIT128_CLEAR(a, bit) ((a).data[(bit) >> 5] &= ~(1 << ((bit) & 31))) #define BIT128_GET(a, bit) ((a).data[(bit) >> 5] & (1 << ((bit) & 31))) -#define BIT128_CLEAR_ALL(a) memset(&(a), 0, sizeof(a)); +#define BIT128_CLEAR_ALL(a) memset(&(a), 0, sizeof(a)) /* Helper macros and struct to keep track of many booleans. * To check for multiple bits, use &&, not &. From 908784b0ae3bc075382d9da41ac1d182bb3a79a1 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 20:19:35 +0100 Subject: [PATCH 51/85] Update griffin.c --- griffin/griffin.c | 1 + 1 file changed, 1 insertion(+) diff --git a/griffin/griffin.c b/griffin/griffin.c index 2bbb31a47b..8ac7762892 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -58,6 +58,7 @@ COMPATIBILITY #endif #include "../libretro-common/compat/compat_fnmatch.c" +#include "../libretro-common/compat/fopen_utf8.c" #include "../libretro-common/memmap/memalign.c" /*============================================================ From 2f1bcb64093e153561878fe33058e8db1033226f Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 20:20:10 +0100 Subject: [PATCH 52/85] Update fopen_utf8.c --- libretro-common/compat/fopen_utf8.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libretro-common/compat/fopen_utf8.c b/libretro-common/compat/fopen_utf8.c index 843c449cc1..1fd64187fb 100644 --- a/libretro-common/compat/fopen_utf8.c +++ b/libretro-common/compat/fopen_utf8.c @@ -1,5 +1,6 @@ #include #include +#include #if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) #ifndef LEGACY_WIN32 From 75c59aedcf6d45642bbd399aa7f348b96112123b Mon Sep 17 00:00:00 2001 From: Alcaro Date: Mon, 4 Dec 2017 20:23:45 +0100 Subject: [PATCH 53/85] Update fopen_utf8.h --- libretro-common/include/compat/fopen_utf8.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libretro-common/include/compat/fopen_utf8.h b/libretro-common/include/compat/fopen_utf8.h index 583b558a26..67cc289aa6 100644 --- a/libretro-common/include/compat/fopen_utf8.h +++ b/libretro-common/include/compat/fopen_utf8.h @@ -1,9 +1,14 @@ +#ifndef __FOPEN_UTF8_H +#define __FOPEN_UTF8_H + #include + #ifdef _WIN32 -/* defined to error rather than fopen_utf8, to make clear to everyone reading the code that not worrying about utf16 is fine */ +/* defined to error rather than fopen_utf8, to make it clear to everyone reading the code that not worrying about utf16 is fine */ /* TODO: enable */ /* #define fopen (use fopen_utf8 instead) */ FILE* fopen_utf8(const char * filename, const char * mode); #else #define fopen_utf8 fopen #endif +#endif From e8a9471afdbc17064ed47807f72cf972b89a17bb Mon Sep 17 00:00:00 2001 From: Rob Loach Date: Mon, 4 Dec 2017 18:53:34 -0500 Subject: [PATCH 54/85] Fix to ARM to ensure chain has been declared --- gfx/drivers_renderchain/gl2_renderchain.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index a74e0d6637..ebdb9709b0 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -1281,6 +1281,7 @@ static void gl2_renderchain_copy_frame( } #elif defined(HAVE_OPENGLES) #if defined(HAVE_EGL) + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; if (chain->egl_images) { gfx_ctx_image_t img_info; From 49d02998086d0e154f22385d627710835ebb536c Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Mon, 4 Dec 2017 22:49:08 -0500 Subject: [PATCH 55/85] LEGACY_WIN32: check for target of less than Win2K instead of < vc2005, since Win98 does not support Unicode --- gfx/common/win32_common.c | 4 ++-- libretro-common/compat/fopen_utf8.c | 4 ++-- libretro-common/file/file_path.c | 8 ++++---- libretro-common/file/nbio/nbio_stdio.c | 4 ++-- libretro-common/file/nbio/nbio_windowsmmap.c | 4 ++-- libretro-common/file/retro_dirent.c | 2 +- libretro-common/streams/file_stream.c | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gfx/common/win32_common.c b/gfx/common/win32_common.c index 40a807a2c0..a8a696cbb2 100644 --- a/gfx/common/win32_common.c +++ b/gfx/common/win32_common.c @@ -53,8 +53,8 @@ #include -/* Assume W-functions do not work below VC2005 and Xbox platforms */ -#if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) +/* Assume W-functions do not work below Win2K and Xbox platforms */ +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) #ifndef LEGACY_WIN32 #define LEGACY_WIN32 diff --git a/libretro-common/compat/fopen_utf8.c b/libretro-common/compat/fopen_utf8.c index 1fd64187fb..b61c53ebd1 100644 --- a/libretro-common/compat/fopen_utf8.c +++ b/libretro-common/compat/fopen_utf8.c @@ -2,7 +2,7 @@ #include #include -#if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) #ifndef LEGACY_WIN32 #define LEGACY_WIN32 #endif @@ -16,7 +16,7 @@ FILE* fopen_utf8(const char * filename, const char * mode) #if defined(_XBOX) return fopen(filename, mode); #elif defined(LEGACY_WIN32) - char * filename_local = utf8_to_local_string_alloc(path); + char * filename_local = utf8_to_local_string_alloc(filename); FILE* ret = fopen(filename_local, mode); free(filename_local); return ret; diff --git a/libretro-common/file/file_path.c b/libretro-common/file/file_path.c index 62ee9f20e7..8d9f8414b2 100644 --- a/libretro-common/file/file_path.c +++ b/libretro-common/file/file_path.c @@ -84,8 +84,8 @@ #include /* stat() is defined here */ #endif -/* Assume W-functions do not work below VC2005 and Xbox platforms */ -#if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) +/* Assume W-functions do not work below Win2K and Xbox platforms */ +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) #ifndef LEGACY_WIN32 #define LEGACY_WIN32 @@ -936,7 +936,7 @@ bool path_file_remove(const char *path) (void)path_wide; #if defined(_WIN32) && !defined(_XBOX) -#if defined(_MSC_VER) && _MSC_VER < 1400 +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 path_local = utf8_to_local_string_alloc(path); if (path_local) @@ -982,7 +982,7 @@ bool path_file_rename(const char *old_path, const char *new_path) (void)new_path_wide; #if defined(_WIN32) && !defined(_XBOX) -#if defined(_MSC_VER) && _MSC_VER < 1400 +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 old_path_local = utf8_to_local_string_alloc(old_path); new_path_local = utf8_to_local_string_alloc(new_path); diff --git a/libretro-common/file/nbio/nbio_stdio.c b/libretro-common/file/nbio/nbio_stdio.c index 3e6f4094f1..d3425f7de0 100644 --- a/libretro-common/file/nbio/nbio_stdio.c +++ b/libretro-common/file/nbio/nbio_stdio.c @@ -26,8 +26,8 @@ #include #include -/* Assume W-functions do not work below VC2005 and Xbox platforms */ -#if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) +/* Assume W-functions do not work below Win2K and Xbox platforms */ +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) #ifndef LEGACY_WIN32 #define LEGACY_WIN32 diff --git a/libretro-common/file/nbio/nbio_windowsmmap.c b/libretro-common/file/nbio/nbio_windowsmmap.c index caf0d72514..25208571b2 100644 --- a/libretro-common/file/nbio/nbio_windowsmmap.c +++ b/libretro-common/file/nbio/nbio_windowsmmap.c @@ -31,8 +31,8 @@ #include -/* Assume W-functions do not work below VC2005 and Xbox platforms */ -#if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) +/* Assume W-functions do not work below Win2K and Xbox platforms */ +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) #ifndef LEGACY_WIN32 #define LEGACY_WIN32 diff --git a/libretro-common/file/retro_dirent.c b/libretro-common/file/retro_dirent.c index 98328e30c1..aa221c888c 100644 --- a/libretro-common/file/retro_dirent.c +++ b/libretro-common/file/retro_dirent.c @@ -67,7 +67,7 @@ #include /* stat() is defined here */ #endif -#if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) #ifndef LEGACY_WIN32 #define LEGACY_WIN32 #endif diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index fd792bc40c..da29d4864d 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -65,8 +65,8 @@ #include #endif -/* Assume W-functions do not work below VC2005 and Xbox platforms */ -#if defined(_MSC_VER) && _MSC_VER < 1400 || defined(_XBOX) +/* Assume W-functions do not work below Win2K and Xbox platforms */ +#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0500 || defined(_XBOX) #ifndef LEGACY_WIN32 #define LEGACY_WIN32 From 0215648a83e931de88a613b6c1e34c1ed2bd0e84 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Tue, 5 Dec 2017 08:34:29 +0100 Subject: [PATCH 56/85] Make booleans boolean again #5856 why do both BIT_ and BIT128_ exist --- libretro-common/include/retro_miscellaneous.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index c2e11b021f..c26899eb9f 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -60,31 +60,29 @@ #define BIT_SET(a, bit) ((a)[(bit) >> 3] |= (1 << ((bit) & 7))) #define BIT_CLEAR(a, bit) ((a)[(bit) >> 3] &= ~(1 << ((bit) & 7))) -#define BIT_GET(a, bit) ((a)[(bit) >> 3] & (1 << ((bit) & 7))) +#define BIT_GET(a, bit) (((a).data[(bit) >> 3] >> ((bit) & 7)) & 1) #define BIT16_SET(a, bit) ((a) |= (1 << ((bit) & 15))) #define BIT16_CLEAR(a, bit) ((a) &= ~(1 << ((bit) & 15))) -#define BIT16_GET(a, bit) (!!((a) & (1 << ((bit) & 15)))) +#define BIT16_GET(a, bit) (((a) >> ((bit) & 15)) & 1) #define BIT16_CLEAR_ALL(a) ((a) = 0) #define BIT32_SET(a, bit) ((a) |= (1 << ((bit) & 31))) #define BIT32_CLEAR(a, bit) ((a) &= ~(1 << ((bit) & 31))) -#define BIT32_GET(a, bit) (!!((a) & (1 << ((bit) & 31)))) +#define BIT32_GET(a, bit) (((a) >> ((bit) & 31)) & 1) #define BIT32_CLEAR_ALL(a) ((a) = 0) #define BIT64_SET(a, bit) ((a) |= (UINT64_C(1) << ((bit) & 63))) #define BIT64_CLEAR(a, bit) ((a) &= ~(UINT64_C(1) << ((bit) & 63))) -#define BIT64_GET(a, bit) (!!((a) & (UINT64_C(1) << ((bit) & 63)))) +#define BIT64_GET(a, bit) (((a) >> ((bit) & 63)) & 1) #define BIT64_CLEAR_ALL(a) ((a) = 0) #define BIT128_SET(a, bit) ((a).data[(bit) >> 5] |= (1 << ((bit) & 31))) #define BIT128_CLEAR(a, bit) ((a).data[(bit) >> 5] &= ~(1 << ((bit) & 31))) -#define BIT128_GET(a, bit) ((a).data[(bit) >> 5] & (1 << ((bit) & 31))) +#define BIT128_GET(a, bit) (((a).data[(bit) >> 5] >> ((bit) & 31)) & 1) #define BIT128_CLEAR_ALL(a) memset(&(a), 0, sizeof(a)) -/* Helper macros and struct to keep track of many booleans. - * To check for multiple bits, use &&, not &. - * For OR, | can be used. */ +/* Helper macros and struct to keep track of many booleans. */ typedef struct { uint32_t data[8]; From 3ccce249ea3e4fd7f67881d3893818009b0c02e5 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 08:50:24 +0100 Subject: [PATCH 57/85] Fixes hotkey issues with MSVC --- input/input_defines.h | 25 +++++++++++++------ libretro-common/include/retro_miscellaneous.h | 3 +++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/input/input_defines.h b/input/input_defines.h index fa697c54a4..54eac4a25b 100644 --- a/input/input_defines.h +++ b/input/input_defines.h @@ -158,12 +158,12 @@ enum analog_dpad_mode #define GET_HAT_DIR(x) (x & HAT_MASK) #define GET_HAT(x) (x & (~HAT_MASK)) -#define RARCH_INPUT_STATE_BIT_SET(a,bit) ((a).data [((bit) >> 5)] |= (1 << ((bit) & 31))) -#define RARCH_INPUT_STATE_BIT_SET_PTR(a,bit) ((a)->data[((bit) >> 5)] |= (1 << ((bit) & 31))) -#define RARCH_INPUT_STATE_BIT_GET(a,bit) ((a).data [((bit) >> 5)] & (1 << ((bit) & 31))) -#define RARCH_INPUT_STATE_BIT_GET_PTR(a,bit) ((a)->data[((bit) >> 5)] & (1 << ((bit) & 31))) -#define RARCH_INPUT_STATE_CLEAR(a) memset(&a, 0, sizeof(a)); -#define RARCH_INPUT_STATE_CLEAR_PTR(a) memset(a, 0, sizeof(retro_bits_t)); +#define RARCH_INPUT_STATE_BIT_SET(a,bit) BIT128_SET(a, bit) +#define RARCH_INPUT_STATE_BIT_SET_PTR(a,bit) BIT128_SET_PTR(a, bit) +#define RARCH_INPUT_STATE_BIT_GET(a,bit) BIT128_GET(a, bit) +#define RARCH_INPUT_STATE_BIT_GET_PTR(a,bit) BIT128_GET_PTR(a, bit) +#define RARCH_INPUT_STATE_CLEAR(a) BIT128_CLEAR_ALL(a) +#define RARCH_INPUT_STATE_CLEAR_PTR(a) BIT128_CLEAR_ALL_PTR(a) #define RARCH_INPUT_STATE_ANY_SET(a) ( ((a).data[0])||((a).data[1])||((a).data[2])||((a).data[3])|| \ ((a).data[4])||((a).data[5])||((a).data[6])||((a).data[7]) ) #define RARCH_INPUT_STATE_ANY_SET_PTR(a) ( ((a)->data[0])||((a)->data[1])||((a)->data[2])||((a)->data[3])|| \ @@ -178,8 +178,17 @@ enum analog_dpad_mode ((a).data[6])&=(~((b).data[6])); \ ((a).data[7])&=(~((b).data[7])); -#define RARCH_INPUT_STATE_COPY16_PTR(a,bits) {memset(a, 0, sizeof(retro_bits_t));((a)->data[0] = (bits)&0xffff);} -#define RARCH_INPUT_STATE_COPY32_PTR(a,bits) {memset(a, 0, sizeof(retro_bits_t));((a)->data[0] = (bits));} +#define RARCH_INPUT_STATE_COPY16_PTR(a,bits) \ +{ \ + BIT128_CLEAR_ALL_PTR(a); \ + ((a)->data[0] = (bits) & 0xffff); \ +} + +#define RARCH_INPUT_STATE_COPY32_PTR(a,bits) \ +{ \ + BIT128_CLEAR_ALL_PTR(a); \ + ((a)->data[0] = (bits)); \ +} RETRO_END_DECLS diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index c26899eb9f..9baf2e0214 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -78,9 +78,12 @@ #define BIT64_CLEAR_ALL(a) ((a) = 0) #define BIT128_SET(a, bit) ((a).data[(bit) >> 5] |= (1 << ((bit) & 31))) +#define BIT128_SET_PTR(a, bit) ((a)->data[(bit) >> 5] |= (1 << ((bit) & 31))) #define BIT128_CLEAR(a, bit) ((a).data[(bit) >> 5] &= ~(1 << ((bit) & 31))) #define BIT128_GET(a, bit) (((a).data[(bit) >> 5] >> ((bit) & 31)) & 1) +#define BIT128_GET_PTR(a, bit) (((a)->data[(bit) >> 5] >> ((bit) & 31)) & 1) #define BIT128_CLEAR_ALL(a) memset(&(a), 0, sizeof(a)) +#define BIT128_CLEAR_ALL_PTR(a) memset((a), 0, sizeof(retro_bits_t)) /* Helper macros and struct to keep track of many booleans. */ typedef struct From 0691c9e0d316e847e11ded8167d9e0e6113a79d2 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Tue, 5 Dec 2017 08:55:42 +0100 Subject: [PATCH 58/85] Let's not duplicate those macros more than needed --- libretro-common/include/retro_miscellaneous.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index 9baf2e0214..b29c5cdc54 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -78,14 +78,17 @@ #define BIT64_CLEAR_ALL(a) ((a) = 0) #define BIT128_SET(a, bit) ((a).data[(bit) >> 5] |= (1 << ((bit) & 31))) -#define BIT128_SET_PTR(a, bit) ((a)->data[(bit) >> 5] |= (1 << ((bit) & 31))) #define BIT128_CLEAR(a, bit) ((a).data[(bit) >> 5] &= ~(1 << ((bit) & 31))) #define BIT128_GET(a, bit) (((a).data[(bit) >> 5] >> ((bit) & 31)) & 1) -#define BIT128_GET_PTR(a, bit) (((a)->data[(bit) >> 5] >> ((bit) & 31)) & 1) #define BIT128_CLEAR_ALL(a) memset(&(a), 0, sizeof(a)) -#define BIT128_CLEAR_ALL_PTR(a) memset((a), 0, sizeof(retro_bits_t)) + +#define BIT128_SET_PTR(a, bit) BIT128_SET(*a, bit) +#define BIT128_CLEAR_PTR(a, bit) BIT128_CLEAR(*a, bit) +#define BIT128_GET_PTR(a, bit) BIT128_GET(*a, bit) +#define BIT128_CLEAR_ALL_PTR(a) BIT128_CLEAR_ALL(*a) /* Helper macros and struct to keep track of many booleans. */ +/* This struct has 256 bits, but the macros are named 128 due to some historical accident. */ typedef struct { uint32_t data[8]; From e94300a581ca46975a1a07b9b7424e22b6be7e5f Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 09:22:33 +0100 Subject: [PATCH 59/85] Get rid of a lot of RARCH_INPUT_STATE_BIT_ macros - replace them with BIT128_ equivalents instead --- input/connect/connect_nesusb.c | 7 +- input/connect/connect_ps2adapter.c | 7 +- input/connect/connect_ps3.c | 9 +-- input/connect/connect_ps4.c | 91 +++++++++------------ input/connect/connect_psxadapter.c | 7 +- input/connect/connect_snesusb.c | 7 +- input/connect/connect_wiiugca.c | 7 +- input/connect/connect_wiiupro.c | 90 +++++++++------------ input/connect/joypad_connection.c | 7 +- input/drivers/cocoa_input.c | 7 +- input/drivers/wiiu_input.c | 4 +- input/drivers_hid/btstack_hid.c | 5 +- input/drivers_hid/iohidmanager_hid.c | 4 +- input/drivers_hid/libusb_hid.c | 4 +- input/drivers_hid/null_hid.c | 2 +- input/drivers_hid/wiiusb_hid.c | 4 +- input/drivers_joypad/ctr_joypad.c | 7 +- input/drivers_joypad/gx_joypad.c | 7 +- input/drivers_joypad/hid_joypad.c | 7 +- input/drivers_joypad/linuxraw_joypad.c | 7 +- input/drivers_joypad/null_joypad.c | 2 +- input/drivers_joypad/parport_joypad.c | 7 +- input/drivers_joypad/ps3_joypad.c | 7 +- input/drivers_joypad/psp_joypad.c | 7 +- input/drivers_joypad/udev_joypad.c | 7 +- input/drivers_joypad/wiiu_joypad.c | 7 +- input/drivers_joypad/xdk_joypad.c | 7 +- input/input_defines.h | 6 -- input/input_driver.c | 29 +++---- menu/menu_event.c | 48 +++++------ retroarch.c | 107 ++++++++++++------------- retroarch.h | 2 - 32 files changed, 250 insertions(+), 276 deletions(-) diff --git a/input/connect/connect_nesusb.c b/input/connect/connect_nesusb.c index 24c5f0532e..b39936be06 100644 --- a/input/connect/connect_nesusb.c +++ b/input/connect/connect_nesusb.c @@ -62,11 +62,12 @@ static void hidpad_nesusb_deinit(void *data) static void hidpad_nesusb_get_buttons(void *data, retro_bits_t* state) { struct hidpad_nesusb_data *device = (struct hidpad_nesusb_data*)data; - if (device) { + if (device) + { RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t hidpad_nesusb_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_ps2adapter.c b/input/connect/connect_ps2adapter.c index 78c3cf9c92..29b2c932fe 100644 --- a/input/connect/connect_ps2adapter.c +++ b/input/connect/connect_ps2adapter.c @@ -62,11 +62,12 @@ static void hidpad_ps2adapter_deinit(void *data) static void hidpad_ps2adapter_get_buttons(void *data, retro_bits_t *state) { struct hidpad_ps2adapter_data *device = (struct hidpad_ps2adapter_data*)data; - if ( device ) { + if (device) + { RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t hidpad_ps2adapter_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_ps3.c b/input/connect/connect_ps3.c index 422a1b02a2..de4e8fa3ec 100644 --- a/input/connect/connect_ps3.c +++ b/input/connect/connect_ps3.c @@ -114,14 +114,11 @@ static void hidpad_ps3_get_buttons(void *data, retro_bits_t *state) RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); /*PS button?*/ - if ( device->buttons & 0x10000 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RARCH_MENU_TOGGLE ); - } + if (device->buttons & 0x10000) + BIT128_SET_PTR(state, RARCH_MENU_TOGGLE); } else - { - RARCH_INPUT_STATE_CLEAR_PTR( state ); - } + BIT128_CLEAR_ALL_PTR(state); } static int16_t hidpad_ps3_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_ps4.c b/input/connect/connect_ps4.c index 47a9cdabe6..901e693d80 100644 --- a/input/connect/connect_ps4.c +++ b/input/connect/connect_ps4.c @@ -20,6 +20,7 @@ #include #include +#include #include "joypad_connection.h" #include "../input_defines.h" @@ -187,64 +188,48 @@ static bool hidpad_ps4_check_dpad(struct ps4 *rpt, unsigned id) static void hidpad_ps4_get_buttons(void *data, retro_bits_t* state) { struct hidpad_ps4_data *device = (struct hidpad_ps4_data*)data; - struct ps4 *rpt = device ? (struct ps4*)&device->data : NULL; + struct ps4 *rpt = device ? + (struct ps4*)&device->data : NULL; if (!device || !rpt) return; - RARCH_INPUT_STATE_CLEAR_PTR( state ); + BIT128_CLEAR_ALL_PTR( state ); - if ( rpt->btn.r3 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R3 ); - } - if ( rpt->btn.l3 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L3 ); - } - if ( rpt->btn.options ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_START ); - } - if ( rpt->btn.share ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_SELECT ); - } - if ( rpt->btn.r2 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R2 ); - } - if ( rpt->btn.l2 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L2 ); - } - if ( rpt->btn.r1 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R ); - } - if ( rpt->btn.l1 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L ); - } - if ( rpt->btn.triangle ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_X ); - } - if ( rpt->btn.circle ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_A ); - } - if ( rpt->btn.cross ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_B ); - } - if ( rpt->btn.square ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_Y ); - } - if ( (hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_LEFT)) ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_LEFT ); - } - if ( (hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_DOWN)) ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_DOWN ); - } - if ( (hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_RIGHT)) ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_RIGHT ); - } - if ( (hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_UP)) ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_UP ); - } - if ( rpt->btn.ps ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RARCH_MENU_TOGGLE ); - } + if (rpt->btn.r3) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R3 ); + if (rpt->btn.l3) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L3 ); + if (rpt->btn.options) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_START ); + if ( rpt->btn.share) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_SELECT ); + if ( rpt->btn.r2) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R2 ); + if (rpt->btn.l2) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L2 ); + if (rpt->btn.r1) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R ); + if (rpt->btn.l1) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L ); + if (rpt->btn.triangle) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_X ); + if (rpt->btn.circle) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_A ); + if (rpt->btn.cross) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_B ); + if (rpt->btn.square) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_Y ); + if ((hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_LEFT))) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_LEFT ); + if ((hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_DOWN))) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_DOWN ); + if ((hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_RIGHT))) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_RIGHT ); + if ((hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_UP))) + BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_UP ); + if (rpt->btn.ps) + BIT128_SET_PTR( state, RARCH_MENU_TOGGLE ); } static int16_t hidpad_ps4_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_psxadapter.c b/input/connect/connect_psxadapter.c index 6f77e77f72..a4fcf78587 100644 --- a/input/connect/connect_psxadapter.c +++ b/input/connect/connect_psxadapter.c @@ -62,11 +62,12 @@ static void hidpad_psxadapter_deinit(void *data) static void hidpad_psxadapter_get_buttons(void *data, retro_bits_t *state) { struct hidpad_psxadapter_data *device = (struct hidpad_psxadapter_data*)data; - if ( device ) { + if (device) + { RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t hidpad_psxadapter_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_snesusb.c b/input/connect/connect_snesusb.c index bbc9fb43a4..b7cb594905 100644 --- a/input/connect/connect_snesusb.c +++ b/input/connect/connect_snesusb.c @@ -63,11 +63,12 @@ static void hidpad_snesusb_deinit(void *data) static void hidpad_snesusb_get_buttons(void *data, retro_bits_t *state) { struct hidpad_snesusb_data *device = (struct hidpad_snesusb_data*)data; - if ( device ) { + if (device) + { RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t hidpad_snesusb_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_wiiugca.c b/input/connect/connect_wiiugca.c index 0f368e01fe..69ceaa0739 100644 --- a/input/connect/connect_wiiugca.c +++ b/input/connect/connect_wiiugca.c @@ -66,11 +66,12 @@ static void hidpad_wiiugca_deinit(void *data) static void hidpad_wiiugca_get_buttons(void *data, retro_bits_t *state) { struct hidpad_wiiugca_data *device = (struct hidpad_wiiugca_data*)data; - if ( device ) { + if (device) + { RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t hidpad_wiiugca_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_wiiupro.c b/input/connect/connect_wiiupro.c index d380e119a0..b7e148a010 100644 --- a/input/connect/connect_wiiupro.c +++ b/input/connect/connect_wiiupro.c @@ -121,64 +121,48 @@ static void hidpad_wiiupro_deinit(void *data) static void hidpad_wiiupro_get_buttons(void *data, retro_bits_t *state) { struct hidpad_wiiupro_data *device = (struct hidpad_wiiupro_data*)data; - struct wiiupro *rpt = device ? (struct wiiupro*)&device->data : NULL; + struct wiiupro *rpt = device ? + (struct wiiupro*)&device->data : NULL; if (!device || !rpt) return; - RARCH_INPUT_STATE_CLEAR_PTR( state ); + BIT128_CLEAR_ALL_PTR(state); - if ( rpt->btn.r3 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R3 ); - } - if ( rpt->btn.l3 ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L3 ); - } - if ( rpt->btn.plus ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_START ); - } - if ( rpt->btn.minus ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_SELECT ); - } - if ( rpt->btn.zr ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R2 ); - } - if ( rpt->btn.zl ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L2 ); - } - if ( rpt->btn.r ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R ); - } - if ( rpt->btn.l ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L ); - } - if ( rpt->btn.x ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_X ); - } - if ( rpt->btn.a ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_A ); - } - if ( rpt->btn.b ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_B ); - } - if ( rpt->btn.y ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_Y ); - } - if ( rpt->btn.left ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_LEFT ); - } - if ( rpt->btn.down ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_DOWN ); - } - if ( rpt->btn.right ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_RIGHT ); - } - if ( rpt->btn.up ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_UP ); - } - if ( rpt->btn.home ) { - RARCH_INPUT_STATE_BIT_SET_PTR( state, RARCH_MENU_TOGGLE ); - } + if (rpt->btn.r3) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R3); + if (rpt->btn.l3) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L3); + if (rpt->btn.plus) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_START); + if ( rpt->btn.minus) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_SELECT); + if ( rpt->btn.zr) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R2); + if ( rpt->btn.zl) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L2); + if ( rpt->btn.r) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R); + if ( rpt->btn.l) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L); + if ( rpt->btn.x) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_X); + if ( rpt->btn.a) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_A); + if ( rpt->btn.b) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_B); + if ( rpt->btn.y) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_Y); + if ( rpt->btn.left) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_LEFT); + if ( rpt->btn.down) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_DOWN); + if ( rpt->btn.right) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_RIGHT); + if ( rpt->btn.up) + BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_UP); + if ( rpt->btn.home) + BIT128_SET_PTR(state, RARCH_MENU_TOGGLE); } static int16_t hidpad_wiiupro_get_axis(void *data, unsigned axis) diff --git a/input/connect/joypad_connection.c b/input/connect/joypad_connection.c index 18ae10612d..178d32fcd2 100644 --- a/input/connect/joypad_connection.c +++ b/input/connect/joypad_connection.c @@ -175,11 +175,12 @@ void pad_connection_packet(joypad_connection_t *joyconn, uint32_t pad, void pad_connection_get_buttons(joypad_connection_t *joyconn, unsigned pad, retro_bits_t* state) { - if (joyconn->iface) { + if (joyconn->iface) + { joyconn->iface->get_buttons(joyconn->data, state); - } else { - RARCH_INPUT_STATE_CLEAR_PTR( state ); } + else + BIT128_CLEAR_ALL_PTR( state ); } int16_t pad_connection_get_axis(joypad_connection_t *joyconn, diff --git a/input/drivers/cocoa_input.c b/input/drivers/cocoa_input.c index ceeaf417b1..2ce55ddb38 100644 --- a/input/drivers/cocoa_input.c +++ b/input/drivers/cocoa_input.c @@ -17,14 +17,17 @@ #include #include +#include + #ifdef HAVE_CONFIG_H #include "../../config.h" #endif #include "../input_driver.h" - #include "../input_keymaps.h" + #include "cocoa_input.h" + #include "../../gfx/video_driver.h" #include "../../driver.h" @@ -56,7 +59,7 @@ static int cocoa_input_find_any_button_ret(cocoa_input_data_t *apple, if (state) for (i = 0; i < 256; i++) - if (RARCH_INPUT_STATE_BIT_GET_PTR(state,i)) + if (BIT128_GET_PTR(state,i)) return i; return -1; } diff --git a/input/drivers/wiiu_input.c b/input/drivers/wiiu_input.c index 7cb9444b3c..99d8087e65 100644 --- a/input/drivers/wiiu_input.c +++ b/input/drivers/wiiu_input.c @@ -107,8 +107,8 @@ static int16_t wiiu_pointer_device_state(wiiu_input_t* wiiu, unsigned id) case RETRO_DEVICE_ID_POINTER_PRESSED: { retro_bits_t state; - wiiu->joypad->get_buttons(0,&state); - return RARCH_INPUT_STATE_BIT_GET(state, VPAD_BUTTON_TOUCH) ? 1 : 0; + wiiu->joypad->get_buttons(0, &state); + return BIT128_GET(state, VPAD_BUTTON_TOUCH) ? 1 : 0; } case RETRO_DEVICE_ID_POINTER_X: return wiiu->joypad->axis(0, 0xFFFF0004UL); diff --git a/input/drivers_hid/btstack_hid.c b/input/drivers_hid/btstack_hid.c index 83eec68c61..2166a2d2a3 100644 --- a/input/drivers_hid/btstack_hid.c +++ b/input/drivers_hid/btstack_hid.c @@ -27,6 +27,7 @@ #endif #include +#include #include #ifdef HAVE_DYNAMIC #include @@ -1369,7 +1370,7 @@ static void btstack_hid_joypad_get_buttons(void *data, unsigned port, retro_bits if (hid) pad_connection_get_buttons(&hid->slots[port], port, state); else - RARCH_INPUT_STATE_CLEAR_PTR(state); + BIT128_CLEAR_ALL_PTR(state); } static bool btstack_hid_joypad_button(void *data, unsigned port, uint16_t joykey) @@ -1383,7 +1384,7 @@ static bool btstack_hid_joypad_button(void *data, unsigned port, uint16_t joykey /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return (RARCH_INPUT_STATE_BIT_GET(buttons, joykey) != 0); + return (BIT128_GET(buttons, joykey) != 0); return false; } diff --git a/input/drivers_hid/iohidmanager_hid.c b/input/drivers_hid/iohidmanager_hid.c index aac33afd56..3d479fce40 100644 --- a/input/drivers_hid/iohidmanager_hid.c +++ b/input/drivers_hid/iohidmanager_hid.c @@ -114,7 +114,7 @@ static void iohidmanager_hid_joypad_get_buttons(void *data, unsigned port, retro if (hid) return pad_connection_get_buttons(&hid->slots[port], port, state); else - RARCH_INPUT_STATE_CLEAR_PTR(state); + BIT128_CLEAR_ALL_PTR(state); } static bool iohidmanager_hid_joypad_button(void *data, @@ -150,7 +150,7 @@ static bool iohidmanager_hid_joypad_button(void *data, /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return (RARCH_INPUT_STATE_BIT_GET(buttons, joykey) != 0) + return (BIT128_GET(buttons, joykey) != 0) || ((hid->buttons[port] & (1 << joykey)) != 0); return false; diff --git a/input/drivers_hid/libusb_hid.c b/input/drivers_hid/libusb_hid.c index 257b4819cc..a653b6b9bc 100644 --- a/input/drivers_hid/libusb_hid.c +++ b/input/drivers_hid/libusb_hid.c @@ -449,7 +449,7 @@ static void libusb_hid_joypad_get_buttons(void *data, unsigned port, retro_bits_ if (hid) return pad_connection_get_buttons(&hid->slots[port], port, state); else - RARCH_INPUT_STATE_CLEAR_PTR(state); + BIT128_CLEAR_ALL_PTR(state); } static bool libusb_hid_joypad_button(void *data, @@ -464,7 +464,7 @@ static bool libusb_hid_joypad_button(void *data, /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return (RARCH_INPUT_STATE_BIT_GET(buttons, joykey) != 0); + return (BIT128_GET(buttons, joykey) != 0); return false; } diff --git a/input/drivers_hid/null_hid.c b/input/drivers_hid/null_hid.c index 34f8bdb7d6..74b61d051e 100644 --- a/input/drivers_hid/null_hid.c +++ b/input/drivers_hid/null_hid.c @@ -43,7 +43,7 @@ static void null_hid_joypad_get_buttons(void *data, unsigned port, retro_bits_t (void)data; (void)port; - RARCH_INPUT_STATE_CLEAR_PTR(state); + BIT128_CLEAR_ALL_PTR(state); } static bool null_hid_joypad_button(void *data, unsigned port, uint16_t joykey) diff --git a/input/drivers_hid/wiiusb_hid.c b/input/drivers_hid/wiiusb_hid.c index 3f0fdb282c..b550915689 100644 --- a/input/drivers_hid/wiiusb_hid.c +++ b/input/drivers_hid/wiiusb_hid.c @@ -484,7 +484,7 @@ static void wiiusb_hid_joypad_get_buttons(void *data, unsigned port, retro_bits_ if (hid) return pad_connection_get_buttons(&hid->connections[port], port, state); else - RARCH_INPUT_STATE_CLEAR_PTR(state); + BIT128_CLEAR_ALL_PTR(state); } static bool wiiusb_hid_joypad_button(void *data, unsigned port, uint16_t joykey) @@ -499,7 +499,7 @@ static bool wiiusb_hid_joypad_button(void *data, unsigned port, uint16_t joykey) /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return (RARCH_INPUT_STATE_BIT_GET(buttons, joykey) != 0); + return (BIT128_GET(buttons, joykey) != 0); return false; } diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index a31a7511fe..7350c71d78 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -72,11 +72,12 @@ static bool ctr_joypad_button(unsigned port_num, uint16_t key) static void ctr_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { - if ( port_num < MAX_PADS ) { + if ( port_num < MAX_PADS ) + { RARCH_INPUT_STATE_COPY16_PTR( state, pad_state ); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t ctr_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/gx_joypad.c b/input/drivers_joypad/gx_joypad.c index 318eb637ed..2dc568df78 100644 --- a/input/drivers_joypad/gx_joypad.c +++ b/input/drivers_joypad/gx_joypad.c @@ -164,11 +164,12 @@ static bool gx_joypad_button(unsigned port, uint16_t key) static void gx_joypad_get_buttons(unsigned port, retro_bits_t *state) { - if ( port < MAX_PADS ) { + if (port < MAX_PADS) + { RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port] ); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t gx_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/hid_joypad.c b/input/drivers_joypad/hid_joypad.c index eaed7efbed..fe0badd38a 100644 --- a/input/drivers_joypad/hid_joypad.c +++ b/input/drivers_joypad/hid_joypad.c @@ -57,11 +57,10 @@ static bool hid_joypad_button(unsigned port, uint16_t joykey) static void hid_joypad_get_buttons(unsigned port, retro_bits_t *state) { - if (generic_hid && generic_hid->get_buttons) { + if (generic_hid && generic_hid->get_buttons) generic_hid->get_buttons((void*)hid_driver_get_data(), port, state); - } else { - RARCH_INPUT_STATE_CLEAR_PTR( state ); - } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t hid_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/linuxraw_joypad.c b/input/drivers_joypad/linuxraw_joypad.c index 212aeb8adc..f8cf299464 100644 --- a/input/drivers_joypad/linuxraw_joypad.c +++ b/input/drivers_joypad/linuxraw_joypad.c @@ -329,11 +329,12 @@ static bool linuxraw_joypad_button(unsigned port, uint16_t joykey) static void linuxraw_joypad_get_buttons(unsigned port, retro_bits_t *state) { const struct linuxraw_joypad *pad = (const struct linuxraw_joypad*)&linuxraw_pads[port]; - if ( pad ) { + if (pad) + { RARCH_INPUT_STATE_COPY16_PTR(state, pad->buttons); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t linuxraw_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/null_joypad.c b/input/drivers_joypad/null_joypad.c index d364433e06..f938e802e4 100644 --- a/input/drivers_joypad/null_joypad.c +++ b/input/drivers_joypad/null_joypad.c @@ -39,7 +39,7 @@ static bool null_joypad_button(unsigned port_num, uint16_t joykey) static void null_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { - RARCH_INPUT_STATE_CLEAR_PTR( state ); + BIT128_CLEAR_ALL_PTR(state); } static int16_t null_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/parport_joypad.c b/input/drivers_joypad/parport_joypad.c index 062e6dd958..61879842c8 100644 --- a/input/drivers_joypad/parport_joypad.c +++ b/input/drivers_joypad/parport_joypad.c @@ -343,11 +343,12 @@ static bool parport_joypad_button(unsigned port, uint16_t joykey) static void parport_joypad_get_buttons(unsigned port, retro_bits_t *state) { const struct parport_joypad *pad = (const struct parport_joypad*)&parport_pads[port]; - if ( pad ) { + if (pad) + { RARCH_INPUT_STATE_COPY16_PTR(state, pad->buttons); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t parport_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c index c14277924c..cd11cda4b7 100644 --- a/input/drivers_joypad/ps3_joypad.c +++ b/input/drivers_joypad/ps3_joypad.c @@ -70,11 +70,12 @@ static bool ps3_joypad_button(unsigned port_num, uint16_t joykey) static void ps3_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { - if ( port_num < MAX_PADS ) { + if (port_num < MAX_PADS) + { RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port_num] ); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t ps3_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/psp_joypad.c b/input/drivers_joypad/psp_joypad.c index 967e9092e8..c86ee65a0b 100644 --- a/input/drivers_joypad/psp_joypad.c +++ b/input/drivers_joypad/psp_joypad.c @@ -126,11 +126,12 @@ static bool psp_joypad_button(unsigned port_num, uint16_t key) static void psp_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { - if ( port_num < PSP_MAX_PADS ) { + if (port_num < PSP_MAX_PADS) + { RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port_num] ); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t psp_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index 3aa6ba092a..50cfec8f20 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -607,11 +607,12 @@ static bool udev_joypad_button(unsigned port, uint16_t joykey) static void udev_joypad_get_buttons(unsigned port, retro_bits_t *state) { const struct udev_joypad *pad = (const struct udev_joypad*)&udev_pads[port]; - if ( pad ) { + if (pad) + { RARCH_INPUT_STATE_COPY16_PTR( state, pad->buttons ); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t udev_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/wiiu_joypad.c b/input/drivers_joypad/wiiu_joypad.c index ed62f14e09..67f8708b25 100644 --- a/input/drivers_joypad/wiiu_joypad.c +++ b/input/drivers_joypad/wiiu_joypad.c @@ -137,11 +137,12 @@ static bool wiiu_joypad_button(unsigned port_num, uint16_t key) static void wiiu_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { - if ( port_num < MAX_PADS ) { + if (port_num < MAX_PADS) + { RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port_num] ); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLAR_ALL_PTR(state); } static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/xdk_joypad.c b/input/drivers_joypad/xdk_joypad.c index b9e25268b4..92fa8b02eb 100644 --- a/input/drivers_joypad/xdk_joypad.c +++ b/input/drivers_joypad/xdk_joypad.c @@ -78,11 +78,12 @@ static bool xdk_joypad_button(unsigned port_num, uint16_t joykey) static void xdk_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { - if ( port_num < MAX_PADS ) { + if (port_num < MAX_PADS) + { RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port_num] ); - } else { - RARCH_INPUT_STATE_CLEAR_PTR(state); } + else + BIT128_CLEAR_ALL_PTR(state); } static int16_t xdk_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/input_defines.h b/input/input_defines.h index 54eac4a25b..489122d3b1 100644 --- a/input/input_defines.h +++ b/input/input_defines.h @@ -158,12 +158,6 @@ enum analog_dpad_mode #define GET_HAT_DIR(x) (x & HAT_MASK) #define GET_HAT(x) (x & (~HAT_MASK)) -#define RARCH_INPUT_STATE_BIT_SET(a,bit) BIT128_SET(a, bit) -#define RARCH_INPUT_STATE_BIT_SET_PTR(a,bit) BIT128_SET_PTR(a, bit) -#define RARCH_INPUT_STATE_BIT_GET(a,bit) BIT128_GET(a, bit) -#define RARCH_INPUT_STATE_BIT_GET_PTR(a,bit) BIT128_GET_PTR(a, bit) -#define RARCH_INPUT_STATE_CLEAR(a) BIT128_CLEAR_ALL(a) -#define RARCH_INPUT_STATE_CLEAR_PTR(a) BIT128_CLEAR_ALL_PTR(a) #define RARCH_INPUT_STATE_ANY_SET(a) ( ((a).data[0])||((a).data[1])||((a).data[2])||((a).data[3])|| \ ((a).data[4])||((a).data[5])||((a).data[6])||((a).data[7]) ) #define RARCH_INPUT_STATE_ANY_SET_PTR(a) ( ((a)->data[0])||((a)->data[1])||((a)->data[2])||((a)->data[3])|| \ diff --git a/input/input_driver.c b/input/input_driver.c index b2e216c191..ca491bea9f 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -810,7 +810,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) joypad_info.joy_idx = 0; joypad_info.auto_binds = NULL; - RARCH_INPUT_STATE_CLEAR_PTR( p_new_state ); + BIT128_CLEAR_ALL_PTR(p_new_state); input_driver_block_libretro_input = false; input_driver_block_hotkey = false; @@ -912,7 +912,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) if (pressed) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } } @@ -922,7 +922,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) { if (current_input->meta_key_pressed(current_input_data, i)) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } } @@ -930,7 +930,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) #ifdef HAVE_OVERLAY if (overlay_ptr && input_overlay_key_pressed(overlay_ptr, i)) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } #endif @@ -945,7 +945,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) if (command_get(&handle)) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } } @@ -954,7 +954,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) #ifdef HAVE_NETWORKGAMEPAD if (input_driver_remote && input_remote_key_pressed(i, 0)) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } #endif @@ -1007,9 +1007,10 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) for (i = 0; i < 13; i++) { - if (current_input->input_state(current_input_data, joypad_info, binds, 0, + if (current_input->input_state(current_input_data, + joypad_info, binds, 0, RETRO_DEVICE_KEYBOARD, 0, ids[i][0])) - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, ids[i][1]); + BIT128_SET_PTR(p_new_state, ids[i][1]); } } } @@ -1036,7 +1037,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) const struct retro_keybind *enable_hotkey = &input_config_binds[0][RARCH_ENABLE_HOTKEY]; bool game_focus_toggle_valid = false; - RARCH_INPUT_STATE_CLEAR_PTR( p_new_state ); + BIT128_CLEAR_ALL_PTR(p_new_state); joypad_info.joy_idx = settings->uints.input_joypad_map[0]; joypad_info.auto_binds = input_autoconf_binds[joypad_info.joy_idx]; @@ -1082,7 +1083,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) 0, RETRO_DEVICE_JOYPAD, 0, i) ) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } @@ -1090,7 +1091,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) current_input->meta_key_pressed(current_input_data, i) ) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } @@ -1098,7 +1099,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) if (overlay_ptr && input_overlay_key_pressed(overlay_ptr, i)) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } #endif @@ -1113,7 +1114,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) if (command_get(&handle)) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } } @@ -1123,7 +1124,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) if (input_driver_remote && input_remote_key_pressed(i, 0)) { - RARCH_INPUT_STATE_BIT_SET_PTR(p_new_state, i); + BIT128_SET_PTR(p_new_state, i); continue; } #endif diff --git a/menu/menu_event.c b/menu/menu_event.c index c8fe862dbb..6af08b3e5a 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -160,7 +160,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) unsigned menu_cancel_btn = (!input_swap_override && settings->bools.input_menu_swap_ok_cancel_buttons) ? RETRO_DEVICE_ID_JOYPAD_A : RETRO_DEVICE_ID_JOYPAD_B; - unsigned ok_current = RARCH_INPUT_STATE_BIT_GET_PTR(p_input, menu_ok_btn ); + unsigned ok_current = BIT128_GET_PTR(p_input, menu_ok_btn ); unsigned ok_trigger = ok_current & ~ok_old; ok_old = ok_current; @@ -221,31 +221,31 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) { menu_event_osk_iterate(); - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) + if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) { if (menu_event_get_osk_ptr() < 33) menu_event_set_osk_ptr(menu_event_get_osk_ptr() + OSK_CHARS_PER_LINE); } - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_UP)) + if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_UP)) { if (menu_event_get_osk_ptr() >= OSK_CHARS_PER_LINE) menu_event_set_osk_ptr(menu_event_get_osk_ptr() - OSK_CHARS_PER_LINE); } - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_RIGHT)) + if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_RIGHT)) { if (menu_event_get_osk_ptr() < 43) menu_event_set_osk_ptr(menu_event_get_osk_ptr() + 1); } - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_LEFT)) + if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_LEFT)) { if (menu_event_get_osk_ptr() >= 1) menu_event_set_osk_ptr(menu_event_get_osk_ptr() - 1); } - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_L)) + if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_L)) { if (menu_event_get_osk_idx() > OSK_TYPE_UNKNOWN + 1) menu_event_set_osk_idx((enum osk_type)(menu_event_get_osk_idx() - 1)); @@ -253,7 +253,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) menu_event_set_osk_idx((enum osk_type)(OSK_TYPE_LAST - 1)); } - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_R)) + if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_R)) { if (menu_event_get_osk_idx() < OSK_TYPE_LAST - 1) menu_event_set_osk_idx((enum osk_type)(menu_event_get_osk_idx() + 1)); @@ -261,50 +261,50 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) menu_event_set_osk_idx((enum osk_type)(OSK_TYPE_UNKNOWN + 1)); } - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, menu_ok_btn)) + if (BIT128_GET_PTR(p_trigger_input, menu_ok_btn)) { if (menu_event_get_osk_ptr() >= 0) menu_event_osk_append(menu_event_get_osk_ptr()); } - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, menu_cancel_btn)) + if (BIT128_GET_PTR(p_trigger_input, menu_cancel_btn)) { input_keyboard_event(true, '\x7f', '\x7f', 0, RETRO_DEVICE_KEYBOARD); } /* send return key to close keyboard input window */ - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_START)) + if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_START)) input_keyboard_event(true, '\n', '\n', 0, RETRO_DEVICE_KEYBOARD); - RARCH_INPUT_STATE_CLEAR_PTR(p_trigger_input); + BIT128_CLEAR_ALL_PTR(p_trigger_input); } else { - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_UP)) + if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_UP)) ret = MENU_ACTION_UP; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) ret = MENU_ACTION_DOWN; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_LEFT)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_LEFT)) ret = MENU_ACTION_LEFT; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_RIGHT)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_RIGHT)) ret = MENU_ACTION_RIGHT; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_L)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_L)) ret = MENU_ACTION_SCROLL_UP; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_R)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_R)) ret = MENU_ACTION_SCROLL_DOWN; else if (ok_trigger) ret = MENU_ACTION_OK; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, menu_cancel_btn)) + else if (BIT128_GET_PTR(p_trigger_input, menu_cancel_btn)) ret = MENU_ACTION_CANCEL; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_X)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_X)) ret = MENU_ACTION_SEARCH; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_Y)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_Y)) ret = MENU_ACTION_SCAN; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_START)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_START)) ret = MENU_ACTION_START; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) + else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) ret = MENU_ACTION_INFO; - else if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RARCH_MENU_TOGGLE)) + else if (BIT128_GET_PTR(p_trigger_input, RARCH_MENU_TOGGLE)) ret = MENU_ACTION_TOGGLE; } @@ -314,7 +314,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) menu_event_kb_set_internal(RETROK_F11, 0); } - if (RARCH_INPUT_STATE_BIT_GET_PTR(p_trigger_input, RARCH_QUIT_KEY)) + if (BIT128_GET_PTR(p_trigger_input, RARCH_QUIT_KEY)) return MENU_ACTION_QUIT; mouse_enabled = settings->bools.menu_mouse_enable; diff --git a/retroarch.c b/retroarch.c index 88173a0266..f9d7b6aae9 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2315,35 +2315,35 @@ static bool input_driver_toggle_button_combo( switch (mode) { case INPUT_TOGGLE_DOWN_Y_L_R: - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) return false; - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_Y)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_Y)) return false; - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L)) return false; - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R)) return false; break; case INPUT_TOGGLE_L3_R3: - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L3)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L3)) return false; - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R3)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R3)) return false; break; case INPUT_TOGGLE_L1_R1_START_SELECT: - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START)) return false; - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) return false; - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L)) return false; - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R)) return false; break; case INPUT_TOGGLE_START_SELECT: - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START)) return false; - if (!RARCH_INPUT_STATE_BIT_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) + if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) return false; break; default: @@ -2375,7 +2375,7 @@ static enum runloop_state runloop_check_state( retro_bits_t current_input; - if ( menu_is_alive && !(settings->bools.menu_unified_controls && !menu_input_dialog_get_display_kb()) ) + if (menu_is_alive && !(settings->bools.menu_unified_controls && !menu_input_dialog_get_display_kb())) input_menu_keys_pressed(settings, ¤t_input); else input_keys_pressed(settings, ¤t_input); @@ -2391,9 +2391,7 @@ static enum runloop_state runloop_check_state( ((settings->uints.input_menu_toggle_gamepad_combo != INPUT_TOGGLE_NONE) && input_driver_toggle_button_combo( settings->uints.input_menu_toggle_gamepad_combo, &last_input))) - { - RARCH_INPUT_STATE_BIT_SET(current_input, RARCH_MENU_TOGGLE); - } + BIT128_SET(current_input, RARCH_MENU_TOGGLE); #endif if (input_driver_flushing_input) @@ -2401,9 +2399,9 @@ static enum runloop_state runloop_check_state( input_driver_flushing_input = false; if (RARCH_INPUT_STATE_ANY_SET(current_input)) { - RARCH_INPUT_STATE_CLEAR( current_input ); + BIT128_CLEAR_ALL(current_input); if (runloop_paused) - RARCH_INPUT_STATE_BIT_SET(current_input, RARCH_PAUSE_TOGGLE); + BIT128_SET(current_input, RARCH_PAUSE_TOGGLE); input_driver_flushing_input = true; } } @@ -2412,14 +2410,14 @@ static enum runloop_state runloop_check_state( #ifdef HAVE_MENU if (menu_driver_binding_state) - RARCH_INPUT_STATE_CLEAR( current_input ); + BIT128_CLEAR_ALL(current_input); #endif #ifdef HAVE_OVERLAY /* Check next overlay */ { static bool old_should_check_next_overlay = false; - bool should_check_next_overlay = runloop_cmd_press( + bool should_check_next_overlay = BIT128_GET( current_input, RARCH_OVERLAY_NEXT); if (should_check_next_overlay && !old_should_check_next_overlay) @@ -2431,7 +2429,7 @@ static enum runloop_state runloop_check_state( /* Check fullscreen toggle */ { - bool fs_toggle_pressed = runloop_cmd_press( + bool fs_toggle_pressed = BIT128_GET( current_input, RARCH_FULLSCREEN_TOGGLE_KEY); fs_toggle_triggered = fs_toggle_pressed && !old_fs_toggle_pressed; @@ -2454,7 +2452,7 @@ static enum runloop_state runloop_check_state( /* Check mouse grab toggle */ { static bool old_pressed = false; - bool pressed = runloop_cmd_press( + bool pressed = BIT128_GET( current_input, RARCH_GRAB_MOUSE_TOGGLE); if (pressed && !old_pressed) @@ -2489,7 +2487,7 @@ static enum runloop_state runloop_check_state( /* Check quit key */ { static bool old_quit_key = false; - bool quit_key = runloop_cmd_press( + bool quit_key = BIT128_GET( current_input, RARCH_QUIT_KEY); bool trig_quit_key = quit_key && !old_quit_key; @@ -2544,7 +2542,7 @@ static enum runloop_state runloop_check_state( bool focused; trigger_input = current_input; - RARCH_INPUT_STATE_CLEAR_BITS( trigger_input, old_input ); + RARCH_INPUT_STATE_CLEAR_BITS(trigger_input, old_input); action = (enum menu_action)menu_event(¤t_input, &trigger_input); focused = pause_nonactive ? is_focused : true; @@ -2583,7 +2581,7 @@ static enum runloop_state runloop_check_state( /* Check game focus toggle */ { static bool old_pressed = false; - bool pressed = runloop_cmd_press( + bool pressed = BIT128_GET( current_input, RARCH_GAME_FOCUS_TOGGLE); if (pressed && !old_pressed) @@ -2596,7 +2594,7 @@ static enum runloop_state runloop_check_state( /* Check menu toggle */ { static bool old_pressed = false; - bool pressed = runloop_cmd_press( + bool pressed = BIT128_GET( current_input, RARCH_MENU_TOGGLE); if (menu_event_kb_is_set(RETROK_F1) == 1) @@ -2646,7 +2644,7 @@ static enum runloop_state runloop_check_state( /* Check screenshot toggle */ { static bool old_pressed = false; - bool pressed = runloop_cmd_press( + bool pressed = BIT128_GET( current_input, RARCH_SCREENSHOT); if (pressed && old_pressed) @@ -2658,7 +2656,7 @@ static enum runloop_state runloop_check_state( /* Check audio mute toggle */ { static bool old_pressed = false; - bool pressed = runloop_cmd_press( + bool pressed = BIT128_GET( current_input, RARCH_MUTE); if (pressed && !old_pressed) @@ -2670,8 +2668,7 @@ static enum runloop_state runloop_check_state( /* Check OSK toggle */ { static bool old_pressed = false; - bool pressed = runloop_cmd_press( - current_input, RARCH_OSK); + bool pressed = BIT128_GET(current_input, RARCH_OSK); if (pressed && !old_pressed) { @@ -2687,9 +2684,9 @@ static enum runloop_state runloop_check_state( old_pressed = pressed; } - if (runloop_cmd_press(current_input, RARCH_VOLUME_UP)) + if (BIT128_GET(current_input, RARCH_VOLUME_UP)) command_event(CMD_EVENT_VOLUME_UP, NULL); - else if (runloop_cmd_press(current_input, RARCH_VOLUME_DOWN)) + else if (BIT128_GET(current_input, RARCH_VOLUME_DOWN)) command_event(CMD_EVENT_VOLUME_DOWN, NULL); #ifdef HAVE_NETWORKING @@ -2697,9 +2694,9 @@ static enum runloop_state runloop_check_state( { static bool old_netplay_flip = false; static bool old_netplay_watch = false; - bool netplay_flip = runloop_cmd_press( + bool netplay_flip = BIT128_GET( current_input, RARCH_NETPLAY_FLIP); - bool netplay_watch = runloop_cmd_press( + bool netplay_watch = BIT128_GET( current_input, RARCH_NETPLAY_GAME_WATCH); if (netplay_flip && !old_netplay_flip) @@ -2718,9 +2715,9 @@ static enum runloop_state runloop_check_state( static bool old_frameadvance = false; static bool old_pause_pressed = false; bool check_is_oneshot = true; - bool frameadvance_pressed = runloop_cmd_press( + bool frameadvance_pressed = BIT128_GET( current_input, RARCH_FRAMEADVANCE); - bool pause_pressed = runloop_cmd_press( + bool pause_pressed = BIT128_GET( current_input, RARCH_PAUSE_TOGGLE); bool trig_frameadvance = frameadvance_pressed && !old_frameadvance; @@ -2744,7 +2741,7 @@ static enum runloop_state runloop_check_state( if (runloop_paused) { check_is_oneshot = trig_frameadvance || - runloop_cmd_press(current_input, RARCH_REWIND); + BIT128_GET(current_input, RARCH_REWIND); if (fs_toggle_triggered) { @@ -2769,9 +2766,9 @@ static enum runloop_state runloop_check_state( { static bool old_button_state = false; static bool old_hold_button_state = false; - bool new_button_state = runloop_cmd_press( + bool new_button_state = BIT128_GET( current_input, RARCH_FAST_FORWARD_KEY); - bool new_hold_button_state = runloop_cmd_press( + bool new_hold_button_state = BIT128_GET( current_input, RARCH_FAST_FORWARD_HOLD_KEY); if (new_button_state && !old_button_state) @@ -2812,9 +2809,9 @@ static enum runloop_state runloop_check_state( { static bool old_should_slot_increase = false; static bool old_should_slot_decrease = false; - bool should_slot_increase = runloop_cmd_press( + bool should_slot_increase = BIT128_GET( current_input, RARCH_STATE_SLOT_PLUS); - bool should_slot_decrease = runloop_cmd_press( + bool should_slot_decrease = BIT128_GET( current_input, RARCH_STATE_SLOT_MINUS); /* Checks if the state increase/decrease keys have been pressed @@ -2865,9 +2862,9 @@ static enum runloop_state runloop_check_state( { static bool old_should_savestate = false; static bool old_should_loadstate = false; - bool should_savestate = runloop_cmd_press( + bool should_savestate = BIT128_GET( current_input, RARCH_SAVE_STATE_KEY); - bool should_loadstate = runloop_cmd_press( + bool should_loadstate = BIT128_GET( current_input, RARCH_LOAD_STATE_KEY); if (should_savestate && !old_should_savestate) @@ -2888,14 +2885,14 @@ static enum runloop_state runloop_check_state( s[0] = '\0'; - if (state_manager_check_rewind(runloop_cmd_press(current_input, RARCH_REWIND), + if (state_manager_check_rewind(BIT128_GET(current_input, RARCH_REWIND), settings->uints.rewind_granularity, runloop_paused, s, sizeof(s), &t)) runloop_msg_queue_push(s, 0, t, true); } /* Checks if slowmotion toggle/hold was being pressed and/or held. */ { - runloop_slowmotion = runloop_cmd_press(current_input, RARCH_SLOWMOTION); + runloop_slowmotion = BIT128_GET(current_input, RARCH_SLOWMOTION); if (runloop_slowmotion) { @@ -2917,7 +2914,7 @@ static enum runloop_state runloop_check_state( /* Check movie record toggle */ { static bool old_pressed = false; - bool pressed = runloop_cmd_press( + bool pressed = BIT128_GET( current_input, RARCH_MOVIE_RECORD_TOGGLE); if (pressed && !old_pressed) @@ -2930,9 +2927,9 @@ static enum runloop_state runloop_check_state( { static bool old_shader_next = false; static bool old_shader_prev = false; - bool shader_next = runloop_cmd_press( + bool shader_next = BIT128_GET( current_input, RARCH_SHADER_NEXT); - bool shader_prev = runloop_cmd_press( + bool shader_prev = BIT128_GET( current_input, RARCH_SHADER_PREV); bool trig_shader_next = shader_next && !old_shader_next; bool trig_shader_prev = shader_prev && !old_shader_prev; @@ -2949,11 +2946,11 @@ static enum runloop_state runloop_check_state( static bool old_disk_eject = false; static bool old_disk_next = false; static bool old_disk_prev = false; - bool disk_eject = runloop_cmd_press( + bool disk_eject = BIT128_GET( current_input, RARCH_DISK_EJECT_TOGGLE); - bool disk_next = runloop_cmd_press( + bool disk_next = BIT128_GET( current_input, RARCH_DISK_NEXT); - bool disk_prev = runloop_cmd_press( + bool disk_prev = BIT128_GET( current_input, RARCH_DISK_PREV); if (disk_eject && !old_disk_eject) @@ -2971,7 +2968,7 @@ static enum runloop_state runloop_check_state( /* Check reset */ { static bool old_state = false; - bool new_state = runloop_cmd_press( + bool new_state = BIT128_GET( current_input, RARCH_RESET); if (new_state && !old_state) @@ -2985,11 +2982,11 @@ static enum runloop_state runloop_check_state( static bool old_cheat_index_plus = false; static bool old_cheat_index_minus = false; static bool old_cheat_index_toggle = false; - bool cheat_index_plus = runloop_cmd_press( + bool cheat_index_plus = BIT128_GET( current_input, RARCH_CHEAT_INDEX_PLUS); - bool cheat_index_minus = runloop_cmd_press( + bool cheat_index_minus = BIT128_GET( current_input, RARCH_CHEAT_INDEX_MINUS); - bool cheat_index_toggle = runloop_cmd_press( + bool cheat_index_toggle = BIT128_GET( current_input, RARCH_CHEAT_TOGGLE); if (cheat_index_plus && !old_cheat_index_plus) diff --git a/retroarch.h b/retroarch.h index 3cd1b742d3..6c45f744c1 100644 --- a/retroarch.h +++ b/retroarch.h @@ -27,8 +27,6 @@ #include "core_type.h" #include "core.h" -#define runloop_cmd_press(current_input, id) (RARCH_INPUT_STATE_BIT_GET(current_input, id)) - RETRO_BEGIN_DECLS enum rarch_ctl_state From 31cc6a8dd769707dfc009d5980335abafde9bdbd Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 09:51:58 +0100 Subject: [PATCH 60/85] Create 256 bit macros --- libretro-common/include/retro_miscellaneous.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index b29c5cdc54..e42f6b345b 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -87,8 +87,18 @@ #define BIT128_GET_PTR(a, bit) BIT128_GET(*a, bit) #define BIT128_CLEAR_ALL_PTR(a) BIT128_CLEAR_ALL(*a) +#define BIT256_SET(a, bit) BIT128_SET(a, bit) +#define BIT256_CLEAR(a, bit) BIT128_CLEAR(a, bit) +#define BIT256_GET(a, bit) BIT128_GET(a, bit) +#define BIT256_CLEAR_ALL(a) BIT128_CLEAR_ALL(a) + +#define BIT256_SET_PTR(a, bit) BIT256_SET(*a, bit) +#define BIT256_CLEAR_PTR(a, bit) BIT256_CLEAR(*a, bit) +#define BIT256_GET_PTR(a, bit) BIT256_GET(*a, bit) +#define BIT256_CLEAR_ALL_PTR(a) BIT256_CLEAR_ALL(*a) + /* Helper macros and struct to keep track of many booleans. */ -/* This struct has 256 bits, but the macros are named 128 due to some historical accident. */ +/* This struct has 256 bits. */ typedef struct { uint32_t data[8]; From 6c09661a643f02b0bb92b7802e41022b759b166c Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 10:42:37 +0100 Subject: [PATCH 61/85] Move defines to retro_miscellaneous.h --- input/connect/connect_nesusb.c | 2 +- input/connect/connect_ps2adapter.c | 2 +- input/connect/connect_ps3.c | 2 +- input/connect/connect_psxadapter.c | 2 +- input/connect/connect_snesusb.c | 2 +- input/connect/connect_wii.c | 6 ++--- input/connect/connect_wiiugca.c | 2 +- input/drivers_joypad/ctr_joypad.c | 2 +- input/drivers_joypad/gx_joypad.c | 2 +- input/drivers_joypad/linuxraw_joypad.c | 2 +- input/drivers_joypad/mfi_joypad.m | 2 +- input/drivers_joypad/parport_joypad.c | 2 +- input/drivers_joypad/ps3_joypad.c | 2 +- input/drivers_joypad/psp_joypad.c | 2 +- input/drivers_joypad/udev_joypad.c | 2 +- input/drivers_joypad/wiiu_joypad.c | 2 +- input/drivers_joypad/xdk_joypad.c | 2 +- input/input_defines.h | 27 ------------------- libretro-common/include/retro_miscellaneous.h | 27 +++++++++++++++++++ menu/menu_event.c | 2 +- retroarch.c | 10 +++---- 21 files changed, 51 insertions(+), 53 deletions(-) diff --git a/input/connect/connect_nesusb.c b/input/connect/connect_nesusb.c index b39936be06..797f83e7ae 100644 --- a/input/connect/connect_nesusb.c +++ b/input/connect/connect_nesusb.c @@ -64,7 +64,7 @@ static void hidpad_nesusb_get_buttons(void *data, retro_bits_t* state) struct hidpad_nesusb_data *device = (struct hidpad_nesusb_data*)data; if (device) { - RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); + BITS_COPY16_PTR(state, device->buttons); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/connect/connect_ps2adapter.c b/input/connect/connect_ps2adapter.c index 29b2c932fe..c79aac8df3 100644 --- a/input/connect/connect_ps2adapter.c +++ b/input/connect/connect_ps2adapter.c @@ -64,7 +64,7 @@ static void hidpad_ps2adapter_get_buttons(void *data, retro_bits_t *state) struct hidpad_ps2adapter_data *device = (struct hidpad_ps2adapter_data*)data; if (device) { - RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); + BITS_COPY16_PTR(state, device->buttons); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/connect/connect_ps3.c b/input/connect/connect_ps3.c index de4e8fa3ec..6ef05f8e4e 100644 --- a/input/connect/connect_ps3.c +++ b/input/connect/connect_ps3.c @@ -111,7 +111,7 @@ static void hidpad_ps3_get_buttons(void *data, retro_bits_t *state) if ( device ) { /*copy first 16 bits - standard RetroPad controls*/ - RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); + BITS_COPY16_PTR(state, device->buttons); /*PS button?*/ if (device->buttons & 0x10000) diff --git a/input/connect/connect_psxadapter.c b/input/connect/connect_psxadapter.c index a4fcf78587..03193fd606 100644 --- a/input/connect/connect_psxadapter.c +++ b/input/connect/connect_psxadapter.c @@ -64,7 +64,7 @@ static void hidpad_psxadapter_get_buttons(void *data, retro_bits_t *state) struct hidpad_psxadapter_data *device = (struct hidpad_psxadapter_data*)data; if (device) { - RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); + BITS_COPY16_PTR(state, device->buttons); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/connect/connect_snesusb.c b/input/connect/connect_snesusb.c index b7cb594905..51570d82fa 100644 --- a/input/connect/connect_snesusb.c +++ b/input/connect/connect_snesusb.c @@ -65,7 +65,7 @@ static void hidpad_snesusb_get_buttons(void *data, retro_bits_t *state) struct hidpad_snesusb_data *device = (struct hidpad_snesusb_data*)data; if (device) { - RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); + BITS_COPY16_PTR(state, device->buttons); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/connect/connect_wii.c b/input/connect/connect_wii.c index ec4ceaaa72..83ac50d736 100644 --- a/input/connect/connect_wii.c +++ b/input/connect/connect_wii.c @@ -677,9 +677,9 @@ static void hidpad_wii_get_buttons(void *data, retro_bits_t *state) struct connect_wii_wiimote_t* device = (struct connect_wii_wiimote_t*)data; if ( device ) { - uint32_t b; - b = device->btns | (device->exp.cc.classic.btns << 16); /*broken? this doesn't match retropad!!*/ - RARCH_INPUT_STATE_COPY32_PTR(state, b); + /* TODO/FIXME - Broken? this doesn't match retropad! */ + uint32_t b = device->btns | (device->exp.cc.classic.btns << 16); + BITS_COPY32_PTR(state, b); } } diff --git a/input/connect/connect_wiiugca.c b/input/connect/connect_wiiugca.c index 69ceaa0739..cd0ea8b33e 100644 --- a/input/connect/connect_wiiugca.c +++ b/input/connect/connect_wiiugca.c @@ -68,7 +68,7 @@ static void hidpad_wiiugca_get_buttons(void *data, retro_bits_t *state) struct hidpad_wiiugca_data *device = (struct hidpad_wiiugca_data*)data; if (device) { - RARCH_INPUT_STATE_COPY16_PTR(state, device->buttons); + BITS_COPY16_PTR(state, device->buttons); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index 7350c71d78..a98fce76fc 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -74,7 +74,7 @@ static void ctr_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { if ( port_num < MAX_PADS ) { - RARCH_INPUT_STATE_COPY16_PTR( state, pad_state ); + BITS_COPY16_PTR( state, pad_state ); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/drivers_joypad/gx_joypad.c b/input/drivers_joypad/gx_joypad.c index 2dc568df78..bccc6f467b 100644 --- a/input/drivers_joypad/gx_joypad.c +++ b/input/drivers_joypad/gx_joypad.c @@ -166,7 +166,7 @@ static void gx_joypad_get_buttons(unsigned port, retro_bits_t *state) { if (port < MAX_PADS) { - RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port] ); + BITS_COPY16_PTR( state, pad_state[port] ); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/drivers_joypad/linuxraw_joypad.c b/input/drivers_joypad/linuxraw_joypad.c index f8cf299464..c43ea0b93a 100644 --- a/input/drivers_joypad/linuxraw_joypad.c +++ b/input/drivers_joypad/linuxraw_joypad.c @@ -331,7 +331,7 @@ static void linuxraw_joypad_get_buttons(unsigned port, retro_bits_t *state) const struct linuxraw_joypad *pad = (const struct linuxraw_joypad*)&linuxraw_pads[port]; if (pad) { - RARCH_INPUT_STATE_COPY16_PTR(state, pad->buttons); + BITS_COPY16_PTR(state, pad->buttons); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/drivers_joypad/mfi_joypad.m b/input/drivers_joypad/mfi_joypad.m index 10964893f0..94f56b2147 100644 --- a/input/drivers_joypad/mfi_joypad.m +++ b/input/drivers_joypad/mfi_joypad.m @@ -223,7 +223,7 @@ static bool apple_gamecontroller_joypad_button(unsigned port, uint16_t joykey) static void apple_gamecontroller_joypad_get_buttons(unsigned port, retro_bits_t *state) { - RARCH_INPUT_STATE_COPY16_PTR(state, mfi_buttons[port]); + BITS_COPY16_PTR(state, mfi_buttons[port]); } static int16_t apple_gamecontroller_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/parport_joypad.c b/input/drivers_joypad/parport_joypad.c index 61879842c8..f24c2706a5 100644 --- a/input/drivers_joypad/parport_joypad.c +++ b/input/drivers_joypad/parport_joypad.c @@ -345,7 +345,7 @@ static void parport_joypad_get_buttons(unsigned port, retro_bits_t *state) const struct parport_joypad *pad = (const struct parport_joypad*)&parport_pads[port]; if (pad) { - RARCH_INPUT_STATE_COPY16_PTR(state, pad->buttons); + BITS_COPY16_PTR(state, pad->buttons); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c index cd11cda4b7..f37822642d 100644 --- a/input/drivers_joypad/ps3_joypad.c +++ b/input/drivers_joypad/ps3_joypad.c @@ -72,7 +72,7 @@ static void ps3_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { if (port_num < MAX_PADS) { - RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port_num] ); + BITS_COPY16_PTR( state, pad_state[port_num] ); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/drivers_joypad/psp_joypad.c b/input/drivers_joypad/psp_joypad.c index c86ee65a0b..60ca2daff3 100644 --- a/input/drivers_joypad/psp_joypad.c +++ b/input/drivers_joypad/psp_joypad.c @@ -128,7 +128,7 @@ static void psp_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { if (port_num < PSP_MAX_PADS) { - RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port_num] ); + BITS_COPY16_PTR( state, pad_state[port_num] ); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index 50cfec8f20..283e1bd38b 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -609,7 +609,7 @@ static void udev_joypad_get_buttons(unsigned port, retro_bits_t *state) const struct udev_joypad *pad = (const struct udev_joypad*)&udev_pads[port]; if (pad) { - RARCH_INPUT_STATE_COPY16_PTR( state, pad->buttons ); + BITS_COPY16_PTR( state, pad->buttons ); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/drivers_joypad/wiiu_joypad.c b/input/drivers_joypad/wiiu_joypad.c index 67f8708b25..8a3d8189db 100644 --- a/input/drivers_joypad/wiiu_joypad.c +++ b/input/drivers_joypad/wiiu_joypad.c @@ -139,7 +139,7 @@ static void wiiu_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { if (port_num < MAX_PADS) { - RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port_num] ); + BITS_COPY16_PTR( state, pad_state[port_num] ); } else BIT128_CLAR_ALL_PTR(state); diff --git a/input/drivers_joypad/xdk_joypad.c b/input/drivers_joypad/xdk_joypad.c index 92fa8b02eb..6553346160 100644 --- a/input/drivers_joypad/xdk_joypad.c +++ b/input/drivers_joypad/xdk_joypad.c @@ -80,7 +80,7 @@ static void xdk_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { if (port_num < MAX_PADS) { - RARCH_INPUT_STATE_COPY16_PTR( state, pad_state[port_num] ); + BITS_COPY16_PTR( state, pad_state[port_num] ); } else BIT128_CLEAR_ALL_PTR(state); diff --git a/input/input_defines.h b/input/input_defines.h index 489122d3b1..b005e90f58 100644 --- a/input/input_defines.h +++ b/input/input_defines.h @@ -158,33 +158,6 @@ enum analog_dpad_mode #define GET_HAT_DIR(x) (x & HAT_MASK) #define GET_HAT(x) (x & (~HAT_MASK)) -#define RARCH_INPUT_STATE_ANY_SET(a) ( ((a).data[0])||((a).data[1])||((a).data[2])||((a).data[3])|| \ - ((a).data[4])||((a).data[5])||((a).data[6])||((a).data[7]) ) -#define RARCH_INPUT_STATE_ANY_SET_PTR(a) ( ((a)->data[0])||((a)->data[1])||((a)->data[2])||((a)->data[3])|| \ - ((a)->data[4])||((a)->data[5])||((a)->data[6])||((a)->data[7]) ) -#define RARCH_INPUT_STATE_CLEAR_BITS(a,b) \ - ((a).data[0])&=(~((b).data[0])); \ - ((a).data[1])&=(~((b).data[1])); \ - ((a).data[2])&=(~((b).data[2])); \ - ((a).data[3])&=(~((b).data[3])); \ - ((a).data[4])&=(~((b).data[4])); \ - ((a).data[5])&=(~((b).data[5])); \ - ((a).data[6])&=(~((b).data[6])); \ - ((a).data[7])&=(~((b).data[7])); - -#define RARCH_INPUT_STATE_COPY16_PTR(a,bits) \ -{ \ - BIT128_CLEAR_ALL_PTR(a); \ - ((a)->data[0] = (bits) & 0xffff); \ -} - -#define RARCH_INPUT_STATE_COPY32_PTR(a,bits) \ -{ \ - BIT128_CLEAR_ALL_PTR(a); \ - ((a)->data[0] = (bits)); \ -} - - RETRO_END_DECLS #endif diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index e42f6b345b..c69afed90b 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -58,6 +58,33 @@ #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) +#define BITS_ANY_SET(a) ( ((a).data[0])||((a).data[1])||((a).data[2])||((a).data[3])|| \ + ((a).data[4])||((a).data[5])||((a).data[6])||((a).data[7]) ) +#define BITS_ANY_SET_PTR(a) ( ((a)->data[0])||((a)->data[1])||((a)->data[2])||((a)->data[3])|| \ + ((a)->data[4])||((a)->data[5])||((a)->data[6])||((a)->data[7]) ) +#define BITS_CLEAR_BITS(a,b) \ + ((a).data[0])&=(~((b).data[0])); \ + ((a).data[1])&=(~((b).data[1])); \ + ((a).data[2])&=(~((b).data[2])); \ + ((a).data[3])&=(~((b).data[3])); \ + ((a).data[4])&=(~((b).data[4])); \ + ((a).data[5])&=(~((b).data[5])); \ + ((a).data[6])&=(~((b).data[6])); \ + ((a).data[7])&=(~((b).data[7])); + +#define BITS_COPY16_PTR(a,bits) \ +{ \ + BIT128_CLEAR_ALL_PTR(a); \ + ((a)->data[0] = (bits) & 0xffff); \ +} + +#define BITS_COPY32_PTR(a,bits) \ +{ \ + BIT128_CLEAR_ALL_PTR(a); \ + ((a)->data[0] = (bits)); \ +} + + #define BIT_SET(a, bit) ((a)[(bit) >> 3] |= (1 << ((bit) & 7))) #define BIT_CLEAR(a, bit) ((a)[(bit) >> 3] &= ~(1 << ((bit) & 7))) #define BIT_GET(a, bit) (((a).data[(bit) >> 3] >> ((bit) & 7)) & 1) diff --git a/menu/menu_event.c b/menu/menu_event.c index 6af08b3e5a..a492aca726 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -165,7 +165,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) ok_old = ok_current; - if (RARCH_INPUT_STATE_ANY_SET_PTR(p_input)) + if (BITS_ANY_SET_PTR(p_input)) { if (!first_held) { diff --git a/retroarch.c b/retroarch.c index f9d7b6aae9..d7a2d3170a 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2397,7 +2397,7 @@ static enum runloop_state runloop_check_state( if (input_driver_flushing_input) { input_driver_flushing_input = false; - if (RARCH_INPUT_STATE_ANY_SET(current_input)) + if (BITS_ANY_SET(current_input)) { BIT128_CLEAR_ALL(current_input); if (runloop_paused) @@ -2537,12 +2537,10 @@ static enum runloop_state runloop_check_state( retro_ctx.poll_cb(); { - retro_bits_t trigger_input; enum menu_action action; - bool focused; - - trigger_input = current_input; - RARCH_INPUT_STATE_CLEAR_BITS(trigger_input, old_input); + bool focused = false; + retro_bits_t trigger_input = current_input; + BITS_CLEAR_BITS(trigger_input, old_input); action = (enum menu_action)menu_event(¤t_input, &trigger_input); focused = pause_nonactive ? is_focused : true; From f0c143766e38fb49d8871125bbfa147b7dcc3f5b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 12:07:35 +0100 Subject: [PATCH 62/85] Change to 256bit macros --- audio/drivers/xaudio.h | 11 +-- input/connect/connect_nesusb.c | 2 +- input/connect/connect_ps2adapter.c | 2 +- input/connect/connect_ps3.c | 4 +- input/connect/connect_ps4.c | 36 ++++----- input/connect/connect_psxadapter.c | 2 +- input/connect/connect_snesusb.c | 2 +- input/connect/connect_wiiugca.c | 2 +- input/connect/connect_wiiupro.c | 36 ++++----- input/connect/joypad_connection.c | 4 +- input/drivers/cocoa_input.c | 2 +- input/drivers/wiiu_input.c | 2 +- input/drivers/winraw_input.c | 3 +- input/drivers_hid/btstack_hid.c | 4 +- input/drivers_hid/iohidmanager_hid.c | 4 +- input/drivers_hid/libusb_hid.c | 11 ++- input/drivers_hid/null_hid.c | 2 +- input/drivers_hid/wiiusb_hid.c | 10 ++- input/drivers_joypad/ctr_joypad.c | 2 +- input/drivers_joypad/gx_joypad.c | 2 +- input/drivers_joypad/hid_joypad.c | 2 +- input/drivers_joypad/linuxraw_joypad.c | 2 +- input/drivers_joypad/null_joypad.c | 2 +- input/drivers_joypad/parport_joypad.c | 2 +- input/drivers_joypad/ps3_joypad.c | 2 +- input/drivers_joypad/psp_joypad.c | 2 +- input/drivers_joypad/udev_joypad.c | 2 +- input/drivers_joypad/wiiu_joypad.c | 2 +- input/drivers_joypad/xdk_joypad.c | 2 +- input/input_driver.c | 26 +++--- menu/menu_event.c | 48 +++++------ retroarch.c | 106 ++++++++++++------------- 32 files changed, 168 insertions(+), 173 deletions(-) diff --git a/audio/drivers/xaudio.h b/audio/drivers/xaudio.h index 41e21be09d..266f89a59c 100644 --- a/audio/drivers/xaudio.h +++ b/audio/drivers/xaudio.h @@ -324,16 +324,11 @@ STDAPI XAudio2Create(__deref_out IXAudio2** ppXAudio2, UINT32 Flags X2DEFAULT(0) #else static INLINE HRESULT XAudio2Create(IXAudio2 **ppXAudio2, UINT32 flags, XAUDIO2_PROCESSOR proc) { - HRESULT hr; IXAudio2 *pXAudio2 = NULL; - - (void)flags; - (void)proc; - #ifdef __cplusplus - hr = CoCreateInstance(CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, IID_IXAudio2, (void**)&pXAudio2); + HRESULT hr = CoCreateInstance(CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, IID_IXAudio2, (void**)&pXAudio2); #else - hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void**)&pXAudio2); + HRESULT hr = CoCreateInstance(&CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, &IID_IXAudio2, (void**)&pXAudio2); #endif if (SUCCEEDED(hr)) @@ -342,9 +337,7 @@ static INLINE HRESULT XAudio2Create(IXAudio2 **ppXAudio2, UINT32 flags, XAUDIO2_ if (SUCCEEDED(hr)) *ppXAudio2 = pXAudio2; else - { IXAudio2_Release(pXAudio2); - } } return hr; } diff --git a/input/connect/connect_nesusb.c b/input/connect/connect_nesusb.c index 797f83e7ae..bf21fbb901 100644 --- a/input/connect/connect_nesusb.c +++ b/input/connect/connect_nesusb.c @@ -67,7 +67,7 @@ static void hidpad_nesusb_get_buttons(void *data, retro_bits_t* state) BITS_COPY16_PTR(state, device->buttons); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t hidpad_nesusb_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_ps2adapter.c b/input/connect/connect_ps2adapter.c index c79aac8df3..87b174bd4e 100644 --- a/input/connect/connect_ps2adapter.c +++ b/input/connect/connect_ps2adapter.c @@ -67,7 +67,7 @@ static void hidpad_ps2adapter_get_buttons(void *data, retro_bits_t *state) BITS_COPY16_PTR(state, device->buttons); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t hidpad_ps2adapter_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_ps3.c b/input/connect/connect_ps3.c index 6ef05f8e4e..7e96e5a7f4 100644 --- a/input/connect/connect_ps3.c +++ b/input/connect/connect_ps3.c @@ -115,10 +115,10 @@ static void hidpad_ps3_get_buttons(void *data, retro_bits_t *state) /*PS button?*/ if (device->buttons & 0x10000) - BIT128_SET_PTR(state, RARCH_MENU_TOGGLE); + BIT256_SET_PTR(state, RARCH_MENU_TOGGLE); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t hidpad_ps3_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_ps4.c b/input/connect/connect_ps4.c index 901e693d80..dcdd88a41e 100644 --- a/input/connect/connect_ps4.c +++ b/input/connect/connect_ps4.c @@ -194,42 +194,42 @@ static void hidpad_ps4_get_buttons(void *data, retro_bits_t* state) if (!device || !rpt) return; - BIT128_CLEAR_ALL_PTR( state ); + BIT256_CLEAR_ALL_PTR( state ); if (rpt->btn.r3) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R3 ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R3 ); if (rpt->btn.l3) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L3 ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L3 ); if (rpt->btn.options) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_START ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_START ); if ( rpt->btn.share) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_SELECT ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_SELECT ); if ( rpt->btn.r2) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R2 ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R2 ); if (rpt->btn.l2) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L2 ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L2 ); if (rpt->btn.r1) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_R ); if (rpt->btn.l1) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_L ); if (rpt->btn.triangle) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_X ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_X ); if (rpt->btn.circle) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_A ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_A ); if (rpt->btn.cross) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_B ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_B ); if (rpt->btn.square) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_Y ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_Y ); if ((hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_LEFT))) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_LEFT ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_LEFT ); if ((hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_DOWN))) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_DOWN ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_DOWN ); if ((hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_RIGHT))) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_RIGHT ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_RIGHT ); if ((hidpad_ps4_check_dpad(rpt, RETRO_DEVICE_ID_JOYPAD_UP))) - BIT128_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_UP ); + BIT256_SET_PTR( state, RETRO_DEVICE_ID_JOYPAD_UP ); if (rpt->btn.ps) - BIT128_SET_PTR( state, RARCH_MENU_TOGGLE ); + BIT256_SET_PTR( state, RARCH_MENU_TOGGLE ); } static int16_t hidpad_ps4_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_psxadapter.c b/input/connect/connect_psxadapter.c index 03193fd606..b9d2e7f9ba 100644 --- a/input/connect/connect_psxadapter.c +++ b/input/connect/connect_psxadapter.c @@ -67,7 +67,7 @@ static void hidpad_psxadapter_get_buttons(void *data, retro_bits_t *state) BITS_COPY16_PTR(state, device->buttons); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t hidpad_psxadapter_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_snesusb.c b/input/connect/connect_snesusb.c index 51570d82fa..62759b51fb 100644 --- a/input/connect/connect_snesusb.c +++ b/input/connect/connect_snesusb.c @@ -68,7 +68,7 @@ static void hidpad_snesusb_get_buttons(void *data, retro_bits_t *state) BITS_COPY16_PTR(state, device->buttons); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t hidpad_snesusb_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_wiiugca.c b/input/connect/connect_wiiugca.c index cd0ea8b33e..5705a7acdf 100644 --- a/input/connect/connect_wiiugca.c +++ b/input/connect/connect_wiiugca.c @@ -71,7 +71,7 @@ static void hidpad_wiiugca_get_buttons(void *data, retro_bits_t *state) BITS_COPY16_PTR(state, device->buttons); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t hidpad_wiiugca_get_axis(void *data, unsigned axis) diff --git a/input/connect/connect_wiiupro.c b/input/connect/connect_wiiupro.c index b7e148a010..6356fc94fa 100644 --- a/input/connect/connect_wiiupro.c +++ b/input/connect/connect_wiiupro.c @@ -127,42 +127,42 @@ static void hidpad_wiiupro_get_buttons(void *data, retro_bits_t *state) if (!device || !rpt) return; - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); if (rpt->btn.r3) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R3); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R3); if (rpt->btn.l3) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L3); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L3); if (rpt->btn.plus) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_START); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_START); if ( rpt->btn.minus) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_SELECT); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_SELECT); if ( rpt->btn.zr) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R2); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R2); if ( rpt->btn.zl) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L2); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L2); if ( rpt->btn.r) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_R); if ( rpt->btn.l) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_L); if ( rpt->btn.x) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_X); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_X); if ( rpt->btn.a) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_A); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_A); if ( rpt->btn.b) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_B); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_B); if ( rpt->btn.y) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_Y); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_Y); if ( rpt->btn.left) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_LEFT); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_LEFT); if ( rpt->btn.down) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_DOWN); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_DOWN); if ( rpt->btn.right) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_RIGHT); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_RIGHT); if ( rpt->btn.up) - BIT128_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_UP); + BIT256_SET_PTR(state, RETRO_DEVICE_ID_JOYPAD_UP); if ( rpt->btn.home) - BIT128_SET_PTR(state, RARCH_MENU_TOGGLE); + BIT256_SET_PTR(state, RARCH_MENU_TOGGLE); } static int16_t hidpad_wiiupro_get_axis(void *data, unsigned axis) diff --git a/input/connect/joypad_connection.c b/input/connect/joypad_connection.c index 178d32fcd2..90cb9cf06b 100644 --- a/input/connect/joypad_connection.c +++ b/input/connect/joypad_connection.c @@ -176,11 +176,9 @@ void pad_connection_packet(joypad_connection_t *joyconn, uint32_t pad, void pad_connection_get_buttons(joypad_connection_t *joyconn, unsigned pad, retro_bits_t* state) { if (joyconn->iface) - { joyconn->iface->get_buttons(joyconn->data, state); - } else - BIT128_CLEAR_ALL_PTR( state ); + BIT256_CLEAR_ALL_PTR( state ); } int16_t pad_connection_get_axis(joypad_connection_t *joyconn, diff --git a/input/drivers/cocoa_input.c b/input/drivers/cocoa_input.c index 2ce55ddb38..f14932ab23 100644 --- a/input/drivers/cocoa_input.c +++ b/input/drivers/cocoa_input.c @@ -59,7 +59,7 @@ static int cocoa_input_find_any_button_ret(cocoa_input_data_t *apple, if (state) for (i = 0; i < 256; i++) - if (BIT128_GET_PTR(state,i)) + if (BIT256_GET_PTR(state,i)) return i; return -1; } diff --git a/input/drivers/wiiu_input.c b/input/drivers/wiiu_input.c index 99d8087e65..7bf5a752e0 100644 --- a/input/drivers/wiiu_input.c +++ b/input/drivers/wiiu_input.c @@ -108,7 +108,7 @@ static int16_t wiiu_pointer_device_state(wiiu_input_t* wiiu, unsigned id) { retro_bits_t state; wiiu->joypad->get_buttons(0, &state); - return BIT128_GET(state, VPAD_BUTTON_TOUCH) ? 1 : 0; + return BIT256_GET(state, VPAD_BUTTON_TOUCH) ? 1 : 0; } case RETRO_DEVICE_ID_POINTER_X: return wiiu->joypad->axis(0, 0xFFFF0004UL); diff --git a/input/drivers/winraw_input.c b/input/drivers/winraw_input.c index 31f86cadb5..fa6011291d 100644 --- a/input/drivers/winraw_input.c +++ b/input/drivers/winraw_input.c @@ -356,9 +356,8 @@ static bool winraw_keyboard_pressed(winraw_input_t *wr, unsigned key) static bool winraw_mbutton_pressed(winraw_input_t *wr, unsigned port, unsigned key) { unsigned i; - bool result; winraw_mouse_t *mouse = NULL; - settings_t *settings = config_get_ptr(); + settings_t *settings = config_get_ptr(); if (port >= MAX_USERS) return false; diff --git a/input/drivers_hid/btstack_hid.c b/input/drivers_hid/btstack_hid.c index 2166a2d2a3..9946e1f6dc 100644 --- a/input/drivers_hid/btstack_hid.c +++ b/input/drivers_hid/btstack_hid.c @@ -1370,7 +1370,7 @@ static void btstack_hid_joypad_get_buttons(void *data, unsigned port, retro_bits if (hid) pad_connection_get_buttons(&hid->slots[port], port, state); else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static bool btstack_hid_joypad_button(void *data, unsigned port, uint16_t joykey) @@ -1384,7 +1384,7 @@ static bool btstack_hid_joypad_button(void *data, unsigned port, uint16_t joykey /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return (BIT128_GET(buttons, joykey) != 0); + return (BIT256_GET(buttons, joykey) != 0); return false; } diff --git a/input/drivers_hid/iohidmanager_hid.c b/input/drivers_hid/iohidmanager_hid.c index 3d479fce40..8f4e0cb71b 100644 --- a/input/drivers_hid/iohidmanager_hid.c +++ b/input/drivers_hid/iohidmanager_hid.c @@ -114,7 +114,7 @@ static void iohidmanager_hid_joypad_get_buttons(void *data, unsigned port, retro if (hid) return pad_connection_get_buttons(&hid->slots[port], port, state); else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static bool iohidmanager_hid_joypad_button(void *data, @@ -150,7 +150,7 @@ static bool iohidmanager_hid_joypad_button(void *data, /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return (BIT128_GET(buttons, joykey) != 0) + return (BIT256_GET(buttons, joykey) != 0) || ((hid->buttons[port] & (1 << joykey)) != 0); return false; diff --git a/input/drivers_hid/libusb_hid.c b/input/drivers_hid/libusb_hid.c index a653b6b9bc..f2fd6d0bca 100644 --- a/input/drivers_hid/libusb_hid.c +++ b/input/drivers_hid/libusb_hid.c @@ -447,9 +447,12 @@ static void libusb_hid_joypad_get_buttons(void *data, unsigned port, retro_bits_ { libusb_hid_t *hid = (libusb_hid_t*)data; if (hid) - return pad_connection_get_buttons(&hid->slots[port], port, state); - else - BIT128_CLEAR_ALL_PTR(state); + { + pad_connection_get_buttons(&hid->slots[port], port, state); + return; + } + + BIT256_CLEAR_ALL_PTR(state); } static bool libusb_hid_joypad_button(void *data, @@ -464,7 +467,7 @@ static bool libusb_hid_joypad_button(void *data, /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return (BIT128_GET(buttons, joykey) != 0); + return (BIT256_GET(buttons, joykey) != 0); return false; } diff --git a/input/drivers_hid/null_hid.c b/input/drivers_hid/null_hid.c index 74b61d051e..ce657d8b90 100644 --- a/input/drivers_hid/null_hid.c +++ b/input/drivers_hid/null_hid.c @@ -43,7 +43,7 @@ static void null_hid_joypad_get_buttons(void *data, unsigned port, retro_bits_t (void)data; (void)port; - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static bool null_hid_joypad_button(void *data, unsigned port, uint16_t joykey) diff --git a/input/drivers_hid/wiiusb_hid.c b/input/drivers_hid/wiiusb_hid.c index b550915689..e50657c64d 100644 --- a/input/drivers_hid/wiiusb_hid.c +++ b/input/drivers_hid/wiiusb_hid.c @@ -482,9 +482,11 @@ static void wiiusb_hid_joypad_get_buttons(void *data, unsigned port, retro_bits_ { wiiusb_hid_t *hid = (wiiusb_hid_t*)data; if (hid) - return pad_connection_get_buttons(&hid->connections[port], port, state); - else - BIT128_CLEAR_ALL_PTR(state); + { + pad_connection_get_buttons(&hid->connections[port], port, state); + return; + } + BIT256_CLEAR_ALL_PTR(state); } static bool wiiusb_hid_joypad_button(void *data, unsigned port, uint16_t joykey) @@ -499,7 +501,7 @@ static bool wiiusb_hid_joypad_button(void *data, unsigned port, uint16_t joykey) /* Check the button. */ if ((port < MAX_USERS) && (joykey < 32)) - return (BIT128_GET(buttons, joykey) != 0); + return (BIT256_GET(buttons, joykey) != 0); return false; } diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index a98fce76fc..711b88493d 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -77,7 +77,7 @@ static void ctr_joypad_get_buttons(unsigned port_num, retro_bits_t *state) BITS_COPY16_PTR( state, pad_state ); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t ctr_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/gx_joypad.c b/input/drivers_joypad/gx_joypad.c index bccc6f467b..392cb602a9 100644 --- a/input/drivers_joypad/gx_joypad.c +++ b/input/drivers_joypad/gx_joypad.c @@ -169,7 +169,7 @@ static void gx_joypad_get_buttons(unsigned port, retro_bits_t *state) BITS_COPY16_PTR( state, pad_state[port] ); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t gx_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/hid_joypad.c b/input/drivers_joypad/hid_joypad.c index fe0badd38a..203a272922 100644 --- a/input/drivers_joypad/hid_joypad.c +++ b/input/drivers_joypad/hid_joypad.c @@ -60,7 +60,7 @@ static void hid_joypad_get_buttons(unsigned port, retro_bits_t *state) if (generic_hid && generic_hid->get_buttons) generic_hid->get_buttons((void*)hid_driver_get_data(), port, state); else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t hid_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/linuxraw_joypad.c b/input/drivers_joypad/linuxraw_joypad.c index c43ea0b93a..4d852f406b 100644 --- a/input/drivers_joypad/linuxraw_joypad.c +++ b/input/drivers_joypad/linuxraw_joypad.c @@ -334,7 +334,7 @@ static void linuxraw_joypad_get_buttons(unsigned port, retro_bits_t *state) BITS_COPY16_PTR(state, pad->buttons); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t linuxraw_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/null_joypad.c b/input/drivers_joypad/null_joypad.c index f938e802e4..058d01d5b3 100644 --- a/input/drivers_joypad/null_joypad.c +++ b/input/drivers_joypad/null_joypad.c @@ -39,7 +39,7 @@ static bool null_joypad_button(unsigned port_num, uint16_t joykey) static void null_joypad_get_buttons(unsigned port_num, retro_bits_t *state) { - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t null_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/parport_joypad.c b/input/drivers_joypad/parport_joypad.c index f24c2706a5..e236a36fc5 100644 --- a/input/drivers_joypad/parport_joypad.c +++ b/input/drivers_joypad/parport_joypad.c @@ -348,7 +348,7 @@ static void parport_joypad_get_buttons(unsigned port, retro_bits_t *state) BITS_COPY16_PTR(state, pad->buttons); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t parport_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c index f37822642d..a85a23fcf9 100644 --- a/input/drivers_joypad/ps3_joypad.c +++ b/input/drivers_joypad/ps3_joypad.c @@ -75,7 +75,7 @@ static void ps3_joypad_get_buttons(unsigned port_num, retro_bits_t *state) BITS_COPY16_PTR( state, pad_state[port_num] ); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t ps3_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/psp_joypad.c b/input/drivers_joypad/psp_joypad.c index 60ca2daff3..d9cb4dd65a 100644 --- a/input/drivers_joypad/psp_joypad.c +++ b/input/drivers_joypad/psp_joypad.c @@ -131,7 +131,7 @@ static void psp_joypad_get_buttons(unsigned port_num, retro_bits_t *state) BITS_COPY16_PTR( state, pad_state[port_num] ); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t psp_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index 283e1bd38b..20ee084ec8 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -612,7 +612,7 @@ static void udev_joypad_get_buttons(unsigned port, retro_bits_t *state) BITS_COPY16_PTR( state, pad->buttons ); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t udev_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/wiiu_joypad.c b/input/drivers_joypad/wiiu_joypad.c index 8a3d8189db..b7c46b995f 100644 --- a/input/drivers_joypad/wiiu_joypad.c +++ b/input/drivers_joypad/wiiu_joypad.c @@ -142,7 +142,7 @@ static void wiiu_joypad_get_buttons(unsigned port_num, retro_bits_t *state) BITS_COPY16_PTR( state, pad_state[port_num] ); } else - BIT128_CLAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t wiiu_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/drivers_joypad/xdk_joypad.c b/input/drivers_joypad/xdk_joypad.c index 6553346160..517ddaa972 100644 --- a/input/drivers_joypad/xdk_joypad.c +++ b/input/drivers_joypad/xdk_joypad.c @@ -83,7 +83,7 @@ static void xdk_joypad_get_buttons(unsigned port_num, retro_bits_t *state) BITS_COPY16_PTR( state, pad_state[port_num] ); } else - BIT128_CLEAR_ALL_PTR(state); + BIT256_CLEAR_ALL_PTR(state); } static int16_t xdk_joypad_axis(unsigned port_num, uint32_t joyaxis) diff --git a/input/input_driver.c b/input/input_driver.c index ca491bea9f..d17fb5fc61 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -810,7 +810,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) joypad_info.joy_idx = 0; joypad_info.auto_binds = NULL; - BIT128_CLEAR_ALL_PTR(p_new_state); + BIT256_CLEAR_ALL_PTR(p_new_state); input_driver_block_libretro_input = false; input_driver_block_hotkey = false; @@ -912,7 +912,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) if (pressed) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } } @@ -922,7 +922,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) { if (current_input->meta_key_pressed(current_input_data, i)) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } } @@ -930,7 +930,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) #ifdef HAVE_OVERLAY if (overlay_ptr && input_overlay_key_pressed(overlay_ptr, i)) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } #endif @@ -945,7 +945,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) if (command_get(&handle)) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } } @@ -954,7 +954,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) #ifdef HAVE_NETWORKGAMEPAD if (input_driver_remote && input_remote_key_pressed(i, 0)) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } #endif @@ -1010,7 +1010,7 @@ void input_menu_keys_pressed(void *data, retro_bits_t* p_new_state) if (current_input->input_state(current_input_data, joypad_info, binds, 0, RETRO_DEVICE_KEYBOARD, 0, ids[i][0])) - BIT128_SET_PTR(p_new_state, ids[i][1]); + BIT256_SET_PTR(p_new_state, ids[i][1]); } } } @@ -1037,7 +1037,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) const struct retro_keybind *enable_hotkey = &input_config_binds[0][RARCH_ENABLE_HOTKEY]; bool game_focus_toggle_valid = false; - BIT128_CLEAR_ALL_PTR(p_new_state); + BIT256_CLEAR_ALL_PTR(p_new_state); joypad_info.joy_idx = settings->uints.input_joypad_map[0]; joypad_info.auto_binds = input_autoconf_binds[joypad_info.joy_idx]; @@ -1083,7 +1083,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) 0, RETRO_DEVICE_JOYPAD, 0, i) ) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } @@ -1091,7 +1091,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) current_input->meta_key_pressed(current_input_data, i) ) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } @@ -1099,7 +1099,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) if (overlay_ptr && input_overlay_key_pressed(overlay_ptr, i)) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } #endif @@ -1114,7 +1114,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) if (command_get(&handle)) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } } @@ -1124,7 +1124,7 @@ void input_keys_pressed(void *data, retro_bits_t* p_new_state) if (input_driver_remote && input_remote_key_pressed(i, 0)) { - BIT128_SET_PTR(p_new_state, i); + BIT256_SET_PTR(p_new_state, i); continue; } #endif diff --git a/menu/menu_event.c b/menu/menu_event.c index a492aca726..87449d3ff6 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -160,7 +160,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) unsigned menu_cancel_btn = (!input_swap_override && settings->bools.input_menu_swap_ok_cancel_buttons) ? RETRO_DEVICE_ID_JOYPAD_A : RETRO_DEVICE_ID_JOYPAD_B; - unsigned ok_current = BIT128_GET_PTR(p_input, menu_ok_btn ); + unsigned ok_current = BIT256_GET_PTR(p_input, menu_ok_btn ); unsigned ok_trigger = ok_current & ~ok_old; ok_old = ok_current; @@ -221,31 +221,31 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) { menu_event_osk_iterate(); - if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) + if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) { if (menu_event_get_osk_ptr() < 33) menu_event_set_osk_ptr(menu_event_get_osk_ptr() + OSK_CHARS_PER_LINE); } - if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_UP)) + if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_UP)) { if (menu_event_get_osk_ptr() >= OSK_CHARS_PER_LINE) menu_event_set_osk_ptr(menu_event_get_osk_ptr() - OSK_CHARS_PER_LINE); } - if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_RIGHT)) + if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_RIGHT)) { if (menu_event_get_osk_ptr() < 43) menu_event_set_osk_ptr(menu_event_get_osk_ptr() + 1); } - if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_LEFT)) + if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_LEFT)) { if (menu_event_get_osk_ptr() >= 1) menu_event_set_osk_ptr(menu_event_get_osk_ptr() - 1); } - if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_L)) + if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_L)) { if (menu_event_get_osk_idx() > OSK_TYPE_UNKNOWN + 1) menu_event_set_osk_idx((enum osk_type)(menu_event_get_osk_idx() - 1)); @@ -253,7 +253,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) menu_event_set_osk_idx((enum osk_type)(OSK_TYPE_LAST - 1)); } - if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_R)) + if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_R)) { if (menu_event_get_osk_idx() < OSK_TYPE_LAST - 1) menu_event_set_osk_idx((enum osk_type)(menu_event_get_osk_idx() + 1)); @@ -261,50 +261,50 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) menu_event_set_osk_idx((enum osk_type)(OSK_TYPE_UNKNOWN + 1)); } - if (BIT128_GET_PTR(p_trigger_input, menu_ok_btn)) + if (BIT256_GET_PTR(p_trigger_input, menu_ok_btn)) { if (menu_event_get_osk_ptr() >= 0) menu_event_osk_append(menu_event_get_osk_ptr()); } - if (BIT128_GET_PTR(p_trigger_input, menu_cancel_btn)) + if (BIT256_GET_PTR(p_trigger_input, menu_cancel_btn)) { input_keyboard_event(true, '\x7f', '\x7f', 0, RETRO_DEVICE_KEYBOARD); } /* send return key to close keyboard input window */ - if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_START)) + if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_START)) input_keyboard_event(true, '\n', '\n', 0, RETRO_DEVICE_KEYBOARD); - BIT128_CLEAR_ALL_PTR(p_trigger_input); + BIT256_CLEAR_ALL_PTR(p_trigger_input); } else { - if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_UP)) + if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_UP)) ret = MENU_ACTION_UP; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) ret = MENU_ACTION_DOWN; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_LEFT)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_LEFT)) ret = MENU_ACTION_LEFT; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_RIGHT)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_RIGHT)) ret = MENU_ACTION_RIGHT; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_L)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_L)) ret = MENU_ACTION_SCROLL_UP; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_R)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_R)) ret = MENU_ACTION_SCROLL_DOWN; else if (ok_trigger) ret = MENU_ACTION_OK; - else if (BIT128_GET_PTR(p_trigger_input, menu_cancel_btn)) + else if (BIT256_GET_PTR(p_trigger_input, menu_cancel_btn)) ret = MENU_ACTION_CANCEL; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_X)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_X)) ret = MENU_ACTION_SEARCH; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_Y)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_Y)) ret = MENU_ACTION_SCAN; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_START)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_START)) ret = MENU_ACTION_START; - else if (BIT128_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) + else if (BIT256_GET_PTR(p_trigger_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) ret = MENU_ACTION_INFO; - else if (BIT128_GET_PTR(p_trigger_input, RARCH_MENU_TOGGLE)) + else if (BIT256_GET_PTR(p_trigger_input, RARCH_MENU_TOGGLE)) ret = MENU_ACTION_TOGGLE; } @@ -314,7 +314,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) menu_event_kb_set_internal(RETROK_F11, 0); } - if (BIT128_GET_PTR(p_trigger_input, RARCH_QUIT_KEY)) + if (BIT256_GET_PTR(p_trigger_input, RARCH_QUIT_KEY)) return MENU_ACTION_QUIT; mouse_enabled = settings->bools.menu_mouse_enable; diff --git a/retroarch.c b/retroarch.c index d7a2d3170a..0de71056dc 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1931,7 +1931,7 @@ bool retroarch_override_setting_is_set(enum rarch_override_setting enum_idx, voi if (val) { unsigned bit = *val; - return BIT128_GET(has_set_libretro_device, bit); + return BIT256_GET(has_set_libretro_device, bit); } } break; @@ -1980,7 +1980,7 @@ void retroarch_override_setting_set(enum rarch_override_setting enum_idx, void * if (val) { unsigned bit = *val; - BIT128_SET(has_set_libretro_device, bit); + BIT256_SET(has_set_libretro_device, bit); } } break; @@ -2039,7 +2039,7 @@ void retroarch_override_setting_unset(enum rarch_override_setting enum_idx, void if (val) { unsigned bit = *val; - BIT128_CLEAR(has_set_libretro_device, bit); + BIT256_CLEAR(has_set_libretro_device, bit); } } break; @@ -2315,35 +2315,35 @@ static bool input_driver_toggle_button_combo( switch (mode) { case INPUT_TOGGLE_DOWN_Y_L_R: - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_DOWN)) return false; - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_Y)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_Y)) return false; - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L)) return false; - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R)) return false; break; case INPUT_TOGGLE_L3_R3: - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L3)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L3)) return false; - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R3)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R3)) return false; break; case INPUT_TOGGLE_L1_R1_START_SELECT: - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START)) return false; - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) return false; - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_L)) return false; - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_R)) return false; break; case INPUT_TOGGLE_START_SELECT: - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START)) return false; - if (!BIT128_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) + if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT)) return false; break; default: @@ -2391,7 +2391,7 @@ static enum runloop_state runloop_check_state( ((settings->uints.input_menu_toggle_gamepad_combo != INPUT_TOGGLE_NONE) && input_driver_toggle_button_combo( settings->uints.input_menu_toggle_gamepad_combo, &last_input))) - BIT128_SET(current_input, RARCH_MENU_TOGGLE); + BIT256_SET(current_input, RARCH_MENU_TOGGLE); #endif if (input_driver_flushing_input) @@ -2399,9 +2399,9 @@ static enum runloop_state runloop_check_state( input_driver_flushing_input = false; if (BITS_ANY_SET(current_input)) { - BIT128_CLEAR_ALL(current_input); + BIT256_CLEAR_ALL(current_input); if (runloop_paused) - BIT128_SET(current_input, RARCH_PAUSE_TOGGLE); + BIT256_SET(current_input, RARCH_PAUSE_TOGGLE); input_driver_flushing_input = true; } } @@ -2410,14 +2410,14 @@ static enum runloop_state runloop_check_state( #ifdef HAVE_MENU if (menu_driver_binding_state) - BIT128_CLEAR_ALL(current_input); + BIT256_CLEAR_ALL(current_input); #endif #ifdef HAVE_OVERLAY /* Check next overlay */ { static bool old_should_check_next_overlay = false; - bool should_check_next_overlay = BIT128_GET( + bool should_check_next_overlay = BIT256_GET( current_input, RARCH_OVERLAY_NEXT); if (should_check_next_overlay && !old_should_check_next_overlay) @@ -2429,7 +2429,7 @@ static enum runloop_state runloop_check_state( /* Check fullscreen toggle */ { - bool fs_toggle_pressed = BIT128_GET( + bool fs_toggle_pressed = BIT256_GET( current_input, RARCH_FULLSCREEN_TOGGLE_KEY); fs_toggle_triggered = fs_toggle_pressed && !old_fs_toggle_pressed; @@ -2452,7 +2452,7 @@ static enum runloop_state runloop_check_state( /* Check mouse grab toggle */ { static bool old_pressed = false; - bool pressed = BIT128_GET( + bool pressed = BIT256_GET( current_input, RARCH_GRAB_MOUSE_TOGGLE); if (pressed && !old_pressed) @@ -2487,7 +2487,7 @@ static enum runloop_state runloop_check_state( /* Check quit key */ { static bool old_quit_key = false; - bool quit_key = BIT128_GET( + bool quit_key = BIT256_GET( current_input, RARCH_QUIT_KEY); bool trig_quit_key = quit_key && !old_quit_key; @@ -2579,7 +2579,7 @@ static enum runloop_state runloop_check_state( /* Check game focus toggle */ { static bool old_pressed = false; - bool pressed = BIT128_GET( + bool pressed = BIT256_GET( current_input, RARCH_GAME_FOCUS_TOGGLE); if (pressed && !old_pressed) @@ -2592,7 +2592,7 @@ static enum runloop_state runloop_check_state( /* Check menu toggle */ { static bool old_pressed = false; - bool pressed = BIT128_GET( + bool pressed = BIT256_GET( current_input, RARCH_MENU_TOGGLE); if (menu_event_kb_is_set(RETROK_F1) == 1) @@ -2642,7 +2642,7 @@ static enum runloop_state runloop_check_state( /* Check screenshot toggle */ { static bool old_pressed = false; - bool pressed = BIT128_GET( + bool pressed = BIT256_GET( current_input, RARCH_SCREENSHOT); if (pressed && old_pressed) @@ -2654,7 +2654,7 @@ static enum runloop_state runloop_check_state( /* Check audio mute toggle */ { static bool old_pressed = false; - bool pressed = BIT128_GET( + bool pressed = BIT256_GET( current_input, RARCH_MUTE); if (pressed && !old_pressed) @@ -2666,7 +2666,7 @@ static enum runloop_state runloop_check_state( /* Check OSK toggle */ { static bool old_pressed = false; - bool pressed = BIT128_GET(current_input, RARCH_OSK); + bool pressed = BIT256_GET(current_input, RARCH_OSK); if (pressed && !old_pressed) { @@ -2682,9 +2682,9 @@ static enum runloop_state runloop_check_state( old_pressed = pressed; } - if (BIT128_GET(current_input, RARCH_VOLUME_UP)) + if (BIT256_GET(current_input, RARCH_VOLUME_UP)) command_event(CMD_EVENT_VOLUME_UP, NULL); - else if (BIT128_GET(current_input, RARCH_VOLUME_DOWN)) + else if (BIT256_GET(current_input, RARCH_VOLUME_DOWN)) command_event(CMD_EVENT_VOLUME_DOWN, NULL); #ifdef HAVE_NETWORKING @@ -2692,9 +2692,9 @@ static enum runloop_state runloop_check_state( { static bool old_netplay_flip = false; static bool old_netplay_watch = false; - bool netplay_flip = BIT128_GET( + bool netplay_flip = BIT256_GET( current_input, RARCH_NETPLAY_FLIP); - bool netplay_watch = BIT128_GET( + bool netplay_watch = BIT256_GET( current_input, RARCH_NETPLAY_GAME_WATCH); if (netplay_flip && !old_netplay_flip) @@ -2713,9 +2713,9 @@ static enum runloop_state runloop_check_state( static bool old_frameadvance = false; static bool old_pause_pressed = false; bool check_is_oneshot = true; - bool frameadvance_pressed = BIT128_GET( + bool frameadvance_pressed = BIT256_GET( current_input, RARCH_FRAMEADVANCE); - bool pause_pressed = BIT128_GET( + bool pause_pressed = BIT256_GET( current_input, RARCH_PAUSE_TOGGLE); bool trig_frameadvance = frameadvance_pressed && !old_frameadvance; @@ -2739,7 +2739,7 @@ static enum runloop_state runloop_check_state( if (runloop_paused) { check_is_oneshot = trig_frameadvance || - BIT128_GET(current_input, RARCH_REWIND); + BIT256_GET(current_input, RARCH_REWIND); if (fs_toggle_triggered) { @@ -2764,9 +2764,9 @@ static enum runloop_state runloop_check_state( { static bool old_button_state = false; static bool old_hold_button_state = false; - bool new_button_state = BIT128_GET( + bool new_button_state = BIT256_GET( current_input, RARCH_FAST_FORWARD_KEY); - bool new_hold_button_state = BIT128_GET( + bool new_hold_button_state = BIT256_GET( current_input, RARCH_FAST_FORWARD_HOLD_KEY); if (new_button_state && !old_button_state) @@ -2807,9 +2807,9 @@ static enum runloop_state runloop_check_state( { static bool old_should_slot_increase = false; static bool old_should_slot_decrease = false; - bool should_slot_increase = BIT128_GET( + bool should_slot_increase = BIT256_GET( current_input, RARCH_STATE_SLOT_PLUS); - bool should_slot_decrease = BIT128_GET( + bool should_slot_decrease = BIT256_GET( current_input, RARCH_STATE_SLOT_MINUS); /* Checks if the state increase/decrease keys have been pressed @@ -2860,9 +2860,9 @@ static enum runloop_state runloop_check_state( { static bool old_should_savestate = false; static bool old_should_loadstate = false; - bool should_savestate = BIT128_GET( + bool should_savestate = BIT256_GET( current_input, RARCH_SAVE_STATE_KEY); - bool should_loadstate = BIT128_GET( + bool should_loadstate = BIT256_GET( current_input, RARCH_LOAD_STATE_KEY); if (should_savestate && !old_should_savestate) @@ -2883,14 +2883,14 @@ static enum runloop_state runloop_check_state( s[0] = '\0'; - if (state_manager_check_rewind(BIT128_GET(current_input, RARCH_REWIND), + if (state_manager_check_rewind(BIT256_GET(current_input, RARCH_REWIND), settings->uints.rewind_granularity, runloop_paused, s, sizeof(s), &t)) runloop_msg_queue_push(s, 0, t, true); } /* Checks if slowmotion toggle/hold was being pressed and/or held. */ { - runloop_slowmotion = BIT128_GET(current_input, RARCH_SLOWMOTION); + runloop_slowmotion = BIT256_GET(current_input, RARCH_SLOWMOTION); if (runloop_slowmotion) { @@ -2912,7 +2912,7 @@ static enum runloop_state runloop_check_state( /* Check movie record toggle */ { static bool old_pressed = false; - bool pressed = BIT128_GET( + bool pressed = BIT256_GET( current_input, RARCH_MOVIE_RECORD_TOGGLE); if (pressed && !old_pressed) @@ -2925,9 +2925,9 @@ static enum runloop_state runloop_check_state( { static bool old_shader_next = false; static bool old_shader_prev = false; - bool shader_next = BIT128_GET( + bool shader_next = BIT256_GET( current_input, RARCH_SHADER_NEXT); - bool shader_prev = BIT128_GET( + bool shader_prev = BIT256_GET( current_input, RARCH_SHADER_PREV); bool trig_shader_next = shader_next && !old_shader_next; bool trig_shader_prev = shader_prev && !old_shader_prev; @@ -2944,11 +2944,11 @@ static enum runloop_state runloop_check_state( static bool old_disk_eject = false; static bool old_disk_next = false; static bool old_disk_prev = false; - bool disk_eject = BIT128_GET( + bool disk_eject = BIT256_GET( current_input, RARCH_DISK_EJECT_TOGGLE); - bool disk_next = BIT128_GET( + bool disk_next = BIT256_GET( current_input, RARCH_DISK_NEXT); - bool disk_prev = BIT128_GET( + bool disk_prev = BIT256_GET( current_input, RARCH_DISK_PREV); if (disk_eject && !old_disk_eject) @@ -2966,7 +2966,7 @@ static enum runloop_state runloop_check_state( /* Check reset */ { static bool old_state = false; - bool new_state = BIT128_GET( + bool new_state = BIT256_GET( current_input, RARCH_RESET); if (new_state && !old_state) @@ -2980,11 +2980,11 @@ static enum runloop_state runloop_check_state( static bool old_cheat_index_plus = false; static bool old_cheat_index_minus = false; static bool old_cheat_index_toggle = false; - bool cheat_index_plus = BIT128_GET( + bool cheat_index_plus = BIT256_GET( current_input, RARCH_CHEAT_INDEX_PLUS); - bool cheat_index_minus = BIT128_GET( + bool cheat_index_minus = BIT256_GET( current_input, RARCH_CHEAT_INDEX_MINUS); - bool cheat_index_toggle = BIT128_GET( + bool cheat_index_toggle = BIT256_GET( current_input, RARCH_CHEAT_TOGGLE); if (cheat_index_plus && !old_cheat_index_plus) From 53ce29ca315b4e3ec8ef074795ec239edcdc39dc Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 12:49:59 +0100 Subject: [PATCH 63/85] Cleanups --- libretro-common/include/retro_miscellaneous.h | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index c69afed90b..30bb2de69d 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -58,33 +58,38 @@ #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) -#define BITS_ANY_SET(a) ( ((a).data[0])||((a).data[1])||((a).data[2])||((a).data[3])|| \ - ((a).data[4])||((a).data[5])||((a).data[6])||((a).data[7]) ) -#define BITS_ANY_SET_PTR(a) ( ((a)->data[0])||((a)->data[1])||((a)->data[2])||((a)->data[3])|| \ - ((a)->data[4])||((a)->data[5])||((a)->data[6])||((a)->data[7]) ) +#define BITS_GET_ELEM(a, i) ((a).data[i]) +#define BITS_GET_ELEM_PTR(a, i) ((a)->data[i]) + +#define BITS_ANY_SET(a) ( BITS_GET_ELEM(a, 0)|| BITS_GET_ELEM(a, 1) || BITS_GET_ELEM(a, 2) || BITS_GET_ELEM(a, 3) || \ + BITS_GET_ELEM(a, 4) || BITS_GET_ELEM(a, 5) || BITS_GET_ELEM(a, 6) || BITS_GET_ELEM(a, 7) ) +#define BITS_ANY_SET_PTR(a) ( BITS_GET_ELEM_PTR(a, 0)|| BITS_GET_ELEM_PTR(a, 1) || BITS_GET_ELEM_PTR(a, 2) || BITS_GET_ELEM_PTR(a, 3) || \ + BITS_GET_ELEM_PTR(a, 4) || BITS_GET_ELEM_PTR(a, 5) || BITS_GET_ELEM_PTR(a, 6) || BITS_GET_ELEM_PTR(a, 7) ) + #define BITS_CLEAR_BITS(a,b) \ - ((a).data[0])&=(~((b).data[0])); \ - ((a).data[1])&=(~((b).data[1])); \ - ((a).data[2])&=(~((b).data[2])); \ - ((a).data[3])&=(~((b).data[3])); \ - ((a).data[4])&=(~((b).data[4])); \ - ((a).data[5])&=(~((b).data[5])); \ - ((a).data[6])&=(~((b).data[6])); \ - ((a).data[7])&=(~((b).data[7])); +{ \ + BITS_GET_ELEM(a, 0) &= (~BITS_GET_ELEM(b, 0)); \ + BITS_GET_ELEM(a, 1) &= (~BITS_GET_ELEM(b, 1)); \ + BITS_GET_ELEM(a, 2) &= (~BITS_GET_ELEM(b, 2)); \ + BITS_GET_ELEM(a, 3) &= (~BITS_GET_ELEM(b, 3)); \ + BITS_GET_ELEM(a, 4) &= (~BITS_GET_ELEM(b, 4)); \ + BITS_GET_ELEM(a, 5) &= (~BITS_GET_ELEM(b, 5)); \ + BITS_GET_ELEM(a, 6) &= (~BITS_GET_ELEM(b, 6)); \ + BITS_GET_ELEM(a, 7) &= (~BITS_GET_ELEM(b, 7)); \ +} #define BITS_COPY16_PTR(a,bits) \ { \ BIT128_CLEAR_ALL_PTR(a); \ - ((a)->data[0] = (bits) & 0xffff); \ + BITS_GET_ELEM_PTR(a, 0) = (bits) & 0xffff; \ } #define BITS_COPY32_PTR(a,bits) \ { \ BIT128_CLEAR_ALL_PTR(a); \ - ((a)->data[0] = (bits)); \ + BITS_GET_ELEM_PTR(a, 0) = (bits); \ } - #define BIT_SET(a, bit) ((a)[(bit) >> 3] |= (1 << ((bit) & 7))) #define BIT_CLEAR(a, bit) ((a)[(bit) >> 3] &= ~(1 << ((bit) & 7))) #define BIT_GET(a, bit) (((a).data[(bit) >> 3] >> ((bit) & 7)) & 1) From 332aee5b0f777a22e404654a3d4ecdbfcc53fdb7 Mon Sep 17 00:00:00 2001 From: Alcaro Date: Tue, 5 Dec 2017 13:03:34 +0100 Subject: [PATCH 64/85] Dehardcode some sizes (#5856) --- libretro-common/include/retro_miscellaneous.h | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index 30bb2de69d..60da013743 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -24,6 +24,7 @@ #define __RARCH_MISCELLANEOUS_H #include +#include #if defined(_WIN32) && !defined(_XBOX) #ifndef WIN32_LEAN_AND_MEAN @@ -61,23 +62,30 @@ #define BITS_GET_ELEM(a, i) ((a).data[i]) #define BITS_GET_ELEM_PTR(a, i) ((a)->data[i]) -#define BITS_ANY_SET(a) ( BITS_GET_ELEM(a, 0)|| BITS_GET_ELEM(a, 1) || BITS_GET_ELEM(a, 2) || BITS_GET_ELEM(a, 3) || \ - BITS_GET_ELEM(a, 4) || BITS_GET_ELEM(a, 5) || BITS_GET_ELEM(a, 6) || BITS_GET_ELEM(a, 7) ) -#define BITS_ANY_SET_PTR(a) ( BITS_GET_ELEM_PTR(a, 0)|| BITS_GET_ELEM_PTR(a, 1) || BITS_GET_ELEM_PTR(a, 2) || BITS_GET_ELEM_PTR(a, 3) || \ - BITS_GET_ELEM_PTR(a, 4) || BITS_GET_ELEM_PTR(a, 5) || BITS_GET_ELEM_PTR(a, 6) || BITS_GET_ELEM_PTR(a, 7) ) - -#define BITS_CLEAR_BITS(a,b) \ -{ \ - BITS_GET_ELEM(a, 0) &= (~BITS_GET_ELEM(b, 0)); \ - BITS_GET_ELEM(a, 1) &= (~BITS_GET_ELEM(b, 1)); \ - BITS_GET_ELEM(a, 2) &= (~BITS_GET_ELEM(b, 2)); \ - BITS_GET_ELEM(a, 3) &= (~BITS_GET_ELEM(b, 3)); \ - BITS_GET_ELEM(a, 4) &= (~BITS_GET_ELEM(b, 4)); \ - BITS_GET_ELEM(a, 5) &= (~BITS_GET_ELEM(b, 5)); \ - BITS_GET_ELEM(a, 6) &= (~BITS_GET_ELEM(b, 6)); \ - BITS_GET_ELEM(a, 7) &= (~BITS_GET_ELEM(b, 7)); \ +static inline bool bits_any_set(uint32_t* ptr, uint32_t count) +{ + uint32_t i; + for (i=0;i Date: Tue, 5 Dec 2017 13:15:15 +0100 Subject: [PATCH 65/85] Cleanups --- libretro-common/include/retro_miscellaneous.h | 69 +++++++++---------- menu/menu_event.c | 2 +- retroarch.c | 6 +- 3 files changed, 37 insertions(+), 40 deletions(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index 60da013743..b51cc15e60 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -25,6 +25,7 @@ #include #include +#include #if defined(_WIN32) && !defined(_XBOX) #ifndef WIN32_LEAN_AND_MEAN @@ -41,6 +42,24 @@ #include #endif +static INLINE void bits_clear_bits(uint32_t *a, uint32_t *b, uint32_t count) +{ + uint32_t i; + for (i = 0; i < count;i++) + a[i] &= b[i]; +} + +static INLINE bool bits_any_set(uint32_t* ptr, uint32_t count) +{ + uint32_t i; + for (i = 0; i < count; i++) + { + if (ptr[i] != 0) + return true; + } + return false; +} + #ifndef PATH_MAX_LENGTH #if defined(_XBOX1) || defined(_3DS) || defined(PSP) || defined(GEKKO)|| defined(WIIU) #define PATH_MAX_LENGTH 512 @@ -57,47 +76,11 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) +#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) #define BITS_GET_ELEM(a, i) ((a).data[i]) #define BITS_GET_ELEM_PTR(a, i) ((a)->data[i]) -static inline bool bits_any_set(uint32_t* ptr, uint32_t count) -{ - uint32_t i; - for (i=0;i> 3] |= (1 << ((bit) & 7))) #define BIT_CLEAR(a, bit) ((a)[(bit) >> 3] &= ~(1 << ((bit) & 7))) #define BIT_GET(a, bit) (((a).data[(bit) >> 3] >> ((bit) & 7)) & 1) @@ -137,6 +120,18 @@ static inline void bits_clear_bits(uint32_t* a, uint32_t* b, uint32_t count) #define BIT256_GET_PTR(a, bit) BIT256_GET(*a, bit) #define BIT256_CLEAR_ALL_PTR(a) BIT256_CLEAR_ALL(*a) +#define BITS_COPY16_PTR(a,bits) \ +{ \ + BIT128_CLEAR_ALL_PTR(a); \ + BITS_GET_ELEM_PTR(a, 0) = (bits) & 0xffff; \ +} + +#define BITS_COPY32_PTR(a,bits) \ +{ \ + BIT128_CLEAR_ALL_PTR(a); \ + BITS_GET_ELEM_PTR(a, 0) = (bits); \ +} + /* Helper macros and struct to keep track of many booleans. */ /* This struct has 256 bits. */ typedef struct diff --git a/menu/menu_event.c b/menu/menu_event.c index 87449d3ff6..9c2c8eaecc 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -165,7 +165,7 @@ unsigned menu_event(retro_bits_t* p_input, retro_bits_t* p_trigger_input) ok_old = ok_current; - if (BITS_ANY_SET_PTR(p_input)) + if (bits_any_set(p_input->data, ARRAY_SIZE(p_input->data))) { if (!first_held) { diff --git a/retroarch.c b/retroarch.c index 0de71056dc..2545b79424 100644 --- a/retroarch.c +++ b/retroarch.c @@ -2397,7 +2397,7 @@ static enum runloop_state runloop_check_state( if (input_driver_flushing_input) { input_driver_flushing_input = false; - if (BITS_ANY_SET(current_input)) + if (bits_any_set(current_input.data, ARRAY_SIZE(current_input.data))) { BIT256_CLEAR_ALL(current_input); if (runloop_paused) @@ -2540,7 +2540,9 @@ static enum runloop_state runloop_check_state( enum menu_action action; bool focused = false; retro_bits_t trigger_input = current_input; - BITS_CLEAR_BITS(trigger_input, old_input); + + bits_clear_bits(trigger_input.data, old_input.data, + ARRAY_SIZE(trigger_input.data)); action = (enum menu_action)menu_event(¤t_input, &trigger_input); focused = pause_nonactive ? is_focused : true; From b432fb4668bd8cbf68d12a6b90d86232ad6249d4 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 13:21:29 +0100 Subject: [PATCH 66/85] Bugfix --- libretro-common/include/retro_miscellaneous.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index b51cc15e60..010b04f19c 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -46,7 +46,7 @@ static INLINE void bits_clear_bits(uint32_t *a, uint32_t *b, uint32_t count) { uint32_t i; for (i = 0; i < count;i++) - a[i] &= b[i]; + a[i] &= ~b[i]; } static INLINE bool bits_any_set(uint32_t* ptr, uint32_t count) From fafc96d3777ac7102d1bafd39777c8884d47f677 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 13:31:51 +0100 Subject: [PATCH 67/85] Cleanups --- gfx/drivers_renderchain/gl2_renderchain.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index ebdb9709b0..1b246ce143 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -1262,7 +1262,9 @@ static void gl2_renderchain_copy_frame( const void *frame, unsigned width, unsigned height, unsigned pitch) { - gl_t *gl = (gl_t*)data; + gl_t *gl = (gl_t*)data; + gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; + #if defined(HAVE_PSGL) { unsigned h; @@ -1281,7 +1283,6 @@ static void gl2_renderchain_copy_frame( } #elif defined(HAVE_OPENGLES) #if defined(HAVE_EGL) - gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; if (chain->egl_images) { gfx_ctx_image_t img_info; From df8a2274dfe8dce3a304cd99b6809f52fc57d639 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 13:47:23 +0100 Subject: [PATCH 68/85] Update CHANGES.md --- CHANGES.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 17bb6ec41b..cabe1a0b9c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,21 @@ # 1.7.0 (future) -- CHEEVOS: Add badges +- CHEEVOS: Add badges for achievements, shows thumbnail images of achievements. +- COMMON: Add 'Automatically Load Content To Playlist' feature, enabled by default. +- COMMON: Fix slowmotion ratio always being reset back to 1. +- COMMON: Optimized NBIO implementations now for Apple, Windows, and Linux. Uses mmap for Linux/Windows/BSD if/when available. File I/O should now be much faster for loading images inside the menu. +- COMMON: Native Blissbox support now for latest firmware as of writing (2.0). Implementation through libusb and/or native Windows HID. +- COMMON: New lightgun API. +- FREEBSD: Support libusb HID input driver. +- HAIKU: Buildfix. +- LOCALIZATION: Update Italian translation. +- LOCALIZATION: Update Portuguese-Brazilian translation. +- LOCALIZATION: Update Russian translation. +- OSX/PPC: Fix the GL2 renderchain, had to use EXT versions of framebuffer/renderbuffer functions. +- SCANNER: Fix crash from Windows-incompatible format string. +- WIIU: Disabled the controller patcher for now since it was the source of many stability issues. +- WINDOWS: Raw input driver now supports new lightgun code. +- X11: Add RetroArch logo to window title bar. +- X11: Input driver now supports new lightgun code. # 1.6.9 - COMMON: Small memory leak. From c486fa08cabc977a46cb328a9b2b72bcd3dddffe Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 14:11:50 +0100 Subject: [PATCH 69/85] Cut down on code duplication --- menu/cbs/menu_cbs_deferred_push.c | 414 ++++++------------------------ 1 file changed, 80 insertions(+), 334 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 538198987c..77ad57d4c4 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -58,90 +58,85 @@ static int deferred_push_dlist(menu_displaylist_info_t *info, enum menu_displayl return 0; } -static int deferred_push_core_information(menu_displaylist_info_t *info) +static int deferred_push_database_manager_list_deferred( + menu_displaylist_info_t *info) { - return deferred_push_dlist(info, DISPLAYLIST_CORE_INFO); + if (!string_is_empty(info->path_b)) + free(info->path_b); + if (!string_is_empty(info->path_c)) + free(info->path_c); + + info->path_b = strdup(info->path); + info->path_c = NULL; + + return deferred_push_dlist(info, DISPLAYLIST_DATABASE_QUERY); } -static int deferred_push_system_information(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_SYSTEM_INFO); +#define generic_deferred_push(name, type) \ +static int (name)(menu_displaylist_info_t *info) \ +{ \ + return deferred_push_dlist(info, type); \ } -static int deferred_push_network_information(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_NETWORK_INFO); -} - -static int deferred_push_achievement_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ACHIEVEMENT_LIST); -} - -static int deferred_push_rdb_collection(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_PLAYLIST_COLLECTION); -} - -static int deferred_main_menu_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_MAIN_MENU); -} - -static int deferred_music_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_MUSIC_LIST); -} - -static int deferred_user_binds_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_USER_BINDS_LIST); -} - -static int deferred_push_accounts_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ACCOUNTS_LIST); -} - -static int deferred_push_driver_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_DRIVER_SETTINGS_LIST); -} - -static int deferred_push_core_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORE_SETTINGS_LIST); -} - -static int deferred_push_video_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_VIDEO_SETTINGS_LIST); -} - -static int deferred_push_configuration_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CONFIGURATION_SETTINGS_LIST); -} - -static int deferred_push_saving_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_SAVING_SETTINGS_LIST); -} - -static int deferred_push_logging_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_LOGGING_SETTINGS_LIST); -} - -static int deferred_push_frame_throttle_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST); -} - -static int deferred_push_rewind_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_REWIND_SETTINGS_LIST); -} +generic_deferred_push(deferred_push_video_shader_preset_parameters, DISPLAYLIST_SHADER_PARAMETERS_PRESET) +generic_deferred_push(deferred_push_video_shader_parameters, DISPLAYLIST_SHADER_PARAMETERS) +generic_deferred_push(deferred_push_settings, DISPLAYLIST_SETTINGS_ALL) +generic_deferred_push(deferred_push_shader_options, DISPLAYLIST_OPTIONS_SHADERS) +generic_deferred_push(deferred_push_options, DISPLAYLIST_OPTIONS) +generic_deferred_push(deferred_push_netplay, DISPLAYLIST_NETPLAY_ROOM_LIST) +generic_deferred_push(deferred_push_netplay_sublist, DISPLAYLIST_NETPLAY) +generic_deferred_push(deferred_push_content_settings, DISPLAYLIST_CONTENT_SETTINGS) +generic_deferred_push(deferred_push_add_content_list, DISPLAYLIST_ADD_CONTENT_LIST) +generic_deferred_push(deferred_push_history_list, DISPLAYLIST_HISTORY) +generic_deferred_push(deferred_push_database_manager_list, DISPLAYLIST_DATABASES) +generic_deferred_push(deferred_push_cursor_manager_list, DISPLAYLIST_DATABASE_CURSORS) +generic_deferred_push(deferred_push_content_collection_list, DISPLAYLIST_DATABASE_PLAYLISTS) +generic_deferred_push(deferred_push_configurations_list, DISPLAYLIST_CONFIGURATIONS_LIST) +generic_deferred_push(deferred_push_load_content_special, DISPLAYLIST_LOAD_CONTENT_LIST) +generic_deferred_push(deferred_push_load_content_list, DISPLAYLIST_LOAD_CONTENT_LIST) +generic_deferred_push(deferred_push_information_list, DISPLAYLIST_INFORMATION_LIST) +generic_deferred_push(deferred_archive_action_detect_core, DISPLAYLIST_ARCHIVE_ACTION_DETECT_CORE) +generic_deferred_push(deferred_archive_action, DISPLAYLIST_ARCHIVE_ACTION) +generic_deferred_push(deferred_push_management_options, DISPLAYLIST_OPTIONS_MANAGEMENT) +generic_deferred_push(deferred_push_core_counters, DISPLAYLIST_PERFCOUNTERS_CORE) +generic_deferred_push(deferred_push_frontend_counters, DISPLAYLIST_PERFCOUNTERS_FRONTEND) +generic_deferred_push(deferred_push_core_cheat_options, DISPLAYLIST_OPTIONS_CHEATS) +generic_deferred_push(deferred_push_core_input_remapping_options, DISPLAYLIST_OPTIONS_REMAPPINGS) +generic_deferred_push(deferred_push_core_options, DISPLAYLIST_CORE_OPTIONS) +generic_deferred_push(deferred_push_disk_options, DISPLAYLIST_OPTIONS_DISK) +generic_deferred_push(deferred_push_browse_url_list, DISPLAYLIST_BROWSE_URL_LIST) +generic_deferred_push(deferred_push_browse_url_start, DISPLAYLIST_BROWSE_URL_START) +generic_deferred_push(deferred_push_core_list, DISPLAYLIST_CORES) +generic_deferred_push(deferred_push_configurations, DISPLAYLIST_CONFIG_FILES) +generic_deferred_push(deferred_push_video_shader_preset, DISPLAYLIST_SHADER_PRESET) +generic_deferred_push(deferred_push_video_shader_pass, DISPLAYLIST_SHADER_PASS) +generic_deferred_push(deferred_push_video_filter, DISPLAYLIST_VIDEO_FILTERS) +generic_deferred_push(deferred_push_images, DISPLAYLIST_IMAGES) +generic_deferred_push(deferred_push_audio_dsp_plugin, DISPLAYLIST_AUDIO_FILTERS) +generic_deferred_push(deferred_push_cheat_file_load, DISPLAYLIST_CHEAT_FILES) +generic_deferred_push(deferred_push_remap_file_load, DISPLAYLIST_REMAP_FILES) +generic_deferred_push(deferred_push_record_configfile, DISPLAYLIST_RECORD_CONFIG_FILES) +generic_deferred_push(deferred_push_input_overlay, DISPLAYLIST_OVERLAYS) +generic_deferred_push(deferred_push_video_font_path, DISPLAYLIST_FONTS) +generic_deferred_push(deferred_push_xmb_font_path, DISPLAYLIST_FONTS) +generic_deferred_push(deferred_push_content_history_path, DISPLAYLIST_CONTENT_HISTORY) +generic_deferred_push(deferred_push_core_information, DISPLAYLIST_CORE_INFO) +generic_deferred_push(deferred_push_system_information, DISPLAYLIST_SYSTEM_INFO) +generic_deferred_push(deferred_push_network_information, DISPLAYLIST_NETWORK_INFO) +generic_deferred_push(deferred_push_achievement_list, DISPLAYLIST_ACHIEVEMENT_LIST) +generic_deferred_push(deferred_push_rdb_collection, DISPLAYLIST_PLAYLIST_COLLECTION) +generic_deferred_push(deferred_main_menu_list, DISPLAYLIST_MAIN_MENU) +generic_deferred_push(deferred_music_list, DISPLAYLIST_MUSIC_LIST) +generic_deferred_push(deferred_user_binds_list, DISPLAYLIST_USER_BINDS_LIST) +generic_deferred_push(deferred_push_accounts_list, DISPLAYLIST_ACCOUNTS_LIST) +generic_deferred_push(deferred_push_driver_settings_list, DISPLAYLIST_DRIVER_SETTINGS_LIST) +generic_deferred_push(deferred_push_core_settings_list, DISPLAYLIST_CORE_SETTINGS_LIST) +generic_deferred_push(deferred_push_video_settings_list, DISPLAYLIST_VIDEO_SETTINGS_LIST) +generic_deferred_push(deferred_push_configuration_settings_list, DISPLAYLIST_CONFIGURATION_SETTINGS_LIST) +generic_deferred_push(deferred_push_saving_settings_list, DISPLAYLIST_SAVING_SETTINGS_LIST) +generic_deferred_push(deferred_push_logging_settings_list, DISPLAYLIST_LOGGING_SETTINGS_LIST) +generic_deferred_push(deferred_push_frame_throttle_settings_list, DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST) +generic_deferred_push(deferred_push_rewind_settings_list, DISPLAYLIST_REWIND_SETTINGS_LIST) static int deferred_push_onscreen_display_settings_list(menu_displaylist_info_t *info) { @@ -279,165 +274,16 @@ static int deferred_push_core_collection_list_deferred( return deferred_push_dlist(info, DISPLAYLIST_CORES_COLLECTION_SUPPORTED); } -static int deferred_push_database_manager_list_deferred( - menu_displaylist_info_t *info) -{ - if (!string_is_empty(info->path_b)) - free(info->path_b); - if (!string_is_empty(info->path_c)) - free(info->path_c); - - info->path_b = strdup(info->path); - info->path_c = NULL; - - return deferred_push_dlist(info, DISPLAYLIST_DATABASE_QUERY); -} - -static int deferred_push_video_shader_preset_parameters( - menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_SHADER_PARAMETERS_PRESET); -} - -static int deferred_push_video_shader_parameters( - menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_SHADER_PARAMETERS); -} - -static int deferred_push_settings(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_SETTINGS_ALL); -} - -static int deferred_push_shader_options(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_OPTIONS_SHADERS); -} - -static int deferred_push_options(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_OPTIONS); -} - -static int deferred_push_netplay(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_NETPLAY_ROOM_LIST); -} - -static int deferred_push_netplay_sublist(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_NETPLAY); -} - -static int deferred_push_content_settings(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CONTENT_SETTINGS); -} - -static int deferred_push_add_content_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ADD_CONTENT_LIST); -} - -static int deferred_push_configurations_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CONFIGURATIONS_LIST); -} - -static int deferred_push_load_content_special(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_LOAD_CONTENT_LIST); -} - -static int deferred_push_load_content_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_LOAD_CONTENT_LIST); -} - -static int deferred_push_information_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_INFORMATION_LIST); -} - -static int deferred_push_management_options(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_OPTIONS_MANAGEMENT); -} - -static int deferred_push_core_counters(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_PERFCOUNTERS_CORE); -} - -static int deferred_push_frontend_counters(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_PERFCOUNTERS_FRONTEND); -} - -static int deferred_push_core_cheat_options(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_OPTIONS_CHEATS); -} - -static int deferred_push_core_input_remapping_options(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_OPTIONS_REMAPPINGS); -} - -static int deferred_push_core_options(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORE_OPTIONS); -} - -static int deferred_push_disk_options(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_OPTIONS_DISK); -} #ifdef HAVE_NETWORKING -static int deferred_push_thumbnails_updater_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_THUMBNAILS_UPDATER); -} - -static int deferred_push_core_updater_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORES_UPDATER); -} - -static int deferred_push_core_content_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORE_CONTENT); -} - -static int deferred_push_core_content_dirs_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORE_CONTENT_DIRS); -} - -static int deferred_push_core_content_dirs_subdir_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORE_CONTENT_DIRS_SUBDIR); -} - -static int deferred_push_lakka_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_LAKKA); -} - +generic_deferred_push(deferred_push_thumbnails_updater_list, DISPLAYLIST_THUMBNAILS_UPDATER) +generic_deferred_push(deferred_push_core_updater_list, DISPLAYLIST_CORES_UPDATER) +generic_deferred_push(deferred_push_core_content_list, DISPLAYLIST_CORE_CONTENT) +generic_deferred_push(deferred_push_core_content_dirs_list, DISPLAYLIST_CORE_CONTENT_DIRS) +generic_deferred_push(deferred_push_core_content_dirs_subdir_list, DISPLAYLIST_CORE_CONTENT_DIRS_SUBDIR) +generic_deferred_push(deferred_push_lakka_list, DISPLAYLIST_LAKKA) #endif -static int deferred_archive_action_detect_core(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ARCHIVE_ACTION_DETECT_CORE); -} - -static int deferred_archive_action(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ARCHIVE_ACTION); -} - static int deferred_push_cursor_manager_list_deferred( menu_displaylist_info_t *info) { @@ -941,111 +787,11 @@ static int deferred_push_default(menu_displaylist_info_t *info) return general_push(info, PUSH_DEFAULT, DISPLAYLIST_DEFAULT); } -static int deferred_push_history_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_HISTORY); -} - -static int deferred_push_database_manager_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_DATABASES); -} - -static int deferred_push_cursor_manager_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_DATABASE_CURSORS); -} - -static int deferred_push_content_collection_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_DATABASE_PLAYLISTS); -} - static int deferred_push_favorites_list(menu_displaylist_info_t *info) { return general_push(info, PUSH_DEFAULT, DISPLAYLIST_FAVORITES); } -static int deferred_push_browse_url_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_BROWSE_URL_LIST); -} - -static int deferred_push_browse_url_start(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_BROWSE_URL_START); -} - -static int deferred_push_core_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORES); -} - -static int deferred_push_configurations(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CONFIG_FILES); -} - -static int deferred_push_video_shader_preset(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_SHADER_PRESET); -} - -static int deferred_push_video_shader_pass(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_SHADER_PASS); -} - -static int deferred_push_video_filter(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_VIDEO_FILTERS); -} - -static int deferred_push_images(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_IMAGES); -} - -static int deferred_push_audio_dsp_plugin(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_AUDIO_FILTERS); -} - -static int deferred_push_cheat_file_load(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CHEAT_FILES); -} - -static int deferred_push_remap_file_load(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_REMAP_FILES); -} - -static int deferred_push_record_configfile(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_RECORD_CONFIG_FILES); -} - -static int deferred_push_input_overlay(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_OVERLAYS); -} - -static int deferred_push_video_font_path(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_FONTS); -} - -static int deferred_push_xmb_font_path(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_FONTS); -} - -static int deferred_push_content_history_path(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CONTENT_HISTORY); -} - static int menu_cbs_init_bind_deferred_push_compare_label( menu_file_list_cbs_t *cbs, const char *label, uint32_t label_hash) From 264d9903e886e8f5e60a814ebea64c641716a678 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 14:24:06 +0100 Subject: [PATCH 70/85] Update NL --- intl/msg_hash_nl.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h index f912f35260..f2a3b58f4b 100644 --- a/intl/msg_hash_nl.h +++ b/intl/msg_hash_nl.h @@ -2313,6 +2313,8 @@ MSG_HASH( ) MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_BOKEH, "Bokeh") +MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_SNOWFLAKE, + "Sneeuwvlok") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_REFRESH_ROOMS, "Refresh Room List") MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ROOM_NICKNAME, From 5d8df93c99bc46d7dbf2b8e3ac77544e06d91817 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 14:30:54 +0100 Subject: [PATCH 71/85] Cleanups --- menu/cbs/menu_cbs_deferred_push.c | 164 +++++------------------------- 1 file changed, 27 insertions(+), 137 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 77ad57d4c4..3d158cc4b9 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -137,143 +137,33 @@ generic_deferred_push(deferred_push_saving_settings_list, DISPLAYLIST_ generic_deferred_push(deferred_push_logging_settings_list, DISPLAYLIST_LOGGING_SETTINGS_LIST) generic_deferred_push(deferred_push_frame_throttle_settings_list, DISPLAYLIST_FRAME_THROTTLE_SETTINGS_LIST) generic_deferred_push(deferred_push_rewind_settings_list, DISPLAYLIST_REWIND_SETTINGS_LIST) - -static int deferred_push_onscreen_display_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST); -} - -static int deferred_push_onscreen_notifications_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST); -} - -static int deferred_push_onscreen_overlay_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST); -} - -static int deferred_push_menu_file_browser_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_MENU_FILE_BROWSER_SETTINGS_LIST); -} - -static int deferred_push_menu_views_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_MENU_VIEWS_SETTINGS_LIST); -} - -static int deferred_push_quick_menu_views_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_QUICK_MENU_VIEWS_SETTINGS_LIST); -} - -static int deferred_push_menu_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_MENU_SETTINGS_LIST); -} - -static int deferred_push_user_interface_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_USER_INTERFACE_SETTINGS_LIST); -} - -static int deferred_push_retro_achievements_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST); -} - -static int deferred_push_updater_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_UPDATER_SETTINGS_LIST); -} - -static int deferred_push_wifi_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_WIFI_SETTINGS_LIST); -} - -static int deferred_push_network_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_NETWORK_SETTINGS_LIST); -} - -static int deferred_push_lakka_services_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_LAKKA_SERVICES_LIST); -} - -static int deferred_push_user_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_USER_SETTINGS_LIST); -} - -static int deferred_push_directory_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_DIRECTORY_SETTINGS_LIST); -} - -static int deferred_push_privacy_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_PRIVACY_SETTINGS_LIST); -} - -static int deferred_push_audio_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_AUDIO_SETTINGS_LIST); -} - -static int deferred_push_input_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_INPUT_SETTINGS_LIST); -} - -static int deferred_push_recording_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_RECORDING_SETTINGS_LIST); -} - -static int deferred_push_playlist_settings_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_PLAYLIST_SETTINGS_LIST); -} - -static int deferred_push_input_hotkey_binds_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_INPUT_HOTKEY_BINDS_LIST); -} - -static int deferred_push_accounts_cheevos_list(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_ACCOUNTS_CHEEVOS_LIST); -} - -static int deferred_push_help(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_HELP_SCREEN_LIST); -} - -static int deferred_push_rdb_entry_detail(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_DATABASE_ENTRY); -} - -static int deferred_push_rpl_entry_actions(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS); -} - -static int deferred_push_core_list_deferred(menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORES_SUPPORTED); -} - -static int deferred_push_core_collection_list_deferred( - menu_displaylist_info_t *info) -{ - return deferred_push_dlist(info, DISPLAYLIST_CORES_COLLECTION_SUPPORTED); -} - +generic_deferred_push(deferred_push_onscreen_display_settings_list, DISPLAYLIST_ONSCREEN_DISPLAY_SETTINGS_LIST) +generic_deferred_push(deferred_push_onscreen_notifications_settings_list, DISPLAYLIST_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST) +generic_deferred_push(deferred_push_onscreen_overlay_settings_list, DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST) +generic_deferred_push(deferred_push_menu_file_browser_settings_list,DISPLAYLIST_MENU_FILE_BROWSER_SETTINGS_LIST) +generic_deferred_push(deferred_push_menu_views_settings_list, DISPLAYLIST_MENU_VIEWS_SETTINGS_LIST) +generic_deferred_push(deferred_push_quick_menu_views_settings_list, DISPLAYLIST_QUICK_MENU_VIEWS_SETTINGS_LIST) +generic_deferred_push(deferred_push_menu_settings_list, DISPLAYLIST_MENU_SETTINGS_LIST) +generic_deferred_push(deferred_push_user_interface_settings_list, DISPLAYLIST_USER_INTERFACE_SETTINGS_LIST) +generic_deferred_push(deferred_push_retro_achievements_settings_list,DISPLAYLIST_RETRO_ACHIEVEMENTS_SETTINGS_LIST) +generic_deferred_push(deferred_push_updater_settings_list, DISPLAYLIST_UPDATER_SETTINGS_LIST) +generic_deferred_push(deferred_push_wifi_settings_list, DISPLAYLIST_WIFI_SETTINGS_LIST) +generic_deferred_push(deferred_push_network_settings_list, DISPLAYLIST_NETWORK_SETTINGS_LIST) +generic_deferred_push(deferred_push_lakka_services_list, DISPLAYLIST_LAKKA_SERVICES_LIST) +generic_deferred_push(deferred_push_user_settings_list, DISPLAYLIST_USER_SETTINGS_LIST) +generic_deferred_push(deferred_push_directory_settings_list, DISPLAYLIST_DIRECTORY_SETTINGS_LIST) +generic_deferred_push(deferred_push_privacy_settings_list, DISPLAYLIST_PRIVACY_SETTINGS_LIST) +generic_deferred_push(deferred_push_audio_settings_list, DISPLAYLIST_AUDIO_SETTINGS_LIST) +generic_deferred_push(deferred_push_input_settings_list, DISPLAYLIST_INPUT_SETTINGS_LIST) +generic_deferred_push(deferred_push_recording_settings_list, DISPLAYLIST_RECORDING_SETTINGS_LIST) +generic_deferred_push(deferred_push_playlist_settings_list, DISPLAYLIST_PLAYLIST_SETTINGS_LIST) +generic_deferred_push(deferred_push_input_hotkey_binds_list, DISPLAYLIST_INPUT_HOTKEY_BINDS_LIST) +generic_deferred_push(deferred_push_accounts_cheevos_list, DISPLAYLIST_ACCOUNTS_CHEEVOS_LIST) +generic_deferred_push(deferred_push_help, DISPLAYLIST_HELP_SCREEN_LIST) +generic_deferred_push(deferred_push_rdb_entry_detail, DISPLAYLIST_DATABASE_ENTRY) +generic_deferred_push(deferred_push_rpl_entry_actions, DISPLAYLIST_HORIZONTAL_CONTENT_ACTIONS) +generic_deferred_push(deferred_push_core_list_deferred, DISPLAYLIST_CORES_SUPPORTED) +generic_deferred_push(deferred_push_core_collection_list_deferred, DISPLAYLIST_CORES_COLLECTION_SUPPORTED) #ifdef HAVE_NETWORKING generic_deferred_push(deferred_push_thumbnails_updater_list, DISPLAYLIST_THUMBNAILS_UPDATER) From 7ba46356e698e6979814fe364565f0f7487d2aca Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 15:44:41 +0100 Subject: [PATCH 72/85] Cut down on code duplication --- menu/cbs/menu_cbs_deferred_push.c | 112 ++++++------------------------ 1 file changed, 20 insertions(+), 92 deletions(-) diff --git a/menu/cbs/menu_cbs_deferred_push.c b/menu/cbs/menu_cbs_deferred_push.c index 3d158cc4b9..9a93e60dda 100644 --- a/menu/cbs/menu_cbs_deferred_push.c +++ b/menu/cbs/menu_cbs_deferred_push.c @@ -259,101 +259,29 @@ end: return ret; } -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_max_users( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_MAX_USERS); +#define generic_deferred_cursor_manager(name, type) \ +static int (name)(menu_displaylist_info_t *info) \ +{ \ + return deferred_push_cursor_manager_list_generic(info, type); \ } -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_famitsu_magazine_rating( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_FAMITSU_MAGAZINE_RATING); -} +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_max_users, DATABASE_QUERY_ENTRY_MAX_USERS) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_famitsu_magazine_rating, DATABASE_QUERY_ENTRY_FAMITSU_MAGAZINE_RATING) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_edge_magazine_rating, DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_RATING) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_edge_magazine_issue, DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_ISSUE) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_elspa_rating, DATABASE_QUERY_ENTRY_ELSPA_RATING) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_cero_rating, DATABASE_QUERY_ENTRY_CERO_RATING) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_pegi_rating, DATABASE_QUERY_ENTRY_PEGI_RATING) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_bbfc_rating, DATABASE_QUERY_ENTRY_BBFC_RATING) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_esrb_rating, DATABASE_QUERY_ENTRY_ESRB_RATING) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_enhancement_hw, DATABASE_QUERY_ENTRY_ENHANCEMENT_HW) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_franchise, DATABASE_QUERY_ENTRY_FRANCHISE) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_publisher, DATABASE_QUERY_ENTRY_PUBLISHER) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_developer, DATABASE_QUERY_ENTRY_DEVELOPER) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_origin, DATABASE_QUERY_ENTRY_ORIGIN) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_releasemonth, DATABASE_QUERY_ENTRY_RELEASEDATE_MONTH) +generic_deferred_cursor_manager(deferred_push_cursor_manager_list_deferred_query_rdb_entry_releaseyear, DATABASE_QUERY_ENTRY_RELEASEDATE_YEAR) -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_edge_magazine_rating( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_RATING); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_edge_magazine_issue( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_EDGE_MAGAZINE_ISSUE); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_elspa_rating( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_ELSPA_RATING); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_cero_rating( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_CERO_RATING); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_pegi_rating( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_PEGI_RATING); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_bbfc_rating( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_BBFC_RATING); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_esrb_rating( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_ESRB_RATING); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_enhancement_hw( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_ENHANCEMENT_HW); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_franchise( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_FRANCHISE); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_publisher( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_PUBLISHER); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_developer( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_DEVELOPER); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_origin( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_ORIGIN); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_releasemonth( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_RELEASEDATE_MONTH); -} - -static int deferred_push_cursor_manager_list_deferred_query_rdb_entry_releaseyear( - menu_displaylist_info_t *info) -{ - return deferred_push_cursor_manager_list_generic(info, DATABASE_QUERY_ENTRY_RELEASEDATE_YEAR); -} #endif #if 0 From 4b4ae0c1a005c589362a578f73b3ea6404f7ab43 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:09:19 +0100 Subject: [PATCH 73/85] Update CHANGES.md --- CHANGES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index cabe1a0b9c..bef6f254b5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,8 @@ - COMMON: New lightgun API. - FREEBSD: Support libusb HID input driver. - HAIKU: Buildfix. +- LINUX/X11: Add RetroArch logo to window title bar. +- LINUX/X11: Input driver now supports new lightgun code. - LOCALIZATION: Update Italian translation. - LOCALIZATION: Update Portuguese-Brazilian translation. - LOCALIZATION: Update Russian translation. @@ -14,8 +16,6 @@ - SCANNER: Fix crash from Windows-incompatible format string. - WIIU: Disabled the controller patcher for now since it was the source of many stability issues. - WINDOWS: Raw input driver now supports new lightgun code. -- X11: Add RetroArch logo to window title bar. -- X11: Input driver now supports new lightgun code. # 1.6.9 - COMMON: Small memory leak. From 4cb739d45aacb17c3137eb48e5548aced18b4b17 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:09:44 +0100 Subject: [PATCH 74/85] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index bef6f254b5..9a962e0dcf 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ - COMMON: Optimized NBIO implementations now for Apple, Windows, and Linux. Uses mmap for Linux/Windows/BSD if/when available. File I/O should now be much faster for loading images inside the menu. - COMMON: Native Blissbox support now for latest firmware as of writing (2.0). Implementation through libusb and/or native Windows HID. - COMMON: New lightgun API. +- COMMON: Fixed some playlist bugs. - FREEBSD: Support libusb HID input driver. - HAIKU: Buildfix. - LINUX/X11: Add RetroArch logo to window title bar. From 69295c21790c85820576541544589ddcfc4caffd Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:20:52 +0100 Subject: [PATCH 75/85] Fix BIT_GET --- libretro-common/include/retro_miscellaneous.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/include/retro_miscellaneous.h b/libretro-common/include/retro_miscellaneous.h index 010b04f19c..bfebd1f8e8 100644 --- a/libretro-common/include/retro_miscellaneous.h +++ b/libretro-common/include/retro_miscellaneous.h @@ -83,7 +83,7 @@ static INLINE bool bits_any_set(uint32_t* ptr, uint32_t count) #define BIT_SET(a, bit) ((a)[(bit) >> 3] |= (1 << ((bit) & 7))) #define BIT_CLEAR(a, bit) ((a)[(bit) >> 3] &= ~(1 << ((bit) & 7))) -#define BIT_GET(a, bit) (((a).data[(bit) >> 3] >> ((bit) & 7)) & 1) +#define BIT_GET(a, bit) (((a)[(bit) >> 3] >> ((bit) & 7)) & 1) #define BIT16_SET(a, bit) ((a) |= (1 << ((bit) & 15))) #define BIT16_CLEAR(a, bit) ((a) &= ~(1 << ((bit) & 15))) From 88b85c2d15e18c0fc5b5bcdb1ad0822b313a63a0 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:27:39 +0100 Subject: [PATCH 76/85] Fix it for C89 --- intl/msg_hash_de.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/intl/msg_hash_de.c b/intl/msg_hash_de.c index 333f191a49..24b7eb69ce 100644 --- a/intl/msg_hash_de.c +++ b/intl/msg_hash_de.c @@ -904,13 +904,19 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len) break; case MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS: snprintf(s, len, + " \n" + ); + { + /* Work around C89 limitations */ + const char * t = "Für diesen durchgang skalieren. \n" " \n" "Der Skalierungsfaktor wird multipliziert, \n" "d.h. 2x im ersten durchgang und 2x im \n" "zweiten durchgang bedeute eine 4x Gesamt- \n" "Skalierung." - " \n" + " \n"; + const char * u = "Wenn es im letzten durchgang einen \n" "Skalierungsfaktor gibt, wird das Ergebnis \n" "mit dem als 'Standardfilter' eingestellten \n" @@ -919,8 +925,10 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len) "Wenn 'Ignorieren' eingestellt ist, wird \n" "entweder einfache Skalierung oder Vollbild- \n" "Streckung verwendet - abhängig davon, ob \n" - "es der letzte durchgang ist oder nicht." - ); + "es der letzte durchgang ist oder nicht."; + strlcpy(s, t, len); + strlcat(s, u, len); + } break; case MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES: snprintf(s, len, From de900325c6247fd20be59c5c7460927abb4099e4 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:31:58 +0100 Subject: [PATCH 77/85] More C89_BUILD fixes --- intl/msg_hash_de.c | 51 +++++++++++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/intl/msg_hash_de.c b/intl/msg_hash_de.c index 24b7eb69ce..6f56a0dd5a 100644 --- a/intl/msg_hash_de.c +++ b/intl/msg_hash_de.c @@ -1141,7 +1141,9 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len) "Verwendet für Inhalt, der auf mehreren Datenträgern ausgeliefert wird. "); break; case MENU_ENUM_LABEL_ENABLE_HOTKEY: - snprintf(s, len, + { + /* Work around C89 limitations */ + const char * t = "Andere Tastenkürzel aktivieren. \n" " \n" "Wenn dieses Tastenkürzel entweder einer\n" @@ -1149,14 +1151,18 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len) "Controller-Achse zugeordnet ist, werden alle \n" "anderen Tastenkürzel nur aktiviert, wenn dieses \n" "Tastenkürzel zur gleichen Zeit gehalten wird. \n" - " \n" + " \n"; + const char * u = "Dies ist hilfreich für Implementierungen, die auf \n" "RETRO_KEYBOARD ausgelegt sind und eine große \n" "Fläche auf der Tastatur benötigen, wo es nicht \n" "gewünscht ist, dass es zu Kollisionen mit Tastenkürzeln kommt \n." " \n" "Alternativ können auch alle Tastatur-Kürzel durch \n" - "den Benutzer deaktiviert werden."); + "den Benutzer deaktiviert werden."; + strlcpy(s, t, len); + strlcat(s, u, len); + } break; case MENU_ENUM_LABEL_REWIND_ENABLE: snprintf(s, len, @@ -1173,7 +1179,9 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len) "Libretro-Core-Implementierungen gesucht wird."); break; case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO: - snprintf(s, len, + { + /* Work around C89 limitations */ + const char * t = "Bildwiederholrate.\n" " \n" "Die genaue Bildwiederholrate deines Bildschirms (Hz).\n" @@ -1182,14 +1190,19 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len) " \n" "audio_input_rate = Spiel-Eingaberate * Bildschirm- \n" "Wiederholrate / Spiel-Wiederholrate\n" - " \n" + " \n"; + const char * u = "Wenn die Implementierung keinen Wert liefert, \n" "werden aus Kompatiblitätsgründen die Werte für NTSC \n" "angenommen.\n" " \n" "Dieser Wert sollte nahe 60Hz liegen, um Tonsprünge zu vermeiden. \n" "Wenn dein Bildschirm nicht auf 60Hz oder einem ähnlichen Wert läuft, \n" - "deaktiviere VSync und lasse diese Einstellung unverändert. \n"); + "deaktiviere VSync und lasse diese Einstellung unverändert. \n"; + ; + strlcpy(s, t, len); + strlcat(s, u, len); + } break; case MENU_ENUM_LABEL_VIDEO_ROTATION: snprintf(s, len, @@ -1602,20 +1615,26 @@ int menu_hash_get_help_de_enum(enum msg_hash_enums msg, char *s, size_t len) "tritt keine Netplay-Verzögerung auf.\n"); break; case MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES: - snprintf(s, len, + { + /* Work around C89 limitations */ + const char * t = "Die Frequenz in Einzelbildern, mit der Netplay \n" "sicherstellen wird, dass Host und Clients \n" "synchronisiert sind. \n" " \n" - "Bei den meisten Cores wird diese Einstellungen \n" - "keine sichtbaren Auswirkungen haben und kann ignoriert werden. \n" - "Bei nichtdeterministischen Cores legt dieser Wert fest, \n" - "wie oft die Netplay-Mitglieder miteinander synchronisiert \n" - "werden. Bei fehlerhaften Cores wird ein \n" - "anderer Wert als 0 für diese Einstellung erhebliche \n" - "Leistungsprobleme verursachen. Auf 0 setzen, um keine \n" - "Überprüfungen durchzuführen. Diese Einstellung wird nur \n" - "auf dem Netplay-Host verwendet. \n"); + "Bei den meisten Cores wird diese Einstellungen \n" + "keine sichtbaren Auswirkungen haben und kann ignoriert werden. \n"; + const char *u = + "Bei nichtdeterministischen Cores legt dieser Wert fest, \n" + "wie oft die Netplay-Mitglieder miteinander synchronisiert \n" + "werden. Bei fehlerhaften Cores wird ein \n" + "anderer Wert als 0 für diese Einstellung erhebliche \n" + "Leistungsprobleme verursachen. Auf 0 setzen, um keine \n" + "Überprüfungen durchzuführen. Diese Einstellung wird nur \n" + "auf dem Netplay-Host verwendet. \n"; + strlcpy(s, t, len); + strlcat(s, u, len); + } break; case MENU_ENUM_LABEL_NETPLAY_INPUT_LATENCY_FRAMES_MIN: snprintf(s, len, From 3ede6a9aebd704361530a7f6b3b41bae2b278d0d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:35:03 +0100 Subject: [PATCH 78/85] Some C89_BUILD fixes --- cheevos/cheevos.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index b2cf87154b..b9df229ac7 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -1796,6 +1796,7 @@ static void cheevos_test_cheevo_set(const cheevoset_t *set) } else if (valid) { + char msg[256]; char url[256]; url[0] = '\0'; @@ -1807,7 +1808,6 @@ static void cheevos_test_cheevo_set(const cheevoset_t *set) RARCH_LOG("[CHEEVOS]: awarding cheevo %u: %s (%s).\n", cheevo->id, cheevo->title, cheevo->description); - char msg[256]; snprintf(msg, sizeof(msg), "Achievement Unlocked: %s", cheevo->title); msg[sizeof(msg) - 1] = 0; runloop_msg_queue_push(msg, 0, 2 * 60, false); @@ -1856,10 +1856,11 @@ static int cheevos_expr_value(cheevos_expr_t* expr) { cheevos_term_t* term = expr->terms; unsigned i; - /* Separate possible values with '$' operator, submit the largest */ unsigned current_value = 0; + /* TODO/FIXME - variable length forbidden in C89 - rewrite this! */ int values[expr->compare_count]; + memset(values, 0, sizeof values); for (i = expr->count; i != 0; i--, term++) @@ -1974,12 +1975,13 @@ static void cheevos_test_leaderboards(void) else { char url[256]; + char msg[256]; + char formatted_value[16]; + cheevos_make_lboard_url(lboard, url, sizeof(url)); task_push_http_transfer(url, true, NULL, cheevos_lboard_submit, lboard); RARCH_LOG("[CHEEVOS]: submit lboard %s\n", lboard->title); - char msg[256]; - char formatted_value[16]; cheevos_format_value(value, lboard->format, formatted_value, sizeof(formatted_value)); snprintf(msg, sizeof(msg), "Submitted %s for %s", formatted_value, lboard->title); msg[sizeof(msg) - 1] = 0; @@ -1998,11 +2000,12 @@ static void cheevos_test_leaderboards(void) { if (cheevos_test_lboard_condition(&lboard->start)) { + char msg[256]; + RARCH_LOG("[CHEEVOS]: start lboard %s\n", lboard->title); lboard->active = 1; lboard->last_value = -1; - char msg[256]; snprintf(msg, sizeof(msg), "Leaderboard Active: %s", lboard->title); msg[sizeof(msg) - 1] = 0; runloop_msg_queue_push(msg, 0, 2 * 60, false); @@ -2835,10 +2838,10 @@ static int cheevos_iterate(coro_t* coro) { if(cheevos_locals.core.count > 0) { + int mode; const cheevo_t* cheevo = cheevos_locals.core.cheevos; const cheevo_t* end = cheevo + cheevos_locals.core.count; int number_of_unlocked = cheevos_locals.core.count; - int mode; char msg[256]; if(CHEEVOS_VAR_SETTINGS->bools.cheevos_hardcore_mode_enable) From 3e81996bd363db34a4b5f951348ce3587e6ddcbd Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:40:13 +0100 Subject: [PATCH 79/85] Update D3D headers --- gfx/include/d3d9/d3dx9shader.h | 2 +- gfx/include/d3d9caps.h | 204 ++++++++++++++++----------------- gfx/include/d3d9types.h | 41 +++---- 3 files changed, 120 insertions(+), 127 deletions(-) diff --git a/gfx/include/d3d9/d3dx9shader.h b/gfx/include/d3d9/d3dx9shader.h index 46ddf4c85a..74e40cfc80 100644 --- a/gfx/include/d3d9/d3dx9shader.h +++ b/gfx/include/d3d9/d3dx9shader.h @@ -643,4 +643,4 @@ typedef struct _D3DXSHADER_STRUCTMEMBERINFO -#endif //__D3DX9SHADER_H__ +#endif /* __D3DX9SHADER_H__ */ diff --git a/gfx/include/d3d9caps.h b/gfx/include/d3d9caps.h index 96a9bef9d4..adc3fb1f8d 100644 --- a/gfx/include/d3d9caps.h +++ b/gfx/include/d3d9caps.h @@ -12,9 +12,9 @@ #ifndef DIRECT3D_VERSION #define DIRECT3D_VERSION 0x0900 -#endif //DIRECT3D_VERSION +#endif /* DIRECT3D_VERSION */ -// include this file content only if compiling for DX9 interfaces +/* include this file content only if compiling for DX9 interfaces */ #if(DIRECT3D_VERSION >= 0x0900) @@ -117,7 +117,7 @@ DEFINE_GUID(D3DKEYEXCHANGE_RSAES_OAEP, DEFINE_GUID(D3DKEYEXCHANGE_DXVA, 0x43d3775c, 0x38e5, 0x4924, 0x8d, 0x86, 0xd3, 0xfc, 0xcf, 0x15, 0x3e, 0x9b); -#endif // !D3D_DISABLE_9EX +#endif /* !D3D_DISABLE_9EX */ /* -- D3D9Ex only */ typedef struct _D3DCAPS9 @@ -146,13 +146,13 @@ typedef struct _D3DCAPS9 DWORD AlphaCmpCaps; DWORD ShadeCaps; DWORD TextureCaps; - DWORD TextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's - DWORD CubeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DCubeTexture9's - DWORD VolumeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DVolumeTexture9's - DWORD TextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DTexture9's - DWORD VolumeTextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DVolumeTexture9's + DWORD TextureFilterCaps; /* D3DPTFILTERCAPS for IDirect3DTexture9's */ + DWORD CubeTextureFilterCaps; /* D3DPTFILTERCAPS for IDirect3DCubeTexture9's */ + DWORD VolumeTextureFilterCaps; /* D3DPTFILTERCAPS for IDirect3DVolumeTexture9's */ + DWORD TextureAddressCaps; /* D3DPTADDRESSCAPS for IDirect3DTexture9's */ + DWORD VolumeTextureAddressCaps; /* D3DPTADDRESSCAPS for IDirect3DVolumeTexture9's */ - DWORD LineCaps; // D3DLINECAPS + DWORD LineCaps; /* D3DLINECAPS */ DWORD MaxTextureWidth, MaxTextureHeight; DWORD MaxVolumeExtent; @@ -183,51 +183,49 @@ typedef struct _D3DCAPS9 float MaxPointSize; - DWORD MaxPrimitiveCount; // max number of primitives per DrawPrimitive call + DWORD MaxPrimitiveCount; /* max number of primitives per DrawPrimitive call */ DWORD MaxVertexIndex; DWORD MaxStreams; - DWORD MaxStreamStride; // max stride for SetStreamSource + DWORD MaxStreamStride; /* max stride for SetStreamSource */ DWORD VertexShaderVersion; - DWORD MaxVertexShaderConst; // number of vertex shader constant registers + DWORD MaxVertexShaderConst; /* number of vertex shader constant registers */ DWORD PixelShaderVersion; - float PixelShader1xMaxValue; // max value storable in registers of ps.1.x shaders + float PixelShader1xMaxValue; /* max value storable in registers of ps.1.x shaders */ - // Here are the DX9 specific ones + /* Here are the DX9 specific ones */ DWORD DevCaps2; float MaxNpatchTessellationLevel; DWORD Reserved5; - UINT MasterAdapterOrdinal; // ordinal of master adaptor for adapter group - UINT AdapterOrdinalInGroup; // ordinal inside the adapter group - UINT NumberOfAdaptersInGroup; // number of adapters in this adapter group (only if master) - DWORD DeclTypes; // Data types, supported in vertex declarations - DWORD NumSimultaneousRTs; // Will be at least 1 - DWORD StretchRectFilterCaps; // Filter caps supported by StretchRect + UINT MasterAdapterOrdinal; /* ordinal of master adaptor for adapter group */ + UINT AdapterOrdinalInGroup; /* ordinal inside the adapter group */ + UINT NumberOfAdaptersInGroup; /* number of adapters in this adapter group (only if master) */ + DWORD DeclTypes; /* Data types, supported in vertex declarations */ + DWORD NumSimultaneousRTs; /* Will be at least 1 */ + DWORD StretchRectFilterCaps; /* Filter caps supported by StretchRect */ D3DVSHADERCAPS2_0 VS20Caps; D3DPSHADERCAPS2_0 PS20Caps; - DWORD VertexTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's for texture, used in vertex shaders - DWORD MaxVShaderInstructionsExecuted; // maximum number of vertex shader instructions that can be executed - DWORD MaxPShaderInstructionsExecuted; // maximum number of pixel shader instructions that can be executed + DWORD VertexTextureFilterCaps; /* D3DPTFILTERCAPS for IDirect3DTexture9's for texture, used in vertex shaders */ + DWORD MaxVShaderInstructionsExecuted; /* maximum number of vertex shader instructions that can be executed */ + DWORD MaxPShaderInstructionsExecuted; /* maximum number of pixel shader instructions that can be executed */ DWORD MaxVertexShader30InstructionSlots; DWORD MaxPixelShader30InstructionSlots; } D3DCAPS9; -// -// BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS -// +/* + * BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS + */ -// -// Caps -// +/* + * Caps + */ #define D3DCAPS_OVERLAY 0x00000800L #define D3DCAPS_READ_SCANLINE 0x00020000L -// -// Caps2 -// +/* Caps2 */ #define D3DCAPS2_FULLSCREENGAMMA 0x00020000L #define D3DCAPS2_CANCALIBRATEGAMMA 0x00100000L #define D3DCAPS2_RESERVED 0x02000000L @@ -240,21 +238,21 @@ typedef struct _D3DCAPS9 #define D3DCAPS2_CANSHARERESOURCE 0x80000000L -#endif // !D3D_DISABLE_9EX +#endif /* !D3D_DISABLE_9EX */ /* -- D3D9Ex only */ -// -// Caps3 -// +/* Caps3 */ #define D3DCAPS3_RESERVED 0x8000001fL -// Indicates that the device can respect the ALPHABLENDENABLE render state -// when fullscreen while using the FLIP or DISCARD swap effect. -// COPY and COPYVSYNC swap effects work whether or not this flag is set. +/* Indicates that the device can respect the ALPHABLENDENABLE render state + * when fullscreen while using the FLIP or DISCARD swap effect. + * COPY and COPYVSYNC swap effects work whether or not this flag is set. + */ #define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x00000020L -// Indicates that the device can perform a gamma correction from -// a windowed back buffer containing linear content to the sRGB desktop. +/* Indicates that the device can perform a gamma correction from + * a windowed back buffer containing linear content to the sRGB desktop. + */ #define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION 0x00000080L #define D3DCAPS3_COPY_TO_VIDMEM 0x00000100L /* Device can acclerate copies from sysmem to local vidmem */ @@ -262,10 +260,7 @@ typedef struct _D3DCAPS9 #define D3DCAPS3_DXVAHD 0x00000400L #define D3DCAPS3_DXVAHD_LIMITED 0x00000800L - -// -// PresentationIntervals -// +/* PresentationIntervals */ #define D3DPRESENT_INTERVAL_DEFAULT 0x00000000L #define D3DPRESENT_INTERVAL_ONE 0x00000001L #define D3DPRESENT_INTERVAL_TWO 0x00000002L @@ -273,17 +268,13 @@ typedef struct _D3DCAPS9 #define D3DPRESENT_INTERVAL_FOUR 0x00000008L #define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000L -// -// CursorCaps -// -// Driver supports HW color cursor in at least hi-res modes(height >=400) +/* CursorCaps */ +/* Driver supports HW color cursor in at least hi-res modes(height >=400) */ #define D3DCURSORCAPS_COLOR 0x00000001L -// Driver supports HW cursor also in low-res modes(height < 400) +/* Driver supports HW cursor also in low-res modes(height < 400) */ #define D3DCURSORCAPS_LOWRES 0x00000002L -// -// DevCaps -// +/* DevCaps */ #define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */ #define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020L /* Device can use execute buffers from video memory */ #define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */ @@ -305,9 +296,9 @@ typedef struct _D3DCAPS9 #define D3DDEVCAPS_RTPATCHHANDLEZERO 0x00800000L /* Indicates that RT Patches may be drawn efficiently using handle 0 */ #define D3DDEVCAPS_NPATCHES 0x01000000L /* Device supports N-Patches */ -// -// PrimitiveMiscCaps -// +/* + * PrimitiveMiscCaps + */ #define D3DPMISCCAPS_MASKZ 0x00000002L #define D3DPMISCCAPS_CULLNONE 0x00000010L #define D3DPMISCCAPS_CULLCW 0x00000020L @@ -332,13 +323,13 @@ typedef struct _D3DCAPS9 #define D3DPMISCCAPS_POSTBLENDSRGBCONVERT 0x00200000L /* Indicates device can perform conversion to sRGB after blending. */ -#endif // !D3D_DISABLE_9EX +#endif /* !D3D_DISABLE_9EX */ /* -- D3D9Ex only */ -// -// LineCaps -// +/* + * LineCaps + */ #define D3DLINECAPS_TEXTURE 0x00000001L #define D3DLINECAPS_ZTEST 0x00000002L #define D3DLINECAPS_BLEND 0x00000004L @@ -346,9 +337,9 @@ typedef struct _D3DCAPS9 #define D3DLINECAPS_FOG 0x00000010L #define D3DLINECAPS_ANTIALIAS 0x00000020L -// -// RasterCaps -// +/* + * RasterCaps + */ #define D3DPRASTERCAPS_DITHER 0x00000001L #define D3DPRASTERCAPS_ZTEST 0x00000010L #define D3DPRASTERCAPS_FOGVERTEX 0x00000080L @@ -366,9 +357,9 @@ typedef struct _D3DCAPS9 #define D3DPRASTERCAPS_DEPTHBIAS 0x04000000L #define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE 0x08000000L -// -// ZCmpCaps, AlphaCmpCaps -// +/* + * ZCmpCaps, AlphaCmpCaps + */ #define D3DPCMPCAPS_NEVER 0x00000001L #define D3DPCMPCAPS_LESS 0x00000002L #define D3DPCMPCAPS_EQUAL 0x00000004L @@ -378,9 +369,9 @@ typedef struct _D3DCAPS9 #define D3DPCMPCAPS_GREATEREQUAL 0x00000040L #define D3DPCMPCAPS_ALWAYS 0x00000080L -// -// SourceBlendCaps, DestBlendCaps -// +/* + * SourceBlendCaps, DestBlendCaps + */ #define D3DPBLENDCAPS_ZERO 0x00000001L #define D3DPBLENDCAPS_ONE 0x00000002L #define D3DPBLENDCAPS_SRCCOLOR 0x00000004L @@ -402,31 +393,32 @@ typedef struct _D3DCAPS9 #define D3DPBLENDCAPS_SRCCOLOR2 0x00004000L #define D3DPBLENDCAPS_INVSRCCOLOR2 0x00008000L -#endif // !D3D_DISABLE_9EX +#endif /* !D3D_DISABLE_9EX */ /* -- D3D9Ex only */ - -// -// ShadeCaps -// +/* + * ShadeCaps + */ #define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008L #define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200L #define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000L #define D3DPSHADECAPS_FOGGOURAUD 0x00080000L -// -// TextureCaps -// +/* + * TextureCaps + */ #define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001L /* Perspective-correct texturing is supported */ #define D3DPTEXTURECAPS_POW2 0x00000002L /* Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. */ #define D3DPTEXTURECAPS_ALPHA 0x00000004L /* Alpha in texture pixels is supported */ #define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L /* Only square textures are supported */ #define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L /* Texture indices are not scaled by the texture size prior to interpolation */ #define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080L /* Device can draw alpha from texture palettes */ -// Device can use non-POW2 textures if: -// 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage -// 2) D3DRS_WRAP(N) is zero for this texture's coordinates -// 3) mip mapping is not enabled (use magnification filter only) + +/* Device can use non-POW2 textures if: + * 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage + * 2) D3DRS_WRAP(N) is zero for this texture's coordinates + * 3) mip mapping is not enabled (use magnification filter only) + */ #define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L #define D3DPTEXTURECAPS_PROJECTED 0x00000400L /* Device can do D3DTTFF_PROJECTED */ #define D3DPTEXTURECAPS_CUBEMAP 0x00000800L /* Device can do cubemap textures */ @@ -439,9 +431,9 @@ typedef struct _D3DCAPS9 #define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV 0x00200000L /* Device does not support projected bump env lookup operation in programmable and fixed function pixel shaders */ -// -// TextureFilterCaps, StretchRectFilterCaps -// +/* + * TextureFilterCaps, StretchRectFilterCaps + */ #define D3DPTFILTERCAPS_MINFPOINT 0x00000100L /* Min Filter */ #define D3DPTFILTERCAPS_MINFLINEAR 0x00000200L #define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L @@ -455,7 +447,7 @@ typedef struct _D3DCAPS9 #define D3DPTFILTERCAPS_CONVOLUTIONMONO 0x00040000L /* Min and Mag for the convolution mono filter */ -#endif // !D3D_DISABLE_9EX +#endif /* !D3D_DISABLE_9EX */ /* -- D3D9Ex only */ #define D3DPTFILTERCAPS_MAGFPOINT 0x01000000L /* Mag Filter */ @@ -464,9 +456,9 @@ typedef struct _D3DCAPS9 #define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD 0x08000000L #define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD 0x10000000L -// -// TextureAddressCaps -// +/* + * TextureAddressCaps + */ #define D3DPTADDRESSCAPS_WRAP 0x00000001L #define D3DPTADDRESSCAPS_MIRROR 0x00000002L #define D3DPTADDRESSCAPS_CLAMP 0x00000004L @@ -474,9 +466,9 @@ typedef struct _D3DCAPS9 #define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010L #define D3DPTADDRESSCAPS_MIRRORONCE 0x00000020L -// -// StencilCaps -// +/* + * StencilCaps + */ #define D3DSTENCILCAPS_KEEP 0x00000001L #define D3DSTENCILCAPS_ZERO 0x00000002L #define D3DSTENCILCAPS_REPLACE 0x00000004L @@ -487,9 +479,9 @@ typedef struct _D3DCAPS9 #define D3DSTENCILCAPS_DECR 0x00000080L #define D3DSTENCILCAPS_TWOSIDED 0x00000100L -// -// TextureOpCaps -// +/* + * TextureOpCaps + */ #define D3DTEXOPCAPS_DISABLE 0x00000001L #define D3DTEXOPCAPS_SELECTARG1 0x00000002L #define D3DTEXOPCAPS_SELECTARG2 0x00000004L @@ -517,16 +509,16 @@ typedef struct _D3DCAPS9 #define D3DTEXOPCAPS_MULTIPLYADD 0x01000000L #define D3DTEXOPCAPS_LERP 0x02000000L -// -// FVFCaps -// +/* + * FVFCaps + */ #define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000ffffL /* mask for texture coordinate count field */ #define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000L /* Device prefers that vertex elements not be stripped */ #define D3DFVFCAPS_PSIZE 0x00100000L /* Device can receive point size */ -// -// VertexProcessingCaps -// +/* + * VertexProcessingCaps + */ #define D3DVTXPCAPS_TEXGEN 0x00000001L /* device can do texgen */ #define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002L /* device can do DX7-level colormaterialsource ops */ #define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008L /* device can do directional lights */ @@ -537,9 +529,9 @@ typedef struct _D3DCAPS9 #define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER 0x00000200L /* device does not support TexGen in non-local viewer mode */ -// -// DevCaps2 -// +/* + * DevCaps2 + */ #define D3DDEVCAPS2_STREAMOFFSET 0x00000001L /* Device supports offsets in streams. Must be set by DX9 drivers */ #define D3DDEVCAPS2_DMAPNPATCH 0x00000002L /* Device supports displacement maps for N-Patches*/ #define D3DDEVCAPS2_ADAPTIVETESSRTPATCH 0x00000004L /* Device supports adaptive tesselation of RT-patches*/ @@ -548,9 +540,9 @@ typedef struct _D3DCAPS9 #define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH 0x00000020L /* Device supports presampled displacement maps for N-Patches */ #define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 0x00000040L /* Vertex elements in a vertex declaration can share the same stream offset */ -// -// DeclTypes -// +/* + * DeclTypes + */ #define D3DDTCAPS_UBYTE4 0x00000001L #define D3DDTCAPS_UBYTE4N 0x00000002L #define D3DDTCAPS_SHORT2N 0x00000004L diff --git a/gfx/include/d3d9types.h b/gfx/include/d3d9types.h index 80fabba9e8..b4b9a94ddf 100644 --- a/gfx/include/d3d9types.h +++ b/gfx/include/d3d9types.h @@ -565,25 +565,25 @@ typedef enum _D3DTEXTUREOP D3DTOP_MODULATE4X = 6, /* multiply and 2 bits */ /* Add */ - D3DTOP_ADD = 7, // add arguments together - D3DTOP_ADDSIGNED = 8, // add with -0.5 bias - D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit - D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation - D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product - // Arg1 + Arg2 - Arg1*Arg2 - // = Arg1 + (1-Arg1)*Arg2 + D3DTOP_ADD = 7, /* add arguments together */ + D3DTOP_ADDSIGNED = 8, /* add with -0.5 bias */ + D3DTOP_ADDSIGNED2X = 9, /* as above but left 1 bit */ + D3DTOP_SUBTRACT = 10, /* Arg1 - Arg2, with no saturation */ + D3DTOP_ADDSMOOTH = 11, /* add 2 args, subtract product */ + /* Arg1 + Arg2 - Arg1*Arg2 */ + /* = Arg1 + (1-Arg1)*Arg2 */ - // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) - D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha - D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha - D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRS_TEXTUREFACTOR + /* Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) */ + D3DTOP_BLENDDIFFUSEALPHA = 12, /* iterated alpha */ + D3DTOP_BLENDTEXTUREALPHA = 13, /* texture alpha */ + D3DTOP_BLENDFACTORALPHA = 14, /* alpha from D3DRS_TEXTUREFACTOR */ - // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha) - D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha - D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color + /* Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha) */ + D3DTOP_BLENDTEXTUREALPHAPM = 15, /* texture alpha */ + D3DTOP_BLENDCURRENTALPHA = 16, /* by alpha of current color */ - // Specular mapping - D3DTOP_PREMODULATE = 17, // modulate with next texture before use + /* Specular mapping */ + D3DTOP_PREMODULATE = 17, /* modulate with next texture before use */ D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB // COLOROP only D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A @@ -1601,10 +1601,11 @@ typedef enum _D3DRESOURCETYPE { #endif /* !D3D_DISABLE_9EX */ /* -- D3D9Ex only */ -// When passed to CheckDeviceFormat, D3DUSAGE_AUTOGENMIPMAP may return -// D3DOK_NOAUTOGEN if the device doesn't support autogeneration for that format. -// D3DOK_NOAUTOGEN is a success code, not a failure code... the SUCCEEDED and FAILED macros -// will return true and false respectively for this code. +/* When passed to CheckDeviceFormat, D3DUSAGE_AUTOGENMIPMAP may return + * D3DOK_NOAUTOGEN if the device doesn't support autogeneration for that format. + * D3DOK_NOAUTOGEN is a success code, not a failure code... the SUCCEEDED and FAILED macros + * will return true and false respectively for this code. + */ #define D3DUSAGE_AUTOGENMIPMAP (0x00000400L) #define D3DUSAGE_DMAP (0x00004000L) From 863858ab0095c8f792b212fe86487e19657fc8d5 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:42:37 +0100 Subject: [PATCH 80/85] Can't have anonymous variadic macros in C89 --- cheevos/var.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cheevos/var.c b/cheevos/var.c index 36828b46b3..45ae9ac866 100644 --- a/cheevos/var.c +++ b/cheevos/var.c @@ -24,10 +24,15 @@ #include "../core.h" #include "../verbosity.h" +static void STUB_LOG(const char *fmt, ...) +{ + (void)fmt; +} + #ifdef CHEEVOS_VERBOSE #define CHEEVOS_LOG RARCH_LOG #else -#define CHEEVOS_LOG(...) +#define CHEEVOS_LOG STUB_LOG #endif /***************************************************************************** From f9fa2ab2b78bd806401fa4331eed57aac9034c54 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:44:05 +0100 Subject: [PATCH 81/85] More C89_BUILD fixes --- cheevos/cheevos.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index b9df229ac7..87517d6164 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -1872,8 +1872,10 @@ static int cheevos_expr_value(cheevos_expr_t* expr) if (expr->compare_count > 1) { + unsigned j; int maximum = values[0]; - for (unsigned j = 1; j < expr->compare_count; j++) + + for (j = 1; j < expr->compare_count; j++) maximum = values[j] > maximum ? values[j] : maximum; return maximum; @@ -3171,10 +3173,12 @@ static int cheevos_iterate(coro_t* coro) badges_ctx = new_badges_ctx; - settings_t *settings = config_get_ptr(); - if (!string_is_equal(settings->arrays.menu_driver, "xmb") || - !settings->bools.cheevos_badges_enable) - CORO_RET(); + { + settings_t *settings = config_get_ptr(); + if (!string_is_equal(settings->arrays.menu_driver, "xmb") || + !settings->bools.cheevos_badges_enable) + CORO_RET(); + } CHEEVOS_VAR_CHEEVO_CURR = cheevos_locals.core.cheevos; CHEEVOS_VAR_CHEEVO_END = cheevos_locals.core.cheevos + cheevos_locals.core.count; From 32c1c3134ef79178cdfbd4742c94df980e85eca1 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:45:57 +0100 Subject: [PATCH 82/85] Fix another C89 issue --- cheevos/badges.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cheevos/badges.c b/cheevos/badges.c index 961fbc600e..5ac1112222 100644 --- a/cheevos/badges.c +++ b/cheevos/badges.c @@ -21,15 +21,16 @@ bool badge_exists(const char* filepath) void set_badge_menu_texture(badges_ctx_t * badges, int i) { + char fullpath[PATH_MAX_LENGTH]; const char * locked_suffix = (badges->badge_locked[i] == true) ? "_lock.png" : ".png"; unsigned int bufferSize = 16; + /* TODO/FIXME - variable length forbidden in C89 - rewrite this! */ char badge_file[bufferSize]; snprintf(badge_file, bufferSize, "%s", badges->badge_id_list[i]); strcat(badge_file, locked_suffix); - char fullpath[PATH_MAX_LENGTH]; fill_pathname_application_special(fullpath, PATH_MAX_LENGTH * sizeof(char), APPLICATION_SPECIAL_DIRECTORY_THUMBNAILS_CHEEVOS_BADGES); From b69622ea885114491d6198a356e94f0cf6e9d28b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 16:56:33 +0100 Subject: [PATCH 83/85] Avoid usage of GLsync type --- gfx/drivers_renderchain/gl2_renderchain.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 1b246ce143..62ebde2275 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -70,7 +70,7 @@ typedef struct gl2_renderchain unsigned fence_count; - GLsync fences[MAX_FENCES]; + void *fences[MAX_FENCES]; struct gfx_fbo_scale fbo_scale[GFX_MAX_SHADERS]; } gl2_renderchain_t; @@ -1454,7 +1454,7 @@ static void gl2_renderchain_fence_iterate( chain->fence_count--; memmove(chain->fences, chain->fences + 1, - chain->fence_count * sizeof(GLsync)); + chain->fence_count * sizeof(void*)); } } From 763e6f766c921de5cf1254a5ea333f3f29a23000 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Tue, 5 Dec 2017 16:58:20 +0100 Subject: [PATCH 84/85] Silence warning --- gfx/drivers_renderchain/gl2_renderchain.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 62ebde2275..99913d414e 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -1264,6 +1264,8 @@ static void gl2_renderchain_copy_frame( { gl_t *gl = (gl_t*)data; gl2_renderchain_t *chain = (gl2_renderchain_t*)chain_data; + + (void)chain; #if defined(HAVE_PSGL) { From db4387bd30d6d016f88fedf02e3fad075065f6f2 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 5 Dec 2017 17:10:31 +0100 Subject: [PATCH 85/85] See if it's always defined this way --- gfx/drivers_renderchain/gl2_renderchain.c | 2 +- gfx/include/GL/glext.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gfx/drivers_renderchain/gl2_renderchain.c b/gfx/drivers_renderchain/gl2_renderchain.c index 99913d414e..d2a4d2c3a1 100644 --- a/gfx/drivers_renderchain/gl2_renderchain.c +++ b/gfx/drivers_renderchain/gl2_renderchain.c @@ -70,7 +70,7 @@ typedef struct gl2_renderchain unsigned fence_count; - void *fences[MAX_FENCES]; + GLsync fences[MAX_FENCES]; struct gfx_fbo_scale fbo_scale[GFX_MAX_SHADERS]; } gl2_renderchain_t; diff --git a/gfx/include/GL/glext.h b/gfx/include/GL/glext.h index 44ab7c62e1..a1381696b4 100644 --- a/gfx/include/GL/glext.h +++ b/gfx/include/GL/glext.h @@ -6220,8 +6220,8 @@ typedef uint64_t GLuint64EXT; #ifndef GL_ARB_sync typedef int64_t GLint64; typedef uint64_t GLuint64; -typedef struct __GLsync *GLsync; #endif +typedef struct __GLsync *GLsync; #ifndef GL_ARB_cl_event /* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */