From 9ab3dcbd6c1ac2769d4d57acd3e2f91fdb0271be Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Thu, 11 Mar 2021 01:01:19 -0700 Subject: [PATCH] nv2a: Update VSH constants only if different --- hw/xbox/nv2a/pgraph.c | 9 +++++++-- hw/xbox/nv2a/shaders.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/hw/xbox/nv2a/pgraph.c b/hw/xbox/nv2a/pgraph.c index 0ece3b5930..53d9580b92 100644 --- a/hw/xbox/nv2a/pgraph.c +++ b/hw/xbox/nv2a/pgraph.c @@ -3575,9 +3575,14 @@ static void pgraph_shader_update_constants(PGRAPHState *pg, if (!pg->vsh_constants_dirty[i] && !binding_changed) continue; GLint loc = binding->vsh_constant_loc[i]; - if (loc != -1) { - glUniform4fv(loc, 1, (const GLfloat*)pg->vsh_constants[i]); + if ((loc != -1) && + memcmp(binding->vsh_constants[i], pg->vsh_constants[i], + sizeof(pg->vsh_constants[1]))) { + glUniform4fv(loc, 1, (const GLfloat *)pg->vsh_constants[i]); + memcpy(binding->vsh_constants[i], pg->vsh_constants[i], + sizeof(pg->vsh_constants[i])); } + pg->vsh_constants_dirty[i] = false; } diff --git a/hw/xbox/nv2a/shaders.h b/hw/xbox/nv2a/shaders.h index 3b2690b010..a05e8cadcb 100644 --- a/hw/xbox/nv2a/shaders.h +++ b/hw/xbox/nv2a/shaders.h @@ -105,6 +105,7 @@ typedef struct ShaderBinding { GLint clip_range_loc; GLint vsh_constant_loc[NV2A_VERTEXSHADER_CONSTANTS]; + uint32_t vsh_constants[NV2A_VERTEXSHADER_CONSTANTS][4]; GLint inv_viewport_loc; GLint ltctxa_loc[NV2A_LTCTXA_COUNT];