For both patches:

Reviewed-by: Tom Stellard <[email protected]>

On Sun, Dec 16, 2012 at 09:05:49PM +0100, Vincent Lejeune wrote:
> ---
>  src/gallium/drivers/r600/eg_asm.c        |  2 ++
>  src/gallium/drivers/r600/r600_asm.c      |  2 ++
>  src/gallium/drivers/r600/r600_llvm.c     | 20 ++++++++++++++++++++
>  src/gallium/drivers/r600/r600_shader.c   |  3 ++-
>  src/gallium/drivers/radeon/radeon_llvm.h |  1 +
>  5 files changed, 27 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gallium/drivers/r600/eg_asm.c 
> b/src/gallium/drivers/r600/eg_asm.c
> index 70dc94a..0dc3ffd 100644
> --- a/src/gallium/drivers/r600/eg_asm.c
> +++ b/src/gallium/drivers/r600/eg_asm.c
> @@ -161,4 +161,6 @@ void eg_bytecode_export_read(struct r600_bytecode_output 
> *output, uint32_t word0
>       output->end_of_program = 
> G_SQ_CF_ALLOC_EXPORT_WORD1_END_OF_PROGRAM(word1);
>       output->inst = 
> EG_S_SQ_CF_ALLOC_EXPORT_WORD1_CF_INST(G_SQ_CF_ALLOC_EXPORT_WORD1_CF_INST(word1));
>       output->barrier = G_SQ_CF_ALLOC_EXPORT_WORD1_BARRIER(word1);
> +     output->array_size = G_SQ_CF_ALLOC_EXPORT_WORD1_BUF_ARRAY_SIZE(word1);
> +     output->comp_mask = G_SQ_CF_ALLOC_EXPORT_WORD1_BUF_COMP_MASK(word1);
>  }
> diff --git a/src/gallium/drivers/r600/r600_asm.c 
> b/src/gallium/drivers/r600/r600_asm.c
> index f06af44..2c703d8 100644
> --- a/src/gallium/drivers/r600/r600_asm.c
> +++ b/src/gallium/drivers/r600/r600_asm.c
> @@ -2963,4 +2963,6 @@ void r600_bytecode_export_read(struct 
> r600_bytecode_output *output, uint32_t wor
>       output->end_of_program = 
> G_SQ_CF_ALLOC_EXPORT_WORD1_END_OF_PROGRAM(word1);
>       output->inst = 
> R600_S_SQ_CF_ALLOC_EXPORT_WORD1_CF_INST(G_SQ_CF_ALLOC_EXPORT_WORD1_CF_INST(word1));
>       output->barrier = G_SQ_CF_ALLOC_EXPORT_WORD1_BARRIER(word1);
> +     output->array_size = G_SQ_CF_ALLOC_EXPORT_WORD1_BUF_ARRAY_SIZE(word1);
> +     output->comp_mask = G_SQ_CF_ALLOC_EXPORT_WORD1_BUF_COMP_MASK(word1);
>  }
> diff --git a/src/gallium/drivers/r600/r600_llvm.c 
> b/src/gallium/drivers/r600/r600_llvm.c
> index 8f1ed26..79f6cf0 100644
> --- a/src/gallium/drivers/r600/r600_llvm.c
> +++ b/src/gallium/drivers/r600/r600_llvm.c
> @@ -229,11 +229,31 @@ static void llvm_emit_epilogue(struct 
> lp_build_tgsi_context * bld_base)
>  {
>       struct radeon_llvm_context * ctx = radeon_llvm_context(bld_base);
>       struct lp_build_context * base = &bld_base->base;
> +     struct pipe_stream_output_info * so = ctx->stream_outputs;
>       unsigned i;
>       
>       unsigned color_count = 0;
>       boolean has_color = false;
>  
> +     if (ctx->type == TGSI_PROCESSOR_VERTEX && so->num_outputs) {
> +             for (i = 0; i < so->num_outputs; i++) {
> +                     unsigned register_index = so->output[i].register_index;
> +                     unsigned start_component = 
> so->output[i].start_component;
> +                     unsigned num_component = so->output[i].num_components;
> +                     unsigned dst_offset = so->output[i].dst_offset;
> +                     unsigned chan;
> +                     for (chan = start_component; chan < start_component + 
> num_component; chan++) {
> +                             LLVMValueRef args[3];
> +                             args[0] = LLVMBuildLoad(base->gallivm->builder,
> +                                     ctx->soa.outputs[register_index][chan], 
> "");
> +                             args[1] = lp_build_const_int32(base->gallivm, 4 
> * (dst_offset - start_component) + chan);
> +                             args[2] = lp_build_const_int32(base->gallivm, 
> so->output[i].output_buffer);
> +                             lp_build_intrinsic(base->gallivm->builder, 
> "llvm.R600.store.stream.output",
> +                                     
> LLVMVoidTypeInContext(base->gallivm->context), args, 3);
> +                     }
> +             }
> +     }
> +
>       /* Add the necessary export instructions */
>       for (i = 0; i < ctx->output_reg_count; i++) {
>               unsigned chan;
> diff --git a/src/gallium/drivers/r600/r600_shader.c 
> b/src/gallium/drivers/r600/r600_shader.c
> index 72cb585..ac28d22 100644
> --- a/src/gallium/drivers/r600/r600_shader.c
> +++ b/src/gallium/drivers/r600/r600_shader.c
> @@ -1364,6 +1364,7 @@ static int r600_shader_from_tgsi(struct r600_screen 
> *rscreen,
>               radeon_llvm_ctx.color_buffer_count = MAX2(key.nr_cbufs , 1);
>               radeon_llvm_ctx.chip_class = ctx.bc->chip_class;
>               radeon_llvm_ctx.fs_color_all = shader->fs_write_all && 
> (rscreen->chip_class >= EVERGREEN);
> +             radeon_llvm_ctx.stream_outputs = &so;
>               mod = r600_tgsi_llvm(&radeon_llvm_ctx, tokens);
>               if (debug_get_bool_option("R600_DUMP_SHADERS", FALSE)) {
>                       dump = 1;
> @@ -1512,7 +1513,7 @@ static int r600_shader_from_tgsi(struct r600_screen 
> *rscreen,
>       }
>  
>       /* Add stream outputs. */
> -     if (ctx.type == TGSI_PROCESSOR_VERTEX && so.num_outputs) {
> +     if (ctx.type == TGSI_PROCESSOR_VERTEX && so.num_outputs && !use_llvm) {
>               for (i = 0; i < so.num_outputs; i++) {
>                       struct r600_bytecode_output output;
>  
> diff --git a/src/gallium/drivers/radeon/radeon_llvm.h 
> b/src/gallium/drivers/radeon/radeon_llvm.h
> index 61975c4..c3d691a 100644
> --- a/src/gallium/drivers/radeon/radeon_llvm.h
> +++ b/src/gallium/drivers/radeon/radeon_llvm.h
> @@ -60,6 +60,7 @@ struct radeon_llvm_context {
>       unsigned two_side;
>       struct r600_shader_io * r600_inputs;
>       struct r600_shader_io * r600_outputs;
> +     struct pipe_stream_output_info *stream_outputs;
>       unsigned color_buffer_count;
>       unsigned fs_color_all;
>  
> -- 
> 1.8.0.2
> 
> _______________________________________________
> mesa-dev mailing list
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to