Reviewed-by: Marek Olšák <mar...@gmail.com>

Marek

On Wed, Jun 27, 2012 at 5:37 PM, Tom Stellard <tstel...@gmail.com> wrote:
> This allows the shader type bit to be set in the pm4 header when
> emitting registers for compute shaders.
> ---
>  src/gallium/drivers/r600/r600.h              |    2 +-
>  src/gallium/drivers/r600/r600_hw_context.c   |   14 +++++++++++++-
>  src/gallium/drivers/r600/r600_state_common.c |    2 +-
>  3 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h
> index d95eada..d4e01d9 100644
> --- a/src/gallium/drivers/r600/r600.h
> +++ b/src/gallium/drivers/r600/r600.h
> @@ -215,7 +215,7 @@ void r600_context_streamout_begin(struct r600_context 
> *ctx);
>  void r600_context_streamout_end(struct r600_context *ctx);
>  void r600_context_draw_opaque_count(struct r600_context *ctx, struct 
> r600_so_target *t);
>  void r600_need_cs_space(struct r600_context *ctx, unsigned num_dw, boolean 
> count_draw_in);
> -void r600_context_block_emit_dirty(struct r600_context *ctx, struct 
> r600_block *block);
> +void r600_context_block_emit_dirty(struct r600_context *ctx, struct 
> r600_block *block, unsigned pkt_flags);
>  void r600_context_block_resource_emit_dirty(struct r600_context *ctx, struct 
> r600_block *block);
>
>  int evergreen_context_init(struct r600_context *ctx);
> diff --git a/src/gallium/drivers/r600/r600_hw_context.c 
> b/src/gallium/drivers/r600/r600_hw_context.c
> index 9303d09..77c3553 100644
> --- a/src/gallium/drivers/r600/r600_hw_context.c
> +++ b/src/gallium/drivers/r600/r600_hw_context.c
> @@ -1025,7 +1025,12 @@ void r600_context_pipe_state_set_vs_sampler(struct 
> r600_context *ctx, struct r60
>        r600_context_pipe_state_set_sampler_border(ctx, state, offset);
>  }
>
> -void r600_context_block_emit_dirty(struct r600_context *ctx, struct 
> r600_block *block)
> +/**
> + * @param pkt_flags should be set to RADEON_CP_PACKET3_COMPUTE_MODE if this
> + * block will be used for compute shaders.
> + */
> +void r600_context_block_emit_dirty(struct r600_context *ctx, struct 
> r600_block *block,
> +       unsigned pkt_flags)
>  {
>        struct radeon_winsys_cs *cs = ctx->cs;
>        int optional = block->nbo == 0 && !(block->flags & 
> REG_FLAG_DIRTY_ALWAYS);
> @@ -1063,6 +1068,13 @@ void r600_context_block_emit_dirty(struct r600_context 
> *ctx, struct r600_block *
>                cp_dwords = new_dwords + 2;
>        }
>        memcpy(&cs->buf[cs->cdw], block->pm4, cp_dwords * 4);
> +
> +       /* We are applying the pkt_flags after copying the register block to
> +        * the the command stream, because it is possible this block will be
> +        * emitted with a different pkt_flags, and we don't want to store the
> +        * pkt_flags in the block.
> +        */
> +       cs->buf[cs->cdw] |= pkt_flags;
>        cs->cdw += cp_dwords;
>
>        if (optional) {
> diff --git a/src/gallium/drivers/r600/r600_state_common.c 
> b/src/gallium/drivers/r600/r600_state_common.c
> index b5241a7..2cf0171 100644
> --- a/src/gallium/drivers/r600/r600_state_common.c
> +++ b/src/gallium/drivers/r600/r600_state_common.c
> @@ -957,7 +957,7 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct 
> pipe_draw_info *dinfo)
>                r600_emit_atom(rctx, state);
>        }
>        LIST_FOR_EACH_ENTRY_SAFE(dirty_block, next_block, &rctx->dirty,list) {
> -               r600_context_block_emit_dirty(rctx, dirty_block);
> +               r600_context_block_emit_dirty(rctx, dirty_block, 0 /* 
> pkt_flags */);
>        }
>        LIST_FOR_EACH_ENTRY_SAFE(dirty_block, next_block, 
> &rctx->resource_dirty,list) {
>                r600_context_block_resource_emit_dirty(rctx, dirty_block);
> --
> 1.7.7.6
>
> _______________________________________________
> 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

Reply via email to