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

2012-10-09 Thread Jerome Glisse
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 

> ---
>  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);
> @@ -69

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

2012-10-07 Thread Marek Olšák
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.
---
 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_