SDL: remove sceGxmFinish on render swap

From f623211eea764d6c13313881cf25cc8719be9576 Mon Sep 17 00:00:00 2001
From: Ivan Epifanov <[EMAIL REDACTED]>
Date: Wed, 25 Nov 2020 00:29:04 +0300
Subject: [PATCH] remove sceGxmFinish on render swap

---
 src/render/vitagxm/SDL_render_vita_gxm.c      |  5 ++++-
 .../vitagxm/SDL_render_vita_gxm_tools.c       | 20 ++++++++++++++-----
 .../vitagxm/SDL_render_vita_gxm_types.h       |  5 +++--
 3 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/src/render/vitagxm/SDL_render_vita_gxm.c b/src/render/vitagxm/SDL_render_vita_gxm.c
index e1d9a9bbf..d27174357 100644
--- a/src/render/vitagxm/SDL_render_vita_gxm.c
+++ b/src/render/vitagxm/SDL_render_vita_gxm.c
@@ -980,7 +980,7 @@ VITA_GXM_RenderPresent(SDL_Renderer *renderer)
 {
     VITA_GXM_RenderData *data = (VITA_GXM_RenderData *) renderer->driverdata;
 
-    sceGxmFinish(data->gxm_context);
+//    sceGxmFinish(data->gxm_context);
 
     data->displayData.address = data->displayBufferData[data->backBufferIndex];
 
@@ -994,6 +994,9 @@ VITA_GXM_RenderPresent(SDL_Renderer *renderer)
     data->frontBufferIndex = data->backBufferIndex;
     data->backBufferIndex = (data->backBufferIndex + 1) % VITA_GXM_BUFFERS;
     data->pool_index = 0;
+
+    data->current_pool = (data->current_pool + 1) % 2;
+
     data->drawing = SDL_FALSE;
 }
 
diff --git a/src/render/vitagxm/SDL_render_vita_gxm_tools.c b/src/render/vitagxm/SDL_render_vita_gxm_tools.c
index f410595cb..12065cedf 100644
--- a/src/render/vitagxm/SDL_render_vita_gxm_tools.c
+++ b/src/render/vitagxm/SDL_render_vita_gxm_tools.c
@@ -88,7 +88,7 @@ pool_malloc(VITA_GXM_RenderData *data, unsigned int size)
 {
 
     if ((data->pool_index + size) < VITA_GXM_POOL_SIZE) {
-        void *addr = (void *)((unsigned int)data->pool_addr + data->pool_index);
+        void *addr = (void *)((unsigned int)data->pool_addr[data->current_pool] + data->pool_index);
         data->pool_index += size;
         return addr;
     }
@@ -101,7 +101,7 @@ pool_memalign(VITA_GXM_RenderData *data, unsigned int size, unsigned int alignme
 {
     unsigned int new_index = (data->pool_index + alignment - 1) & ~(alignment - 1);
     if ((new_index + size) < VITA_GXM_POOL_SIZE) {
-        void *addr = (void *)((unsigned int)data->pool_addr + new_index);
+        void *addr = (void *)((unsigned int)data->pool_addr[data->current_pool] + new_index);
         data->pool_index = new_index + size;
         return addr;
     }
@@ -863,12 +863,20 @@ gxm_init(SDL_Renderer *renderer)
     data->textureTintColorParam = (SceGxmProgramParameter *)sceGxmProgramFindParameterByName(textureTintFragmentProgramGxp, "uTintColor");
 
     // Allocate memory for the memory pool
-    data->pool_addr = mem_gpu_alloc(
+    data->pool_addr[0] = mem_gpu_alloc(
         SCE_KERNEL_MEMBLOCK_TYPE_USER_RW,
         VITA_GXM_POOL_SIZE,
         sizeof(void *),
         SCE_GXM_MEMORY_ATTRIB_READ,
-        &data->poolUid
+        &data->poolUid[0]
+    );
+
+    data->pool_addr[1] = mem_gpu_alloc(
+        SCE_KERNEL_MEMBLOCK_TYPE_USER_RW,
+        VITA_GXM_POOL_SIZE,
+        sizeof(void *),
+        SCE_GXM_MEMORY_ATTRIB_READ,
+        &data->poolUid[1]
     );
 
     init_orthographic_matrix(data->ortho_matrix, 0.0f, VITA_GXM_SCREEN_WIDTH, VITA_GXM_SCREEN_HEIGHT, 0.0f, 0.0f, 1.0f);
@@ -876,6 +884,7 @@ gxm_init(SDL_Renderer *renderer)
     data->backBufferIndex = 0;
     data->frontBufferIndex = 0;
     data->pool_index = 0;
+    data->current_pool = 0;
     data->currentBlendMode = SDL_BLENDMODE_BLEND;
 
     return 0;
@@ -949,7 +958,8 @@ void gxm_finish(SDL_Renderer *renderer)
     mem_gpu_free(data->vdmRingBufferUid);
     SDL_free(data->contextParams.hostMem);
 
-    mem_gpu_free(data->poolUid);
+    mem_gpu_free(data->poolUid[0]);
+    mem_gpu_free(data->poolUid[1]);
 
     // terminate libgxm
     sceGxmTerminate();
diff --git a/src/render/vitagxm/SDL_render_vita_gxm_types.h b/src/render/vitagxm/SDL_render_vita_gxm_types.h
index 64a323e35..fa146acb4 100644
--- a/src/render/vitagxm/SDL_render_vita_gxm_types.h
+++ b/src/render/vitagxm/SDL_render_vita_gxm_types.h
@@ -152,9 +152,10 @@ typedef struct
     unsigned int backBufferIndex;
     unsigned int frontBufferIndex;
 
-    void* pool_addr;
-    SceUID poolUid;
+    void* pool_addr[2];
+    SceUID poolUid[2];
     unsigned int pool_index;
+    unsigned int current_pool;
 
     float ortho_matrix[4*4];