[Mesa-dev] [Mesa-dev, 4/5] i965/cs: Support texture sampling for CS

Kristian Høgsberg krh at bitplanet.net
Wed Sep 9 16:30:48 PDT 2015


Jordan Justen <jordan.l.justen at intel.com> writes:

> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>

Looks good - maybe change the subject to

    i965: Set up sampler state for compute shaders

since this really only sets up that part of the state.

Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>

> ---
> src/mesa/drivers/dri/i965/brw_cs.cpp | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_cs.cpp b/src/mesa/drivers/dri/i965/brw_cs.cpp
> index 63e3b8d..bf43def 100644
> --- a/src/mesa/drivers/dri/i965/brw_cs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_cs.cpp
> @@ -221,12 +221,18 @@ brw_codegen_cs_prog(struct brw_context *brw,
>  static void
>  brw_cs_populate_key(struct brw_context *brw, struct brw_cs_prog_key *key)
>  {
> +   struct gl_context *ctx = &brw->ctx;
>     /* BRW_NEW_COMPUTE_PROGRAM */
>     const struct brw_compute_program *cp =
>        (struct brw_compute_program *) brw->compute_program;
> +   const struct gl_program *prog = (struct gl_program *) cp;
>  
>     memset(key, 0, sizeof(*key));
>  
> +   /* _NEW_TEXTURE */
> +   brw_populate_sampler_prog_key_data(ctx, prog, brw->cs.base.sampler_count,
> +                                      &key->tex);
> +
>     /* The unique compute program ID */
>     key->program_string_id = cp->id;
>  }
> @@ -244,9 +250,12 @@ brw_upload_cs_prog(struct brw_context *brw)
>     if (!cp)
>        return;
>  
> -   if (!brw_state_dirty(brw, 0, BRW_NEW_COMPUTE_PROGRAM))
> +   if (!brw_state_dirty(brw, _NEW_TEXTURE, BRW_NEW_COMPUTE_PROGRAM))
>        return;
>  
> +   brw->cs.base.sampler_count =
> +      _mesa_fls(ctx->ComputeProgram._Current->Base.SamplersUsed);
> +
>     brw_cs_populate_key(brw, &key);
>  
>     if (!brw_search_cache(&brw->cache, BRW_CACHE_CS_PROG,
> @@ -391,7 +400,8 @@ brw_upload_cs_state(struct brw_context *brw)
>     if (brw->gen >= 8)
>        desc[dw++] = 0; /* Kernel Start Pointer High */
>     desc[dw++] = 0;
> -   desc[dw++] = 0;
> +   desc[dw++] = stage_state->sampler_offset |
> +      ((stage_state->sampler_count + 3) / 4);
>     desc[dw++] = stage_state->bind_bo_offset;
>     desc[dw++] = SET_FIELD((reg_aligned_constant_size / 32) + 0,
>                            MEDIA_CURBE_READ_LENGTH);


More information about the mesa-dev mailing list