On Sat, Mar 14, 2015 at 9:54 PM, Jordan Justen <jordan.l.jus...@intel.com> wrote: > Signed-off-by: Jordan Justen <jordan.l.jus...@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@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