summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>2020-02-18 10:03:44 -0500
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>2020-02-19 08:01:46 -0500
commitaed052f7039e7dab1a4d7374512f3f9945677b9f (patch)
treec3a232063de25f6635631fd08fc32aefce95b79f /src
parentfe5c5507bd6bb7cecb9efcf3381621d1310c2454 (diff)
downloadmesa-aed052f7039e7dab1a4d7374512f3f9945677b9f.tar.gz
panfrost: Remove dirty tracking
We never really respected it and it doesn't quite make sense for Mali the way it was previously setup. The correct solution is to do push as much code into CSO creation as possible. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3855>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/panfrost/pan_blend_cso.c3
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c46
-rw-r--r--src/gallium/drivers/panfrost/pan_context.h14
3 files changed, 6 insertions, 57 deletions
diff --git a/src/gallium/drivers/panfrost/pan_blend_cso.c b/src/gallium/drivers/panfrost/pan_blend_cso.c
index b6c46323020..94f229b620d 100644
--- a/src/gallium/drivers/panfrost/pan_blend_cso.c
+++ b/src/gallium/drivers/panfrost/pan_blend_cso.c
@@ -154,9 +154,6 @@ panfrost_bind_blend_state(struct pipe_context *pipe,
if (screen->quirks & MIDGARD_SFBD) {
SET_BIT(ctx->fragment_shader_core.unknown2_4, MALI_NO_DITHER, !blend->dither);
}
-
- /* Shader itself is not dirty, but the shader core is */
- ctx->dirty |= PAN_DIRTY_FS;
}
static void
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index b0a5e784b04..0122067acd7 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -177,12 +177,6 @@ panfrost_invalidate_frame(struct panfrost_context *ctx)
for (unsigned i = 0; i < PIPE_SHADER_TYPES; ++i)
ctx->payloads[i].postfix.shared_memory = 0;
- if (ctx->rasterizer)
- ctx->dirty |= PAN_DIRTY_RASTERIZER;
-
- /* XXX */
- ctx->dirty |= PAN_DIRTY_SAMPLERS | PAN_DIRTY_TEXTURES;
-
/* TODO: When does this need to be handled? */
ctx->active_queries = true;
}
@@ -846,9 +840,9 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
panfrost_emit_varying_descriptor(ctx, total_count);
}
- bool msaa = ctx->rasterizer->base.multisample;
- if (ctx->dirty & PAN_DIRTY_RASTERIZER) {
+ if (ctx->rasterizer) {
+ bool msaa = ctx->rasterizer->base.multisample;
ctx->payloads[PIPE_SHADER_FRAGMENT].gl_enables = ctx->rasterizer->tiler_gl_enables;
/* TODO: Sample size */
@@ -866,7 +860,7 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
panfrost_patch_shader_state(ctx, PIPE_SHADER_VERTEX);
panfrost_patch_shader_state(ctx, PIPE_SHADER_COMPUTE);
- if (ctx->dirty & (PAN_DIRTY_RASTERIZER | PAN_DIRTY_VS)) {
+ if (ctx->shader[PIPE_SHADER_VERTEX] && ctx->shader[PIPE_SHADER_FRAGMENT]) {
/* Check if we need to link the gl_PointSize varying */
if (!panfrost_writes_point_size(ctx)) {
/* If the size is constant, write it out. Otherwise,
@@ -881,12 +875,7 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
}
}
- /* TODO: Maybe dirty track FS, maybe not. For now, it's transient. */
- if (ctx->shader[PIPE_SHADER_FRAGMENT])
- ctx->dirty |= PAN_DIRTY_FS;
-
- if (ctx->dirty & PAN_DIRTY_FS) {
- assert(ctx->shader[PIPE_SHADER_FRAGMENT]);
+ if (ctx->shader[PIPE_SHADER_FRAGMENT]) {
struct panfrost_shader_state *variant = &ctx->shader[PIPE_SHADER_FRAGMENT]->variants[ctx->shader[PIPE_SHADER_FRAGMENT]->active_variant];
panfrost_patch_shader_state(ctx, PIPE_SHADER_FRAGMENT);
@@ -1034,11 +1023,8 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
if (ctx->vertex)
panfrost_stage_attributes(ctx);
- if (ctx->dirty & PAN_DIRTY_SAMPLERS)
- panfrost_upload_sampler_descriptors(ctx);
-
- if (ctx->dirty & PAN_DIRTY_TEXTURES)
- panfrost_upload_texture_descriptors(ctx);
+ panfrost_upload_sampler_descriptors(ctx);
+ panfrost_upload_texture_descriptors(ctx);
const struct pipe_viewport_state *vp = &ctx->pipe_viewport;
@@ -1212,8 +1198,6 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
panfrost_upload_transient(batch,
&view,
sizeof(struct mali_viewport));
-
- ctx->dirty = 0;
}
/* Corresponds to exactly one draw, but does not submit anything */
@@ -1611,7 +1595,6 @@ panfrost_bind_rasterizer_state(
return;
ctx->rasterizer = hwcso;
- ctx->dirty |= PAN_DIRTY_RASTERIZER;
ctx->fragment_shader_core.depth_units = ctx->rasterizer->base.offset_units * 2.0f;
ctx->fragment_shader_core.depth_factor = ctx->rasterizer->base.offset_scale;
@@ -1667,9 +1650,7 @@ panfrost_bind_vertex_elements_state(
void *hwcso)
{
struct panfrost_context *ctx = pan_context(pctx);
-
ctx->vertex = hwcso;
- ctx->dirty |= PAN_DIRTY_VERTEX;
}
static void *
@@ -1801,8 +1782,6 @@ panfrost_bind_sampler_states(
/* XXX: Should upload, not just copy? */
ctx->sampler_count[shader] = num_sampler;
memcpy(ctx->samplers[shader], sampler, num_sampler * sizeof (void *));
-
- ctx->dirty |= PAN_DIRTY_SAMPLERS;
}
static bool
@@ -1896,14 +1875,8 @@ panfrost_bind_shader_state(
enum pipe_shader_type type)
{
struct panfrost_context *ctx = pan_context(pctx);
-
ctx->shader[type] = hwcso;
- if (type == PIPE_SHADER_FRAGMENT)
- ctx->dirty |= PAN_DIRTY_FS;
- else
- ctx->dirty |= PAN_DIRTY_VS;
-
if (!hwcso) return;
/* Match the appropriate variant */
@@ -2055,9 +2028,6 @@ panfrost_set_stencil_ref(
{
struct panfrost_context *ctx = pan_context(pctx);
ctx->stencil_ref = *ref;
-
- /* Shader core dirty */
- ctx->dirty |= PAN_DIRTY_FS;
}
static enum mali_texture_type
@@ -2219,8 +2189,6 @@ panfrost_set_sampler_views(
NULL);
}
ctx->sampler_view_count[shader] = new_nr;
-
- ctx->dirty |= PAN_DIRTY_TEXTURES;
}
static void
@@ -2334,8 +2302,6 @@ panfrost_bind_depth_stencil_state(struct pipe_context *pipe,
/* Bounds test not implemented */
assert(!depth_stencil->depth.bounds_test);
-
- ctx->dirty |= PAN_DIRTY_FS;
}
static void
diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h
index f33f6ec846c..1387c910b90 100644
--- a/src/gallium/drivers/panfrost/pan_context.h
+++ b/src/gallium/drivers/panfrost/pan_context.h
@@ -52,17 +52,6 @@ struct prim_convert_context;
#define MAX_VARYINGS 4096
-//#define PAN_DIRTY_CLEAR (1 << 0)
-#define PAN_DIRTY_RASTERIZER (1 << 2)
-#define PAN_DIRTY_FS (1 << 3)
-#define PAN_DIRTY_FRAG_CORE (PAN_DIRTY_FS) /* Dirty writes are tied */
-#define PAN_DIRTY_VS (1 << 4)
-#define PAN_DIRTY_VERTEX (1 << 5)
-#define PAN_DIRTY_VERT_BUF (1 << 6)
-//#define PAN_DIRTY_VIEWPORT (1 << 7)
-#define PAN_DIRTY_SAMPLERS (1 << 8)
-#define PAN_DIRTY_TEXTURES (1 << 9)
-
#define SET_BIT(lval, bit, cond) \
if (cond) \
lval |= (bit); \
@@ -135,9 +124,6 @@ struct panfrost_context {
struct mali_shader_meta fragment_shader_core;
- /* Per-draw Dirty flags are setup like any other driver */
- int dirty;
-
unsigned vertex_count;
unsigned instance_count;
enum pipe_prim_type active_prim;