[Mesa-dev] [PATCH 16/18] i965/cs: Support CS program precompile

Kristian Høgsberg krh at bitplanet.net
Mon Mar 16 23:20:25 PDT 2015


On Sat, Mar 14, 2015 at 9:54 PM, Jordan Justen
<jordan.l.justen at intel.com> wrote:
> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> ---
>  src/mesa/drivers/dri/i965/brw_context.h  |  6 ++++++
>  src/mesa/drivers/dri/i965/brw_cs.cpp     | 26 ++++++++++++++++++++++++++
>  src/mesa/drivers/dri/i965/brw_shader.cpp |  4 ++++
>  src/mesa/drivers/dri/i965/brw_shader.h   |  3 +++
>  4 files changed, 39 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
> index 170c0c6..27a4ff4 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.h
> +++ b/src/mesa/drivers/dri/i965/brw_context.h
> @@ -1844,6 +1844,12 @@ brw_fragment_program_const(const struct gl_fragment_program *p)
>     return (const struct brw_fragment_program *) p;
>  }
>
> +static inline struct brw_compute_program *
> +brw_compute_program(struct gl_compute_program *p)
> +{
> +   return (struct brw_compute_program *) p;
> +}
> +
>  /**
>   * Pre-gen6, the register file of the EUs was shared between threads,
>   * and each thread used some subset allocated on a 16-register block
> diff --git a/src/mesa/drivers/dri/i965/brw_cs.cpp b/src/mesa/drivers/dri/i965/brw_cs.cpp
> index 5be740c..61c35ae 100644
> --- a/src/mesa/drivers/dri/i965/brw_cs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_cs.cpp
> @@ -262,3 +262,29 @@ brw_upload_cs_prog(struct brw_context *brw)
>     }
>     brw->cs.base.prog_data = &brw->cs.prog_data->base;
>  }
> +
> +
> +extern "C" bool
> +brw_cs_precompile(struct gl_context *ctx,
> +                  struct gl_shader_program *shader_prog,
> +                  struct gl_program *prog)
> +{
> +   struct brw_context *brw = brw_context(ctx);
> +   struct brw_cs_prog_key key;
> +
> +   struct gl_compute_program *cp = (struct gl_compute_program *) prog;
> +   struct brw_compute_program *bcp = brw_compute_program(cp);
> +
> +   memset(&key, 0, sizeof(key));
> +   key.program_string_id = bcp->id;

This should initialize key.tex.swizzles similar to how brw_fs_comp

> +   uint32_t old_prog_offset = brw->cs.base.prog_offset;
> +   struct brw_cs_prog_data *old_prog_data = brw->cs.prog_data;
> +
> +   bool success = do_cs_prog(brw, shader_prog, bcp, &key);
> +
> +   brw->cs.base.prog_offset = old_prog_offset;
> +   brw->cs.prog_data = old_prog_data;
> +
> +   return success;
> +}
> diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp
> index 499bd94..4392fbc 100644
> --- a/src/mesa/drivers/dri/i965/brw_shader.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp
> @@ -59,6 +59,7 @@ brw_shader_precompile(struct gl_context *ctx,
>     struct gl_shader *vs = sh_prog->_LinkedShaders[MESA_SHADER_VERTEX];
>     struct gl_shader *gs = sh_prog->_LinkedShaders[MESA_SHADER_GEOMETRY];
>     struct gl_shader *fs = sh_prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
> +   struct gl_shader *cs = sh_prog->_LinkedShaders[MESA_SHADER_COMPUTE];
>
>     if (fs && !brw_fs_precompile(ctx, sh_prog, fs->Program))
>        return false;
> @@ -69,6 +70,9 @@ brw_shader_precompile(struct gl_context *ctx,
>     if (vs && !brw_vs_precompile(ctx, sh_prog, vs->Program))
>        return false;
>
> +   if (cs && !brw_cs_precompile(ctx, sh_prog, cs->Program))
> +      return false;
> +
>     return true;
>  }
>
> diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h
> index 5c95355..53aa727 100644
> --- a/src/mesa/drivers/dri/i965/brw_shader.h
> +++ b/src/mesa/drivers/dri/i965/brw_shader.h
> @@ -230,6 +230,9 @@ bool brw_gs_precompile(struct gl_context *ctx,
>  bool brw_fs_precompile(struct gl_context *ctx,
>                         struct gl_shader_program *shader_prog,
>                         struct gl_program *prog);
> +bool brw_cs_precompile(struct gl_context *ctx,
> +                       struct gl_shader_program *shader_prog,
> +                       struct gl_program *prog);
>
>  #ifdef __cplusplus
>  }
> --
> 2.1.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