[Mesa-dev] [PATCH 5/7] util/blitter (and friends): generate appropriate SVIEW decls

Rob Clark robdclark at gmail.com
Thu Jun 11 14:30:49 PDT 2015


On Thu, Jun 11, 2015 at 4:51 PM, Roland Scheidegger <sroland at vmware.com> wrote:
> Am 11.06.2015 um 22:38 schrieb Rob Clark:
>> From: Rob Clark <robclark at freedesktop.org>
>>
>> Some hardware needs to know the sampler type.  Update the blit related
>> shaders to include SVIEW decl.
>>
>> Signed-off-by: Rob Clark <robclark at freedesktop.org>
>> ---
>>  src/gallium/auxiliary/util/u_blit.c           | 35 +++++++++---
>>  src/gallium/auxiliary/util/u_blitter.c        | 53 +++++++++++++-----
>>  src/gallium/auxiliary/util/u_simple_shaders.c | 78 ++++++++++++++++++++-------
>>  src/gallium/auxiliary/util/u_simple_shaders.h | 16 +++---
>>  src/gallium/auxiliary/util/u_tests.c          |  3 +-
>>  src/gallium/tests/trivial/quad-tex.c          |  2 +-
>>  6 files changed, 140 insertions(+), 47 deletions(-)
>>
>> diff --git a/src/gallium/auxiliary/util/u_blit.c b/src/gallium/auxiliary/util/u_blit.c
>> index 3f3b5fe..e3f3055 100644
>> --- a/src/gallium/auxiliary/util/u_blit.c
>> +++ b/src/gallium/auxiliary/util/u_blit.c
>> @@ -65,7 +65,7 @@ struct blit_state
>>     struct pipe_vertex_element velem[2];
>>
>>     void *vs;
>> -   void *fs[PIPE_MAX_TEXTURE_TYPES][TGSI_WRITEMASK_XYZW + 1];
>> +   void *fs[PIPE_MAX_TEXTURE_TYPES][TGSI_WRITEMASK_XYZW + 1][3];
>>
>>     struct pipe_resource *vbuf;  /**< quad vertices */
>>     unsigned vbuf_slot;
>> @@ -135,15 +135,17 @@ void
>>  util_destroy_blit(struct blit_state *ctx)
>>  {
>>     struct pipe_context *pipe = ctx->pipe;
>> -   unsigned i, j;
>> +   unsigned i, j, k;
>>
>>     if (ctx->vs)
>>        pipe->delete_vs_state(pipe, ctx->vs);
>>
>>     for (i = 0; i < Elements(ctx->fs); i++) {
>>        for (j = 0; j < Elements(ctx->fs[i]); j++) {
>> -         if (ctx->fs[i][j])
>> -            pipe->delete_fs_state(pipe, ctx->fs[i][j]);
>> +         for (k = 0; k < Elements(ctx->fs[i][j]); k++) {
>> +            if (ctx->fs[i][j][k])
>> +               pipe->delete_fs_state(pipe, ctx->fs[i][j][k]);
>> +         }
>>        }
>>     }
>>
>> @@ -158,18 +160,34 @@ util_destroy_blit(struct blit_state *ctx)
>>   */
>>  static INLINE void
>>  set_fragment_shader(struct blit_state *ctx, uint writemask,
>> +                    enum pipe_format format,
>>                      enum pipe_texture_target pipe_tex)
>>  {
>> -   if (!ctx->fs[pipe_tex][writemask]) {
>> +   enum tgsi_return_type stype;
>> +   unsigned idx;
>> +
>> +   if (util_format_is_pure_uint(format)) {
>> +      stype = TGSI_RETURN_TYPE_UINT;
>> +      idx = 0;
>> +   } else if (util_format_is_pure_sint(format)) {
>> +      stype = TGSI_RETURN_TYPE_SINT;
>> +      idx = 1;
>> +   } else {
>> +      stype = TGSI_RETURN_TYPE_FLOAT;
>> +      idx = 2;
>> +   }
>> +
>> +   if (!ctx->fs[pipe_tex][writemask][idx]) {
>>        unsigned tgsi_tex = util_pipe_tex_to_tgsi_tex(pipe_tex, 0);
>>
>> -      ctx->fs[pipe_tex][writemask] =
>> +      ctx->fs[pipe_tex][writemask][idx] =
>>           util_make_fragment_tex_shader_writemask(ctx->pipe, tgsi_tex,
>>                                                   TGSI_INTERPOLATE_LINEAR,
>> -                                                 writemask);
>> +                                                 writemask,
>> +                                                 stype);
>>     }
>>
>> -   cso_set_fragment_shader_handle(ctx->cso, ctx->fs[pipe_tex][writemask]);
>> +   cso_set_fragment_shader_handle(ctx->cso, ctx->fs[pipe_tex][writemask][idx]);
>>  }
>>
>>
>> @@ -571,6 +589,7 @@ util_blit_pixels_tex(struct blit_state *ctx,
>>
>>     /* shaders */
>>     set_fragment_shader(ctx, TGSI_WRITEMASK_XYZW,
>> +                       src_sampler_view->format,
>>                         src_sampler_view->texture->target);
>>     set_vertex_shader(ctx);
>>     cso_set_tessctrl_shader_handle(ctx->cso, NULL);
>> diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
>> index 16bf90f..5dfe2c7 100644
>> --- a/src/gallium/auxiliary/util/u_blitter.c
>> +++ b/src/gallium/auxiliary/util/u_blitter.c
>> @@ -81,6 +81,8 @@ struct blitter_context_priv
>>     /* FS which outputs a color from a texture,
>>        where the index is PIPE_TEXTURE_* to be sampled. */
>>     void *fs_texfetch_col[PIPE_MAX_TEXTURE_TYPES];
>> +   void *fs_texfetch_col_uint[PIPE_MAX_TEXTURE_TYPES];
>> +   void *fs_texfetch_col_sint[PIPE_MAX_TEXTURE_TYPES];
>>
>>     /* FS which outputs a depth from a texture,
>>        where the index is PIPE_TEXTURE_* to be sampled. */
>> @@ -90,6 +92,8 @@ struct blitter_context_priv
>>
>>     /* FS which outputs one sample from a multisample texture. */
>>     void *fs_texfetch_col_msaa[PIPE_MAX_TEXTURE_TYPES];
>> +   void *fs_texfetch_col_msaa_uint[PIPE_MAX_TEXTURE_TYPES];
>> +   void *fs_texfetch_col_msaa_sint[PIPE_MAX_TEXTURE_TYPES];
>>     void *fs_texfetch_depth_msaa[PIPE_MAX_TEXTURE_TYPES];
>>     void *fs_texfetch_depthstencil_msaa[PIPE_MAX_TEXTURE_TYPES];
>>     void *fs_texfetch_stencil_msaa[PIPE_MAX_TEXTURE_TYPES];
>> @@ -438,6 +442,10 @@ void util_blitter_destroy(struct blitter_context *blitter)
>>     for (i = 0; i < PIPE_MAX_TEXTURE_TYPES; i++) {
>>        if (ctx->fs_texfetch_col[i])
>>           ctx->delete_fs_state(pipe, ctx->fs_texfetch_col[i]);
>> +      if (ctx->fs_texfetch_col_sint[i])
>> +         ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_sint[i]);
>> +      if (ctx->fs_texfetch_col_uint[i])
>> +         ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_uint[i]);
>>        if (ctx->fs_texfetch_depth[i])
>>           ctx->delete_fs_state(pipe, ctx->fs_texfetch_depth[i]);
>>        if (ctx->fs_texfetch_depthstencil[i])
>> @@ -447,6 +455,10 @@ void util_blitter_destroy(struct blitter_context *blitter)
>>
>>        if (ctx->fs_texfetch_col_msaa[i])
>>           ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa[i]);
>> +      if (ctx->fs_texfetch_col_msaa_sint[i])
>> +         ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa_sint[i]);
>> +      if (ctx->fs_texfetch_col_msaa_uint[i])
>> +         ctx->delete_fs_state(pipe, ctx->fs_texfetch_col_msaa_uint[i]);
>>        if (ctx->fs_texfetch_depth_msaa[i])
>>           ctx->delete_fs_state(pipe, ctx->fs_texfetch_depth_msaa[i]);
>>        if (ctx->fs_texfetch_depthstencil_msaa[i])
>> @@ -844,25 +856,29 @@ static void *blitter_get_fs_texfetch_col(struct blitter_context_priv *ctx,
>>  {
>>     struct pipe_context *pipe = ctx->base.pipe;
>>     unsigned tgsi_tex = util_pipe_tex_to_tgsi_tex(target, src_nr_samples);
>> +   enum tgsi_return_type stype;
>>
>>     assert(target < PIPE_MAX_TEXTURE_TYPES);
>>
>> +     if (util_format_is_pure_uint(format))
>> +             stype = TGSI_RETURN_TYPE_UINT;
>> +     else if (util_format_is_pure_sint(format))
>> +             stype = TGSI_RETURN_TYPE_SINT;
>> +     else
>> +             stype = TGSI_RETURN_TYPE_FLOAT;
>> +
>>     if (src_nr_samples > 1) {
>>        void **shader;
>>
>>        if (dst_nr_samples <= 1) {
>>           /* The destination has one sample, so we'll do color resolve. */
>> -         boolean is_uint, is_sint;
>>           unsigned index = GET_MSAA_RESOLVE_FS_IDX(src_nr_samples);
>>
>> -         is_uint = util_format_is_pure_uint(format);
>> -         is_sint = util_format_is_pure_sint(format);
>> -
>>           assert(filter < 2);
>>
>> -         if (is_uint)
>> +         if (stype == TGSI_RETURN_TYPE_UINT)
>>              shader = &ctx->fs_resolve_uint[target][index][filter];
>> -         else if (is_sint)
>> +         else if (stype == TGSI_RETURN_TYPE_SINT)
>>              shader = &ctx->fs_resolve_sint[target][index][filter];
>>           else
>>              shader = &ctx->fs_resolve[target][index][filter];
>> @@ -872,12 +888,12 @@ static void *blitter_get_fs_texfetch_col(struct blitter_context_priv *ctx,
>>              if (filter == PIPE_TEX_FILTER_LINEAR) {
>>                 *shader = util_make_fs_msaa_resolve_bilinear(pipe, tgsi_tex,
>>                                                     src_nr_samples,
>> -                                                   is_uint, is_sint);
>> +                                                   stype);
>>              }
>>              else {
>>                 *shader = util_make_fs_msaa_resolve(pipe, tgsi_tex,
>>                                                     src_nr_samples,
>> -                                                   is_uint, is_sint);
>> +                                                   stype);
>>              }
>>           }
>>        }
>> @@ -885,24 +901,37 @@ static void *blitter_get_fs_texfetch_col(struct blitter_context_priv *ctx,
>>           /* The destination has multiple samples, we'll do
>>            * an MSAA->MSAA copy.
>>            */
>> -         shader = &ctx->fs_texfetch_col_msaa[target];
>> +          if (stype == TGSI_RETURN_TYPE_UINT)
>> +             shader = &ctx->fs_texfetch_col_msaa_uint[target];
>> +          else if (stype == TGSI_RETURN_TYPE_SINT)
>> +             shader = &ctx->fs_texfetch_col_msaa_sint[target];
>> +          else
>> +             shader = &ctx->fs_texfetch_col_msaa[target];
>>
>>           /* Create the fragment shader on-demand. */
>>           if (!*shader) {
>>              assert(!ctx->cached_all_shaders);
>> -            *shader = util_make_fs_blit_msaa_color(pipe, tgsi_tex);
>> +            *shader = util_make_fs_blit_msaa_color(pipe, tgsi_tex, stype);
>>           }
>>        }
>>
>>        return *shader;
>>     } else {
>> -      void **shader = &ctx->fs_texfetch_col[target];
>> +      void **shader;
>> +
>> +      if (stype == TGSI_RETURN_TYPE_UINT)
>> +         shader = &ctx->fs_texfetch_col_uint[target];
>> +      else if (stype == TGSI_RETURN_TYPE_SINT)
>> +         shader = &ctx->fs_texfetch_col_sint[target];
>> +      else
>> +         shader = &ctx->fs_texfetch_col[target];
>>
>>        /* Create the fragment shader on-demand. */
>>        if (!*shader) {
>>           assert(!ctx->cached_all_shaders);
>>           *shader = util_make_fragment_tex_shader(pipe, tgsi_tex,
>> -                                                 TGSI_INTERPOLATE_LINEAR);
>> +                                                 TGSI_INTERPOLATE_LINEAR,
>> +                                                 stype);
>>        }
>>
>>        return *shader;
>> diff --git a/src/gallium/auxiliary/util/u_simple_shaders.c b/src/gallium/auxiliary/util/u_simple_shaders.c
>> index c612b67..6d29cab 100644
>> --- a/src/gallium/auxiliary/util/u_simple_shaders.c
>> +++ b/src/gallium/auxiliary/util/u_simple_shaders.c
>> @@ -216,7 +216,8 @@ void *
>>  util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
>>                                          unsigned tex_target,
>>                                          unsigned interp_mode,
>> -                                        unsigned writemask )
>> +                                        unsigned writemask,
>> +                                        enum tgsi_return_type stype)
>>  {
>>     struct ureg_program *ureg;
>>     struct ureg_src sampler;
>> @@ -232,6 +233,8 @@ util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
>>
>>     sampler = ureg_DECL_sampler( ureg, 0 );
>>
>> +   ureg_DECL_sampler_view(ureg, 0, tex_target, stype, stype, stype, stype);
>> +
>>     tex = ureg_DECL_fs_input( ureg,
>>                               TGSI_SEMANTIC_GENERIC, 0,
>>                               interp_mode );
>> @@ -268,12 +271,14 @@ util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
>>   */
>>  void *
>>  util_make_fragment_tex_shader(struct pipe_context *pipe, unsigned tex_target,
>> -                              unsigned interp_mode)
>> +                              unsigned interp_mode,
>> +                              enum tgsi_return_type stype)
>>  {
>>     return util_make_fragment_tex_shader_writemask( pipe,
>>                                                     tex_target,
>>                                                     interp_mode,
>> -                                                   TGSI_WRITEMASK_XYZW );
>> +                                                   TGSI_WRITEMASK_XYZW,
>> +                                                   stype );
>>  }
>>
>>
>> @@ -298,6 +303,12 @@ util_make_fragment_tex_shader_writedepth(struct pipe_context *pipe,
>>
>>     sampler = ureg_DECL_sampler( ureg, 0 );
>>
>> +   ureg_DECL_sampler_view(ureg, 0, tex_target,
>> +                          TGSI_RETURN_TYPE_FLOAT,
>> +                          TGSI_RETURN_TYPE_FLOAT,
>> +                          TGSI_RETURN_TYPE_FLOAT,
>> +                          TGSI_RETURN_TYPE_FLOAT);
>> +
>>     tex = ureg_DECL_fs_input( ureg,
>>                               TGSI_SEMANTIC_GENERIC, 0,
>>                               interp_mode );
>> @@ -343,7 +354,17 @@ util_make_fragment_tex_shader_writedepthstencil(struct pipe_context *pipe,
>>        return NULL;
>>
>>     depth_sampler = ureg_DECL_sampler( ureg, 0 );
>> +   ureg_DECL_sampler_view(ureg, 0, tex_target,
>> +                          TGSI_RETURN_TYPE_FLOAT,
>> +                          TGSI_RETURN_TYPE_FLOAT,
>> +                          TGSI_RETURN_TYPE_FLOAT,
>> +                          TGSI_RETURN_TYPE_FLOAT);
>>     stencil_sampler = ureg_DECL_sampler( ureg, 1 );
>> +   ureg_DECL_sampler_view(ureg, 0, tex_target,
>> +                          TGSI_RETURN_TYPE_UINT,
>> +                          TGSI_RETURN_TYPE_UINT,
>> +                          TGSI_RETURN_TYPE_UINT,
>> +                          TGSI_RETURN_TYPE_UINT);
>>
>>     tex = ureg_DECL_fs_input( ureg,
>>                               TGSI_SEMANTIC_GENERIC, 0,
>> @@ -398,6 +419,12 @@ util_make_fragment_tex_shader_writestencil(struct pipe_context *pipe,
>>
>>     stencil_sampler = ureg_DECL_sampler( ureg, 0 );
>>
>> +   ureg_DECL_sampler_view(ureg, 0, tex_target,
>> +                          TGSI_RETURN_TYPE_UINT,
>> +                          TGSI_RETURN_TYPE_UINT,
>> +                          TGSI_RETURN_TYPE_UINT,
>> +                          TGSI_RETURN_TYPE_UINT);
>> +
>>     tex = ureg_DECL_fs_input( ureg,
>>                               TGSI_SEMANTIC_GENERIC, 0,
>>                               interp_mode );
>> @@ -512,6 +539,7 @@ util_make_fragment_cloneinput_shader(struct pipe_context *pipe, int num_cbufs,
>>  static void *
>>  util_make_fs_blit_msaa_gen(struct pipe_context *pipe,
>>                             unsigned tgsi_tex,
>> +                           const char *samp_type,
>>                             const char *output_semantic,
>>                             const char *output_mask)
>>  {
>> @@ -519,6 +547,7 @@ util_make_fs_blit_msaa_gen(struct pipe_context *pipe,
>>           "FRAG\n"
>>           "DCL IN[0], GENERIC[0], LINEAR\n"
>>           "DCL SAMP[0]\n"
>> +         "DCL SVIEW[0], %s, %s\n"
>>           "DCL OUT[0], %s\n"
>>           "DCL TEMP[0]\n"
>>
>> @@ -534,7 +563,8 @@ util_make_fs_blit_msaa_gen(struct pipe_context *pipe,
>>     assert(tgsi_tex == TGSI_TEXTURE_2D_MSAA ||
>>            tgsi_tex == TGSI_TEXTURE_2D_ARRAY_MSAA);
>>
>> -   sprintf(text, shader_templ, output_semantic, output_mask, type);
>> +   sprintf(text, shader_templ, type, samp_type,
>> +           output_semantic, output_mask, type);
>>
>>     if (!tgsi_text_translate(text, tokens, Elements(tokens))) {
>>        puts(text);
>> @@ -556,9 +586,19 @@ util_make_fs_blit_msaa_gen(struct pipe_context *pipe,
>>   */
>>  void *
>>  util_make_fs_blit_msaa_color(struct pipe_context *pipe,
>> -                             unsigned tgsi_tex)
>> +                             unsigned tgsi_tex,
>> +                             enum tgsi_return_type stype)
>>  {
>> -   return util_make_fs_blit_msaa_gen(pipe, tgsi_tex,
>> +   const char *samp_type;
>> +
>> +   if (stype == TGSI_RETURN_TYPE_UINT)
>> +      samp_type = "UINT";
>> +   else if (stype == TGSI_RETURN_TYPE_SINT)
>> +      samp_type = "SINT";
>> +   else
>> +      samp_type = "FLOAT";
>> +
>> +   return util_make_fs_blit_msaa_gen(pipe, tgsi_tex, samp_type,
>>                                       "COLOR[0]", "");
>>  }
>>
>> @@ -572,7 +612,7 @@ void *
>>  util_make_fs_blit_msaa_depth(struct pipe_context *pipe,
>>                               unsigned tgsi_tex)
>>  {
>> -   return util_make_fs_blit_msaa_gen(pipe, tgsi_tex,
>> +   return util_make_fs_blit_msaa_gen(pipe, tgsi_tex, "FLOAT",
>>                                       "POSITION", ".z");
>>  }
>>
>> @@ -586,7 +626,7 @@ void *
>>  util_make_fs_blit_msaa_stencil(struct pipe_context *pipe,
>>                                 unsigned tgsi_tex)
>>  {
>> -   return util_make_fs_blit_msaa_gen(pipe, tgsi_tex,
>> +   return util_make_fs_blit_msaa_gen(pipe, tgsi_tex, "UINT",
>>                                       "STENCIL", ".y");
>>  }
>>
>> @@ -640,7 +680,7 @@ util_make_fs_blit_msaa_depthstencil(struct pipe_context *pipe,
>>  void *
>>  util_make_fs_msaa_resolve(struct pipe_context *pipe,
>>                            unsigned tgsi_tex, unsigned nr_samples,
>> -                          boolean is_uint, boolean is_sint)
>> +                          enum tgsi_return_type stype)
>>  {
>>     struct ureg_program *ureg;
>>     struct ureg_src sampler, coord;
>> @@ -653,6 +693,7 @@ util_make_fs_msaa_resolve(struct pipe_context *pipe,
>>
>>     /* Declarations. */
>>     sampler = ureg_DECL_sampler(ureg, 0);
>> +   ureg_DECL_sampler_view(ureg, 0, tgsi_tex, stype, stype, stype, stype);
>>     coord = ureg_DECL_fs_input(ureg, TGSI_SEMANTIC_GENERIC, 0,
>>                                TGSI_INTERPOLATE_LINEAR);
>>     out = ureg_DECL_output(ureg, TGSI_SEMANTIC_COLOR, 0);
>> @@ -670,9 +711,9 @@ util_make_fs_msaa_resolve(struct pipe_context *pipe,
>>                 ureg_imm1u(ureg, i));
>>        ureg_TXF(ureg, tmp, tgsi_tex, ureg_src(tmp_coord), sampler);
>>
>> -      if (is_uint)
>> +      if (stype == TGSI_RETURN_TYPE_UINT)
>>           ureg_U2F(ureg, tmp, ureg_src(tmp));
>> -      else if (is_sint)
>> +      else if (stype == TGSI_RETURN_TYPE_SINT)
>>           ureg_I2F(ureg, tmp, ureg_src(tmp));
>>
>>        /* Add it to the sum.*/
>> @@ -683,9 +724,9 @@ util_make_fs_msaa_resolve(struct pipe_context *pipe,
>>     ureg_MUL(ureg, tmp_sum, ureg_src(tmp_sum),
>>              ureg_imm1f(ureg, 1.0 / nr_samples));
>>
>> -   if (is_uint)
>> +   if (stype == TGSI_RETURN_TYPE_UINT)
>>        ureg_F2U(ureg, out, ureg_src(tmp_sum));
>> -   else if (is_sint)
>> +   else if (stype == TGSI_RETURN_TYPE_SINT)
>>        ureg_F2I(ureg, out, ureg_src(tmp_sum));
>>     else
>>        ureg_MOV(ureg, out, ureg_src(tmp_sum));
>> @@ -699,7 +740,7 @@ util_make_fs_msaa_resolve(struct pipe_context *pipe,
>>  void *
>>  util_make_fs_msaa_resolve_bilinear(struct pipe_context *pipe,
>>                                     unsigned tgsi_tex, unsigned nr_samples,
>> -                                   boolean is_uint, boolean is_sint)
>> +                                   enum tgsi_return_type stype)
>>  {
>>     struct ureg_program *ureg;
>>     struct ureg_src sampler, coord;
>> @@ -713,6 +754,7 @@ util_make_fs_msaa_resolve_bilinear(struct pipe_context *pipe,
>>
>>     /* Declarations. */
>>     sampler = ureg_DECL_sampler(ureg, 0);
>> +   ureg_DECL_sampler_view(ureg, 0, tgsi_tex, stype, stype, stype, stype);
>>     coord = ureg_DECL_fs_input(ureg, TGSI_SEMANTIC_GENERIC, 0,
>>                                TGSI_INTERPOLATE_LINEAR);
>>     out = ureg_DECL_output(ureg, TGSI_SEMANTIC_COLOR, 0);
>> @@ -744,9 +786,9 @@ util_make_fs_msaa_resolve_bilinear(struct pipe_context *pipe,
>>                    ureg_imm1u(ureg, i));
>>           ureg_TXF(ureg, tmp, tgsi_tex, ureg_src(tmp_coord[c]), sampler);
>>
>> -         if (is_uint)
>> +         if (stype == TGSI_RETURN_TYPE_UINT)
>>              ureg_U2F(ureg, tmp, ureg_src(tmp));
>> -         else if (is_sint)
>> +         else if (stype == TGSI_RETURN_TYPE_SINT)
>>              ureg_I2F(ureg, tmp, ureg_src(tmp));
>>
>>           /* Add it to the sum.*/
>> @@ -778,9 +820,9 @@ util_make_fs_msaa_resolve_bilinear(struct pipe_context *pipe,
>>              ureg_src(top));
>>
>>     /* Convert to the texture format and return. */
>> -   if (is_uint)
>> +   if (stype == TGSI_RETURN_TYPE_UINT)
>>        ureg_F2U(ureg, out, ureg_src(tmp));
>> -   else if (is_sint)
>> +   else if (stype == TGSI_RETURN_TYPE_SINT)
>>        ureg_F2I(ureg, out, ureg_src(tmp));
>>     else
>>        ureg_MOV(ureg, out, ureg_src(tmp));
>> diff --git a/src/gallium/auxiliary/util/u_simple_shaders.h b/src/gallium/auxiliary/util/u_simple_shaders.h
>> index dd282e0..08d798e 100644
>> --- a/src/gallium/auxiliary/util/u_simple_shaders.h
>> +++ b/src/gallium/auxiliary/util/u_simple_shaders.h
>> @@ -68,15 +68,16 @@ extern void *
>>  util_make_layered_clear_geometry_shader(struct pipe_context *pipe);
>>
>>  extern void *
>> -util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
>> +util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
>>                                          unsigned tex_target,
>>                                          unsigned interp_mode,
>> -                                        unsigned writemask);
>> +                                        unsigned writemask,
>> +                                        enum tgsi_return_type stype);
>>
>>  extern void *
>>  util_make_fragment_tex_shader(struct pipe_context *pipe, unsigned tex_target,
>> -                              unsigned interp_mode);
>> -
>> +                              unsigned interp_mode,
>> +                              enum tgsi_return_type stype);
>>
>>  extern void *
>>  util_make_fragment_tex_shader_writedepth(struct pipe_context *pipe,
>> @@ -115,7 +116,8 @@ util_make_fragment_cloneinput_shader(struct pipe_context *pipe, int num_cbufs,
>>
>>  extern void *
>>  util_make_fs_blit_msaa_color(struct pipe_context *pipe,
>> -                             unsigned tgsi_tex);
>> +                             unsigned tgsi_tex,
>> +                             enum tgsi_return_type stype);
>>
>>
>>  extern void *
>> @@ -136,13 +138,13 @@ util_make_fs_blit_msaa_stencil(struct pipe_context *pipe,
>>  void *
>>  util_make_fs_msaa_resolve(struct pipe_context *pipe,
>>                            unsigned tgsi_tex, unsigned nr_samples,
>> -                          boolean is_uint, boolean is_sint);
>> +                          enum tgsi_return_type stype);
>>
>>
>>  void *
>>  util_make_fs_msaa_resolve_bilinear(struct pipe_context *pipe,
>>                                     unsigned tgsi_tex, unsigned nr_samples,
>> -                                   boolean is_uint, boolean is_sint);
>> +                                   enum tgsi_return_type stype);
>>
>>  #ifdef __cplusplus
>>  }
>> diff --git a/src/gallium/auxiliary/util/u_tests.c b/src/gallium/auxiliary/util/u_tests.c
>> index fe54972..6a489d6 100644
>> --- a/src/gallium/auxiliary/util/u_tests.c
>> +++ b/src/gallium/auxiliary/util/u_tests.c
>> @@ -373,7 +373,8 @@ null_sampler_view(struct pipe_context *ctx, unsigned tgsi_tex_target)
>>
>>     /* Fragment shader. */
>>     fs = util_make_fragment_tex_shader(ctx, tgsi_tex_target,
>> -                                      TGSI_INTERPOLATE_LINEAR);
>> +                                      TGSI_INTERPOLATE_LINEAR,
>> +                                      TGSI_RETURN_TYPE_FLOAT);
>>     cso_set_fragment_shader_handle(cso, fs);
>>
>>     /* Vertex shader. */
>> diff --git a/src/gallium/tests/trivial/quad-tex.c b/src/gallium/tests/trivial/quad-tex.c
>> index abecedb..577197d 100644
>> --- a/src/gallium/tests/trivial/quad-tex.c
>> +++ b/src/gallium/tests/trivial/quad-tex.c
>> @@ -270,7 +270,7 @@ static void init_prog(struct program *p)
>>       }
>>
>>       /* fragment shader */
>> -     p->fs = util_make_fragment_tex_shader(p->pipe, TGSI_TEXTURE_2D, TGSI_INTERPOLATE_LINEAR);
>> +     p->fs = util_make_fragment_tex_shader(p->pipe, TGSI_TEXTURE_2D, TGSI_INTERPOLATE_LINEAR, TGSI_RETURN_TYPE_FLOAT);
> That's a really long line...

yeah, the test code wasn't so much line-wrapped..  although I guess I
didn't improve the situation..

BR,
-R

>
>>  }
>>
>>  static void close_prog(struct program *p)
>>
>
> Reviewed-by: Roland Scheidegger <sroland at vmware.com>


More information about the mesa-dev mailing list