[Mesa-dev] [PATCH 16/18] i965/cs: Support CS program precompile
Kristian Høgsberg
krh at bitplanet.net
Mon Mar 16 23:25:22 PDT 2015
On Mon, Mar 16, 2015 at 11:20 PM, Kristian Høgsberg <krh at bitplanet.net> wrote:
> 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
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 at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list