From f3b6d50d99cc517aa117cde4a3057aaf420951a1 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Fri, 26 Jul 2024 17:21:01 -0700 Subject: [PATCH] nv2a: Merge renderer init, init_thread methods --- hw/xbox/nv2a/pgraph/gl/display.c | 4 ++++ hw/xbox/nv2a/pgraph/gl/renderer.c | 16 +++------------- hw/xbox/nv2a/pgraph/pgraph.c | 8 ++------ hw/xbox/nv2a/pgraph/pgraph.h | 1 - hw/xbox/nv2a/pgraph/vk/renderer.c | 16 +++++----------- 5 files changed, 14 insertions(+), 31 deletions(-) diff --git a/hw/xbox/nv2a/pgraph/gl/display.c b/hw/xbox/nv2a/pgraph/gl/display.c index ed0992e883..23472ac4e1 100644 --- a/hw/xbox/nv2a/pgraph/gl/display.c +++ b/hw/xbox/nv2a/pgraph/gl/display.c @@ -30,6 +30,8 @@ void pgraph_gl_init_display_renderer(NV2AState *d) struct PGRAPHState *pg = &d->pgraph; PGRAPHGLState *r = pg->gl_renderer_state; + glo_set_current(g_nv2a_context_display); + glGenTextures(1, &r->gl_display_buffer); r->gl_display_buffer_internal_format = 0; r->gl_display_buffer_width = 0; @@ -100,6 +102,8 @@ void pgraph_gl_init_display_renderer(NV2AState *d) glGenFramebuffers(1, &r->disp_rndr.fbo); glGenTextures(1, &r->disp_rndr.pvideo_tex); assert(glGetError() == GL_NO_ERROR); + + glo_set_current(g_nv2a_context_render); } void pgraph_gl_finalize_display(PGRAPHState *pg) diff --git a/hw/xbox/nv2a/pgraph/gl/renderer.c b/hw/xbox/nv2a/pgraph/gl/renderer.c index 930e4454c1..d65b8cdeff 100644 --- a/hw/xbox/nv2a/pgraph/gl/renderer.c +++ b/hw/xbox/nv2a/pgraph/gl/renderer.c @@ -27,7 +27,7 @@ GloContext *g_nv2a_context_render; GloContext *g_nv2a_context_display; -static void nv2a_gl_context_init(void) +static void early_context_init(void) { g_nv2a_context_render = glo_context_create(); g_nv2a_context_display = glo_context_create(); @@ -56,23 +56,14 @@ static void pgraph_gl_init(NV2AState *d) pgraph_gl_init_texture_cache(d); pgraph_gl_init_vertex_cache(d); pgraph_gl_init_shader_cache(pg); - - glo_set_current(g_nv2a_context_display); pgraph_gl_init_display_renderer(d); pgraph_gl_update_entire_memory_buffer(d); - glo_set_current(NULL); - pg->uniform_attrs = 0; pg->swizzle_attrs = 0; } -static void pgraph_gl_init_thread(NV2AState *d) -{ - glo_set_current(g_nv2a_context_render); -} - static void pgraph_gl_finalize(NV2AState *d) { PGRAPHState *pg = &d->pgraph; @@ -172,7 +163,7 @@ static void pgraph_gl_pre_shutdown_wait(NV2AState *d) PGRAPHState *pg = &d->pgraph; PGRAPHGLState *r = pg->gl_renderer_state; - qemu_event_wait(&r->shader_cache_writeback_complete); + qemu_event_wait(&r->shader_cache_writeback_complete); } static PGRAPHRenderer pgraph_gl_renderer = { @@ -180,8 +171,7 @@ static PGRAPHRenderer pgraph_gl_renderer = { .name = "OpenGL", .ops = { .init = pgraph_gl_init, - .early_context_init = nv2a_gl_context_init, - .init_thread = pgraph_gl_init_thread, + .early_context_init = early_context_init, .finalize = pgraph_gl_finalize, .clear_report_value = pgraph_gl_clear_report_value, .clear_surface = pgraph_gl_clear_surface, diff --git a/hw/xbox/nv2a/pgraph/pgraph.c b/hw/xbox/nv2a/pgraph/pgraph.c index 26fe4f7ac2..e66dd86039 100644 --- a/hw/xbox/nv2a/pgraph/pgraph.c +++ b/hw/xbox/nv2a/pgraph/pgraph.c @@ -240,7 +240,6 @@ void pgraph_init(NV2AState *d) pgraph_clear_dirty_reg_map(pg); pg->renderer = renderers[g_config.display.renderer]; - pg->renderer->ops.init(d); } void pgraph_clear_dirty_reg_map(PGRAPHState *pg) @@ -250,8 +249,8 @@ void pgraph_clear_dirty_reg_map(PGRAPHState *pg) void pgraph_init_thread(NV2AState *d) { - if (d->pgraph.renderer->ops.init_thread) { - d->pgraph.renderer->ops.init_thread(d); + if (d->pgraph.renderer->ops.init) { + d->pgraph.renderer->ops.init(d); } } @@ -2926,9 +2925,6 @@ void pgraph_process_pending(NV2AState *d) if (pg->renderer->ops.init) { pg->renderer->ops.init(d); } - if (pg->renderer->ops.init_thread) { - pg->renderer->ops.init_thread(d); - } qemu_mutex_unlock(&d->pgraph.renderer_lock); qemu_mutex_unlock(&d->pgraph.lock); diff --git a/hw/xbox/nv2a/pgraph/pgraph.h b/hw/xbox/nv2a/pgraph/pgraph.h index 6d6d04cdd1..576cefcdb0 100644 --- a/hw/xbox/nv2a/pgraph/pgraph.h +++ b/hw/xbox/nv2a/pgraph/pgraph.h @@ -101,7 +101,6 @@ typedef struct PGRAPHRenderer { struct { void (*early_context_init)(void); void (*init)(NV2AState *d); - void (*init_thread)(NV2AState *d); void (*finalize)(NV2AState *d); void (*clear_report_value)(NV2AState *d); void (*clear_surface)(NV2AState *d, uint32_t parameter); diff --git a/hw/xbox/nv2a/pgraph/vk/renderer.c b/hw/xbox/nv2a/pgraph/vk/renderer.c index e57a6e9a0c..0cf9ee41ea 100644 --- a/hw/xbox/nv2a/pgraph/vk/renderer.c +++ b/hw/xbox/nv2a/pgraph/vk/renderer.c @@ -33,14 +33,18 @@ static void early_context_init(void) #endif } -static void pgraph_vk_init_thread(NV2AState *d) +static void pgraph_vk_init(NV2AState *d) { PGRAPHState *pg = &d->pgraph; + pg->vk_renderer_state = (PGRAPHVkState *)g_malloc0(sizeof(PGRAPHVkState)); + #if HAVE_EXTERNAL_MEMORY glo_set_current(g_gl_context); #endif + pgraph_vk_debug_init(); + pgraph_vk_init_instance(pg); pgraph_vk_init_command_buffers(pg); pgraph_vk_init_buffers(d); @@ -192,22 +196,12 @@ static int pgraph_vk_get_framebuffer_surface(NV2AState *d) #endif } -static void pgraph_vk_init(NV2AState *d) -{ - PGRAPHState *pg = &d->pgraph; - - pg->vk_renderer_state = (PGRAPHVkState *)g_malloc0(sizeof(PGRAPHVkState)); - - pgraph_vk_debug_init(); -} - static PGRAPHRenderer pgraph_vk_renderer = { .type = CONFIG_DISPLAY_RENDERER_VULKAN, .name = "Vulkan", .ops = { .init = pgraph_vk_init, .early_context_init = early_context_init, - .init_thread = pgraph_vk_init_thread, .finalize = pgraph_vk_finalize, .clear_report_value = pgraph_vk_clear_report_value, .clear_surface = pgraph_vk_clear_surface,