mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
r600g: implement texture barrier
This commit is contained in:
parent
948e1eb8e9
commit
d04ab396a5
5 changed files with 29 additions and 0 deletions
|
|
@ -920,6 +920,7 @@ void evergreen_init_state_functions(struct r600_pipe_context *rctx)
|
|||
rctx->context.set_viewport_state = evergreen_set_viewport_state;
|
||||
rctx->context.sampler_view_destroy = r600_sampler_view_destroy;
|
||||
rctx->context.redefine_user_buffer = u_default_redefine_user_buffer;
|
||||
rctx->context.texture_barrier = r600_texture_barrier;
|
||||
}
|
||||
|
||||
void evergreen_init_config(struct r600_pipe_context *rctx)
|
||||
|
|
|
|||
|
|
@ -290,6 +290,7 @@ void r600_query_predication(struct r600_context *ctx, struct r600_query *query,
|
|||
int flag_wait);
|
||||
void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence,
|
||||
unsigned offset, unsigned value);
|
||||
void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags);
|
||||
|
||||
int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon);
|
||||
void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *draw);
|
||||
|
|
|
|||
|
|
@ -298,6 +298,8 @@ void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
|
|||
struct pipe_resource *buffer);
|
||||
void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info);
|
||||
|
||||
void r600_texture_barrier(struct pipe_context *ctx);
|
||||
|
||||
/*
|
||||
* common helpers
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -934,6 +934,13 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
void r600_texture_barrier(struct pipe_context *ctx)
|
||||
{
|
||||
struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
|
||||
|
||||
r600_context_flush_all(&rctx->ctx, S_0085F0_TC_ACTION_ENA(1));
|
||||
}
|
||||
|
||||
void r600_init_state_functions(struct r600_pipe_context *rctx)
|
||||
{
|
||||
rctx->context.create_blend_state = r600_create_blend_state;
|
||||
|
|
@ -974,6 +981,7 @@ void r600_init_state_functions(struct r600_pipe_context *rctx)
|
|||
rctx->context.set_viewport_state = r600_set_viewport_state;
|
||||
rctx->context.sampler_view_destroy = r600_sampler_view_destroy;
|
||||
rctx->context.redefine_user_buffer = u_default_redefine_user_buffer;
|
||||
rctx->context.texture_barrier = r600_texture_barrier;
|
||||
}
|
||||
|
||||
void r600_init_config(struct r600_pipe_context *rctx)
|
||||
|
|
|
|||
|
|
@ -771,6 +771,23 @@ static void rv6xx_context_surface_base_update(struct r600_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
/* Flushes all surfaces */
|
||||
void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags)
|
||||
{
|
||||
unsigned ndwords = 5;
|
||||
|
||||
if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) {
|
||||
/* need to flush */
|
||||
r600_context_flush(ctx);
|
||||
}
|
||||
|
||||
ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, ctx->predicate_drawing);
|
||||
ctx->pm4[ctx->pm4_cdwords++] = flush_flags; /* CP_COHER_CNTL */
|
||||
ctx->pm4[ctx->pm4_cdwords++] = 0xffffffff; /* CP_COHER_SIZE */
|
||||
ctx->pm4[ctx->pm4_cdwords++] = 0; /* CP_COHER_BASE */
|
||||
ctx->pm4[ctx->pm4_cdwords++] = 0x0000000A; /* POLL_INTERVAL */
|
||||
}
|
||||
|
||||
void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
|
||||
unsigned flush_mask, struct r600_bo *rbo)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue