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 <eric@anholt.net>
This commit is contained in:
@@ -54,37 +54,41 @@ void v3d_job_add_bo(struct v3d_job *job, struct v3d_bo *bo);
|
|||||||
#define using_v3d_simulator false
|
#define using_v3d_simulator false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define VC5_DIRTY_BLEND (1 << 0)
|
#define VC5_DIRTY_BLEND (1ull << 0)
|
||||||
#define VC5_DIRTY_RASTERIZER (1 << 1)
|
#define VC5_DIRTY_RASTERIZER (1ull << 1)
|
||||||
#define VC5_DIRTY_ZSA (1 << 2)
|
#define VC5_DIRTY_ZSA (1ull << 2)
|
||||||
#define VC5_DIRTY_FRAGTEX (1 << 3)
|
#define VC5_DIRTY_COMPTEX (1ull << 3)
|
||||||
#define VC5_DIRTY_VERTTEX (1 << 4)
|
#define VC5_DIRTY_VERTTEX (1ull << 4)
|
||||||
#define VC5_DIRTY_SHADER_IMAGE (1 << 5)
|
#define VC5_DIRTY_FRAGTEX (1ull << 5)
|
||||||
|
|
||||||
#define VC5_DIRTY_BLEND_COLOR (1 << 7)
|
#define VC5_DIRTY_SHADER_IMAGE (1ull << 9)
|
||||||
#define VC5_DIRTY_STENCIL_REF (1 << 8)
|
#define VC5_DIRTY_BLEND_COLOR (1ull << 10)
|
||||||
#define VC5_DIRTY_SAMPLE_STATE (1 << 9)
|
#define VC5_DIRTY_STENCIL_REF (1ull << 11)
|
||||||
#define VC5_DIRTY_FRAMEBUFFER (1 << 10)
|
#define VC5_DIRTY_SAMPLE_STATE (1ull << 12)
|
||||||
#define VC5_DIRTY_STIPPLE (1 << 11)
|
#define VC5_DIRTY_FRAMEBUFFER (1ull << 13)
|
||||||
#define VC5_DIRTY_VIEWPORT (1 << 12)
|
#define VC5_DIRTY_STIPPLE (1ull << 14)
|
||||||
#define VC5_DIRTY_CONSTBUF (1 << 13)
|
#define VC5_DIRTY_VIEWPORT (1ull << 15)
|
||||||
#define VC5_DIRTY_VTXSTATE (1 << 14)
|
#define VC5_DIRTY_CONSTBUF (1ull << 16)
|
||||||
#define VC5_DIRTY_VTXBUF (1 << 15)
|
#define VC5_DIRTY_VTXSTATE (1ull << 17)
|
||||||
#define VC5_DIRTY_SCISSOR (1 << 17)
|
#define VC5_DIRTY_VTXBUF (1ull << 18)
|
||||||
#define VC5_DIRTY_FLAT_SHADE_FLAGS (1 << 18)
|
#define VC5_DIRTY_SCISSOR (1ull << 19)
|
||||||
#define VC5_DIRTY_PRIM_MODE (1 << 19)
|
#define VC5_DIRTY_FLAT_SHADE_FLAGS (1ull << 20)
|
||||||
#define VC5_DIRTY_CLIP (1 << 20)
|
#define VC5_DIRTY_PRIM_MODE (1ull << 21)
|
||||||
#define VC5_DIRTY_UNCOMPILED_VS (1 << 21)
|
#define VC5_DIRTY_CLIP (1ull << 22)
|
||||||
#define VC5_DIRTY_UNCOMPILED_FS (1 << 22)
|
#define VC5_DIRTY_UNCOMPILED_CS (1ull << 23)
|
||||||
#define VC5_DIRTY_COMPILED_CS (1 << 23)
|
#define VC5_DIRTY_UNCOMPILED_VS (1ull << 24)
|
||||||
#define VC5_DIRTY_COMPILED_VS (1 << 24)
|
#define VC5_DIRTY_UNCOMPILED_FS (1ull << 25)
|
||||||
#define VC5_DIRTY_COMPILED_FS (1 << 25)
|
|
||||||
#define VC5_DIRTY_FS_INPUTS (1 << 26)
|
#define VC5_DIRTY_COMPILED_CS (1ull << 29)
|
||||||
#define VC5_DIRTY_STREAMOUT (1 << 27)
|
#define VC5_DIRTY_COMPILED_VS (1ull << 30)
|
||||||
#define VC5_DIRTY_OQ (1 << 28)
|
#define VC5_DIRTY_COMPILED_FS (1ull << 31)
|
||||||
#define VC5_DIRTY_CENTROID_FLAGS (1 << 29)
|
|
||||||
#define VC5_DIRTY_NOPERSPECTIVE_FLAGS (1 << 30)
|
#define VC5_DIRTY_FS_INPUTS (1ull << 35)
|
||||||
#define VC5_DIRTY_SSBO (1 << 31)
|
#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
|
#define VC5_MAX_FS_INPUTS 64
|
||||||
|
|
||||||
@@ -211,7 +215,7 @@ struct v3d_compiled_shader {
|
|||||||
* uniforms have to be rewritten (and therefore the shader state
|
* uniforms have to be rewritten (and therefore the shader state
|
||||||
* reemitted).
|
* reemitted).
|
||||||
*/
|
*/
|
||||||
uint32_t uniform_dirty_bits;
|
uint64_t uniform_dirty_bits;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct v3d_program_stateobj {
|
struct v3d_program_stateobj {
|
||||||
@@ -437,7 +441,7 @@ struct v3d_context {
|
|||||||
struct blitter_context *blitter;
|
struct blitter_context *blitter;
|
||||||
|
|
||||||
/** bitfield of VC5_DIRTY_* */
|
/** bitfield of VC5_DIRTY_* */
|
||||||
uint32_t dirty;
|
uint64_t dirty;
|
||||||
|
|
||||||
struct primconvert_context *primconvert;
|
struct primconvert_context *primconvert;
|
||||||
|
|
||||||
|
@@ -679,9 +679,8 @@ v3d_update_compiled_cs(struct v3d_context *v3d)
|
|||||||
struct v3d_key local_key;
|
struct v3d_key local_key;
|
||||||
struct v3d_key *key = &local_key;
|
struct v3d_key *key = &local_key;
|
||||||
|
|
||||||
if (!(v3d->dirty & (~0 | /* XXX */
|
if (!(v3d->dirty & (VC5_DIRTY_UNCOMPILED_CS |
|
||||||
VC5_DIRTY_VERTTEX |
|
VC5_DIRTY_COMPTEX))) {
|
||||||
VC5_DIRTY_UNCOMPILED_FS))) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -786,6 +785,7 @@ v3d_compute_state_bind(struct pipe_context *pctx, void *state)
|
|||||||
struct v3d_context *v3d = v3d_context(pctx);
|
struct v3d_context *v3d = v3d_context(pctx);
|
||||||
|
|
||||||
v3d->prog.bind_compute = state;
|
v3d->prog.bind_compute = state;
|
||||||
|
v3d->dirty |= VC5_DIRTY_UNCOMPILED_CS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *
|
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
|
/* We could flag this on just the stage we're
|
||||||
* compiling for, but it's not passed in.
|
* 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;
|
break;
|
||||||
|
|
||||||
case QUNIFORM_SSBO_OFFSET:
|
case QUNIFORM_SSBO_OFFSET:
|
||||||
@@ -461,7 +462,8 @@ v3d_set_shader_uniform_dirty_flags(struct v3d_compiled_shader *shader)
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
assert(quniform_contents_is_texture_p0(shader->prog_data.base->uniforms.contents[i]));
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -781,6 +781,9 @@ v3d_flag_dirty_sampler_state(struct v3d_context *v3d,
|
|||||||
case PIPE_SHADER_FRAGMENT:
|
case PIPE_SHADER_FRAGMENT:
|
||||||
v3d->dirty |= VC5_DIRTY_FRAGTEX;
|
v3d->dirty |= VC5_DIRTY_FRAGTEX;
|
||||||
break;
|
break;
|
||||||
|
case PIPE_SHADER_COMPUTE:
|
||||||
|
v3d->dirty |= VC5_DIRTY_COMPTEX;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
unreachable("Unsupported shader stage");
|
unreachable("Unsupported shader stage");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user