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;
}
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 */
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,
}
}
- /* 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);
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;
panfrost_upload_transient(batch,
&view,
sizeof(struct mali_viewport));
-
- ctx->dirty = 0;
}
/* Corresponds to exactly one draw, but does not submit anything */
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;
void *hwcso)
{
struct panfrost_context *ctx = pan_context(pctx);
-
ctx->vertex = hwcso;
- ctx->dirty |= PAN_DIRTY_VERTEX;
}
static void *
/* 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
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 */
{
struct panfrost_context *ctx = pan_context(pctx);
ctx->stencil_ref = *ref;
-
- /* Shader core dirty */
- ctx->dirty |= PAN_DIRTY_FS;
}
static enum mali_texture_type
NULL);
}
ctx->sampler_view_count[shader] = new_nr;
-
- ctx->dirty |= PAN_DIRTY_TEXTURES;
}
static void
/* Bounds test not implemented */
assert(!depth_stencil->depth.bounds_test);
-
- ctx->dirty |= PAN_DIRTY_FS;
}
static void
#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); \
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;