aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2018-10-19 01:31:56 -0700
committerKenneth Graunke <[email protected]>2019-02-21 10:26:09 -0800
commitb3a40c27a24ccf10d1b91d8294b6e9f01f5fd2b9 (patch)
treef923174bea4da94f2f36df98c76d429afd13d998 /src/gallium
parentf8796079dab4a3d6fb9ea034b93fd38de53fbe1f (diff)
iris: don't let render/compute contexts stomp each other's dirty bits
only clear what you process
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/iris/iris_context.h8
-rw-r--r--src/gallium/drivers/iris/iris_draw.c5
2 files changed, 10 insertions, 3 deletions
diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h
index 096a3d2ff51..4060cdb5d2d 100644
--- a/src/gallium/drivers/iris/iris_context.h
+++ b/src/gallium/drivers/iris/iris_context.h
@@ -111,6 +111,14 @@ struct blorp_params;
#define IRIS_DIRTY_VF (1ull << 53)
#define IRIS_DIRTY_VF_TOPOLOGY (1ull << 54)
+#define IRIS_ALL_DIRTY_FOR_COMPUTE (IRIS_DIRTY_CS | \
+ IRIS_DIRTY_SAMPLER_STATES_CS | \
+ IRIS_DIRTY_UNCOMPILED_CS | \
+ IRIS_DIRTY_CONSTANTS_CS | \
+ IRIS_DIRTY_BINDINGS_CS)
+
+#define IRIS_ALL_DIRTY_FOR_RENDER ~IRIS_ALL_DIRTY_FOR_COMPUTE
+
#define IRIS_ALL_DIRTY_BINDINGS (IRIS_DIRTY_BINDINGS_VS | \
IRIS_DIRTY_BINDINGS_TCS | \
IRIS_DIRTY_BINDINGS_TES | \
diff --git a/src/gallium/drivers/iris/iris_draw.c b/src/gallium/drivers/iris/iris_draw.c
index c2216a22bed..f9b8db7b64e 100644
--- a/src/gallium/drivers/iris/iris_draw.c
+++ b/src/gallium/drivers/iris/iris_draw.c
@@ -89,7 +89,7 @@ iris_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
ice->vtbl.update_surface_base_address(batch, &ice->state.binder);
ice->vtbl.upload_render_state(ice, batch, info);
- ice->state.dirty = 0ull;
+ ice->state.dirty &= ~IRIS_ALL_DIRTY_FOR_RENDER;
iris_postdraw_update_resolve_tracking(ice, batch);
}
@@ -163,8 +163,7 @@ iris_launch_grid(struct pipe_context *ctx, const struct pipe_grid_info *grid)
ice->vtbl.update_surface_base_address(batch, &ice->state.binder);
ice->vtbl.upload_compute_state(ice, batch, grid);
- // XXX: this is wrong. we need separate dirty tracking for compute/render
- ice->state.dirty = 0ull;
+ ice->state.dirty &= ~IRIS_ALL_DIRTY_FOR_COMPUTE;
// XXX: postdraw resolve tracking
}