On Tue, Jul 08, 2014 at 01:37:03AM +0200, Marek Olšák wrote:
> From: Marek Olšák <marek.ol...@amd.com>

Reviewed-by: Tom Stellard <thomas.stell...@amd.com>

> 
> ---
>  src/gallium/drivers/radeonsi/si_blit.c        |  2 +-
>  src/gallium/drivers/radeonsi/si_descriptors.c | 12 +++++-----
>  src/gallium/drivers/radeonsi/si_pipe.c        |  6 ++---
>  src/gallium/drivers/radeonsi/si_pipe.h        |  4 +---
>  src/gallium/drivers/radeonsi/si_shader.c      | 34 
> +++++++++++++--------------
>  src/gallium/drivers/radeonsi/si_state.c       | 12 +++++-----
>  src/gallium/drivers/radeonsi/si_state.h       | 31 +++++++++++++++++-------
>  7 files changed, 57 insertions(+), 44 deletions(-)
> 
> diff --git a/src/gallium/drivers/radeonsi/si_blit.c 
> b/src/gallium/drivers/radeonsi/si_blit.c
> index 8c3e136..072024a 100644
> --- a/src/gallium/drivers/radeonsi/si_blit.c
> +++ b/src/gallium/drivers/radeonsi/si_blit.c
> @@ -76,7 +76,7 @@ static void si_blitter_begin(struct pipe_context *ctx, enum 
> si_blitter_op op)
>  
>               util_blitter_save_fragment_sampler_views(sctx->blitter,
>                       
> util_last_bit(sctx->samplers[PIPE_SHADER_FRAGMENT].views.desc.enabled_mask &
> -                                   ((1 << NUM_TEX_UNITS) - 1)),
> +                                   ((1 << SI_NUM_USER_SAMPLERS) - 1)),
>                       sctx->samplers[PIPE_SHADER_FRAGMENT].views.views);
>       }
>  
> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c 
> b/src/gallium/drivers/radeonsi/si_descriptors.c
> index 38ad077..6ae9b82 100644
> --- a/src/gallium/drivers/radeonsi/si_descriptors.c
> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c
> @@ -289,7 +289,7 @@ static void si_init_sampler_views(struct si_context *sctx,
>       si_init_descriptors(sctx, &views->desc,
>                           si_get_shader_user_data_base(shader) +
>                           SI_SGPR_RESOURCE * 4,
> -                         8, NUM_SAMPLER_VIEWS, si_emit_sampler_views);
> +                         8, SI_NUM_SAMPLER_VIEWS, si_emit_sampler_views);
>  }
>  
>  static void si_release_sampler_views(struct si_sampler_views *views)
> @@ -643,7 +643,7 @@ static void si_set_streamout_targets(struct pipe_context 
> *ctx,
>  
>       /* Set the shader resources.*/
>       for (i = 0; i < num_targets; i++) {
> -             bufidx = SI_RW_SO + i;
> +             bufidx = SI_SO_BUF_OFFSET + i;
>  
>               if (targets[i]) {
>                       struct pipe_resource *buffer = targets[i]->buffer;
> @@ -677,7 +677,7 @@ static void si_set_streamout_targets(struct pipe_context 
> *ctx,
>               buffers->desc.dirty_mask |= 1 << bufidx;
>       }
>       for (; i < old_num_targets; i++) {
> -             bufidx = SI_RW_SO + i;
> +             bufidx = SI_SO_BUF_OFFSET + i;
>               /* Clear the descriptor and unset the resource. */
>               memset(buffers->desc_data[bufidx], 0, sizeof(uint32_t) * 4);
>               pipe_resource_reference(&buffers->buffers[bufidx], NULL);
> @@ -755,7 +755,7 @@ static void si_invalidate_buffer(struct pipe_context 
> *ctx, struct pipe_resource
>                               buffers->desc.dirty_mask |= 1 << i;
>                               found = true;
>  
> -                             if (i >= SI_RW_SO && shader == 
> PIPE_SHADER_VERTEX) {
> +                             if (i >= SI_SO_BUF_OFFSET && shader == 
> PIPE_SHADER_VERTEX) {
>                                       /* Update the streamout state. */
>                                       if (sctx->b.streamout.begin_emitted) {
>                                               
> r600_emit_streamout_end(&sctx->b);
> @@ -977,11 +977,11 @@ void si_init_all_descriptors(struct si_context *sctx)
>  
>       for (i = 0; i < SI_NUM_SHADERS; i++) {
>               si_init_buffer_resources(sctx, &sctx->const_buffers[i],
> -                                      NUM_CONST_BUFFERS, i, SI_SGPR_CONST,
> +                                      SI_NUM_CONST_BUFFERS, i, SI_SGPR_CONST,
>                                        RADEON_USAGE_READ, 
> RADEON_PRIO_SHADER_BUFFER_RO);
>               si_init_buffer_resources(sctx, &sctx->rw_buffers[i],
>                                        i == PIPE_SHADER_VERTEX ?
> -                                      SI_RW_SO + 4 : SI_RW_SO,
> +                                      SI_NUM_RW_BUFFERS : 
> SI_NUM_RING_BUFFERS,
>                                        i, SI_SGPR_RW_BUFFERS,
>                                        RADEON_USAGE_READWRITE, 
> RADEON_PRIO_SHADER_RESOURCE_RW);
>  
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c 
> b/src/gallium/drivers/radeonsi/si_pipe.c
> index 184235d..0f99e44 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -146,7 +146,7 @@ static struct pipe_context *si_create_context(struct 
> pipe_screen *screen, void *
>               sctx->null_const_buf.buffer_size = 
> sctx->null_const_buf.buffer->width0;
>  
>               for (shader = 0; shader < SI_NUM_SHADERS; shader++) {
> -                     for (i = 0; i < NUM_CONST_BUFFERS; i++) {
> +                     for (i = 0; i < SI_NUM_CONST_BUFFERS; i++) {
>                               sctx->b.b.set_constant_buffer(&sctx->b.b, 
> shader, i,
>                                                             
> &sctx->null_const_buf);
>                       }
> @@ -347,7 +347,7 @@ static int si_get_shader_param(struct pipe_screen* 
> pscreen, unsigned shader, enu
>       case PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH:
>               return 32;
>       case PIPE_SHADER_CAP_MAX_INPUTS:
> -             return 32;
> +             return shader == PIPE_SHADER_VERTEX ? SI_NUM_VERTEX_BUFFERS : 
> 32;
>       case PIPE_SHADER_CAP_MAX_TEMPS:
>               return 256; /* Max native temporaries. */
>       case PIPE_SHADER_CAP_MAX_ADDRS:
> @@ -356,7 +356,7 @@ static int si_get_shader_param(struct pipe_screen* 
> pscreen, unsigned shader, enu
>       case PIPE_SHADER_CAP_MAX_CONSTS:
>               return 4096; /* actually only memory limits this */
>       case PIPE_SHADER_CAP_MAX_CONST_BUFFERS:
> -             return NUM_PIPE_CONST_BUFFERS;
> +             return SI_NUM_USER_CONST_BUFFERS;
>       case PIPE_SHADER_CAP_MAX_PREDS:
>               return 0; /* FIXME */
>       case PIPE_SHADER_CAP_TGSI_CONT_SUPPORTED:
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.h 
> b/src/gallium/drivers/radeonsi/si_pipe.h
> index 9d33a92..9a6410b 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.h
> +++ b/src/gallium/drivers/radeonsi/si_pipe.h
> @@ -67,7 +67,7 @@ struct si_cs_shader_state {
>  
>  struct si_textures_info {
>       struct si_sampler_views         views;
> -     struct si_pipe_sampler_state    *samplers[NUM_TEX_UNITS];
> +     struct si_pipe_sampler_state    *samplers[SI_NUM_USER_SAMPLERS];
>       unsigned                        n_views;
>       uint32_t                        depth_texture_mask; /* which textures 
> are depth */
>       uint32_t                        compressed_colortex_mask;
> @@ -88,8 +88,6 @@ struct si_framebuffer {
>  
>  #define SI_NUM_SHADERS (PIPE_SHADER_GEOMETRY+1)
>  
> -#define SI_RW_SO 2 /* Streamout buffer descriptors after ring buffers */
> -
>  struct si_context {
>       struct r600_common_context      b;
>       struct blitter_context          *blitter;
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
> b/src/gallium/drivers/radeonsi/si_shader.c
> index a28d682..93128c8 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -68,11 +68,11 @@ struct si_shader_context
>       int param_vertex_id;
>       int param_instance_id;
>       LLVMValueRef const_md;
> -     LLVMValueRef const_resource[NUM_CONST_BUFFERS];
> +     LLVMValueRef const_resource[SI_NUM_CONST_BUFFERS];
>  #if HAVE_LLVM >= 0x0304
>       LLVMValueRef ddxy_lds;
>  #endif
> -     LLVMValueRef *constants[NUM_CONST_BUFFERS];
> +     LLVMValueRef *constants[SI_NUM_CONST_BUFFERS];
>       LLVMValueRef *resources;
>       LLVMValueRef *samplers;
>       LLVMValueRef so_buffers[4];
> @@ -580,7 +580,7 @@ static void declare_system_value(
>       {
>               LLVMBuilderRef builder = gallivm->builder;
>               LLVMValueRef desc = 
> LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, SI_PARAM_CONST);
> -             LLVMValueRef buf_index = lp_build_const_int32(gallivm, 
> NUM_PIPE_CONST_BUFFERS);
> +             LLVMValueRef buf_index = lp_build_const_int32(gallivm, 
> SI_DRIVER_STATE_CONST_BUF);
>               LLVMValueRef resource = build_indexed_load(si_shader_ctx, desc, 
> buf_index);
>  
>               /* offset = sample_id * 8  (8 = 2 floats containing 
> samplepos.xy) */
> @@ -788,7 +788,7 @@ static void si_llvm_emit_clipvertex(struct 
> lp_build_tgsi_context * bld_base,
>       unsigned const_chan;
>       LLVMValueRef base_elt;
>       LLVMValueRef ptr = LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, 
> SI_PARAM_CONST);
> -     LLVMValueRef constbuf_index = lp_build_const_int32(base->gallivm, 
> NUM_PIPE_CONST_BUFFERS);
> +     LLVMValueRef constbuf_index = lp_build_const_int32(base->gallivm, 
> SI_DRIVER_STATE_CONST_BUF);
>       LLVMValueRef const_resource = build_indexed_load(si_shader_ctx, ptr, 
> constbuf_index);
>  
>       for (reg_index = 0; reg_index < 2; reg_index ++) {
> @@ -1751,7 +1751,7 @@ static void tex_fetch_args(
>               txf_emit_data.dst_type = LLVMVectorType(
>                       LLVMInt32TypeInContext(gallivm->context), 4);
>               txf_emit_data.args[0] = lp_build_gather_values(gallivm, 
> txf_address, txf_count);
> -             txf_emit_data.args[1] = 
> si_shader_ctx->resources[FMASK_TEX_OFFSET + sampler_index];
> +             txf_emit_data.args[1] = 
> si_shader_ctx->resources[SI_FMASK_TEX_OFFSET + sampler_index];
>               txf_emit_data.args[2] = lp_build_const_int32(gallivm, 
> inst.Texture.Texture);
>               txf_emit_data.arg_count = 3;
>  
> @@ -1783,7 +1783,7 @@ static void tex_fetch_args(
>                */
>               LLVMValueRef fmask_desc =
>                       LLVMBuildBitCast(gallivm->builder,
> -                                      
> si_shader_ctx->resources[FMASK_TEX_OFFSET + sampler_index],
> +                                      
> si_shader_ctx->resources[SI_FMASK_TEX_OFFSET + sampler_index],
>                                        LLVMVectorType(uint_bld->elem_type, 
> 8), "");
>  
>               LLVMValueRef fmask_word1 =
> @@ -2328,14 +2328,14 @@ static void create_function(struct si_shader_context 
> *si_shader_ctx)
>       v8i32 = LLVMVectorType(i32, 8);
>       v16i8 = LLVMVectorType(i8, 16);
>  
> -     params[SI_PARAM_CONST] = const_array(v16i8, NUM_CONST_BUFFERS);
> -     params[SI_PARAM_RW_BUFFERS] = const_array(v16i8, 6); /* XXX hardcoded */
> -     params[SI_PARAM_SAMPLER] = const_array(v4i32, NUM_SAMPLER_STATES);
> -     params[SI_PARAM_RESOURCE] = const_array(v8i32, NUM_SAMPLER_VIEWS);
> +     params[SI_PARAM_CONST] = const_array(v16i8, SI_NUM_CONST_BUFFERS);
> +     params[SI_PARAM_RW_BUFFERS] = const_array(v16i8, SI_NUM_RW_BUFFERS);
> +     params[SI_PARAM_SAMPLER] = const_array(v4i32, SI_NUM_SAMPLER_STATES);
> +     params[SI_PARAM_RESOURCE] = const_array(v8i32, SI_NUM_SAMPLER_VIEWS);
>  
>       switch (si_shader_ctx->type) {
>       case TGSI_PROCESSOR_VERTEX:
> -             params[SI_PARAM_VERTEX_BUFFER] = const_array(v16i8, 16); /* XXX 
> hardcoded */
> +             params[SI_PARAM_VERTEX_BUFFER] = const_array(v16i8, 
> SI_NUM_VERTEX_BUFFERS);
>               params[SI_PARAM_START_INSTANCE] = i32;
>               num_params = SI_PARAM_START_INSTANCE+1;
>               if (shader->key.vs.as_es) {
> @@ -2454,7 +2454,7 @@ static void preload_constants(struct si_shader_context 
> *si_shader_ctx)
>       unsigned buf;
>       LLVMValueRef ptr = LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, 
> SI_PARAM_CONST);
>  
> -     for (buf = 0; buf < NUM_CONST_BUFFERS; buf++) {
> +     for (buf = 0; buf < SI_NUM_CONST_BUFFERS; buf++) {
>               unsigned i, num_const = info->const_file_max[buf] + 1;
>  
>               if (num_const == 0)
> @@ -2493,7 +2493,7 @@ static void preload_samplers(struct si_shader_context 
> *si_shader_ctx)
>               return;
>  
>       /* Allocate space for the values */
> -     si_shader_ctx->resources = CALLOC(NUM_SAMPLER_VIEWS, 
> sizeof(LLVMValueRef));
> +     si_shader_ctx->resources = CALLOC(SI_NUM_SAMPLER_VIEWS, 
> sizeof(LLVMValueRef));
>       si_shader_ctx->samplers = CALLOC(num_samplers, sizeof(LLVMValueRef));
>  
>       res_ptr = LLVMGetParam(si_shader_ctx->radeon_bld.main_fn, 
> SI_PARAM_RESOURCE);
> @@ -2511,8 +2511,8 @@ static void preload_samplers(struct si_shader_context 
> *si_shader_ctx)
>  
>               /* FMASK resource */
>               if (info->is_msaa_sampler[i]) {
> -                     offset = lp_build_const_int32(gallivm, FMASK_TEX_OFFSET 
> + i);
> -                     si_shader_ctx->resources[FMASK_TEX_OFFSET + i] =
> +                     offset = lp_build_const_int32(gallivm, 
> SI_FMASK_TEX_OFFSET + i);
> +                     si_shader_ctx->resources[SI_FMASK_TEX_OFFSET + i] =
>                               build_indexed_load(si_shader_ctx, res_ptr, 
> offset);
>               }
>       }
> @@ -2536,7 +2536,7 @@ static void preload_streamout_buffers(struct 
> si_shader_context *si_shader_ctx)
>       for (i = 0; i < 4; ++i) {
>               if (si_shader_ctx->shader->selector->so.stride[i]) {
>                       LLVMValueRef offset = lp_build_const_int32(gallivm,
> -                                                                SI_RW_SO + 
> i);
> +                                                                
> SI_SO_BUF_OFFSET + i);
>  
>                       si_shader_ctx->so_buffers[i] = 
> build_indexed_load(si_shader_ctx, buf_ptr, offset);
>               }
> @@ -2880,7 +2880,7 @@ int si_pipe_shader_create(
>       tgsi_parse_free(&si_shader_ctx.parse);
>  
>  out:
> -     for (int i = 0; i < NUM_CONST_BUFFERS; i++)
> +     for (int i = 0; i < SI_NUM_CONST_BUFFERS; i++)
>               FREE(si_shader_ctx.constants[i]);
>       FREE(si_shader_ctx.resources);
>       FREE(si_shader_ctx.samplers);
> diff --git a/src/gallium/drivers/radeonsi/si_state.c 
> b/src/gallium/drivers/radeonsi/si_state.c
> index cbd51ad..c64958a 100644
> --- a/src/gallium/drivers/radeonsi/si_state.c
> +++ b/src/gallium/drivers/radeonsi/si_state.c
> @@ -446,7 +446,7 @@ static void si_set_clip_state(struct pipe_context *ctx,
>       cb.user_buffer = state->ucp;
>       cb.buffer_offset = 0;
>       cb.buffer_size = 4*4*8;
> -     ctx->set_constant_buffer(ctx, PIPE_SHADER_VERTEX, 
> NUM_PIPE_CONST_BUFFERS, &cb);
> +     ctx->set_constant_buffer(ctx, PIPE_SHADER_VERTEX, 
> SI_DRIVER_STATE_CONST_BUF, &cb);
>       pipe_resource_reference(&cb.buffer, NULL);
>  
>       si_pm4_set_state(sctx, clip, pm4);
> @@ -1961,7 +1961,7 @@ static void si_set_framebuffer_state(struct 
> pipe_context *ctx,
>       }
>       constbuf.buffer_size = sctx->framebuffer.nr_samples * 2 * 4;
>       ctx->set_constant_buffer(ctx, PIPE_SHADER_FRAGMENT,
> -                              NUM_PIPE_CONST_BUFFERS, &constbuf);
> +                              SI_DRIVER_STATE_CONST_BUF, &constbuf);
>  }
>  
>  static void si_emit_framebuffer_state(struct si_context *sctx, struct 
> r600_atom *atom)
> @@ -2710,7 +2710,7 @@ static void si_set_sampler_views(struct pipe_context 
> *ctx,
>                       samplers->depth_texture_mask &= ~(1 << i);
>                       samplers->compressed_colortex_mask &= ~(1 << i);
>                       si_set_sampler_view(sctx, shader, i, NULL, NULL);
> -                     si_set_sampler_view(sctx, shader, FMASK_TEX_OFFSET + i,
> +                     si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + 
> i,
>                                           NULL, NULL);
>                       continue;
>               }
> @@ -2733,10 +2733,10 @@ static void si_set_sampler_views(struct pipe_context 
> *ctx,
>                       }
>  
>                       if (rtex->fmask.size) {
> -                             si_set_sampler_view(sctx, shader, 
> FMASK_TEX_OFFSET + i,
> +                             si_set_sampler_view(sctx, shader, 
> SI_FMASK_TEX_OFFSET + i,
>                                                   views[i], 
> rviews[i]->fmask_state);
>                       } else {
> -                             si_set_sampler_view(sctx, shader, 
> FMASK_TEX_OFFSET + i,
> +                             si_set_sampler_view(sctx, shader, 
> SI_FMASK_TEX_OFFSET + i,
>                                                   NULL, NULL);
>                       }
>               }
> @@ -2745,7 +2745,7 @@ static void si_set_sampler_views(struct pipe_context 
> *ctx,
>               samplers->depth_texture_mask &= ~(1 << i);
>               samplers->compressed_colortex_mask &= ~(1 << i);
>               si_set_sampler_view(sctx, shader, i, NULL, NULL);
> -             si_set_sampler_view(sctx, shader, FMASK_TEX_OFFSET + i,
> +             si_set_sampler_view(sctx, shader, SI_FMASK_TEX_OFFSET + i,
>                                   NULL, NULL);
>       }
>  
> diff --git a/src/gallium/drivers/radeonsi/si_state.h 
> b/src/gallium/drivers/radeonsi/si_state.h
> index c051d73..fc3b1b9 100644
> --- a/src/gallium/drivers/radeonsi/si_state.h
> +++ b/src/gallium/drivers/radeonsi/si_state.h
> @@ -106,20 +106,35 @@ union si_state {
>       struct si_pm4_state     *array[0];
>  };
>  
> -#define NUM_TEX_UNITS 16
> +#define SI_NUM_USER_SAMPLERS 16 /* AKA OpenGL textures units per shader */
>  
>  /* User sampler views:   0..15
>   * FMASK sampler views: 16..31 (no sampler states)
>   */
> -#define FMASK_TEX_OFFSET     NUM_TEX_UNITS
> -#define NUM_SAMPLER_VIEWS    (FMASK_TEX_OFFSET+NUM_TEX_UNITS)
> -#define NUM_SAMPLER_STATES   NUM_TEX_UNITS
> +#define SI_FMASK_TEX_OFFSET          SI_NUM_USER_SAMPLERS
> +#define SI_NUM_SAMPLER_VIEWS         (SI_FMASK_TEX_OFFSET + 
> SI_NUM_USER_SAMPLERS)
> +#define SI_NUM_SAMPLER_STATES                SI_NUM_USER_SAMPLERS
>  
> -#define NUM_PIPE_CONST_BUFFERS       16
> -#define NUM_CONST_BUFFERS    (NUM_PIPE_CONST_BUFFERS + 1)
> +/* User constant buffers:   0..15
> + * Driver state constants:  16
> + */
> +#define SI_NUM_USER_CONST_BUFFERS    16
> +#define SI_DRIVER_STATE_CONST_BUF    SI_NUM_USER_CONST_BUFFERS
> +#define SI_NUM_CONST_BUFFERS         (SI_DRIVER_STATE_CONST_BUF + 1)
>  
> +/* Read-write buffer slots.
> + *
> + * Ring buffers:        0..1
> + * Streamout buffers:   2..5
> + */
>  #define SI_RING_ESGS         0
>  #define SI_RING_GSVS         1
> +#define SI_NUM_RING_BUFFERS  2
> +#define SI_SO_BUF_OFFSET     SI_NUM_RING_BUFFERS
> +#define SI_NUM_RW_BUFFERS    (SI_SO_BUF_OFFSET + 4)
> +
> +#define SI_NUM_VERTEX_BUFFERS        16
> +
>  
>  /* This represents resource descriptors in memory, such as buffer resources,
>   * image resources, and sampler states.
> @@ -155,8 +170,8 @@ struct si_descriptors {
>  
>  struct si_sampler_views {
>       struct si_descriptors           desc;
> -     struct pipe_sampler_view        *views[NUM_SAMPLER_VIEWS];
> -     uint32_t                        *desc_data[NUM_SAMPLER_VIEWS];
> +     struct pipe_sampler_view        *views[SI_NUM_SAMPLER_VIEWS];
> +     uint32_t                        *desc_data[SI_NUM_SAMPLER_VIEWS];
>  };
>  
>  struct si_buffer_resources {
> -- 
> 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

Reply via email to