From 22aaac801ccc33a20a8d72c24a5a0c2bf33444ab Mon Sep 17 00:00:00 2001 From: Erik Abair Date: Sat, 8 Jul 2023 09:14:49 -0700 Subject: [PATCH 1/2] nv2a: Compile fix for DEBUG_NV2A enabled --- hw/xbox/nv2a/pgraph.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/xbox/nv2a/pgraph.c b/hw/xbox/nv2a/pgraph.c index f40fcaf689..9d9247feca 100644 --- a/hw/xbox/nv2a/pgraph.c +++ b/hw/xbox/nv2a/pgraph.c @@ -6643,7 +6643,8 @@ static void pgraph_bind_textures(NV2AState *d) 1 << log_width, 1 << log_height, 1 << log_depth, pitch, cubemap ? "; cubemap" : "", - min_filter, mag_filter, + GET_MASK(filter, NV_PGRAPH_TEXFILTER0_MIN), + GET_MASK(filter, NV_PGRAPH_TEXFILTER0_MAG), min_mipmap_level, max_mipmap_level, levels, lod_bias); From 7bfb7c85378f64f93556c365ea0cc18cb2181dc8 Mon Sep 17 00:00:00 2001 From: Erik Abair Date: Sun, 9 Jul 2023 20:55:28 -0700 Subject: [PATCH 2/2] nv2a: Remove assert on TEXGEN_OBJECT_LINEAR The behavior seems to match HW. [Test](https://github.com/abaire/nxdk_pgraph_tests/blob/main/src/tests/texgen_tests.cpp#L22) ![HW results](https://github.com/abaire/nxdk_pgraph_tests_golden_results/wiki/Results-Texgen#objectlinearpng) Fixes #379 --- hw/xbox/nv2a/shaders.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/hw/xbox/nv2a/shaders.c b/hw/xbox/nv2a/shaders.c index 409129e50d..bef6c463cb 100644 --- a/hw/xbox/nv2a/shaders.c +++ b/hw/xbox/nv2a/shaders.c @@ -506,7 +506,6 @@ GLSL_DEFINE(materialEmissionColor, GLSL_LTCTXA(NV_IGRAPH_XF_LTCTXA_CM_COL) ".xyz case TEXGEN_OBJECT_LINEAR: mstring_append_fmt(body, "oT%d.%c = dot(texPlane%c%d, position);\n", i, c, cSuffix, i); - assert(false); /* Untested */ break; case TEXGEN_SPHERE_MAP: assert(j < 2); /* Channels S,T only! */ @@ -1326,7 +1325,7 @@ static void shader_load_from_disk(PGRAPHState *pg, uint64_t hash) g_free(shader_bin_dir); - qemu_mutex_lock(&pg->shader_cache_lock); + qemu_mutex_lock(&pg->shader_cache_lock); if (lru_contains_hash(&pg->shader_cache, hash)) { qemu_mutex_unlock(&pg->shader_cache_lock); return; @@ -1442,12 +1441,12 @@ static void shader_cache_entry_init(Lru *lru, LruNode *node, void *state) static void shader_cache_entry_post_evict(Lru *lru, LruNode *node) { ShaderLruNode *snode = container_of(node, ShaderLruNode, node); - + if (snode->save_thread) { qemu_thread_join(snode->save_thread); g_free(snode->save_thread); } - + if (snode->binding) { glDeleteProgram(snode->binding->gl_program); g_free(snode->binding); @@ -1477,7 +1476,7 @@ void shader_cache_init(PGRAPHState *pg) } shader_create_cache_folder(); - + /* FIXME: Make this configurable */ const size_t shader_cache_size = 50*1024; lru_init(&pg->shader_cache); @@ -1569,7 +1568,7 @@ void shader_cache_to_disk(ShaderLruNode *snode) GLint program_size; glGetProgramiv(snode->binding->gl_program, GL_PROGRAM_BINARY_LENGTH, &program_size); - + if (snode->program) { g_free(snode->program); snode->program = NULL;