iris: don't emit SBE all the time
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 18 Aug 2018 08:24:38 +0000 (01:24 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:08 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_program_cache.c
src/gallium/drivers/iris/iris_state.c

index b84e3ac0b4c01b8036b5275ea29586e1a167f95a..c2b538048aec2adde7f9e2c584f50ce8dc34f3ec 100644 (file)
@@ -112,7 +112,7 @@ dirty_flag_for_cache(enum iris_program_cache_id cache_id)
    // XXX: new and old programs to decide what bits to twiddle
    // XXX: CLIP: toggle if barycentric modes has any NONPERSPECTIVE or not
    if (cache_id == IRIS_CACHE_FS)
-      return IRIS_DIRTY_WM | IRIS_DIRTY_FS | IRIS_DIRTY_CLIP;
+      return IRIS_DIRTY_WM | IRIS_DIRTY_FS | IRIS_DIRTY_CLIP | IRIS_DIRTY_SBE;
    if (cache_id == IRIS_CACHE_VS)
       return IRIS_DIRTY_VS | IRIS_DIRTY_VF_SGVS;
 
index 115b2d34655dcfa6297dbea0175a04c7c0904c31..8a86f2f9061f356e0ce25ecf151173b4a062b96e 100644 (file)
@@ -976,7 +976,7 @@ iris_bind_rasterizer_state(struct pipe_context *ctx, void *state)
           cso_changed(clip_halfz))
          ice->state.dirty |= IRIS_DIRTY_CC_VIEWPORT;
 
-      if (cso_changed(sprite_coord_enable))
+      if (cso_changed(sprite_coord_enable) || cso_changed(light_twoside))
          ice->state.dirty |= IRIS_DIRTY_SBE;
    }
 
@@ -3536,10 +3536,7 @@ iris_upload_render_state(struct iris_context *ice,
       iris_emit_merge(batch, cso->wm, dynamic_wm, ARRAY_SIZE(cso->wm));
    }
 
-   if (1) {
-      // XXX: 3DSTATE_SBE, 3DSTATE_SBE_SWIZ
-      // -> iris_raster_state (point sprite texture coordinate origin)
-      // -> bunch of shader state...
+   if (dirty & IRIS_DIRTY_SBE) {
       iris_emit_sbe(batch, ice);
    }