aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2020-03-17 16:03:11 -0700
committerMarge Bot <[email protected]>2020-03-19 21:35:49 +0000
commit5b57aa79e2bd244079639bcc696251ce0f7af7c7 (patch)
tree972a29ec94f0186607a7349d511ad7c525487752 /src
parent5c8ba96a54feaf9bb783bb165bce91ee0c3253f9 (diff)
freedreno: Switch to exposing only half-integer pixel centers.
This is what the HW provides us. If we need integer pixel centers, we want the state tracker to do the lowering pass so that it gets to optimize on the subtract. This is also the shader instructions that the blob is doing on GLES, and is what Vulkan wants too, as was noted in MR !4172. shader-db on a630: total instructions in shared programs: 186689 -> 186168 (-0.28%) total nops in shared programs: 66253 -> 66139 (-0.17%) total non-nops in shared programs: 120436 -> 120029 (-0.34%) total dwords in shared programs: 292192 -> 291168 (-0.35%) total last-baryf in shared programs: 4810 -> 4734 (-1.58%) total full in shared programs: 10176 -> 10195 (0.19%) total constlen in shared programs: 54589 -> 54575 (-0.03%) total sstall in shared programs: 24582 -> 24802 (0.89%) total (ss) in shared programs: 3921 -> 3925 (0.10%) total (sy) in shared programs: 1934 -> 1923 (-0.57%) Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4223> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4223>
Diffstat (limited to 'src')
-rw-r--r--src/freedreno/ir3/ir3_compiler_nir.c5
-rw-r--r--src/gallium/drivers/freedreno/freedreno_screen.c6
2 files changed, 6 insertions, 5 deletions
diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c
index 01f0985da62..75f949522f5 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -1319,11 +1319,8 @@ get_frag_coord(struct ir3_context *ctx)
*
*/
for (int i = 0; i < 2; i++) {
- xyzw[i] = ir3_SUB_S(b, xyzw[i], 0,
- create_immed(b, 8), 0);
- xyzw[i] = ir3_SHR_B(b, xyzw[i], 0,
- create_immed(b, 4), 0);
xyzw[i] = ir3_COV(b, xyzw[i], TYPE_U32, TYPE_F32);
+ xyzw[i] = ir3_MUL_F(b, xyzw[i], 0, create_immed(b, fui(1.0 / 16.0)), 0);
}
ctx->frag_coord = ir3_create_collect(ctx, xyzw, 4);
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index bb8711f34d2..e6bfa49c4a8 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -187,7 +187,6 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_TEXTURE_SWIZZLE:
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
- case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
case PIPE_CAP_SEAMLESS_CUBE_MAP:
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
@@ -202,6 +201,11 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND:
return 1;
+ case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
+ return is_a2xx(screen);
+ case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
+ return !is_a2xx(screen);
+
case PIPE_CAP_PACKED_UNIFORMS:
return !is_a2xx(screen);