iris: reject all clipping when we can't use streamout render disabled
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 2 Dec 2018 22:51:52 +0000 (14:51 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:10 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_query.c
src/gallium/drivers/iris/iris_state.c

index 68bdb4b..2a8c963 100644 (file)
@@ -518,7 +518,7 @@ iris_begin_query(struct pipe_context *ctx, struct pipe_query *query)
 
    if (q->type == PIPE_QUERY_PRIMITIVES_GENERATED && q->index == 0) {
       ice->state.prims_generated_query_active = true;
-      ice->state.dirty |= IRIS_DIRTY_STREAMOUT;
+      ice->state.dirty |= IRIS_DIRTY_STREAMOUT | IRIS_DIRTY_CLIP;
    }
 
    if (q->type == PIPE_QUERY_SO_OVERFLOW_PREDICATE ||
@@ -544,7 +544,7 @@ iris_end_query(struct pipe_context *ctx, struct pipe_query *query)
 
    if (q->type == PIPE_QUERY_PRIMITIVES_GENERATED && q->index == 0) {
       ice->state.prims_generated_query_active = true;
-      ice->state.dirty |= IRIS_DIRTY_STREAMOUT;
+      ice->state.dirty |= IRIS_DIRTY_STREAMOUT | IRIS_DIRTY_CLIP;
    }
 
    if (q->type == PIPE_QUERY_SO_OVERFLOW_PREDICATE ||
index d29cc8b..399bdf8 100644 (file)
@@ -1155,7 +1155,6 @@ iris_create_rasterizer_state(struct pipe_context *ctx,
       cl.ForceUserClipDistanceClipTestEnableBitmask = true;
       cl.APIMode = state->clip_halfz ? APIMODE_D3D : APIMODE_OGL;
       cl.GuardbandClipTestEnable = true;
-      cl.ClipMode = CLIPMODE_NORMAL;
       cl.ClipEnable = true;
       cl.ViewportXYClipTestEnable = state->point_tri_clip;
       cl.MinimumPointWidth = 0.125;
@@ -4234,10 +4233,13 @@ iris_upload_dirty_render_state(struct iris_context *ice,
       struct iris_rasterizer_state *cso_rast = ice->state.cso_rast;
       struct pipe_framebuffer_state *cso_fb = &ice->state.framebuffer;
 
+      bool reject = cso_rast->rasterizer_discard &&
+                    ice->state.prims_generated_query_active;
+
       uint32_t dynamic_clip[GENX(3DSTATE_CLIP_length)];
       iris_pack_command(GENX(3DSTATE_CLIP), &dynamic_clip, cl) {
          cl.StatisticsEnable = ice->state.statistics_counters_enabled;
-
+         cl.ClipMode = reject ? CLIPMODE_REJECT_ALL : CLIPMODE_NORMAL;
          if (wm_prog_data->barycentric_interp_modes &
              BRW_BARYCENTRIC_NONPERSPECTIVE_BITS)
             cl.NonPerspectiveBarycentricEnable = true;