At some point, we need to stop shoving stuff in brw_fs.cpp. Howevver, this doesn't really make it any worse, and does move it to the compiler.
Acked-by: Jason Ekstrand <[email protected]> On Fri, Dec 11, 2015 at 11:22 AM, Kristian Høgsberg Kristensen <[email protected]> wrote: > This is a helper function for setting up the local invocation ID > payload according to the cs_prog_data generated by the compiler. It's > intended to be available to users of libi965_compiler so move it there. > --- > src/mesa/drivers/dri/i965/brw_compiler.h | 7 +++++++ > src/mesa/drivers/dri/i965/brw_cs.c | 36 > -------------------------------- > src/mesa/drivers/dri/i965/brw_cs.h | 4 ---- > src/mesa/drivers/dri/i965/brw_fs.cpp | 36 > ++++++++++++++++++++++++++++++++ > 4 files changed, 43 insertions(+), 40 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_compiler.h > b/src/mesa/drivers/dri/i965/brw_compiler.h > index 2333f4a..28237e6 100644 > --- a/src/mesa/drivers/dri/i965/brw_compiler.h > +++ b/src/mesa/drivers/dri/i965/brw_compiler.h > @@ -704,6 +704,13 @@ brw_compile_cs(const struct brw_compiler *compiler, void > *log_data, > unsigned *final_assembly_size, > char **error_str); > > +/** > + * Fill out local id payload for compute shader according to cs_prog_data. > + */ > +void > +brw_cs_fill_local_id_payload(const struct brw_cs_prog_data *cs_prog_data, > + void *buffer, uint32_t threads, uint32_t > stride); > + > #ifdef __cplusplus > } /* extern "C" */ > #endif > diff --git a/src/mesa/drivers/dri/i965/brw_cs.c > b/src/mesa/drivers/dri/i965/brw_cs.c > index d88e822..9eadb7e 100644 > --- a/src/mesa/drivers/dri/i965/brw_cs.c > +++ b/src/mesa/drivers/dri/i965/brw_cs.c > @@ -34,42 +34,6 @@ > #include "brw_program.h" > #include "glsl/ir_uniform.h" > > -void > -brw_cs_fill_local_id_payload(const struct brw_cs_prog_data *prog_data, > - void *buffer, uint32_t threads, uint32_t stride) > -{ > - if (prog_data->local_invocation_id_regs == 0) > - return; > - > - /* 'stride' should be an integer number of registers, that is, a multiple > - * of 32 bytes. > - */ > - assert(stride % 32 == 0); > - > - unsigned x = 0, y = 0, z = 0; > - for (unsigned t = 0; t < threads; t++) { > - uint32_t *param = (uint32_t *) buffer + stride * t / 4; > - > - for (unsigned i = 0; i < prog_data->simd_size; i++) { > - param[0 * prog_data->simd_size + i] = x; > - param[1 * prog_data->simd_size + i] = y; > - param[2 * prog_data->simd_size + i] = z; > - > - x++; > - if (x == prog_data->local_size[0]) { > - x = 0; > - y++; > - if (y == prog_data->local_size[1]) { > - y = 0; > - z++; > - if (z == prog_data->local_size[2]) > - z = 0; > - } > - } > - } > - } > -} > - > static void > assign_cs_binding_table_offsets(const struct brw_device_info *devinfo, > const struct gl_shader_program *shader_prog, > diff --git a/src/mesa/drivers/dri/i965/brw_cs.h > b/src/mesa/drivers/dri/i965/brw_cs.h > index 9ce39fb..890a0c8 100644 > --- a/src/mesa/drivers/dri/i965/brw_cs.h > +++ b/src/mesa/drivers/dri/i965/brw_cs.h > @@ -32,10 +32,6 @@ extern "C" { > void > brw_upload_cs_prog(struct brw_context *brw); > > -void > -brw_cs_fill_local_id_payload(const struct brw_cs_prog_data *cs_prog_data, > - void *buffer, uint32_t threads, uint32_t > stride); > - > #ifdef __cplusplus > } > #endif > diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp > b/src/mesa/drivers/dri/i965/brw_fs.cpp > index 359e138..5671a23 100644 > --- a/src/mesa/drivers/dri/i965/brw_fs.cpp > +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp > @@ -5693,3 +5693,39 @@ brw_compile_cs(const struct brw_compiler *compiler, > void *log_data, > > return g.get_assembly(final_assembly_size); > } > + > +void > +brw_cs_fill_local_id_payload(const struct brw_cs_prog_data *prog_data, > + void *buffer, uint32_t threads, uint32_t stride) > +{ > + if (prog_data->local_invocation_id_regs == 0) > + return; > + > + /* 'stride' should be an integer number of registers, that is, a multiple > + * of 32 bytes. > + */ > + assert(stride % 32 == 0); > + > + unsigned x = 0, y = 0, z = 0; > + for (unsigned t = 0; t < threads; t++) { > + uint32_t *param = (uint32_t *) buffer + stride * t / 4; > + > + for (unsigned i = 0; i < prog_data->simd_size; i++) { > + param[0 * prog_data->simd_size + i] = x; > + param[1 * prog_data->simd_size + i] = y; > + param[2 * prog_data->simd_size + i] = z; > + > + x++; > + if (x == prog_data->local_size[0]) { > + x = 0; > + y++; > + if (y == prog_data->local_size[1]) { > + y = 0; > + z++; > + if (z == prog_data->local_size[2]) > + z = 0; > + } > + } > + } > + } > +} > -- > 2.6.4 > > _______________________________________________ > mesa-dev mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
