[Mesa-dev] [PATCH 01/14] r600g: remove the "atom" variable from r600_command_buffer

Jerome Glisse j.glisse at gmail.com
Tue Oct 9 12:32:48 PDT 2012


On Sun, Oct 07, 2012 at 08:08:03PM +0200, Marek Olšák wrote:
> r600_command_buffer is not an atom.
> 
> The "atoms" have evolved into state slots (or groups of state slots) where
> you can bind states. There is a fixed amount of atoms (state slots)
> in the context.
> 
> The command buffers are nothing like that. They represent states, not state
> slots.
> 
> We could probably give r600_atom a better name someday.

For the serie:
Reviewed-by: Jerome Glisse <jglisse at redhat.com>

> ---
>  src/gallium/drivers/r600/evergreen_compute.c |    4 +--
>  src/gallium/drivers/r600/evergreen_state.c   |    4 +--
>  src/gallium/drivers/r600/r600_hw_context.c   |    4 +--
>  src/gallium/drivers/r600/r600_pipe.h         |   44 +++++++++++++++-----------
>  src/gallium/drivers/r600/r600_state.c        |    2 +-
>  src/gallium/drivers/r600/r600_state_common.c |   13 +-------
>  6 files changed, 34 insertions(+), 37 deletions(-)
> 
> diff --git a/src/gallium/drivers/r600/evergreen_compute.c b/src/gallium/drivers/r600/evergreen_compute.c
> index b7c7345..abd5b3c 100644
> --- a/src/gallium/drivers/r600/evergreen_compute.c
> +++ b/src/gallium/drivers/r600/evergreen_compute.c
> @@ -329,7 +329,7 @@ static void compute_emit_cs(struct r600_context *ctx, const uint *block_layout,
>  	 * See evergreen_init_atom_start_compute_cs() in this file for the list
>  	 * of registers initialized by the start_compute_cs_cmd atom.
>  	 */
> -	r600_emit_atom(ctx, &ctx->start_compute_cs_cmd.atom);
> +	r600_emit_command_buffer(ctx->cs, &ctx->start_compute_cs_cmd);
>  
>  	ctx->flags |= R600_CONTEXT_CB_FLUSH;
>  	r600_flush_emit(ctx);
> @@ -625,7 +625,7 @@ void evergreen_init_atom_start_compute_cs(struct r600_context *ctx)
>  	/* since all required registers are initialised in the
>  	 * start_compute_cs_cmd atom, we can EMIT_EARLY here.
>  	 */
> -	r600_init_command_buffer(ctx, cb, 1, 256);
> +	r600_init_command_buffer(cb, 256);
>  	cb->pkt_flags = RADEON_CP_PACKET3_COMPUTE_MODE;
>  
>  	switch (ctx->family) {
> diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
> index e35314f..a073021 100644
> --- a/src/gallium/drivers/r600/evergreen_state.c
> +++ b/src/gallium/drivers/r600/evergreen_state.c
> @@ -2373,7 +2373,7 @@ static void cayman_init_atom_start_cs(struct r600_context *rctx)
>  {
>  	struct r600_command_buffer *cb = &rctx->start_cs_cmd;
>  
> -	r600_init_command_buffer(rctx, cb, 0, 256);
> +	r600_init_command_buffer(cb, 256);
>  
>  	/* This must be first. */
>  	r600_store_value(cb, PKT3(PKT3_CONTEXT_CONTROL, 1, 0));
> @@ -2774,7 +2774,7 @@ void evergreen_init_atom_start_cs(struct r600_context *rctx)
>  		return;
>  	}
>  
> -	r600_init_command_buffer(rctx, cb, 0, 256);
> +	r600_init_command_buffer(cb, 256);
>  
>  	/* This must be first. */
>  	r600_store_value(cb, PKT3(PKT3_CONTEXT_CONTROL, 1, 0));
> diff --git a/src/gallium/drivers/r600/r600_hw_context.c b/src/gallium/drivers/r600/r600_hw_context.c
> index 8245059..723039a 100644
> --- a/src/gallium/drivers/r600/r600_hw_context.c
> +++ b/src/gallium/drivers/r600/r600_hw_context.c
> @@ -815,7 +815,7 @@ void r600_context_flush(struct r600_context *ctx, unsigned flags)
>  {
>  	struct radeon_winsys_cs *cs = ctx->cs;
>  
> -	if (cs->cdw == ctx->start_cs_cmd.atom.num_dw)
> +	if (cs->cdw == ctx->start_cs_cmd.num_dw)
>  		return;
>  
>  	ctx->timer_queries_suspended = false;
> @@ -875,7 +875,7 @@ void r600_begin_new_cs(struct r600_context *ctx)
>  	ctx->flags = 0;
>  
>  	/* Begin a new CS. */
> -	r600_emit_atom(ctx, &ctx->start_cs_cmd.atom);
> +	r600_emit_command_buffer(ctx->cs, &ctx->start_cs_cmd);
>  
>  	/* Re-emit states. */
>  	r600_atom_dirty(ctx, &ctx->alphatest_state.atom);
> diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h
> index 607116f..be7b891 100644
> --- a/src/gallium/drivers/r600/r600_pipe.h
> +++ b/src/gallium/drivers/r600/r600_pipe.h
> @@ -59,8 +59,8 @@ struct r600_atom {
>  /* This is an atom containing GPU commands that never change.
>   * This is supposed to be copied directly into the CS. */
>  struct r600_command_buffer {
> -	struct r600_atom atom;
>  	uint32_t *buf;
> +	unsigned num_dw;
>  	unsigned max_num_dw;
>  	unsigned pkt_flags;
>  };
> @@ -504,6 +504,14 @@ struct r600_context {
>  	int			last_start_instance;
>  };
>  
> +static INLINE void r600_emit_command_buffer(struct radeon_winsys_cs *cs,
> +					    struct r600_command_buffer *cb)
> +{
> +	assert(cs->cdw + cb->num_dw <= RADEON_MAX_CMDBUF_DWORDS);
> +	memcpy(cs->buf + cs->cdw, cb->buf, 4 * cb->num_dw);
> +	cs->cdw += cb->num_dw;
> +}
> +
>  static INLINE void r600_emit_atom(struct r600_context *rctx, struct r600_atom *atom)
>  {
>  	atom->emit(rctx, atom);
> @@ -696,15 +704,15 @@ unsigned r600_tex_compare(unsigned compare);
>  
>  static INLINE void r600_store_value(struct r600_command_buffer *cb, unsigned value)
>  {
> -	cb->buf[cb->atom.num_dw++] = value;
> +	cb->buf[cb->num_dw++] = value;
>  }
>  
>  static INLINE void r600_store_config_reg_seq(struct r600_command_buffer *cb, unsigned reg, unsigned num)
>  {
>  	assert(reg < R600_CONTEXT_REG_OFFSET);
> -	assert(cb->atom.num_dw+2+num <= cb->max_num_dw);
> -	cb->buf[cb->atom.num_dw++] = PKT3(PKT3_SET_CONFIG_REG, num, 0);
> -	cb->buf[cb->atom.num_dw++] = (reg - R600_CONFIG_REG_OFFSET) >> 2;
> +	assert(cb->num_dw+2+num <= cb->max_num_dw);
> +	cb->buf[cb->num_dw++] = PKT3(PKT3_SET_CONFIG_REG, num, 0);
> +	cb->buf[cb->num_dw++] = (reg - R600_CONFIG_REG_OFFSET) >> 2;
>  }
>  
>  /**
> @@ -714,9 +722,9 @@ static INLINE void r600_store_config_reg_seq(struct r600_command_buffer *cb, uns
>  static INLINE void r600_store_context_reg_seq(struct r600_command_buffer *cb, unsigned reg, unsigned num)
>  {
>  	assert(reg >= R600_CONTEXT_REG_OFFSET && reg < R600_CTL_CONST_OFFSET);
> -	assert(cb->atom.num_dw+2+num <= cb->max_num_dw);
> -	cb->buf[cb->atom.num_dw++] = PKT3(PKT3_SET_CONTEXT_REG, num, 0) | cb->pkt_flags;
> -	cb->buf[cb->atom.num_dw++] = (reg - R600_CONTEXT_REG_OFFSET) >> 2;
> +	assert(cb->num_dw+2+num <= cb->max_num_dw);
> +	cb->buf[cb->num_dw++] = PKT3(PKT3_SET_CONTEXT_REG, num, 0) | cb->pkt_flags;
> +	cb->buf[cb->num_dw++] = (reg - R600_CONTEXT_REG_OFFSET) >> 2;
>  }
>  
>  /**
> @@ -726,17 +734,17 @@ static INLINE void r600_store_context_reg_seq(struct r600_command_buffer *cb, un
>  static INLINE void r600_store_ctl_const_seq(struct r600_command_buffer *cb, unsigned reg, unsigned num)
>  {
>  	assert(reg >= R600_CTL_CONST_OFFSET);
> -	assert(cb->atom.num_dw+2+num <= cb->max_num_dw);
> -	cb->buf[cb->atom.num_dw++] = PKT3(PKT3_SET_CTL_CONST, num, 0) | cb->pkt_flags;
> -	cb->buf[cb->atom.num_dw++] = (reg - R600_CTL_CONST_OFFSET) >> 2;
> +	assert(cb->num_dw+2+num <= cb->max_num_dw);
> +	cb->buf[cb->num_dw++] = PKT3(PKT3_SET_CTL_CONST, num, 0) | cb->pkt_flags;
> +	cb->buf[cb->num_dw++] = (reg - R600_CTL_CONST_OFFSET) >> 2;
>  }
>  
>  static INLINE void r600_store_loop_const_seq(struct r600_command_buffer *cb, unsigned reg, unsigned num)
>  {
>  	assert(reg >= R600_LOOP_CONST_OFFSET);
> -	assert(cb->atom.num_dw+2+num <= cb->max_num_dw);
> -	cb->buf[cb->atom.num_dw++] = PKT3(PKT3_SET_LOOP_CONST, num, 0);
> -	cb->buf[cb->atom.num_dw++] = (reg - R600_LOOP_CONST_OFFSET) >> 2;
> +	assert(cb->num_dw+2+num <= cb->max_num_dw);
> +	cb->buf[cb->num_dw++] = PKT3(PKT3_SET_LOOP_CONST, num, 0);
> +	cb->buf[cb->num_dw++] = (reg - R600_LOOP_CONST_OFFSET) >> 2;
>  }
>  
>  /**
> @@ -746,9 +754,9 @@ static INLINE void r600_store_loop_const_seq(struct r600_command_buffer *cb, uns
>  static INLINE void eg_store_loop_const_seq(struct r600_command_buffer *cb, unsigned reg, unsigned num)
>  {
>  	assert(reg >= EG_LOOP_CONST_OFFSET);
> -	assert(cb->atom.num_dw+2+num <= cb->max_num_dw);
> -	cb->buf[cb->atom.num_dw++] = PKT3(PKT3_SET_LOOP_CONST, num, 0) | cb->pkt_flags;
> -	cb->buf[cb->atom.num_dw++] = (reg - EG_LOOP_CONST_OFFSET) >> 2;
> +	assert(cb->num_dw+2+num <= cb->max_num_dw);
> +	cb->buf[cb->num_dw++] = PKT3(PKT3_SET_LOOP_CONST, num, 0) | cb->pkt_flags;
> +	cb->buf[cb->num_dw++] = (reg - EG_LOOP_CONST_OFFSET) >> 2;
>  }
>  
>  static INLINE void r600_store_config_reg(struct r600_command_buffer *cb, unsigned reg, unsigned value)
> @@ -781,7 +789,7 @@ static INLINE void eg_store_loop_const(struct r600_command_buffer *cb, unsigned
>  	r600_store_value(cb, value);
>  }
>  
> -void r600_init_command_buffer(struct r600_context *rctx, struct r600_command_buffer *cb, unsigned id, unsigned num_dw);
> +void r600_init_command_buffer(struct r600_command_buffer *cb, unsigned num_dw);
>  void r600_release_command_buffer(struct r600_command_buffer *cb);
>  
>  /*
> diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
> index 1d6171d..1c24a0b 100644
> --- a/src/gallium/drivers/r600/r600_state.c
> +++ b/src/gallium/drivers/r600/r600_state.c
> @@ -2223,7 +2223,7 @@ void r600_init_atom_start_cs(struct r600_context *rctx)
>  	struct r600_command_buffer *cb = &rctx->start_cs_cmd;
>  	uint32_t tmp;
>  
> -	r600_init_command_buffer(rctx, cb, 0, 256);
> +	r600_init_command_buffer(cb, 256);
>  
>  	/* R6xx requires this packet at the start of each command buffer */
>  	if (rctx->chip_class == R600) {
> diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
> index 2796b9d..481ab91 100644
> --- a/src/gallium/drivers/r600/r600_state_common.c
> +++ b/src/gallium/drivers/r600/r600_state_common.c
> @@ -34,19 +34,8 @@
>  
>  #define R600_PRIM_RECTANGLE_LIST PIPE_PRIM_MAX
>  
> -static void r600_emit_command_buffer(struct r600_context *rctx, struct r600_atom *atom)
> +void r600_init_command_buffer(struct r600_command_buffer *cb, unsigned num_dw)
>  {
> -	struct radeon_winsys_cs *cs = rctx->cs;
> -	struct r600_command_buffer *cb = (struct r600_command_buffer*)atom;
> -
> -	assert(cs->cdw + cb->atom.num_dw <= RADEON_MAX_CMDBUF_DWORDS);
> -	memcpy(cs->buf + cs->cdw, cb->buf, 4 * cb->atom.num_dw);
> -	cs->cdw += cb->atom.num_dw;
> -}
> -
> -void r600_init_command_buffer(struct r600_context *rctx, struct r600_command_buffer *cb, unsigned id, unsigned num_dw)
> -{
> -	r600_init_atom(rctx, &cb->atom, id, r600_emit_command_buffer, 0);
>  	cb->buf = CALLOC(1, 4 * num_dw);
>  	cb->max_num_dw = num_dw;
>  }
> -- 
> 1.7.9.5
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list