From 223a1b134736f350dbb56adab4f230e814138dc9 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Wed, 30 Apr 2025 23:29:23 -0700 Subject: [PATCH] nv2a/vk: Fix point param uniform setup --- hw/xbox/nv2a/pgraph/vk/renderer.h | 3 +-- hw/xbox/nv2a/pgraph/vk/shaders.c | 15 +++++---------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/hw/xbox/nv2a/pgraph/vk/renderer.h b/hw/xbox/nv2a/pgraph/vk/renderer.h index 7f94c07928..4112517e58 100644 --- a/hw/xbox/nv2a/pgraph/vk/renderer.h +++ b/hw/xbox/nv2a/pgraph/vk/renderer.h @@ -191,10 +191,9 @@ typedef struct ShaderBinding { int light_local_position_loc[NV2A_MAX_LIGHTS]; int light_local_attenuation_loc[NV2A_MAX_LIGHTS]; int specular_power_loc; + int point_params_loc; int clip_region_loc; - - int point_params_loc[8]; int material_alpha_loc; int uniform_attrs_loc; diff --git a/hw/xbox/nv2a/pgraph/vk/shaders.c b/hw/xbox/nv2a/pgraph/vk/shaders.c index 1980e4aea3..78122c701d 100644 --- a/hw/xbox/nv2a/pgraph/vk/shaders.c +++ b/hw/xbox/nv2a/pgraph/vk/shaders.c @@ -308,11 +308,8 @@ static void update_shader_constant_locations(ShaderBinding *binding) binding->clip_region_loc = uniform_index(&binding->fragment->uniforms, "clipRegion"); - for (int i = 0; i < 8; ++i) { - snprintf(tmp, sizeof(tmp), "pointParams[%d]", i); - binding->point_params_loc[i] = - uniform_index(&binding->vertex->uniforms, tmp); - } + binding->point_params_loc = + uniform_index(&binding->vertex->uniforms, "pointParams"); binding->material_alpha_loc = uniform_index(&binding->vertex->uniforms, "material_alpha"); @@ -726,11 +723,9 @@ static void shader_update_constants(PGRAPHState *pg, ShaderBinding *binding, uniform1iv(&binding->fragment->uniforms, binding->clip_region_loc, 8 * 4, (void *)clip_regions); - for (int i = 0; i < 8; ++i) { - int loc = binding->point_params_loc[i]; - if (loc != -1) { - uniform1f(&binding->vertex->uniforms, loc, pg->point_params[i]); - } + if (binding->point_params_loc != -1) { + uniform1iv(&binding->vertex->uniforms, binding->point_params_loc, + ARRAY_SIZE(pg->point_params), (void *)pg->point_params); } if (binding->material_alpha_loc != -1) {