summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/v3d/v3d_uniforms.c
diff options
context:
space:
mode:
authorAlejandro PiƱeiro <apinheiro@igalia.com>2021-10-21 13:46:11 +0200
committerMarge Bot <emma+marge@anholt.net>2023-10-13 22:37:43 +0000
commitb09f9156661b4d4bec4e5494f3c106b0aac1f5f7 (patch)
treeb03b07f798827fda179f96814c65fa1d4e03c6f0 /src/gallium/drivers/v3d/v3d_uniforms.c
parent2908b2782ae900e9aef8c62686c035ece7764411 (diff)
v3d/uniforms: update VIEWPORT_X/Y_SCALE uniforms for v71
As the packet CLIPPER_XY scaling, this needs to be computed on 1/64ths of pixel, instead of 1/256ths of pixels. As this is the usual values that we get from macros, we add manually a v42 and v71 macro, and define a new helper to get those. Those granularity values are the same for Vulkan and OpenGL, so perhaps we should move them to a common place. As with v3dv, V3D_X macro name is somewhat confusing. It is specifically created to ask for define values that depends on the version. But I also felt that V3D_DEFINE_X was too long. Reviewed-by: Iago Toral Quiroga <itoral@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25450>
Diffstat (limited to 'src/gallium/drivers/v3d/v3d_uniforms.c')
-rw-r--r--src/gallium/drivers/v3d/v3d_uniforms.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/gallium/drivers/v3d/v3d_uniforms.c b/src/gallium/drivers/v3d/v3d_uniforms.c
index 95eb838954f..64c217d4f6c 100644
--- a/src/gallium/drivers/v3d/v3d_uniforms.c
+++ b/src/gallium/drivers/v3d/v3d_uniforms.c
@@ -261,6 +261,7 @@ v3d_write_uniforms(struct v3d_context *v3d, struct v3d_job *job,
struct v3d_compiled_shader *shader,
enum pipe_shader_type stage)
{
+ struct v3d_device_info *devinfo = &v3d->screen->devinfo;
struct v3d_constbuf_stateobj *cb = &v3d->constbuf[stage];
struct v3d_texture_stateobj *texstate = &v3d->tex[stage];
struct v3d_uniform_list *uinfo = &shader->prog_data.base->uniforms;
@@ -292,13 +293,16 @@ v3d_write_uniforms(struct v3d_context *v3d, struct v3d_job *job,
case QUNIFORM_UNIFORM:
cl_aligned_u32(&uniforms, gallium_uniforms[data]);
break;
- case QUNIFORM_VIEWPORT_X_SCALE:
- cl_aligned_f(&uniforms, v3d->viewport.scale[0] * 256.0f);
+ case QUNIFORM_VIEWPORT_X_SCALE: {
+ float clipper_xy_granularity = V3DV_X(devinfo, CLIPPER_XY_GRANULARITY);
+ cl_aligned_f(&uniforms, v3d->viewport.scale[0] * clipper_xy_granularity);
break;
- case QUNIFORM_VIEWPORT_Y_SCALE:
- cl_aligned_f(&uniforms, v3d->viewport.scale[1] * 256.0f);
+ }
+ case QUNIFORM_VIEWPORT_Y_SCALE: {
+ float clipper_xy_granularity = V3DV_X(devinfo, CLIPPER_XY_GRANULARITY);
+ cl_aligned_f(&uniforms, v3d->viewport.scale[1] * clipper_xy_granularity);
break;
-
+ }
case QUNIFORM_VIEWPORT_Z_OFFSET:
cl_aligned_f(&uniforms, v3d->viewport.translate[2]);
break;