mirror of https://github.com/xemu-project/xemu.git
nv2a: Merge renderer init, init_thread methods
This commit is contained in:
parent
98fa394f84
commit
f3b6d50d99
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue