[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