I pushed this series. Thanks. Marek
On Sun, Aug 9, 2015 at 11:42 PM, Grazvydas Ignotas <nota...@gmail.com> wrote: > This is analogous to r300_mark_atom_dirty() used by r300, and will > be used by later patches. For common radeon code, appropriate helper > is called through a function pointer. > > No functional changes. > --- > src/gallium/drivers/r600/evergreen_compute.c | 2 +- > src/gallium/drivers/r600/evergreen_state.c | 28 ++++----- > src/gallium/drivers/r600/r600_blit.c | 16 +++--- > src/gallium/drivers/r600/r600_hw_context.c | 54 +++++++++--------- > src/gallium/drivers/r600/r600_pipe.c | 1 + > src/gallium/drivers/r600/r600_pipe.h | 25 +++++++-- > src/gallium/drivers/r600/r600_state.c | 28 ++++----- > src/gallium/drivers/r600/r600_state_common.c | 75 > +++++++++++++------------ > src/gallium/drivers/radeon/r600_pipe_common.h | 3 + > src/gallium/drivers/radeon/r600_streamout.c | 14 +++-- > src/gallium/drivers/radeon/r600_texture.c | 2 +- > src/gallium/drivers/radeonsi/si_blit.c | 14 ++--- > src/gallium/drivers/radeonsi/si_descriptors.c | 6 +- > src/gallium/drivers/radeonsi/si_hw_context.c | 12 ++-- > src/gallium/drivers/radeonsi/si_pipe.c | 1 + > src/gallium/drivers/radeonsi/si_pipe.h | 14 +++++ > src/gallium/drivers/radeonsi/si_state.c | 18 +++--- > src/gallium/drivers/radeonsi/si_state_draw.c | 2 +- > src/gallium/drivers/radeonsi/si_state_shaders.c | 12 ++-- > 19 files changed, 182 insertions(+), 145 deletions(-) > > diff --git a/src/gallium/drivers/r600/evergreen_compute.c > b/src/gallium/drivers/r600/evergreen_compute.c > index d89e3de..5100330 100644 > --- a/src/gallium/drivers/r600/evergreen_compute.c > +++ b/src/gallium/drivers/r600/evergreen_compute.c > @@ -163,7 +163,7 @@ static void evergreen_cs_set_vertex_buffer( > rctx->b.flags |= R600_CONTEXT_INV_VERTEX_CACHE; > state->enabled_mask |= 1 << vb_index; > state->dirty_mask |= 1 << vb_index; > - state->atom.dirty = true; > + r600_mark_atom_dirty(rctx, &state->atom); > } > > static void evergreen_cs_set_constant_buffer( > diff --git a/src/gallium/drivers/r600/evergreen_state.c > b/src/gallium/drivers/r600/evergreen_state.c > index 13ecc46..bb53383 100644 > --- a/src/gallium/drivers/r600/evergreen_state.c > +++ b/src/gallium/drivers/r600/evergreen_state.c > @@ -896,7 +896,7 @@ static void evergreen_set_scissor_states(struct > pipe_context *ctx, > > for (i = start_slot; i < start_slot + num_scissors; i++) { > rctx->scissor[i].scissor = state[i - start_slot]; > - rctx->scissor[i].atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->scissor[i].atom); > } > } > > @@ -1346,11 +1346,11 @@ static void evergreen_set_framebuffer_state(struct > pipe_context *ctx, > > if (rctx->alphatest_state.bypass != alphatest_bypass) { > rctx->alphatest_state.bypass = alphatest_bypass; > - rctx->alphatest_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->alphatest_state.atom); > } > if (rctx->alphatest_state.cb0_export_16bpc != export_16bpc) { > rctx->alphatest_state.cb0_export_16bpc = export_16bpc; > - rctx->alphatest_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->alphatest_state.atom); > } > } > > @@ -1366,28 +1366,28 @@ static void evergreen_set_framebuffer_state(struct > pipe_context *ctx, > > if (state->zsbuf->format != > rctx->poly_offset_state.zs_format) { > rctx->poly_offset_state.zs_format = > state->zsbuf->format; > - rctx->poly_offset_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->poly_offset_state.atom); > } > > if (rctx->db_state.rsurf != surf) { > rctx->db_state.rsurf = surf; > - rctx->db_state.atom.dirty = true; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_state.atom); > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } else if (rctx->db_state.rsurf) { > rctx->db_state.rsurf = NULL; > - rctx->db_state.atom.dirty = true; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_state.atom); > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > > if (rctx->cb_misc_state.nr_cbufs != state->nr_cbufs) { > rctx->cb_misc_state.nr_cbufs = state->nr_cbufs; > - rctx->cb_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->cb_misc_state.atom); > } > > if (state->nr_cbufs == 0 && rctx->alphatest_state.bypass) { > rctx->alphatest_state.bypass = false; > - rctx->alphatest_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->alphatest_state.atom); > } > > log_samples = util_logbase2(rctx->framebuffer.nr_samples); > @@ -1396,7 +1396,7 @@ static void evergreen_set_framebuffer_state(struct > pipe_context *ctx, > rctx->b.family == CHIP_RV770) && > rctx->db_misc_state.log_samples != log_samples) { > rctx->db_misc_state.log_samples = log_samples; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > > > @@ -1424,7 +1424,7 @@ static void evergreen_set_framebuffer_state(struct > pipe_context *ctx, > rctx->framebuffer.atom.num_dw += 4; > } > > - rctx->framebuffer.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->framebuffer.atom); > > r600_set_sample_locations_constant_buffer(rctx); > } > @@ -1438,7 +1438,7 @@ static void evergreen_set_min_samples(struct > pipe_context *ctx, unsigned min_sam > > rctx->ps_iter_samples = min_samples; > if (rctx->framebuffer.nr_samples > 1) { > - rctx->framebuffer.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->framebuffer.atom); > } > } > > @@ -3180,7 +3180,7 @@ void evergreen_update_db_shader_control(struct > r600_context * rctx) > > if (db_shader_control != rctx->db_misc_state.db_shader_control) { > rctx->db_misc_state.db_shader_control = db_shader_control; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } > > diff --git a/src/gallium/drivers/r600/r600_blit.c > b/src/gallium/drivers/r600/r600_blit.c > index 8664e03..b0002c3 100644 > --- a/src/gallium/drivers/r600/r600_blit.c > +++ b/src/gallium/drivers/r600/r600_blit.c > @@ -145,7 +145,7 @@ static void r600_blit_decompress_depth(struct > pipe_context *ctx, > rctx->db_misc_state.copy_depth = util_format_has_depth(desc); > rctx->db_misc_state.copy_stencil = util_format_has_stencil(desc); > rctx->db_misc_state.copy_sample = first_sample; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > > for (level = first_level; level <= last_level; level++) { > if (!staging && !(texture->dirty_level_mask & (1 << level))) > @@ -162,7 +162,7 @@ static void r600_blit_decompress_depth(struct > pipe_context *ctx, > > if (sample != > rctx->db_misc_state.copy_sample) { > rctx->db_misc_state.copy_sample = > sample; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->db_misc_state.atom); > } > > surf_tmpl.format = > texture->resource.b.b.format; > @@ -197,7 +197,7 @@ static void r600_blit_decompress_depth(struct > pipe_context *ctx, > > /* reenable compression in DB_RENDER_CONTROL */ > rctx->db_misc_state.flush_depthstencil_through_cb = false; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > > static void r600_blit_decompress_depth_in_place(struct r600_context *rctx, > @@ -210,7 +210,7 @@ static void r600_blit_decompress_depth_in_place(struct > r600_context *rctx, > > /* Enable decompression in DB_RENDER_CONTROL */ > rctx->db_misc_state.flush_depthstencil_in_place = true; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > > surf_tmpl.format = texture->resource.b.b.format; > > @@ -248,7 +248,7 @@ static void r600_blit_decompress_depth_in_place(struct > r600_context *rctx, > > /* Disable decompression in DB_RENDER_CONTROL */ > rctx->db_misc_state.flush_depthstencil_in_place = false; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > > void r600_decompress_depth_textures(struct r600_context *rctx, > @@ -437,10 +437,10 @@ static void r600_clear(struct pipe_context *ctx, > unsigned buffers, > fb->zsbuf->u.tex.last_layer == > util_max_layer(&rtex->resource.b.b, level)) { > if (rtex->depth_clear_value != depth) { > rtex->depth_clear_value = depth; > - rctx->db_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->db_state.atom); > } > rctx->db_misc_state.htile_clear = true; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } > > @@ -453,7 +453,7 @@ static void r600_clear(struct pipe_context *ctx, unsigned > buffers, > /* disable fast clear */ > if (rctx->db_misc_state.htile_clear) { > rctx->db_misc_state.htile_clear = false; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } > > diff --git a/src/gallium/drivers/r600/r600_hw_context.c > b/src/gallium/drivers/r600/r600_hw_context.c > index ad11e76..d67fdfd 100644 > --- a/src/gallium/drivers/r600/r600_hw_context.c > +++ b/src/gallium/drivers/r600/r600_hw_context.c > @@ -296,43 +296,43 @@ void r600_begin_new_cs(struct r600_context *ctx) > r600_emit_command_buffer(ctx->b.rings.gfx.cs, &ctx->start_cs_cmd); > > /* Re-emit states. */ > - ctx->alphatest_state.atom.dirty = true; > - ctx->blend_color.atom.dirty = true; > - ctx->cb_misc_state.atom.dirty = true; > - ctx->clip_misc_state.atom.dirty = true; > - ctx->clip_state.atom.dirty = true; > - ctx->db_misc_state.atom.dirty = true; > - ctx->db_state.atom.dirty = true; > - ctx->framebuffer.atom.dirty = true; > - ctx->pixel_shader.atom.dirty = true; > - ctx->poly_offset_state.atom.dirty = true; > - ctx->vgt_state.atom.dirty = true; > - ctx->sample_mask.atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->alphatest_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->blend_color.atom); > + r600_mark_atom_dirty(ctx, &ctx->cb_misc_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->clip_misc_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->clip_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->db_misc_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->db_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->framebuffer.atom); > + r600_mark_atom_dirty(ctx, &ctx->pixel_shader.atom); > + r600_mark_atom_dirty(ctx, &ctx->poly_offset_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->vgt_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->sample_mask.atom); > for (i = 0; i < R600_MAX_VIEWPORTS; i++) { > - ctx->scissor[i].atom.dirty = true; > - ctx->viewport[i].atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->scissor[i].atom); > + r600_mark_atom_dirty(ctx, &ctx->viewport[i].atom); > } > - ctx->config_state.atom.dirty = true; > - ctx->stencil_ref.atom.dirty = true; > - ctx->vertex_fetch_shader.atom.dirty = true; > - ctx->export_shader.atom.dirty = true; > - ctx->shader_stages.atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->config_state.atom); > + r600_mark_atom_dirty(ctx, &ctx->stencil_ref.atom); > + r600_mark_atom_dirty(ctx, &ctx->vertex_fetch_shader.atom); > + r600_mark_atom_dirty(ctx, &ctx->export_shader.atom); > + r600_mark_atom_dirty(ctx, &ctx->shader_stages.atom); > if (ctx->gs_shader) { > - ctx->geometry_shader.atom.dirty = true; > - ctx->gs_rings.atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->geometry_shader.atom); > + r600_mark_atom_dirty(ctx, &ctx->gs_rings.atom); > } > - ctx->vertex_shader.atom.dirty = true; > - ctx->b.streamout.enable_atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->vertex_shader.atom); > + r600_mark_atom_dirty(ctx, &ctx->b.streamout.enable_atom); > > if (ctx->blend_state.cso) > - ctx->blend_state.atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->blend_state.atom); > if (ctx->dsa_state.cso) > - ctx->dsa_state.atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->dsa_state.atom); > if (ctx->rasterizer_state.cso) > - ctx->rasterizer_state.atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->rasterizer_state.atom); > > if (ctx->b.chip_class <= R700) { > - ctx->seamless_cube_map.atom.dirty = true; > + r600_mark_atom_dirty(ctx, &ctx->seamless_cube_map.atom); > } > > ctx->vertex_buffer_state.dirty_mask = > ctx->vertex_buffer_state.enabled_mask; > diff --git a/src/gallium/drivers/r600/r600_pipe.c > b/src/gallium/drivers/r600/r600_pipe.c > index f02014e..c4f5c74 100644 > --- a/src/gallium/drivers/r600/r600_pipe.c > +++ b/src/gallium/drivers/r600/r600_pipe.c > @@ -120,6 +120,7 @@ static struct pipe_context *r600_create_context(struct > pipe_screen *screen, void > rctx->b.b.screen = screen; > rctx->b.b.priv = priv; > rctx->b.b.destroy = r600_destroy_context; > + rctx->b.set_atom_dirty = (void *)r600_set_atom_dirty; > > if (!r600_common_context_init(&rctx->b, &rscreen->b)) > goto fail; > diff --git a/src/gallium/drivers/r600/r600_pipe.h > b/src/gallium/drivers/r600/r600_pipe.h > index bcb9390..3653e8f 100644 > --- a/src/gallium/drivers/r600/r600_pipe.h > +++ b/src/gallium/drivers/r600/r600_pipe.h > @@ -498,29 +498,44 @@ static inline void r600_emit_command_buffer(struct > radeon_winsys_cs *cs, > cs->cdw += cb->num_dw; > } > > +static inline void r600_set_atom_dirty(struct r600_context *rctx, > + struct r600_atom *atom, > + bool dirty) > +{ > + atom->dirty = dirty; > +} > + > +static inline void r600_mark_atom_dirty(struct r600_context *rctx, > + struct r600_atom *atom) > +{ > + r600_set_atom_dirty(rctx, atom, true); > +} > + > void r600_trace_emit(struct r600_context *rctx); > > static inline void r600_emit_atom(struct r600_context *rctx, struct > r600_atom *atom) > { > atom->emit(&rctx->b, atom); > - atom->dirty = false; > + r600_set_atom_dirty(rctx, atom, false); > if (rctx->screen->b.trace_bo) { > r600_trace_emit(rctx); > } > } > > -static inline void r600_set_cso_state(struct r600_cso_state *state, void > *cso) > +static inline void r600_set_cso_state(struct r600_context *rctx, > + struct r600_cso_state *state, void *cso) > { > state->cso = cso; > - state->atom.dirty = cso != NULL; > + r600_set_atom_dirty(rctx, &state->atom, cso != NULL); > } > > -static inline void r600_set_cso_state_with_cb(struct r600_cso_state *state, > void *cso, > +static inline void r600_set_cso_state_with_cb(struct r600_context *rctx, > + struct r600_cso_state *state, > void *cso, > struct r600_command_buffer *cb) > { > state->cb = cb; > state->atom.num_dw = cb ? cb->num_dw : 0; > - r600_set_cso_state(state, cso); > + r600_set_cso_state(rctx, state, cso); > } > > /* compute_memory_pool.c */ > diff --git a/src/gallium/drivers/r600/r600_state.c > b/src/gallium/drivers/r600/r600_state.c > index c28a1e1..7fb03b4 100644 > --- a/src/gallium/drivers/r600/r600_state.c > +++ b/src/gallium/drivers/r600/r600_state.c > @@ -802,7 +802,7 @@ static void r600_set_scissor_states(struct pipe_context > *ctx, > return; > > for (i = start_slot ; i < start_slot + num_scissors; i++) { > - rctx->scissor[i].atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->scissor[i].atom); > } > } > > @@ -1193,7 +1193,7 @@ static void r600_set_framebuffer_state(struct > pipe_context *ctx, > > if (rctx->alphatest_state.bypass != alphatest_bypass) { > rctx->alphatest_state.bypass = alphatest_bypass; > - rctx->alphatest_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->alphatest_state.atom); > } > } > > @@ -1209,28 +1209,28 @@ static void r600_set_framebuffer_state(struct > pipe_context *ctx, > > if (state->zsbuf->format != > rctx->poly_offset_state.zs_format) { > rctx->poly_offset_state.zs_format = > state->zsbuf->format; > - rctx->poly_offset_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->poly_offset_state.atom); > } > > if (rctx->db_state.rsurf != surf) { > rctx->db_state.rsurf = surf; > - rctx->db_state.atom.dirty = true; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_state.atom); > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } else if (rctx->db_state.rsurf) { > rctx->db_state.rsurf = NULL; > - rctx->db_state.atom.dirty = true; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_state.atom); > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > > if (rctx->cb_misc_state.nr_cbufs != state->nr_cbufs) { > rctx->cb_misc_state.nr_cbufs = state->nr_cbufs; > - rctx->cb_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->cb_misc_state.atom); > } > > if (state->nr_cbufs == 0 && rctx->alphatest_state.bypass) { > rctx->alphatest_state.bypass = false; > - rctx->alphatest_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->alphatest_state.atom); > } > > /* Calculate the CS size. */ > @@ -1250,7 +1250,7 @@ static void r600_set_framebuffer_state(struct > pipe_context *ctx, > rctx->framebuffer.atom.num_dw += 2; > } > > - rctx->framebuffer.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->framebuffer.atom); > > r600_set_sample_locations_constant_buffer(rctx); > } > @@ -1541,9 +1541,9 @@ static void r600_set_min_samples(struct pipe_context > *ctx, unsigned min_samples) > > rctx->ps_iter_samples = min_samples; > if (rctx->framebuffer.nr_samples > 1) { > - rctx->rasterizer_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->rasterizer_state.atom); > if (rctx->b.chip_class == R600) > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } > > @@ -2089,7 +2089,7 @@ bool r600_adjust_gprs(struct r600_context *rctx) > if (rctx->config_state.sq_gpr_resource_mgmt_1 != tmp || > rctx->config_state.sq_gpr_resource_mgmt_2 != tmp2) { > rctx->config_state.sq_gpr_resource_mgmt_1 = tmp; > rctx->config_state.sq_gpr_resource_mgmt_2 = tmp2; > - rctx->config_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->config_state.atom); > rctx->b.flags |= R600_CONTEXT_WAIT_3D_IDLE; > } > return true; > @@ -2796,7 +2796,7 @@ void r600_update_db_shader_control(struct r600_context > * rctx) > > if (db_shader_control != rctx->db_misc_state.db_shader_control) { > rctx->db_misc_state.db_shader_control = db_shader_control; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } > > diff --git a/src/gallium/drivers/r600/r600_state_common.c > b/src/gallium/drivers/r600/r600_state_common.c > index 455e59a..2d654dc 100644 > --- a/src/gallium/drivers/r600/r600_state_common.c > +++ b/src/gallium/drivers/r600/r600_state_common.c > @@ -127,11 +127,11 @@ static void r600_bind_blend_state_internal(struct > r600_context *rctx, > rctx->dual_src_blend = blend->dual_src_blend; > > if (!blend_disable) { > - r600_set_cso_state_with_cb(&rctx->blend_state, blend, > &blend->buffer); > + r600_set_cso_state_with_cb(rctx, &rctx->blend_state, blend, > &blend->buffer); > color_control = blend->cb_color_control; > } else { > /* Blending is disabled. */ > - r600_set_cso_state_with_cb(&rctx->blend_state, blend, > &blend->buffer_no_blend); > + r600_set_cso_state_with_cb(rctx, &rctx->blend_state, blend, > &blend->buffer_no_blend); > color_control = blend->cb_color_control_no_blend; > } > > @@ -150,7 +150,7 @@ static void r600_bind_blend_state_internal(struct > r600_context *rctx, > update_cb = true; > } > if (update_cb) { > - rctx->cb_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->cb_misc_state.atom); > } > } > > @@ -160,7 +160,7 @@ static void r600_bind_blend_state(struct pipe_context > *ctx, void *state) > struct r600_blend_state *blend = (struct r600_blend_state *)state; > > if (blend == NULL) { > - r600_set_cso_state_with_cb(&rctx->blend_state, NULL, NULL); > + r600_set_cso_state_with_cb(rctx, &rctx->blend_state, NULL, > NULL); > return; > } > > @@ -173,7 +173,7 @@ static void r600_set_blend_color(struct pipe_context *ctx, > struct r600_context *rctx = (struct r600_context *)ctx; > > rctx->blend_color.state = *state; > - rctx->blend_color.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->blend_color.atom); > } > > void r600_emit_blend_color(struct r600_context *rctx, struct r600_atom *atom) > @@ -210,7 +210,7 @@ static void r600_set_clip_state(struct pipe_context *ctx, > struct pipe_constant_buffer cb; > > rctx->clip_state.state = *state; > - rctx->clip_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->clip_state.atom); > > cb.buffer = NULL; > cb.user_buffer = state->ucp; > @@ -226,7 +226,7 @@ static void r600_set_stencil_ref(struct pipe_context *ctx, > struct r600_context *rctx = (struct r600_context *)ctx; > > rctx->stencil_ref.state = *state; > - rctx->stencil_ref.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->stencil_ref.atom); > } > > void r600_emit_stencil_ref(struct r600_context *rctx, struct r600_atom *atom) > @@ -274,11 +274,11 @@ static void r600_bind_dsa_state(struct pipe_context > *ctx, void *state) > struct r600_stencil_ref ref; > > if (state == NULL) { > - r600_set_cso_state_with_cb(&rctx->dsa_state, NULL, NULL); > + r600_set_cso_state_with_cb(rctx, &rctx->dsa_state, NULL, > NULL); > return; > } > > - r600_set_cso_state_with_cb(&rctx->dsa_state, dsa, &dsa->buffer); > + r600_set_cso_state_with_cb(rctx, &rctx->dsa_state, dsa, &dsa->buffer); > > ref.ref_value[0] = rctx->stencil_ref.pipe_state.ref_value[0]; > ref.ref_value[1] = rctx->stencil_ref.pipe_state.ref_value[1]; > @@ -293,7 +293,7 @@ static void r600_bind_dsa_state(struct pipe_context *ctx, > void *state) > * we are having lockup on evergreen so do not enable > * hyperz when not writing zbuffer > */ > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } > > @@ -304,7 +304,7 @@ static void r600_bind_dsa_state(struct pipe_context *ctx, > void *state) > rctx->alphatest_state.sx_alpha_ref != dsa->alpha_ref) { > rctx->alphatest_state.sx_alpha_test_control = > dsa->sx_alpha_test_control; > rctx->alphatest_state.sx_alpha_ref = dsa->alpha_ref; > - rctx->alphatest_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->alphatest_state.atom); > } > } > > @@ -318,14 +318,14 @@ static void r600_bind_rs_state(struct pipe_context > *ctx, void *state) > > rctx->rasterizer = rs; > > - r600_set_cso_state_with_cb(&rctx->rasterizer_state, rs, &rs->buffer); > + r600_set_cso_state_with_cb(rctx, &rctx->rasterizer_state, rs, > &rs->buffer); > > if (rs->offset_enable && > (rs->offset_units != rctx->poly_offset_state.offset_units || > rs->offset_scale != rctx->poly_offset_state.offset_scale)) { > rctx->poly_offset_state.offset_units = rs->offset_units; > rctx->poly_offset_state.offset_scale = rs->offset_scale; > - rctx->poly_offset_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->poly_offset_state.atom); > } > > /* Update clip_misc_state. */ > @@ -333,14 +333,14 @@ static void r600_bind_rs_state(struct pipe_context > *ctx, void *state) > rctx->clip_misc_state.clip_plane_enable != rs->clip_plane_enable) > { > rctx->clip_misc_state.pa_cl_clip_cntl = rs->pa_cl_clip_cntl; > rctx->clip_misc_state.clip_plane_enable = > rs->clip_plane_enable; > - rctx->clip_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->clip_misc_state.atom); > } > > /* Workaround for a missing scissor enable on r600. */ > if (rctx->b.chip_class == R600 && > rs->scissor_enable != rctx->scissor[0].enable) { > rctx->scissor[0].enable = rs->scissor_enable; > - rctx->scissor[0].atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->scissor[0].atom); > } > > /* Re-emit PA_SC_LINE_STIPPLE. */ > @@ -378,7 +378,7 @@ void r600_sampler_states_dirty(struct r600_context *rctx, > state->atom.num_dw = > util_bitcount(state->dirty_mask & > state->has_bordercolor_mask) * 11 + > util_bitcount(state->dirty_mask & > ~state->has_bordercolor_mask) * 5; > - state->atom.dirty = true; > + r600_mark_atom_dirty(rctx, &state->atom); > } > } > > @@ -443,7 +443,7 @@ static void r600_bind_sampler_states(struct pipe_context > *pipe, > /* change in TA_CNTL_AUX need a pipeline flush */ > rctx->b.flags |= R600_CONTEXT_WAIT_3D_IDLE; > rctx->seamless_cube_map.enabled = seamless_cube_map; > - rctx->seamless_cube_map.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->seamless_cube_map.atom); > } > } > > @@ -483,7 +483,7 @@ static void r600_bind_vertex_elements(struct pipe_context > *ctx, void *state) > { > struct r600_context *rctx = (struct r600_context *)ctx; > > - r600_set_cso_state(&rctx->vertex_fetch_shader, state); > + r600_set_cso_state(rctx, &rctx->vertex_fetch_shader, state); > } > > static void r600_delete_vertex_elements(struct pipe_context *ctx, void > *state) > @@ -513,7 +513,7 @@ void r600_vertex_buffers_dirty(struct r600_context *rctx) > rctx->b.flags |= R600_CONTEXT_INV_VERTEX_CACHE; > rctx->vertex_buffer_state.atom.num_dw = (rctx->b.chip_class > >= EVERGREEN ? 12 : 11) * > > util_bitcount(rctx->vertex_buffer_state.dirty_mask); > - rctx->vertex_buffer_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->vertex_buffer_state.atom); > } > } > > @@ -570,7 +570,7 @@ void r600_sampler_views_dirty(struct r600_context *rctx, > rctx->b.flags |= R600_CONTEXT_INV_TEX_CACHE; > state->atom.num_dw = (rctx->b.chip_class >= EVERGREEN ? 14 : > 13) * > util_bitcount(state->dirty_mask); > - state->atom.dirty = true; > + r600_mark_atom_dirty(rctx, &state->atom); > } > } > > @@ -673,7 +673,7 @@ static void r600_set_viewport_states(struct pipe_context > *ctx, > > for (i = start_slot; i < start_slot + num_viewports; i++) { > rctx->viewport[i].state = state[i - start_slot]; > - rctx->viewport[i].atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->viewport[i].atom); > } > } > > @@ -913,7 +913,7 @@ void r600_constant_buffers_dirty(struct r600_context > *rctx, struct r600_constbuf > rctx->b.flags |= R600_CONTEXT_INV_CONST_CACHE; > state->atom.num_dw = rctx->b.chip_class >= EVERGREEN ? > util_bitcount(state->dirty_mask)*20 > : > util_bitcount(state->dirty_mask)*19; > - state->atom.dirty = true; > + r600_mark_atom_dirty(rctx, &state->atom); > } > } > > @@ -982,7 +982,7 @@ static void r600_set_sample_mask(struct pipe_context > *pipe, unsigned sample_mask > return; > > rctx->sample_mask.sample_mask = sample_mask; > - rctx->sample_mask.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->sample_mask.atom); > } > > /* > @@ -1107,27 +1107,28 @@ static void update_shader_atom(struct pipe_context > *ctx, > struct r600_shader_state *state, > struct r600_pipe_shader *shader) > { > + struct r600_context *rctx = (struct r600_context *)ctx; > + > state->shader = shader; > if (shader) { > state->atom.num_dw = shader->command_buffer.num_dw; > - state->atom.dirty = true; > r600_context_add_resource_size(ctx, (struct pipe_resource > *)shader->bo); > } else { > state->atom.num_dw = 0; > - state->atom.dirty = false; > } > + r600_mark_atom_dirty(rctx, &state->atom); > } > > static void update_gs_block_state(struct r600_context *rctx, unsigned enable) > { > if (rctx->shader_stages.geom_enable != enable) { > rctx->shader_stages.geom_enable = enable; > - rctx->shader_stages.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->shader_stages.atom); > } > > if (rctx->gs_rings.enable != enable) { > rctx->gs_rings.enable = enable; > - rctx->gs_rings.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->gs_rings.atom); > > if (enable && !rctx->gs_rings.esgs_ring.buffer) { > unsigned size = 0x1C000; > @@ -1192,7 +1193,7 @@ static bool r600_update_derived_state(struct > r600_context *rctx) > > if (!rctx->shader_stages.geom_enable) { > rctx->shader_stages.geom_enable = true; > - rctx->shader_stages.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->shader_stages.atom); > } > > /* gs_shader provides GS and VS (copy shader) */ > @@ -1206,7 +1207,7 @@ static bool r600_update_derived_state(struct > r600_context *rctx) > rctx->clip_misc_state.pa_cl_vs_out_cntl = > rctx->gs_shader->current->gs_copy_shader->pa_cl_vs_out_cntl; > rctx->clip_misc_state.clip_dist_write = > rctx->gs_shader->current->gs_copy_shader->shader.clip_dist_write; > rctx->clip_misc_state.clip_disable = > rctx->gs_shader->current->shader.vs_position_window_space; > - rctx->clip_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->clip_misc_state.atom); > } > rctx->b.streamout.enabled_stream_buffers_mask = > rctx->gs_shader->current->gs_copy_shader->enabled_stream_buffers_mask; > } > @@ -1224,7 +1225,7 @@ static bool r600_update_derived_state(struct > r600_context *rctx) > update_shader_atom(ctx, &rctx->geometry_shader, NULL); > update_shader_atom(ctx, &rctx->export_shader, NULL); > rctx->shader_stages.geom_enable = false; > - rctx->shader_stages.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->shader_stages.atom); > } > > r600_shader_select(ctx, rctx->vs_shader, &vs_dirty); > @@ -1241,7 +1242,7 @@ static bool r600_update_derived_state(struct > r600_context *rctx) > rctx->clip_misc_state.pa_cl_vs_out_cntl = > rctx->vs_shader->current->pa_cl_vs_out_cntl; > rctx->clip_misc_state.clip_dist_write = > rctx->vs_shader->current->shader.clip_dist_write; > rctx->clip_misc_state.clip_disable = > rctx->vs_shader->current->shader.vs_position_window_space; > - rctx->clip_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->clip_misc_state.atom); > } > rctx->b.streamout.enabled_stream_buffers_mask = > rctx->vs_shader->current->enabled_stream_buffers_mask; > } > @@ -1254,7 +1255,7 @@ static bool r600_update_derived_state(struct > r600_context *rctx) > > if (rctx->cb_misc_state.nr_ps_color_outputs != > rctx->ps_shader->current->nr_ps_color_outputs) { > rctx->cb_misc_state.nr_ps_color_outputs = > rctx->ps_shader->current->nr_ps_color_outputs; > - rctx->cb_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->cb_misc_state.atom); > } > > if (rctx->b.chip_class <= R700) { > @@ -1262,7 +1263,7 @@ static bool r600_update_derived_state(struct > r600_context *rctx) > > if (rctx->cb_misc_state.multiwrite != multiwrite) { > rctx->cb_misc_state.multiwrite = multiwrite; > - rctx->cb_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, > &rctx->cb_misc_state.atom); > } > } > > @@ -1276,7 +1277,7 @@ static bool r600_update_derived_state(struct > r600_context *rctx) > r600_update_ps_state(ctx, > rctx->ps_shader->current); > } > > - rctx->shader_stages.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->shader_stages.atom); > update_shader_atom(ctx, &rctx->pixel_shader, > rctx->ps_shader->current); > } > > @@ -1455,13 +1456,13 @@ static void r600_draw_vbo(struct pipe_context *ctx, > const struct pipe_draw_info > rctx->vgt_state.vgt_multi_prim_ib_reset_en = > info.primitive_restart; > rctx->vgt_state.vgt_multi_prim_ib_reset_indx = > info.restart_index; > rctx->vgt_state.vgt_indx_offset = info.index_bias; > - rctx->vgt_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->vgt_state.atom); > } > > /* Workaround for hardware deadlock on certain R600 ASICs: write into > a CB register. */ > if (rctx->b.chip_class == R600) { > rctx->b.flags |= R600_CONTEXT_PS_PARTIAL_FLUSH; > - rctx->cb_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->cb_misc_state.atom); > } > > /* Emit states. */ > @@ -2491,7 +2492,7 @@ static void r600_set_occlusion_query_state(struct > pipe_context *ctx, bool enable > > if (rctx->db_misc_state.occlusion_query_enabled != enable) { > rctx->db_misc_state.occlusion_query_enabled = enable; > - rctx->db_misc_state.atom.dirty = true; > + r600_mark_atom_dirty(rctx, &rctx->db_misc_state.atom); > } > } > > diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h > b/src/gallium/drivers/radeon/r600_pipe_common.h > index ce3f396..717e248 100644 > --- a/src/gallium/drivers/radeon/r600_pipe_common.h > +++ b/src/gallium/drivers/radeon/r600_pipe_common.h > @@ -466,6 +466,9 @@ struct r600_common_context { > /* This ensures there is enough space in the command stream. */ > void (*need_gfx_cs_space)(struct pipe_context *ctx, unsigned num_dw, > bool include_draw_vbo); > + > + void (*set_atom_dirty)(struct r600_common_context *ctx, > + struct r600_atom *atom, bool dirty); > }; > > /* r600_buffer.c */ > diff --git a/src/gallium/drivers/radeon/r600_streamout.c > b/src/gallium/drivers/radeon/r600_streamout.c > index 026fb30..0853f63 100644 > --- a/src/gallium/drivers/radeon/r600_streamout.c > +++ b/src/gallium/drivers/radeon/r600_streamout.c > @@ -104,7 +104,7 @@ void r600_streamout_buffers_dirty(struct > r600_common_context *rctx) > (num_bufs - num_bufs_appended) * 6 + /* STRMOUT_BUFFER_UPDATE > */ > (rctx->family > CHIP_R600 && rctx->family < CHIP_RS780 ? 2 : > 0); /* SURFACE_BASE_UPDATE */ > > - begin->dirty = true; > + rctx->set_atom_dirty(rctx, begin, true); > > r600_set_streamout_enable(rctx, true); > } > @@ -145,7 +145,7 @@ void r600_set_streamout_targets(struct pipe_context *ctx, > if (num_targets) { > r600_streamout_buffers_dirty(rctx); > } else { > - rctx->streamout.begin_atom.dirty = false; > + rctx->set_atom_dirty(rctx, &rctx->streamout.begin_atom, > false); > r600_set_streamout_enable(rctx, false); > } > } > @@ -353,8 +353,9 @@ static void r600_set_streamout_enable(struct > r600_common_context *rctx, bool ena > (rctx->streamout.enabled_mask << > 12); > > if ((old_strmout_en != r600_get_strmout_en(rctx)) || > - (old_hw_enabled_mask != rctx->streamout.hw_enabled_mask)) > - rctx->streamout.enable_atom.dirty = true; > + (old_hw_enabled_mask != rctx->streamout.hw_enabled_mask)) { > + rctx->set_atom_dirty(rctx, &rctx->streamout.enable_atom, > true); > + } > } > > void r600_update_prims_generated_query_state(struct r600_common_context > *rctx, > @@ -369,8 +370,9 @@ void r600_update_prims_generated_query_state(struct > r600_common_context *rctx, > rctx->streamout.prims_gen_query_enabled = > rctx->streamout.num_prims_gen_queries != 0; > > - if (old_strmout_en != r600_get_strmout_en(rctx)) > - rctx->streamout.enable_atom.dirty = true; > + if (old_strmout_en != r600_get_strmout_en(rctx)) { > + rctx->set_atom_dirty(rctx, > &rctx->streamout.enable_atom, true); > + } > } > } > > diff --git a/src/gallium/drivers/radeon/r600_texture.c > b/src/gallium/drivers/radeon/r600_texture.c > index d05b0a1..57c40d9 100644 > --- a/src/gallium/drivers/radeon/r600_texture.c > +++ b/src/gallium/drivers/radeon/r600_texture.c > @@ -1276,7 +1276,7 @@ void evergreen_do_fast_color_clear(struct > r600_common_context *rctx, > tex->cmask.offset, tex->cmask.size, 0, > true); > > tex->dirty_level_mask |= 1 << fb->cbufs[i]->u.tex.level; > - fb_state->dirty = true; > + rctx->set_atom_dirty(rctx, fb_state, true); > *buffers &= ~clear_bit; > } > } > diff --git a/src/gallium/drivers/radeonsi/si_blit.c > b/src/gallium/drivers/radeonsi/si_blit.c > index 61ca2a8..48972bd 100644 > --- a/src/gallium/drivers/radeonsi/si_blit.c > +++ b/src/gallium/drivers/radeonsi/si_blit.c > @@ -148,7 +148,7 @@ static void si_blit_decompress_depth(struct pipe_context > *ctx, > struct pipe_surface *zsurf, *cbsurf, > surf_tmpl; > > sctx->dbcb_copy_sample = sample; > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, > &sctx->db_render_state); > > surf_tmpl.format = > texture->resource.b.b.format; > surf_tmpl.u.tex.level = level; > @@ -182,7 +182,7 @@ static void si_blit_decompress_depth(struct pipe_context > *ctx, > > sctx->dbcb_depth_copy_enabled = false; > sctx->dbcb_stencil_copy_enabled = false; > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > } > > static void si_blit_decompress_depth_in_place(struct si_context *sctx, > @@ -194,7 +194,7 @@ static void si_blit_decompress_depth_in_place(struct > si_context *sctx, > unsigned layer, max_layer, checked_last_layer, level; > > sctx->db_inplace_flush_enabled = true; > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > > surf_tmpl.format = texture->resource.b.b.format; > > @@ -232,7 +232,7 @@ static void si_blit_decompress_depth_in_place(struct > si_context *sctx, > } > > sctx->db_inplace_flush_enabled = false; > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > } > > void si_flush_depth_textures(struct si_context *sctx, > @@ -378,9 +378,9 @@ static void si_clear(struct pipe_context *ctx, unsigned > buffers, > } > > zstex->depth_clear_value = depth; > - sctx->framebuffer.atom.dirty = true; /* updates > DB_DEPTH_CLEAR */ > + si_mark_atom_dirty(sctx, &sctx->framebuffer.atom); /* updates > DB_DEPTH_CLEAR */ > sctx->db_depth_clear = true; > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > } > > si_blitter_begin(ctx, SI_CLEAR); > @@ -393,7 +393,7 @@ static void si_clear(struct pipe_context *ctx, unsigned > buffers, > sctx->db_depth_clear = false; > sctx->db_depth_disable_expclear = false; > zstex->depth_cleared = true; > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > } > } > > diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c > b/src/gallium/drivers/radeonsi/si_descriptors.c > index fcf4dbf..8d9f8f7 100644 > --- a/src/gallium/drivers/radeonsi/si_descriptors.c > +++ b/src/gallium/drivers/radeonsi/si_descriptors.c > @@ -122,7 +122,7 @@ static bool si_upload_descriptors(struct si_context *sctx, > > desc->list_dirty = false; > desc->pointer_dirty = true; > - sctx->shader_userdata.atom.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->shader_userdata.atom); > return true; > } > > @@ -452,7 +452,7 @@ static bool si_upload_vertex_buffer_descriptors(struct > si_context *sctx) > * uploaded to a fresh new buffer, so I don't think flushing the const > * cache is needed. */ > desc->pointer_dirty = true; > - sctx->shader_userdata.atom.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->shader_userdata.atom); > sctx->vertex_buffers_dirty = false; > return true; > } > @@ -869,7 +869,7 @@ static void si_mark_shader_pointers_dirty(struct > si_context *sctx, > if (shader == PIPE_SHADER_VERTEX) > sctx->vertex_buffers.pointer_dirty = true; > > - sctx->shader_userdata.atom.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->shader_userdata.atom); > } > > static void si_shader_userdata_begin_new_cs(struct si_context *sctx) > diff --git a/src/gallium/drivers/radeonsi/si_hw_context.c > b/src/gallium/drivers/radeonsi/si_hw_context.c > index 8658056..307dc39 100644 > --- a/src/gallium/drivers/radeonsi/si_hw_context.c > +++ b/src/gallium/drivers/radeonsi/si_hw_context.c > @@ -178,12 +178,12 @@ void si_begin_new_cs(struct si_context *ctx) > /* The CS initialization should be emitted before everything else. */ > si_pm4_emit(ctx, ctx->init_config); > > - ctx->clip_regs.dirty = true; > - ctx->framebuffer.atom.dirty = true; > - ctx->msaa_sample_locs.dirty = true; > - ctx->msaa_config.dirty = true; > - ctx->db_render_state.dirty = true; > - ctx->b.streamout.enable_atom.dirty = true; > + si_mark_atom_dirty(ctx, &ctx->clip_regs); > + si_mark_atom_dirty(ctx, &ctx->framebuffer.atom); > + si_mark_atom_dirty(ctx, &ctx->msaa_sample_locs); > + si_mark_atom_dirty(ctx, &ctx->msaa_config); > + si_mark_atom_dirty(ctx, &ctx->db_render_state); > + si_mark_atom_dirty(ctx, &ctx->b.streamout.enable_atom); > si_all_descriptors_begin_new_cs(ctx); > > r600_postflush_resume_features(&ctx->b); > diff --git a/src/gallium/drivers/radeonsi/si_pipe.c > b/src/gallium/drivers/radeonsi/si_pipe.c > index cacef9f..e29b158 100644 > --- a/src/gallium/drivers/radeonsi/si_pipe.c > +++ b/src/gallium/drivers/radeonsi/si_pipe.c > @@ -101,6 +101,7 @@ static struct pipe_context *si_create_context(struct > pipe_screen *screen, void * > sctx->b.b.screen = screen; /* this must be set first */ > sctx->b.b.priv = priv; > sctx->b.b.destroy = si_destroy_context; > + sctx->b.set_atom_dirty = (void *)si_set_atom_dirty; > sctx->screen = sscreen; /* Easy accessing of screen/winsys. */ > > if (!r600_common_context_init(&sctx->b, &sscreen->b)) > diff --git a/src/gallium/drivers/radeonsi/si_pipe.h > b/src/gallium/drivers/radeonsi/si_pipe.h > index a249d31..553e1f3 100644 > --- a/src/gallium/drivers/radeonsi/si_pipe.h > +++ b/src/gallium/drivers/radeonsi/si_pipe.h > @@ -325,4 +325,18 @@ si_invalidate_draw_sh_constants(struct si_context *sctx) > sctx->last_sh_base_reg = -1; /* reset to an unknown value */ > } > > +static inline void > +si_set_atom_dirty(struct si_context *sctx, > + struct r600_atom *atom, bool dirty) > +{ > + atom->dirty = dirty; > +} > + > +static inline void > +si_mark_atom_dirty(struct si_context *sctx, > + struct r600_atom *atom) > +{ > + si_set_atom_dirty(sctx, atom, true); > +} > + > #endif > diff --git a/src/gallium/drivers/radeonsi/si_state.c > b/src/gallium/drivers/radeonsi/si_state.c > index a7aa062..1cac804 100644 > --- a/src/gallium/drivers/radeonsi/si_state.c > +++ b/src/gallium/drivers/radeonsi/si_state.c > @@ -734,12 +734,12 @@ static void si_bind_rs_state(struct pipe_context *ctx, > void *state) > > if (sctx->framebuffer.nr_samples > 1 && > (!old_rs || old_rs->multisample_enable != rs->multisample_enable)) > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > > si_pm4_bind_state(sctx, rasterizer, rs); > si_update_fb_rs_state(sctx); > > - sctx->clip_regs.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->clip_regs); > } > > static void si_delete_rs_state(struct pipe_context *ctx, void *state) > @@ -904,7 +904,7 @@ static void si_set_occlusion_query_state(struct > pipe_context *ctx, bool enable) > { > struct si_context *sctx = (struct si_context*)ctx; > > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > } > > static void si_emit_db_render_state(struct si_context *sctx, struct > r600_atom *state) > @@ -2038,7 +2038,7 @@ static void si_set_framebuffer_state(struct > pipe_context *ctx, > > util_format_is_pure_integer(state->cbufs[0]->format); > > if (sctx->framebuffer.cb0_is_integer != old_cb0_is_integer) > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > > for (i = 0; i < state->nr_cbufs; i++) { > if (!state->cbufs[i]) > @@ -2083,11 +2083,11 @@ static void si_set_framebuffer_state(struct > pipe_context *ctx, > sctx->framebuffer.atom.num_dw += state->zsbuf ? 26 : 4; > sctx->framebuffer.atom.num_dw += 3; /* WINDOW_SCISSOR_BR */ > sctx->framebuffer.atom.num_dw += 18; /* MSAA sample locations */ > - sctx->framebuffer.atom.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->framebuffer.atom); > > if (sctx->framebuffer.nr_samples != old_nr_samples) { > - sctx->msaa_config.dirty = true; > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->msaa_config); > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > > /* Set sample locations as fragment shader constants. */ > switch (sctx->framebuffer.nr_samples) { > @@ -2124,7 +2124,7 @@ static void si_set_framebuffer_state(struct > pipe_context *ctx, > old_nr_samples != SI_NUM_SMOOTH_AA_SAMPLES) && > (sctx->framebuffer.nr_samples != SI_NUM_SMOOTH_AA_SAMPLES > || > old_nr_samples != 1)) > - sctx->msaa_sample_locs.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->msaa_sample_locs); > } > } > > @@ -2266,7 +2266,7 @@ static void si_set_min_samples(struct pipe_context > *ctx, unsigned min_samples) > sctx->ps_iter_samples = min_samples; > > if (sctx->framebuffer.nr_samples > 1) > - sctx->msaa_config.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->msaa_config); > } > > /* > diff --git a/src/gallium/drivers/radeonsi/si_state_draw.c > b/src/gallium/drivers/radeonsi/si_state_draw.c > index e8faf40..f136a1c 100644 > --- a/src/gallium/drivers/radeonsi/si_state_draw.c > +++ b/src/gallium/drivers/radeonsi/si_state_draw.c > @@ -796,7 +796,7 @@ void si_draw_vbo(struct pipe_context *ctx, const struct > pipe_draw_info *info) > > /* Check flush flags. */ > if (sctx->b.flags) > - sctx->atoms.s.cache_flush->dirty = true; > + si_mark_atom_dirty(sctx, sctx->atoms.s.cache_flush); > > si_need_cs_space(sctx, 0, TRUE); > > diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c > b/src/gallium/drivers/radeonsi/si_state_shaders.c > index fbcb0f4..475aea1 100644 > --- a/src/gallium/drivers/radeonsi/si_state_shaders.c > +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c > @@ -744,7 +744,7 @@ static void si_bind_vs_shader(struct pipe_context *ctx, > void *state) > return; > > sctx->vs_shader = sel; > - sctx->clip_regs.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->clip_regs); > } > > static void si_bind_gs_shader(struct pipe_context *ctx, void *state) > @@ -757,7 +757,7 @@ static void si_bind_gs_shader(struct pipe_context *ctx, > void *state) > return; > > sctx->gs_shader = sel; > - sctx->clip_regs.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->clip_regs); > sctx->last_rast_prim = -1; /* reset this so that it gets updated */ > > if (enable_changed) > @@ -789,7 +789,7 @@ static void si_bind_tes_shader(struct pipe_context *ctx, > void *state) > return; > > sctx->tes_shader = sel; > - sctx->clip_regs.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->clip_regs); > sctx->last_rast_prim = -1; /* reset this so that it gets updated */ > > if (enable_changed) { > @@ -1402,15 +1402,15 @@ void si_update_shaders(struct si_context *sctx) > > if (sctx->ps_db_shader_control != > sctx->ps_shader->current->db_shader_control) { > sctx->ps_db_shader_control = > sctx->ps_shader->current->db_shader_control; > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > } > > if (sctx->smoothing_enabled != > sctx->ps_shader->current->key.ps.poly_line_smoothing) { > sctx->smoothing_enabled = > sctx->ps_shader->current->key.ps.poly_line_smoothing; > - sctx->msaa_config.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->msaa_config); > > if (sctx->b.chip_class == SI) > - sctx->db_render_state.dirty = true; > + si_mark_atom_dirty(sctx, &sctx->db_render_state); > } > } > > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev