From ed92e4a776431b12c75435b717b396e9ae6dbb58 Mon Sep 17 00:00:00 2001 From: notaz Date: Tue, 27 Jan 2026 03:22:02 +0200 Subject: [PATCH] gpulib: pass gpu to vout funcs --- plugins/gpulib/gpu.c | 4 +-- plugins/gpulib/gpu.h | 4 +-- plugins/gpulib/vout_pl.c | 78 ++++++++++++++++++++-------------------- 3 files changed, 42 insertions(+), 44 deletions(-) diff --git a/plugins/gpulib/gpu.c b/plugins/gpulib/gpu.c index 49de0550..3285c6c6 100644 --- a/plugins/gpulib/gpu.c +++ b/plugins/gpulib/gpu.c @@ -1105,7 +1105,7 @@ void GPUupdateLace(void) #ifndef RAW_FB_DISPLAY if (gpu.status & PSX_GPU_STATUS_BLANKING) { if (!gpu.state.blanked) { - vout_blank(); + vout_blank(&gpu); gpu.state.blanked = 1; gpu.state.fb_dirty_display_area = 1; } @@ -1127,7 +1127,7 @@ void GPUupdateLace(void) else renderer_flush_queues(); - updated = vout_update(); + updated = vout_update(&gpu, gpu.screen.src_x, gpu.screen.src_y); if (gpu.state.enhancement_active && !gpu.state.enhancement_was_active) { gpu_async_sync(&gpu); renderer_update_caches(0, 0, 1024, 512, 1); diff --git a/plugins/gpulib/gpu.h b/plugins/gpulib/gpu.h index a3d73dae..66d2e398 100644 --- a/plugins/gpulib/gpu.h +++ b/plugins/gpulib/gpu.h @@ -153,8 +153,8 @@ void renderer_notify_screen_change(const struct psx_gpu_screen *screen); int vout_init(void); int vout_finish(void); -int vout_update(void); -void vout_blank(void); +int vout_update(struct psx_gpu *gpu, int src_x, int src_y); +void vout_blank(struct psx_gpu *gpu); void vout_set_config(const struct rearmed_cbs *config); // helpers diff --git a/plugins/gpulib/vout_pl.c b/plugins/gpulib/vout_pl.c index 1baf9435..90c44cb3 100644 --- a/plugins/gpulib/vout_pl.c +++ b/plugins/gpulib/vout_pl.c @@ -25,56 +25,54 @@ int vout_finish(void) return 0; } -static void check_mode_change(int force) +static void check_mode_change(struct psx_gpu *gpu, int force) { - int w = gpu.screen.hres; - int h = gpu.screen.vres; + int w = gpu->screen.hres; + int h = gpu->screen.vres; int w_out, h_out, bpp = 16; - if (gpu.state.screen_centering_type == C_BORDERLESS) - h = gpu.screen.h; + if (gpu->state.screen_centering_type == C_BORDERLESS) + h = gpu->screen.h; w_out = w, h_out = h; #ifdef RAW_FB_DISPLAY w = w_out = (gpu.status & PSX_GPU_STATUS_RGB24) ? 2048/3 : 1024; h = h_out = 512; #endif - gpu.state.enhancement_active = - gpu.get_enhancement_bufer != NULL && gpu.state.enhancement_enable - && w <= 512 && h <= 256 && !(gpu.status & PSX_GPU_STATUS_RGB24); + gpu->state.enhancement_active = + gpu->get_enhancement_bufer != NULL && gpu->state.enhancement_enable + && w <= 512 && h <= 256 && !(gpu->status & PSX_GPU_STATUS_RGB24); - if (gpu.state.enhancement_active) { + if (gpu->state.enhancement_active) { w_out *= 2; h_out *= 2; } - if (gpu.status & PSX_GPU_STATUS_RGB24) { + if (gpu->status & PSX_GPU_STATUS_RGB24) { // some asm relies on this alignment w_out = (w_out + 7) & ~7; bpp = 24; } // width|rgb24 change? - if (force || (gpu.status ^ gpu.state.status_vo_old) & ((7<<16)|(1<<21)) - || w_out != gpu.state.w_out_old || h_out != gpu.state.h_out_old) + if (force || (gpu->status ^ gpu->state.status_vo_old) & ((7<<16)|(1<<21)) + || w_out != gpu->state.w_out_old || h_out != gpu->state.h_out_old) { - gpu.state.status_vo_old = gpu.status; - gpu.state.w_out_old = w_out; - gpu.state.h_out_old = h_out; + gpu->state.status_vo_old = gpu->status; + gpu->state.w_out_old = w_out; + gpu->state.h_out_old = h_out; if (w_out != 0 && h_out != 0) cbs->pl_vout_set_mode(w_out, h_out, w, h, bpp); } } -int vout_update(void) +int vout_update(struct psx_gpu *gpu, int src_x, int src_y) { - int bpp = (gpu.status & PSX_GPU_STATUS_RGB24) ? 24 : 16; - uint8_t *vram = (uint8_t *)gpu.vram; - int src_x = gpu.screen.src_x; - int src_y = gpu.screen.src_y; - int x = gpu.screen.x; - int y = gpu.screen.y; - int w = gpu.screen.w; - int h = gpu.screen.h; + int bpp = (gpu->status & PSX_GPU_STATUS_RGB24) ? 24 : 16; + uint8_t *vram = (uint8_t *)gpu->vram; + int x = gpu->screen.x; + int y = gpu->screen.y; + int w = gpu->screen.w; + int h = gpu->screen.h; int vram_h = 512; int src_x2 = 0; int offset; @@ -89,11 +87,11 @@ int vout_update(void) if (w <= 0 || h <= 0) return 0; - check_mode_change(0); - if (gpu.state.enhancement_active) { - if (!gpu.state.enhancement_was_active) + check_mode_change(gpu, 0); + if (gpu->state.enhancement_active) { + if (!gpu->state.enhancement_was_active) return 0; // buffer not ready yet - vram = gpu.get_enhancement_bufer(&src_x, &src_y, &w, &h, &vram_h); + vram = gpu->get_enhancement_bufer(&src_x, &src_y, &w, &h, &vram_h); if (vram == NULL) return 0; x *= 2; y *= 2; @@ -112,29 +110,29 @@ int vout_update(void) } // gpu_unai skips drawing odd lines - if (h > 256 && gpu.state.downscale_enable && (src_y & 1)) + if (h > 256 && gpu->state.downscale_enable && (src_y & 1)) src_y++; offset = (src_y * 1024 + src_x) * 2; offset += src_x2 * bpp / 8; - cbs->pl_vout_flip(vram, offset, !!(gpu.status & PSX_GPU_STATUS_RGB24), - x, y, w, h, gpu.state.dims_changed); - gpu.state.dims_changed = 0; + cbs->pl_vout_flip(vram, offset, !!(gpu->status & PSX_GPU_STATUS_RGB24), + x, y, w, h, gpu->state.dims_changed); + gpu->state.dims_changed = 0; return 1; } -void vout_blank(void) +void vout_blank(struct psx_gpu *gpu) { - int w = gpu.screen.hres; - int h = gpu.screen.vres; + int w = gpu->screen.hres; + int h = gpu->screen.vres; - check_mode_change(0); - if (gpu.state.enhancement_active) { + check_mode_change(gpu, 0); + if (gpu->state.enhancement_active) { w *= 2; h *= 2; } - cbs->pl_vout_flip(NULL, 0, !!(gpu.status & PSX_GPU_STATUS_RGB24), 0, 0, w, h, 0); + cbs->pl_vout_flip(NULL, 0, !!(gpu->status & PSX_GPU_STATUS_RGB24), 0, 0, w, h, 0); } long GPUopen(unsigned long *disp, char *cap, char *cfg) @@ -143,8 +141,8 @@ long GPUopen(unsigned long *disp, char *cap, char *cfg) gpu.frameskip.frame_ready = 1; cbs->pl_vout_open(); - check_mode_change(1); - vout_update(); + check_mode_change(&gpu, 1); + vout_update(&gpu, gpu.screen.src_x, gpu.screen.src_y); return 0; } -- 2.47.3