[Mesa-dev] [PATCH] i965: Move brw_cs_fill_local_id_payload() to libi965_compiler
Jason Ekstrand
jason at jlekstrand.net
Fri Dec 11 11:49:37 PST 2015
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 <jason.ekstrand at intel.com>
On Fri, Dec 11, 2015 at 11:22 AM, Kristian Høgsberg Kristensen
<krh at bitplanet.net> 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
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list