[Mesa-dev] [PATCH] util/u_blitter: Set pipe_sampler_state::normalized_coords correctly.

Marek Olšák maraeo at gmail.com
Sat Feb 23 13:09:45 PST 2013


Reviewed-by: Marek Olšák <maraeo at gmail.com>

Marek

On Sat, Feb 23, 2013 at 2:50 PM,  <jfonseca at vmware.com> wrote:
> From: José Fonseca <jfonseca at vmware.com>
>
> We might want to revisit the normalized_coords semantics, but this is
> the current expected behavior.
>
> Fixes fdo bug 61091.
> ---
>  src/gallium/auxiliary/util/u_blitter.c |   26 ++++++++++++++++++++++----
>  1 file changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c
> index 9522402..e37be4e 100644
> --- a/src/gallium/auxiliary/util/u_blitter.c
> +++ b/src/gallium/auxiliary/util/u_blitter.c
> @@ -103,7 +103,10 @@ struct blitter_context_priv
>     void *velem_state_readbuf;
>
>     /* Sampler state. */
> -   void *sampler_state, *sampler_state_linear;
> +   void *sampler_state;
> +   void *sampler_state_linear;
> +   void *sampler_state_rect;
> +   void *sampler_state_rect_linear;
>
>     /* Rasterizer state. */
>     void *rs_state, *rs_state_scissor, *rs_discard_state;
> @@ -223,10 +226,15 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
>     sampler_state.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE;
>     sampler_state.normalized_coords = 1;
>     ctx->sampler_state = pipe->create_sampler_state(pipe, &sampler_state);
> +   sampler_state.normalized_coords = 0;
> +   ctx->sampler_state_rect = pipe->create_sampler_state(pipe, &sampler_state);
>
>     sampler_state.min_img_filter = PIPE_TEX_FILTER_LINEAR;
>     sampler_state.mag_img_filter = PIPE_TEX_FILTER_LINEAR;
> +   sampler_state.normalized_coords = 1;
>     ctx->sampler_state_linear = pipe->create_sampler_state(pipe, &sampler_state);
> +   sampler_state.normalized_coords = 0;
> +   ctx->sampler_state_rect_linear = pipe->create_sampler_state(pipe, &sampler_state);
>
>     /* rasterizer state */
>     memset(&rs_state, 0, sizeof(rs_state));
> @@ -365,8 +373,10 @@ void util_blitter_destroy(struct blitter_context *blitter)
>           ctx->delete_fs_state(pipe, ctx->fs_col_int[i]);
>     }
>
> -   pipe->delete_sampler_state(pipe, ctx->sampler_state);
> +   pipe->delete_sampler_state(pipe, ctx->sampler_state_rect_linear);
> +   pipe->delete_sampler_state(pipe, ctx->sampler_state_rect);
>     pipe->delete_sampler_state(pipe, ctx->sampler_state_linear);
> +   pipe->delete_sampler_state(pipe, ctx->sampler_state);
>     u_upload_destroy(ctx->upload);
>     FREE(ctx);
>  }
> @@ -1317,9 +1327,17 @@ void util_blitter_blit_generic(struct blitter_context *blitter,
>         src_samples <= 1 &&
>         (dstbox->width != abs(srcbox->width) ||
>          dstbox->height != abs(srcbox->height))) {
> -      sampler_state = ctx->sampler_state_linear;
> +      if (src_target == PIPE_TEXTURE_RECT) {
> +         sampler_state = ctx->sampler_state_rect_linear;
> +      } else {
> +         sampler_state = ctx->sampler_state_linear;
> +      }
>     } else {
> -      sampler_state = ctx->sampler_state;
> +      if (src_target == PIPE_TEXTURE_RECT) {
> +         sampler_state = ctx->sampler_state_rect;
> +      } else {
> +         sampler_state = ctx->sampler_state;
> +      }
>     }
>
>     /* Set samplers. */
> --
> 1.7.10.4
>


More information about the mesa-dev mailing list