On Mon, Mar 16, 2015 at 11:20 PM, Kristian Høgsberg <k...@bitplanet.net> wrote: > 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
Oops, pressed send too fast: similiar to how brw_fs_precompile does it. Or perhaps rename brw_vue_setup_prog_key_for_precompile(), make it take a struct brw_sampler_prog_key_data and share it across VS, GS, FS and CS. > >> + 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