[Mesa-dev] [PATCH 6/6] i965/vs: Get rid of brw_vs_compile completely.

Pohjolainen, Topi topi.pohjolainen at intel.com
Fri Jul 3 01:44:34 PDT 2015


On Wed, Jul 01, 2015 at 03:03:36PM -0700, Kenneth Graunke wrote:
> After tearing it out another level or two, and just passing the key and
> vp directly, we can finally remove this struct.  It also eliminates a
> pointless memcpy() of the key.
> 
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  src/mesa/drivers/dri/i965/brw_vec4.cpp | 37 +++++++++++++++++-----------------
>  src/mesa/drivers/dri/i965/brw_vs.c     | 20 ++++++++----------
>  src/mesa/drivers/dri/i965/brw_vs.h     | 13 ++++--------
>  3 files changed, 31 insertions(+), 39 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> index 42d014c..39715c4 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> @@ -1872,10 +1872,11 @@ extern "C" {
>   */
>  const unsigned *
>  brw_vs_emit(struct brw_context *brw,
> -            struct gl_shader_program *prog,
> -            struct brw_vs_compile *c,
> -            struct brw_vs_prog_data *prog_data,
>              void *mem_ctx,
> +            const struct brw_vs_prog_key *key,
> +            struct brw_vs_prog_data *prog_data,
> +            struct gl_vertex_program *vp,
> +            struct gl_shader_program *prog,
>              unsigned *final_assembly_size)
>  {
>     bool start_busy = false;
> @@ -1894,29 +1895,29 @@ brw_vs_emit(struct brw_context *brw,
>  
>     int st_index = -1;
>     if (INTEL_DEBUG & DEBUG_SHADER_TIME)
> -      st_index = brw_get_shader_time_index(brw, prog, &c->vp->program.Base,
> +      st_index = brw_get_shader_time_index(brw, prog, &vp->Base,
>                                             ST_VS);

This would now fit into the previous line. Two similar insignificant
formatting nits further down, either way:

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

>  
>     if (unlikely(INTEL_DEBUG & DEBUG_VS))
> -      brw_dump_ir("vertex", prog, &shader->base, &c->vp->program.Base);
> +      brw_dump_ir("vertex", prog, &shader->base, &vp->Base);
>  
>     if (brw->intelScreen->compiler->scalar_vs) {
> -      if (!c->vp->program.Base.nir) {
> +      if (!vp->Base.nir) {
>           /* Normally we generate NIR in LinkShader() or
>            * ProgramStringNotify(), but Mesa's fixed-function vertex program
>            * handling doesn't notify the driver at all.  Just do it here, at
>            * the last minute, even though it's lame.
>            */
> -         assert(c->vp->program.Base.Id == 0 && prog == NULL);
> -         c->vp->program.Base.nir =
> -            brw_create_nir(brw, NULL, &c->vp->program.Base, MESA_SHADER_VERTEX);
> +         assert(vp->Base.Id == 0 && prog == NULL);
> +         vp->Base.nir =
> +            brw_create_nir(brw, NULL, &vp->Base, MESA_SHADER_VERTEX);
>        }
>  
>        prog_data->base.dispatch_mode = DISPATCH_MODE_SIMD8;
>  
>        fs_visitor v(brw->intelScreen->compiler, brw,
> -                   mem_ctx, MESA_SHADER_VERTEX, &c->key,
> -                   &prog_data->base.base, prog, &c->vp->program.Base,
> +                   mem_ctx, MESA_SHADER_VERTEX, key,
> +                   &prog_data->base.base, prog, &vp->Base,
>                     8, st_index);
>        if (!v.run_vs(brw_select_clip_planes(&brw->ctx))) {
>           if (prog) {
> @@ -1931,8 +1932,8 @@ brw_vs_emit(struct brw_context *brw,
>        }
>  
>        fs_generator g(brw->intelScreen->compiler, brw,
> -                     mem_ctx, (void *) &c->key, &prog_data->base.base,
> -                     &c->vp->program.Base, v.promoted_constants,
> +                     mem_ctx, (void *) key, &prog_data->base.base,

You could drop the extra space before 'key'.

> +                     &vp->Base, v.promoted_constants,
>                       v.runtime_check_aads_emit, "VS");
>        if (INTEL_DEBUG & DEBUG_VS) {
>           char *name;
> @@ -1942,7 +1943,7 @@ brw_vs_emit(struct brw_context *brw,
>                                     prog->Name);
>           } else {
>              name = ralloc_asprintf(mem_ctx, "vertex program %d",
> -                                   c->vp->program.Base.Id);
> +                                   vp->Base.Id);
>           }
>           g.enable_debug(name);
>        }
> @@ -1953,8 +1954,8 @@ brw_vs_emit(struct brw_context *brw,
>     if (!assembly) {
>        prog_data->base.dispatch_mode = DISPATCH_MODE_4X2_DUAL_OBJECT;
>  
> -      vec4_vs_visitor v(brw->intelScreen->compiler, brw, &c->key, prog_data,
> -                        &c->vp->program, prog, mem_ctx, st_index,
> +      vec4_vs_visitor v(brw->intelScreen->compiler, brw, key, prog_data,
> +                        vp, prog, mem_ctx, st_index,
>                          !_mesa_is_gles3(&brw->ctx));
>        if (!v.run(brw_select_clip_planes(&brw->ctx))) {
>           if (prog) {
> @@ -1969,14 +1970,14 @@ brw_vs_emit(struct brw_context *brw,
>        }
>  
>        vec4_generator g(brw->intelScreen->compiler, brw,
> -                       prog, &c->vp->program.Base, &prog_data->base,
> +                       prog, &vp->Base, &prog_data->base,
>                         mem_ctx, INTEL_DEBUG & DEBUG_VS, "vertex", "VS");
>        assembly = g.generate_assembly(v.cfg, final_assembly_size);
>     }
>  
>     if (unlikely(brw->perf_debug) && shader) {
>        if (shader->compiled_once) {
> -         brw_vs_debug_recompile(brw, prog, &c->key);
> +         brw_vs_debug_recompile(brw, prog, key);
>        }
>        if (start_busy && !drm_intel_bo_busy(brw->batch.last_bo)) {
>           perf_debug("VS compile took %.03f ms and stalled the GPU\n",
> diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
> index ee3f664..2b9b005 100644
> --- a/src/mesa/drivers/dri/i965/brw_vs.c
> +++ b/src/mesa/drivers/dri/i965/brw_vs.c
> @@ -94,7 +94,6 @@ brw_codegen_vs_prog(struct brw_context *brw,
>  {
>     GLuint program_size;
>     const GLuint *program;
> -   struct brw_vs_compile c;
>     struct brw_vs_prog_data prog_data;
>     struct brw_stage_prog_data *stage_prog_data = &prog_data.base.base;
>     void *mem_ctx;
> @@ -104,8 +103,6 @@ brw_codegen_vs_prog(struct brw_context *brw,
>     if (prog)
>        vs = prog->_LinkedShaders[MESA_SHADER_VERTEX];
>  
> -   memset(&c, 0, sizeof(c));
> -   memcpy(&c.key, key, sizeof(*key));
>     memset(&prog_data, 0, sizeof(prog_data));
>  
>     /* Use ALT floating point mode for ARB programs so that 0^0 == 1. */
> @@ -114,8 +111,6 @@ brw_codegen_vs_prog(struct brw_context *brw,
>  
>     mem_ctx = ralloc_context(NULL);
>  
> -   c.vp = vp;
> -
>     /* Allocate the references to the uniforms that will end up in the
>      * prog_data associated with the compiled program, and which will be freed
>      * by the state cache.
> @@ -134,7 +129,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
>     /* vec4_visitor::setup_uniform_clipplane_values() also uploads user clip
>      * planes as uniforms.
>      */
> -   param_count += c.key.base.nr_userclip_plane_consts * 4;
> +   param_count += key->base.nr_userclip_plane_consts * 4;
>  
>     stage_prog_data->param =
>        rzalloc_array(NULL, const gl_constant_value *, param_count);
> @@ -145,7 +140,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
>     GLbitfield64 outputs_written = vp->program.Base.OutputsWritten;
>     prog_data.inputs_read = vp->program.Base.InputsRead;
>  
> -   if (c.key.copy_edgeflag) {
> +   if (key->copy_edgeflag) {
>        outputs_written |= BITFIELD64_BIT(VARYING_SLOT_EDGE);
>        prog_data.inputs_read |= VERT_BIT_EDGEFLAG;
>     }
> @@ -158,7 +153,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
>         * coords, which would be a pain to handle.
>         */
>        for (i = 0; i < 8; i++) {
> -         if (c.key.point_coord_replace & (1 << i))
> +         if (key->point_coord_replace & (1 << i))
>              outputs_written |= BITFIELD64_BIT(VARYING_SLOT_TEX0 + i);
>        }
>  
> @@ -173,7 +168,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
>      * distance varying slots whenever clipping is enabled, even if the vertex
>      * shader doesn't write to gl_ClipDistance.
>      */
> -   if (c.key.base.userclip_active) {
> +   if (key->base.userclip_active) {
>        outputs_written |= BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST0);
>        outputs_written |= BITFIELD64_BIT(VARYING_SLOT_CLIP_DIST1);
>     }
> @@ -182,13 +177,14 @@ brw_codegen_vs_prog(struct brw_context *brw,
>                         &prog_data.base.vue_map, outputs_written);
>  
>     if (0) {
> -      _mesa_fprint_program_opt(stderr, &c.vp->program.Base, PROG_PRINT_DEBUG,
> +      _mesa_fprint_program_opt(stderr, &vp->program.Base, PROG_PRINT_DEBUG,
>  			       true);

And may be fix the indentation in the following line.

>     }
>  
>     /* Emit GEN4 code.
>      */
> -   program = brw_vs_emit(brw, prog, &c, &prog_data, mem_ctx, &program_size);
> +   program = brw_vs_emit(brw, mem_ctx, key, &prog_data,
> +                         &vp->program, prog, &program_size);
>     if (program == NULL) {
>        ralloc_free(mem_ctx);
>        return false;
> @@ -202,7 +198,7 @@ brw_codegen_vs_prog(struct brw_context *brw,
>     }
>  
>     brw_upload_cache(&brw->cache, BRW_CACHE_VS_PROG,
> -		    &c.key, sizeof(c.key),
> +		    key, sizeof(struct brw_vs_prog_key),
>  		    program, program_size,
>  		    &prog_data, sizeof(prog_data),
>  		    &brw->vs.base.prog_offset, &brw->vs.prog_data);
> diff --git a/src/mesa/drivers/dri/i965/brw_vs.h b/src/mesa/drivers/dri/i965/brw_vs.h
> index 0481c44..89a85c3 100644
> --- a/src/mesa/drivers/dri/i965/brw_vs.h
> +++ b/src/mesa/drivers/dri/i965/brw_vs.h
> @@ -50,21 +50,16 @@
>  #define BRW_ATTRIB_WA_SIGN          32  /* interpret as signed in shader */
>  #define BRW_ATTRIB_WA_SCALE         64  /* interpret as scaled in shader */
>  
> -struct brw_vs_compile {
> -   struct brw_vs_prog_key key;
> -
> -   struct brw_vertex_program *vp;
> -};
> -
>  #ifdef __cplusplus
>  extern "C" {
>  #endif
>  
>  const unsigned *brw_vs_emit(struct brw_context *brw,
> -                            struct gl_shader_program *prog,
> -                            struct brw_vs_compile *c,
> -                            struct brw_vs_prog_data *prog_data,
>                              void *mem_ctx,
> +                            const struct brw_vs_prog_key *key,
> +                            struct brw_vs_prog_data *prog_data,
> +                            struct gl_vertex_program *vp,
> +                            struct gl_shader_program *shader_prog,
>                              unsigned *program_size);
>  void brw_vs_debug_recompile(struct brw_context *brw,
>                              struct gl_shader_program *prog,
> -- 
> 2.4.4
> 
> _______________________________________________
> 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