[Mesa-dev] [PATCH] util/u_blitter: Set pipe_sampler_state::normalized_coords correctly.
Brian Paul
brianp at vmware.com
Sat Feb 23 07:31:35 PST 2013
On 02/23/2013 06:50 AM, 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. */
LGTM.
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list