Mesa (master): freedreno/a5xx: Add support for clip distances and use them for userclip.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Mar 29 21:57:31 UTC 2021


Module: Mesa
Branch: master
Commit: 99838513aee4aeb100ff82fa7e2424c2d8e4f845
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=99838513aee4aeb100ff82fa7e2424c2d8e4f845

Author: Eric Anholt <eric at anholt.net>
Date:   Fri Mar 26 16:28:46 2021 -0700

freedreno/a5xx: Add support for clip distances and use them for userclip.

A little low-stakes RE effort as I unwind from fighting CI all day.  Comes
from diffing dEQP-VK.clipping.user_defined.clip_distance.vert.* on the
blob and comparing to a6xx behavior.  (My blob doesn't do tess, so if
there are equivalent tess fields for some of these, I didn't find them)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9870>

---

 src/freedreno/registers/adreno/a5xx.xml            |  21 ++++-
 src/gallium/drivers/freedreno/a5xx/fd5_draw.c      |   1 -
 src/gallium/drivers/freedreno/a5xx/fd5_emit.c      |   9 --
 src/gallium/drivers/freedreno/a5xx/fd5_program.c   |  35 ++++++-
 .../freedreno/ci/piglit-freedreno-a530-fails.txt   | 103 ---------------------
 src/gallium/drivers/freedreno/freedreno_screen.c   |   6 +-
 6 files changed, 55 insertions(+), 120 deletions(-)

diff --git a/src/freedreno/registers/adreno/a5xx.xml b/src/freedreno/registers/adreno/a5xx.xml
index e4991f270d3..aea009637aa 100644
--- a/src/freedreno/registers/adreno/a5xx.xml
+++ b/src/freedreno/registers/adreno/a5xx.xml
@@ -1812,7 +1812,11 @@ xsi:schemaLocation="http://nouveau.freedesktop.org/ rules-ng.xsd">
 	<reg32 offset="0xe000" name="GRAS_CL_CNTL">
 		<bitfield name="ZERO_GB_SCALE_Z" pos="6" type="boolean"/>
 	</reg32>
-	<reg32 offset="0xe001" name="UNKNOWN_E001"/> <!-- always 00000000? -->
+	<bitset name="a5xx_gras_xs_cl_cntl" inline="yes">
+		<bitfield name="CLIP_MASK" low="0" high="7"/>
+		<bitfield name="CULL_MASK" low="8" high="15"/>
+	</bitset>
+	<reg32 offset="0xe001" name="GRAS_VS_CL_CNTL" type="a5xx_gras_xs_cl_cntl"/>
 	<reg32 offset="0xe004" name="UNKNOWN_E004"/> <!-- always 00000000? -->
 	<reg32 offset="0xe005" name="GRAS_CNTL">
 		<!-- see also RB_RENDER_CONTROL0 -->
@@ -2279,7 +2283,16 @@ bit 7 for RECTLIST (clear) when z32s8 (used for clear of depth32?  not set
 		<reg32 offset="0" name="DISABLE"/>
 	</array>
 	<reg32 offset="0xe298" name="VPC_GS_SIV_CNTL"/>
-	<reg32 offset="0xe29a" name="UNKNOWN_E29A"/>
+	<reg32 offset="0xe29a" name="VPC_CLIP_CNTL">
+		<bitfield name="CLIP_MASK" low="0" high="7" type="uint"/>
+		<!-- there can be up to 8 total clip/cull distance outputs,
+		     but apparenly VPC can only deal with vec4, so when there are
+		     more than 4 outputs a second location needs to be programmed
+		-->
+		<bitfield name="CLIP_DIST_03_LOC" low="8" high="15" type="uint"/>
+		<bitfield name="CLIP_DIST_47_LOC" low="16" high="23" type="uint"/>
+	</reg32>
+
 	<reg32 offset="0xe29d" name="VPC_PACK">
 		<bitfield name="NUMNONPOSVAR" low="0" high="7" type="uint"/>
 		<!--
@@ -2374,7 +2387,9 @@ bit 7 for RECTLIST (clear) when z32s8 (used for clear of depth32?  not set
 		<bitfield name="POLYMODE_BACK_PTYPE" low="3" high="5" type="adreno_pa_su_sc_draw"/>
 		<bitfield name="POLYMODE_ENABLE" pos="6" type="boolean"/>
 	</reg32>
-	<reg32 offset="0xe389" name="UNKNOWN_E389"/>
+	<reg32 offset="0xe389" name="PC_CLIP_CNTL">
+		<bitfield name="CLIP_MASK" low="0" high="7"/>
+	</reg32>
 	<reg32 offset="0xe38c" name="PC_RESTART_INDEX"/>
 	<reg32 offset="0xe38d" name="PC_GS_LAYERED"/>
 	<reg32 offset="0xe38e" name="PC_GS_PARAM">
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_draw.c b/src/gallium/drivers/freedreno/a5xx/fd5_draw.c
index 2643427b767..038519d53dd 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_draw.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_draw.c
@@ -86,7 +86,6 @@ fd5_draw_vbo(struct fd_context *ctx, const struct pipe_draw_info *info,
 			.fs = ctx->prog.fs,
 			.key = {
 				.rasterflat = ctx->rasterizer->flatshade,
-				.ucp_enables = ctx->rasterizer->clip_plane_enable,
 				.has_per_samp = fd5_ctx->fastc_srgb || fd5_ctx->vastc_srgb,
 				.vastc_srgb = fd5_ctx->vastc_srgb,
 				.fastc_srgb = fd5_ctx->fastc_srgb,
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
index 8d75b2b3d67..62b6bcf8af4 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
@@ -1024,27 +1024,18 @@ t7              opcode: CP_WAIT_FOR_IDLE (26) (1 dwords)
 	OUT_PKT4(ring, REG_A5XX_TPL1_TP_FS_ROTATION_CNTL, 1);
 	OUT_RING(ring, 0x00000000);   /* TPL1_TP_FS_ROTATION_CNTL */
 
-	OUT_PKT4(ring, REG_A5XX_UNKNOWN_E001, 1);
-	OUT_RING(ring, 0x00000000);   /* UNKNOWN_E001 */
-
 	OUT_PKT4(ring, REG_A5XX_UNKNOWN_E004, 1);
 	OUT_RING(ring, 0x00000000);   /* UNKNOWN_E004 */
 
 	OUT_PKT4(ring, REG_A5XX_GRAS_SU_LAYERED, 1);
 	OUT_RING(ring, 0x00000000);   /* GRAS_SU_LAYERED */
 
-	OUT_PKT4(ring, REG_A5XX_UNKNOWN_E29A, 1);
-	OUT_RING(ring, 0x00ffff00);   /* UNKNOWN_E29A */
-
 	OUT_PKT4(ring, REG_A5XX_VPC_SO_BUF_CNTL, 1);
 	OUT_RING(ring, 0x00000000);   /* VPC_SO_BUF_CNTL */
 
 	OUT_PKT4(ring, REG_A5XX_VPC_SO_BUFFER_OFFSET(0), 1);
 	OUT_RING(ring, 0x00000000);   /* UNKNOWN_E2AB */
 
-	OUT_PKT4(ring, REG_A5XX_UNKNOWN_E389, 1);
-	OUT_RING(ring, 0x00000000);   /* UNKNOWN_E389 */
-
 	OUT_PKT4(ring, REG_A5XX_PC_GS_LAYERED, 1);
 	OUT_RING(ring, 0x00000000);   /* PC_GS_LAYERED */
 
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_program.c b/src/gallium/drivers/freedreno/a5xx/fd5_program.c
index cc70f7b9014..c0e228b2738 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_program.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_program.c
@@ -240,7 +240,7 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
 	struct stage s[MAX_STAGES];
 	uint32_t pos_regid, psize_regid, color_regid[8];
 	uint32_t face_regid, coord_regid, zwcoord_regid, samp_id_regid, samp_mask_regid;
-	uint32_t ij_regid[IJ_COUNT], vertex_regid, instance_regid;
+	uint32_t ij_regid[IJ_COUNT], vertex_regid, instance_regid, clip0_regid, clip1_regid;
 	enum a3xx_threadsize fssz;
 	uint8_t psize_loc = ~0;
 	int i, j;
@@ -248,11 +248,15 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
 	setup_stages(emit, s);
 
 	bool do_streamout = (s[VS].v->shader->stream_output.num_outputs > 0);
+	uint8_t clip_mask = s[VS].v->clip_mask, cull_mask = s[VS].v->cull_mask;
+	uint8_t clip_cull_mask = clip_mask | cull_mask;
 
 	fssz = (s[FS].i->double_threadsize) ? FOUR_QUADS : TWO_QUADS;
 
 	pos_regid = ir3_find_output_regid(s[VS].v, VARYING_SLOT_POS);
 	psize_regid = ir3_find_output_regid(s[VS].v, VARYING_SLOT_PSIZ);
+	clip0_regid = ir3_find_output_regid(s[VS].v, VARYING_SLOT_CLIP_DIST0);
+	clip1_regid = ir3_find_output_regid(s[VS].v, VARYING_SLOT_CLIP_DIST1);
 	vertex_regid = ir3_find_sysval_regid(s[VS].v, SYSTEM_VALUE_VERTEX_ID_ZERO_BASE);
 	instance_regid = ir3_find_sysval_regid(s[VS].v, SYSTEM_VALUE_INSTANCE_ID);
 
@@ -378,6 +382,9 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
 	struct ir3_shader_linkage l = {0};
 	ir3_link_shaders(&l, s[VS].v, link_fs, true);
 
+	uint8_t clip0_loc = l.clip0_loc;
+	uint8_t clip1_loc = l.clip1_loc;
+
 	OUT_PKT4(ring, REG_A5XX_VPC_VAR_DISABLE(0), 4);
 	OUT_RING(ring, ~l.varmask[0]);  /* VPC_VAR[0].DISABLE */
 	OUT_RING(ring, ~l.varmask[1]);  /* VPC_VAR[1].DISABLE */
@@ -396,6 +403,20 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
 		ir3_link_add(&l, psize_regid, 0x1, l.max_loc);
 	}
 
+	/* Handle the case where clip/cull distances aren't read by the FS. Make
+	 * sure to avoid adding an output with an empty writemask if the user
+	 * disables all the clip distances in the API so that the slot is unused.
+	 */
+	if (clip0_loc == 0xff && clip0_regid != regid(63,0) && (clip_cull_mask & 0xf) != 0) {
+		clip0_loc = l.max_loc;
+		ir3_link_add(&l, clip0_regid, clip_cull_mask & 0xf, l.max_loc);
+	}
+
+	if (clip1_loc == 0xff && clip1_regid != regid(63,0) && (clip_cull_mask >> 4) != 0) {
+		clip1_loc = l.max_loc;
+		ir3_link_add(&l, clip1_regid, clip_cull_mask >> 4, l.max_loc);
+	}
+
 	/* If we have stream-out, we use the full shader for binning
 	 * pass, rather than the optimized binning pass one, so that we
 	 * have all the varying outputs available for xfb.  So streamout
@@ -624,6 +645,18 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
 			OUT_RING(ring, vpsrepl[i]);   /* VPC_VARYING_PS_REPL[i] */
 	}
 
+	OUT_PKT4(ring, REG_A5XX_GRAS_VS_CL_CNTL, 1);
+	OUT_RING(ring, A5XX_GRAS_VS_CL_CNTL_CLIP_MASK(clip_mask) |
+				   A5XX_GRAS_VS_CL_CNTL_CULL_MASK(cull_mask));
+
+	OUT_PKT4(ring, REG_A5XX_VPC_CLIP_CNTL, 1);
+	OUT_RING(ring, A5XX_VPC_CLIP_CNTL_CLIP_MASK(clip_cull_mask) |
+				   A5XX_VPC_CLIP_CNTL_CLIP_DIST_03_LOC(clip0_loc) |
+				   A5XX_VPC_CLIP_CNTL_CLIP_DIST_47_LOC(clip1_loc));
+
+	OUT_PKT4(ring, REG_A5XX_PC_CLIP_CNTL, 1);
+	OUT_RING(ring, A5XX_PC_CLIP_CNTL_CLIP_MASK(clip_mask));
+
 	if (!emit->binning_pass)
 		if (s[FS].instrlen)
 			fd5_emit_shader(ring, s[FS].v);
diff --git a/src/gallium/drivers/freedreno/ci/piglit-freedreno-a530-fails.txt b/src/gallium/drivers/freedreno/ci/piglit-freedreno-a530-fails.txt
index e14d02da737..4b4d4821960 100644
--- a/src/gallium/drivers/freedreno/ci/piglit-freedreno-a530-fails.txt
+++ b/src/gallium/drivers/freedreno/ci/piglit-freedreno-a530-fails.txt
@@ -49,7 +49,6 @@ spec@!opengl 1.0 at gl-1.0-no-op-paths,Fail
 spec@!opengl 1.0 at gl-1.0-scissor-copypixels,Fail
 spec@!opengl 1.0 at gl-1.0-scissor-offscreen,Fail
 spec@!opengl 1.0 at gl-1.0-spot-light,Fail
-spec@!opengl 1.0 at gl-1.0-user-clip-all-planes,Fail
 spec@!opengl 1.0 at rasterpos,Crash
 spec@!opengl 1.1 at copypixels-sync,Fail
 spec@!opengl 1.1 at copyteximage 1d,Fail
@@ -191,7 +190,6 @@ spec at arb_transform_feedback3@gl_skipcomponents2,Fail
 spec at arb_transform_feedback3@gl_skipcomponents3,Fail
 spec at arb_transform_feedback3@gl_skipcomponents4,Fail
 spec at arb_transform_feedback_instanced@draw-auto instanced,Fail
-spec at arb_vertex_program@clip-plane-transformation arb,Fail
 spec at arb_vertex_type_2_10_10_10_rev@attrib-p-type-size-match,Fail
 spec at egl 1.4 at egl-copy-buffers,Crash
 spec at egl 1.4 at eglterminate then unbind context,Fail
@@ -309,10 +307,6 @@ spec at ext_transform_feedback@tessellation triangles flat_last,Fail
 spec at ext_transform_feedback@tessellation triangles monochrome,Fail
 spec at ext_transform_feedback@tessellation triangles smooth,Fail
 spec at ext_transform_feedback@tessellation triangles wireframe,Fail
-spec at glsl-1.10@execution at clipping@clip-plane-transformation clipvert_pos,Fail
-spec at glsl-1.10@execution at clipping@clip-plane-transformation fixed,Fail
-spec at glsl-1.10@execution at clipping@clip-plane-transformation pos_clipvert,Fail
-spec at glsl-1.30@execution at clipping@clip-plane-transformation pos,Fail
 spec at glsl-1.30@execution at texelfetch fs sampler3d 1x129x9-98x129x9,Fail
 spec at glsl-1.30@execution at texelfetch fs sampler3d 98x129x1-98x129x9,Fail
 spec at glsl-1.30@execution at texelfetch fs sampler3d 98x1x9-98x129x9,Fail
@@ -353,108 +347,11 @@ spec at oes_egl_image_external_essl3@oes_egl_image_external_essl3,Crash
 wgl at wgl-multi-context-single-window,Fail
 wgl at wgl-multi-window-single-context,Fail
 wgl at wgl-sanity,Fail
-spec at glsl-1.10@execution at interpolation@interpolation-none-gl_backcolor-flat-vertex,Fail
-spec at glsl-1.10@execution at interpolation@interpolation-none-gl_backcolor-smooth-vertex,Fail
-spec at glsl-1.10@execution at interpolation@interpolation-none-gl_backsecondarycolor-flat-vertex,Fail
-spec at glsl-1.10@execution at interpolation@interpolation-none-gl_backsecondarycolor-smooth-vertex,Fail
 spec at glsl-1.10@execution at interpolation@interpolation-none-gl_frontcolor-flat-vertex,Fail
 spec at glsl-1.10@execution at interpolation@interpolation-none-gl_frontcolor-smooth-vertex,Fail
-spec at glsl-1.10@execution at interpolation@interpolation-none-gl_frontsecondarycolor-flat-vertex,Fail
 spec at glsl-1.10@execution at interpolation@interpolation-none-gl_frontsecondarycolor-smooth-vertex,Fail
 spec at glsl-1.10@execution at interpolation@interpolation-none-other-flat-vertex,Fail
-spec at glsl-1.10@execution at interpolation@interpolation-none-other-smooth-vertex,Fail
-spec at glsl-1.20@execution at clipping@fixed-clip-enables,Fail
-spec at glsl-1.20@execution at clipping@vs-clip-vertex-const-accept,Fail
-spec at glsl-1.20@execution at clipping@vs-clip-vertex-different-from-position,Fail
-spec at glsl-1.20@execution at clipping@vs-clip-vertex-enables,Fail
-spec at glsl-1.20@execution at clipping@vs-clip-vertex-equal-to-position,Fail
-spec at glsl-1.20@execution at clipping@vs-clip-vertex-homogeneity,Fail
-spec at glsl-1.20@execution at clipping@vs-clip-vertex-primitives,Fail
 spec at glsl-1.30@execution at clipping@fs-clip-distance-interpolated,Crash
-spec at glsl-1.30@execution at clipping@vs-clip-based-on-position,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-based-on-position-homogeneity,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-all-planes-enabled,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-bulk-assign,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-const-accept,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-deadcode,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-enables,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-implicitly-sized,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-in-param,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-inout-param,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-out-param,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-primitives,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-retval,Fail
-spec at glsl-1.30@execution at clipping@vs-clip-distance-uint-index,Fail
 spec at glsl-1.30@execution at fs-large-local-array-vec2,Crash
 spec at glsl-1.30@execution at fs-large-local-array-vec3,Crash
 spec at glsl-1.30@execution at fs-large-local-array-vec4,Crash
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_backcolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_backcolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_backcolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_backcolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_backsecondarycolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_backsecondarycolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_backsecondarycolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_backsecondarycolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_frontcolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_frontcolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_frontcolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_frontcolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_frontsecondarycolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_frontsecondarycolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_frontsecondarycolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-gl_frontsecondarycolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-other-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-other-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-other-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-flat-other-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-gl_backcolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-gl_backcolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-gl_backsecondarycolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-gl_backsecondarycolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-gl_frontcolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-gl_frontcolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-gl_frontsecondarycolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-gl_frontsecondarycolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-other-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-none-other-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_backcolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_backcolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_backcolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_backcolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_backsecondarycolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_backsecondarycolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_backsecondarycolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_backsecondarycolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_frontcolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_frontcolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_frontcolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_frontcolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_frontsecondarycolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_frontsecondarycolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_frontsecondarycolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-gl_frontsecondarycolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-other-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-other-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-other-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-noperspective-other-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_backcolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_backcolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_backcolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_backcolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_backsecondarycolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_backsecondarycolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_backsecondarycolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_backsecondarycolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_frontcolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_frontcolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_frontcolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_frontcolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_frontsecondarycolor-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_frontsecondarycolor-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_frontsecondarycolor-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-gl_frontsecondarycolor-smooth-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-other-flat-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-other-flat-vertex,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-other-smooth-distance,Fail
-spec at glsl-1.30@execution at interpolation@interpolation-smooth-other-smooth-vertex,Fail
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
index bfd497e2544..9f094a05f29 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -413,16 +413,16 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
 		 * distances in the VS, and we don't support clip distances so that is
 		 * always shader-based lowering in the FS.
 		 *
-		 * On a4xx-a5xx, there is no HW support for clip planes, so they are
+		 * On a4xx, there is no HW support for clip planes, so they are
 		 * always lowered to clip distances.  We also lack SW support for the
 		 * HW's clip distances in HW, so we do shader-based lowering in the FS
 		 * in the driver backend.
 		 *
-		 * On a6xx, we have the HW clip distances hooked up, so we just let
+		 * On a5xx-a6xx, we have the HW clip distances hooked up, so we just let
 		 * mesa/st lower desktop GL's clip planes to clip distances in the last
 		 * vertex shader stage.
 		 */
-		return !is_a6xx(screen);
+		return !is_a5xx(screen) && !is_a6xx(screen);
 
 	/* Stream output. */
 	case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:



More information about the mesa-commit mailing list