Skip to content

Commit 09fb6f8

Browse files
mardyWinterMute
authored andcommitted
ogc: reduces number of copies from EFB to texture
Instead of copying at the end of every command queue flush, copy the EFB to the texture only when the texture stops being a render target. Unfortunately SDL invokes the SetRenderTarget() method after having updated the render target pointer, forcing us to keep our own copy of it.
1 parent 9a75968 commit 09fb6f8

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

src/render/ogc/SDL_render_ogc.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ typedef struct
4444
int ops_after_present;
4545
bool vsync;
4646
u8 efb_pixel_format;
47+
SDL_Texture *render_target;
4748
} OGC_RenderData;
4849

4950
typedef struct
@@ -101,9 +102,8 @@ static inline void OGC_SetBlendMode(SDL_Renderer *renderer, SDL_BlendMode blend_
101102
set_blend_mode_real(renderer, blend_mode);
102103
}
103104

104-
static void save_efb_to_texture(SDL_Renderer *renderer)
105+
static void save_efb_to_texture(SDL_Texture *texture)
105106
{
106-
SDL_Texture *texture = renderer->target;
107107
OGC_TextureData *ogc_tex = texture->driverdata;
108108

109109
GX_SetTexCopySrc(0, 0, texture->w, texture->h);
@@ -218,8 +218,12 @@ static int OGC_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
218218
if (SDL_ISPIXELFORMAT_ALPHA(texture->format)) {
219219
desired_efb_pixel_format = GX_PF_RGBA6_Z24;
220220
}
221+
} else if (data->render_target) {
222+
save_efb_to_texture(data->render_target);
221223
}
222224

225+
data->render_target = texture;
226+
223227
if (desired_efb_pixel_format != data->efb_pixel_format) {
224228
data->efb_pixel_format = desired_efb_pixel_format;
225229
GX_SetPixelFmt(data->efb_pixel_format, GX_ZC_LINEAR);
@@ -525,10 +529,6 @@ static int OGC_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cmd, v
525529
cmd = cmd->next;
526530
}
527531

528-
if (renderer->target) {
529-
save_efb_to_texture(renderer);
530-
}
531-
532532
return 0;
533533
}
534534

0 commit comments

Comments
 (0)