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);