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>
This commit is contained in:
Eric Anholt 2021-03-26 16:28:46 -07:00 committed by Marge Bot
parent 115ba959dc
commit 99838513ae
6 changed files with 55 additions and 120 deletions

View File

@ -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">

View File

@ -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,

View File

@ -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 */

View File

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

View File

@ -49,7 +49,6 @@ spec@!opengl 1.0@gl-1.0-no-op-paths,Fail
spec@!opengl 1.0@gl-1.0-scissor-copypixels,Fail
spec@!opengl 1.0@gl-1.0-scissor-offscreen,Fail
spec@!opengl 1.0@gl-1.0-spot-light,Fail
spec@!opengl 1.0@gl-1.0-user-clip-all-planes,Fail
spec@!opengl 1.0@rasterpos,Crash
spec@!opengl 1.1@copypixels-sync,Fail
spec@!opengl 1.1@copyteximage 1d,Fail
@ -191,7 +190,6 @@ spec@arb_transform_feedback3@gl_skipcomponents2,Fail
spec@arb_transform_feedback3@gl_skipcomponents3,Fail
spec@arb_transform_feedback3@gl_skipcomponents4,Fail
spec@arb_transform_feedback_instanced@draw-auto instanced,Fail
spec@arb_vertex_program@clip-plane-transformation arb,Fail
spec@arb_vertex_type_2_10_10_10_rev@attrib-p-type-size-match,Fail
spec@egl 1.4@egl-copy-buffers,Crash
spec@egl 1.4@eglterminate then unbind context,Fail
@ -309,10 +307,6 @@ spec@ext_transform_feedback@tessellation triangles flat_last,Fail
spec@ext_transform_feedback@tessellation triangles monochrome,Fail
spec@ext_transform_feedback@tessellation triangles smooth,Fail
spec@ext_transform_feedback@tessellation triangles wireframe,Fail
spec@glsl-1.10@execution@clipping@clip-plane-transformation clipvert_pos,Fail
spec@glsl-1.10@execution@clipping@clip-plane-transformation fixed,Fail
spec@glsl-1.10@execution@clipping@clip-plane-transformation pos_clipvert,Fail
spec@glsl-1.30@execution@clipping@clip-plane-transformation pos,Fail
spec@glsl-1.30@execution@texelfetch fs sampler3d 1x129x9-98x129x9,Fail
spec@glsl-1.30@execution@texelfetch fs sampler3d 98x129x1-98x129x9,Fail
spec@glsl-1.30@execution@texelfetch fs sampler3d 98x1x9-98x129x9,Fail
@ -353,108 +347,11 @@ spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3,Crash
wgl@wgl-multi-context-single-window,Fail
wgl@wgl-multi-window-single-context,Fail
wgl@wgl-sanity,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-gl_backcolor-flat-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-gl_backcolor-smooth-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-gl_backsecondarycolor-flat-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-gl_backsecondarycolor-smooth-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-gl_frontcolor-flat-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-gl_frontcolor-smooth-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-gl_frontsecondarycolor-flat-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-gl_frontsecondarycolor-smooth-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-other-flat-vertex,Fail
spec@glsl-1.10@execution@interpolation@interpolation-none-other-smooth-vertex,Fail
spec@glsl-1.20@execution@clipping@fixed-clip-enables,Fail
spec@glsl-1.20@execution@clipping@vs-clip-vertex-const-accept,Fail
spec@glsl-1.20@execution@clipping@vs-clip-vertex-different-from-position,Fail
spec@glsl-1.20@execution@clipping@vs-clip-vertex-enables,Fail
spec@glsl-1.20@execution@clipping@vs-clip-vertex-equal-to-position,Fail
spec@glsl-1.20@execution@clipping@vs-clip-vertex-homogeneity,Fail
spec@glsl-1.20@execution@clipping@vs-clip-vertex-primitives,Fail
spec@glsl-1.30@execution@clipping@fs-clip-distance-interpolated,Crash
spec@glsl-1.30@execution@clipping@vs-clip-based-on-position,Fail
spec@glsl-1.30@execution@clipping@vs-clip-based-on-position-homogeneity,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-all-planes-enabled,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-bulk-assign,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-const-accept,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-deadcode,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-enables,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-implicitly-sized,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-in-param,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-inout-param,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-out-param,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-primitives,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-retval,Fail
spec@glsl-1.30@execution@clipping@vs-clip-distance-uint-index,Fail
spec@glsl-1.30@execution@fs-large-local-array-vec2,Crash
spec@glsl-1.30@execution@fs-large-local-array-vec3,Crash
spec@glsl-1.30@execution@fs-large-local-array-vec4,Crash
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_backcolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_backcolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_backcolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_backcolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_backsecondarycolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_backsecondarycolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_backsecondarycolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_backsecondarycolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_frontcolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_frontcolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_frontcolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_frontcolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_frontsecondarycolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_frontsecondarycolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_frontsecondarycolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-gl_frontsecondarycolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-other-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-other-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-other-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-flat-other-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-gl_backcolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-gl_backcolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-gl_backsecondarycolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-gl_backsecondarycolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-gl_frontcolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-gl_frontcolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-gl_frontsecondarycolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-gl_frontsecondarycolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-other-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-none-other-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_backcolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_backcolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_backcolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_backcolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_backsecondarycolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_frontcolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_frontcolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_frontcolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_frontcolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-gl_frontsecondarycolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-other-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-other-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-other-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-noperspective-other-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_backcolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_backcolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_backcolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_backcolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_backsecondarycolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_backsecondarycolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_backsecondarycolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_backsecondarycolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_frontcolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_frontcolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_frontcolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_frontcolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_frontsecondarycolor-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_frontsecondarycolor-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_frontsecondarycolor-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-gl_frontsecondarycolor-smooth-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-other-flat-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-other-flat-vertex,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-other-smooth-distance,Fail
spec@glsl-1.30@execution@interpolation@interpolation-smooth-other-smooth-vertex,Fail

View File

@ -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: