Move fence variables to renderchain data struct

This commit is contained in:
twinaphex 2017-12-04 12:02:53 +01:00
parent 072570bbf3
commit 267e6fe85f
2 changed files with 20 additions and 20 deletions

View File

@ -38,8 +38,6 @@
RETRO_BEGIN_DECLS RETRO_BEGIN_DECLS
#define MAX_FENCES 4
#if defined(HAVE_PSGL) #if defined(HAVE_PSGL)
#define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_OES #define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_OES
#define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_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 video_fbo_rect fbo_rect[GFX_MAX_SHADERS];
struct gfx_fbo_scale fbo_scale[GFX_MAX_SHADERS]; struct gfx_fbo_scale fbo_scale[GFX_MAX_SHADERS];
GLsync fences[MAX_FENCES];
const gl_renderchain_driver_t *renderchain_driver; const gl_renderchain_driver_t *renderchain_driver;
void *renderchain_data; void *renderchain_data;
} gl_t; } gl_t;

View File

@ -51,9 +51,12 @@
#include "../../configuration.h" #include "../../configuration.h"
#include "../../verbosity.h" #include "../../verbosity.h"
#define MAX_FENCES 4
typedef struct gl2_renderchain typedef struct gl2_renderchain
{ {
void *empty; unsigned fence_count;
GLsync fences[MAX_FENCES];
} gl2_renderchain_t; } gl2_renderchain_t;
#if (!defined(HAVE_OPENGLES) || defined(HAVE_OPENGLES3)) #if (!defined(HAVE_OPENGLES) || defined(HAVE_OPENGLES3))
@ -1144,12 +1147,12 @@ error:
void gl2_renderchain_free_internal(void *data, void *chain_data) 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; return;
free(cg_data); free(chain);
} }
static void *gl2_renderchain_new(void) static void *gl2_renderchain_new(void)
@ -1399,20 +1402,20 @@ static void gl2_renderchain_fence_iterate(
void *chain_data, void *chain_data,
unsigned hard_sync_frames) 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); 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); GL_SYNC_FLUSH_COMMANDS_BIT, 1000000000);
glDeleteSync(gl->fences[0]); glDeleteSync(chain->fences[0]);
gl->fence_count--; chain->fence_count--;
memmove(gl->fences, gl->fences + 1, memmove(chain->fences, chain->fences + 1,
gl->fence_count * sizeof(GLsync)); chain->fence_count * sizeof(GLsync));
} }
} }
@ -1420,15 +1423,15 @@ static void gl2_renderchain_fence_free(void *data,
void *chain_data) void *chain_data)
{ {
unsigned i; 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); GL_SYNC_FLUSH_COMMANDS_BIT, 1000000000);
glDeleteSync(gl->fences[i]); glDeleteSync(chain->fences[i]);
} }
gl->fence_count = 0; chain->fence_count = 0;
} }
#endif #endif