Commit 068c8889 authored by José Casanova Crespo's avatar José Casanova Crespo

v3d: flag dirty state when binding compute states

As introduced in "v3d: flag dirty state when binding new sampler states"
we need to add support for compute states. New flag VC5_DIRTY_COMPTEX and
VC5_DIRTY_UNCOMPILED_CS are introduced.

Reaching 33 flags at the dirty field forces us to change the type to
uint_64. Flags are reordered and empty continuous bits are available
for future pipeline stages.

v2: Update flag conditions to compile cs shader. (Eric Antholt)
    Now dirty flags use uint_64t and flags are reordered.
    Added VC5_DIRTY_UNCOMPILED_CS flag.
Reviewed-by: Eric Anholt's avatarEric Anholt <eric@anholt.net>
parent 175c32e9
Pipeline #63119 passed with stages
in 16 minutes and 3 seconds
......@@ -54,37 +54,41 @@ void v3d_job_add_bo(struct v3d_job *job, struct v3d_bo *bo);
#define using_v3d_simulator false
#endif
#define VC5_DIRTY_BLEND (1 << 0)
#define VC5_DIRTY_RASTERIZER (1 << 1)
#define VC5_DIRTY_ZSA (1 << 2)
#define VC5_DIRTY_FRAGTEX (1 << 3)
#define VC5_DIRTY_VERTTEX (1 << 4)
#define VC5_DIRTY_SHADER_IMAGE (1 << 5)
#define VC5_DIRTY_BLEND_COLOR (1 << 7)
#define VC5_DIRTY_STENCIL_REF (1 << 8)
#define VC5_DIRTY_SAMPLE_STATE (1 << 9)
#define VC5_DIRTY_FRAMEBUFFER (1 << 10)
#define VC5_DIRTY_STIPPLE (1 << 11)
#define VC5_DIRTY_VIEWPORT (1 << 12)
#define VC5_DIRTY_CONSTBUF (1 << 13)
#define VC5_DIRTY_VTXSTATE (1 << 14)
#define VC5_DIRTY_VTXBUF (1 << 15)
#define VC5_DIRTY_SCISSOR (1 << 17)
#define VC5_DIRTY_FLAT_SHADE_FLAGS (1 << 18)
#define VC5_DIRTY_PRIM_MODE (1 << 19)
#define VC5_DIRTY_CLIP (1 << 20)
#define VC5_DIRTY_UNCOMPILED_VS (1 << 21)
#define VC5_DIRTY_UNCOMPILED_FS (1 << 22)
#define VC5_DIRTY_COMPILED_CS (1 << 23)
#define VC5_DIRTY_COMPILED_VS (1 << 24)
#define VC5_DIRTY_COMPILED_FS (1 << 25)
#define VC5_DIRTY_FS_INPUTS (1 << 26)
#define VC5_DIRTY_STREAMOUT (1 << 27)
#define VC5_DIRTY_OQ (1 << 28)
#define VC5_DIRTY_CENTROID_FLAGS (1 << 29)
#define VC5_DIRTY_NOPERSPECTIVE_FLAGS (1 << 30)
#define VC5_DIRTY_SSBO (1 << 31)
#define VC5_DIRTY_BLEND (1ull << 0)
#define VC5_DIRTY_RASTERIZER (1ull << 1)
#define VC5_DIRTY_ZSA (1ull << 2)
#define VC5_DIRTY_COMPTEX (1ull << 3)
#define VC5_DIRTY_VERTTEX (1ull << 4)
#define VC5_DIRTY_FRAGTEX (1ull << 5)
#define VC5_DIRTY_SHADER_IMAGE (1ull << 9)
#define VC5_DIRTY_BLEND_COLOR (1ull << 10)
#define VC5_DIRTY_STENCIL_REF (1ull << 11)
#define VC5_DIRTY_SAMPLE_STATE (1ull << 12)
#define VC5_DIRTY_FRAMEBUFFER (1ull << 13)
#define VC5_DIRTY_STIPPLE (1ull << 14)
#define VC5_DIRTY_VIEWPORT (1ull << 15)
#define VC5_DIRTY_CONSTBUF (1ull << 16)
#define VC5_DIRTY_VTXSTATE (1ull << 17)
#define VC5_DIRTY_VTXBUF (1ull << 18)
#define VC5_DIRTY_SCISSOR (1ull << 19)
#define VC5_DIRTY_FLAT_SHADE_FLAGS (1ull << 20)
#define VC5_DIRTY_PRIM_MODE (1ull << 21)
#define VC5_DIRTY_CLIP (1ull << 22)
#define VC5_DIRTY_UNCOMPILED_CS (1ull << 23)
#define VC5_DIRTY_UNCOMPILED_VS (1ull << 24)
#define VC5_DIRTY_UNCOMPILED_FS (1ull << 25)
#define VC5_DIRTY_COMPILED_CS (1ull << 29)
#define VC5_DIRTY_COMPILED_VS (1ull << 30)
#define VC5_DIRTY_COMPILED_FS (1ull << 31)
#define VC5_DIRTY_FS_INPUTS (1ull << 35)
#define VC5_DIRTY_STREAMOUT (1ull << 36)
#define VC5_DIRTY_OQ (1ull << 37)
#define VC5_DIRTY_CENTROID_FLAGS (1ull << 38)
#define VC5_DIRTY_NOPERSPECTIVE_FLAGS (1ull << 39)
#define VC5_DIRTY_SSBO (1ull << 40)
#define VC5_MAX_FS_INPUTS 64
......@@ -211,7 +215,7 @@ struct v3d_compiled_shader {
* uniforms have to be rewritten (and therefore the shader state
* reemitted).
*/
uint32_t uniform_dirty_bits;
uint64_t uniform_dirty_bits;
};
struct v3d_program_stateobj {
......@@ -437,7 +441,7 @@ struct v3d_context {
struct blitter_context *blitter;
/** bitfield of VC5_DIRTY_* */
uint32_t dirty;
uint64_t dirty;
struct primconvert_context *primconvert;
......
......@@ -679,9 +679,8 @@ v3d_update_compiled_cs(struct v3d_context *v3d)
struct v3d_key local_key;
struct v3d_key *key = &local_key;
if (!(v3d->dirty & (~0 | /* XXX */
VC5_DIRTY_VERTTEX |
VC5_DIRTY_UNCOMPILED_FS))) {
if (!(v3d->dirty & (VC5_DIRTY_UNCOMPILED_CS |
VC5_DIRTY_COMPTEX))) {
return;
}
......@@ -786,6 +785,7 @@ v3d_compute_state_bind(struct pipe_context *pctx, void *state)
struct v3d_context *v3d = v3d_context(pctx);
v3d->prog.bind_compute = state;
v3d->dirty |= VC5_DIRTY_UNCOMPILED_CS;
}
static void *
......
......@@ -434,7 +434,8 @@ v3d_set_shader_uniform_dirty_flags(struct v3d_compiled_shader *shader)
/* We could flag this on just the stage we're
* compiling for, but it's not passed in.
*/
dirty |= VC5_DIRTY_FRAGTEX | VC5_DIRTY_VERTTEX;
dirty |= VC5_DIRTY_FRAGTEX | VC5_DIRTY_VERTTEX |
VC5_DIRTY_COMPTEX;
break;
case QUNIFORM_SSBO_OFFSET:
......@@ -461,7 +462,8 @@ v3d_set_shader_uniform_dirty_flags(struct v3d_compiled_shader *shader)
default:
assert(quniform_contents_is_texture_p0(shader->prog_data.base->uniforms.contents[i]));
dirty |= VC5_DIRTY_FRAGTEX | VC5_DIRTY_VERTTEX;
dirty |= VC5_DIRTY_FRAGTEX | VC5_DIRTY_VERTTEX |
VC5_DIRTY_COMPTEX;
break;
}
}
......
......@@ -781,6 +781,9 @@ v3d_flag_dirty_sampler_state(struct v3d_context *v3d,
case PIPE_SHADER_FRAGMENT:
v3d->dirty |= VC5_DIRTY_FRAGTEX;
break;
case PIPE_SHADER_COMPUTE:
v3d->dirty |= VC5_DIRTY_COMPTEX;
break;
default:
unreachable("Unsupported shader stage");
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment