gallium,st: add missing viewport swizzles

Viewports must be initialized with the appropriate swizzles (for
hardware that supports this feature).

Fixes: 90fcb3fef2 (st/mesa: add NV_viewport_swizzle support)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9732>
This commit is contained in:
Ilia Mirkin 2021-03-21 02:25:09 -04:00 committed by Marge Bot
parent befd9fbbba
commit 3e68e7f90d
25 changed files with 114 additions and 0 deletions

View File

@ -523,6 +523,10 @@ hud_draw_results(struct hud_context *hud, struct pipe_resource *tex)
viewport.translate[0] = 0.5f * hud->fb_width;
viewport.translate[1] = 0.5f * hud->fb_height;
viewport.translate[2] = 0.0f;
viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
cso_set_framebuffer(cso, &fb);
cso_set_sample_mask(cso, ~0);

View File

@ -324,6 +324,10 @@ pp_init_fbos(struct pp_queue_t *ppq, unsigned int w,
p->viewport.scale[0] = p->viewport.translate[0] = (float) w / 2.0f;
p->viewport.scale[1] = p->viewport.translate[1] = (float) h / 2.0f;
p->viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
p->viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
p->viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
p->viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ppq->fbos_init = true;

View File

@ -827,6 +827,10 @@ static void blitter_set_rectangle(struct blitter_context_priv *ctx,
viewport.translate[0] = 0.5f * ctx->dst_width;
viewport.translate[1] = 0.5f * ctx->dst_height;
viewport.translate[2] = depth;
viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ctx->base.pipe->set_viewport_states(ctx->base.pipe, 0, 1, &viewport);
}

View File

@ -126,6 +126,10 @@ util_set_max_viewport(struct cso_context *cso, struct pipe_resource *tex)
viewport.translate[0] = 0.5f * tex->width0;
viewport.translate[1] = 0.5f * tex->height0;
viewport.translate[2] = 0.0f;
viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
cso_set_viewport(cso, &viewport);
}

View File

@ -422,6 +422,10 @@ vl_bicubic_filter_render(struct vl_bicubic_filter *filter,
viewport.scale[1] = dst->height;
}
viewport.scale[2] = 1;
viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
struct pipe_constant_buffer cb = {0};
float *ptr = NULL;

View File

@ -446,6 +446,10 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
s->layers[i].cs = NULL;
s->layers[i].viewport.scale[2] = 1;
s->layers[i].viewport.translate[2] = 0;
s->layers[i].viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
s->layers[i].viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
s->layers[i].viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
s->layers[i].viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
s->layers[i].rotate = VL_COMPOSITOR_ROTATE_0;
for ( j = 0; j < 3; j++)

View File

@ -472,6 +472,10 @@ vl_deint_filter_render(struct vl_deint_filter *filter,
/* prepare viewport */
memset(&viewport, 0, sizeof(viewport));
viewport.scale[2] = 1;
viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
/* prepare framebuffer */
memset(&fb_state, 0, sizeof(fb_state));

View File

@ -609,6 +609,10 @@ init_source(struct vl_idct *idct, struct vl_idct_buffer *buffer)
buffer->viewport_mismatch.scale[0] = tex->width0;
buffer->viewport_mismatch.scale[1] = tex->height0;
buffer->viewport_mismatch.scale[2] = 1;
buffer->viewport_mismatch.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
buffer->viewport_mismatch.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
buffer->viewport_mismatch.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
buffer->viewport_mismatch.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
return true;
}
@ -652,6 +656,10 @@ init_intermediate(struct vl_idct *idct, struct vl_idct_buffer *buffer)
buffer->viewport.scale[0] = tex->width0;
buffer->viewport.scale[1] = tex->height0;
buffer->viewport.scale[2] = 1;
buffer->viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
buffer->viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
buffer->viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
buffer->viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
return true;

View File

@ -279,6 +279,10 @@ vl_matrix_filter_render(struct vl_matrix_filter *filter,
viewport.scale[0] = dst->width;
viewport.scale[1] = dst->height;
viewport.scale[2] = 1;
viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
memset(&fb_state, 0, sizeof(fb_state));
fb_state.width = dst->width;

View File

@ -563,6 +563,10 @@ vl_mc_init_buffer(struct vl_mc *renderer, struct vl_mc_buffer *buffer)
buffer->viewport.translate[0] = 0;
buffer->viewport.translate[1] = 0;
buffer->viewport.translate[2] = 0;
buffer->viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
buffer->viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
buffer->viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
buffer->viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
buffer->fb_state.nr_cbufs = 1;
buffer->fb_state.zsbuf = NULL;

View File

@ -383,6 +383,10 @@ vl_median_filter_render(struct vl_median_filter *filter,
viewport.scale[0] = dst->width;
viewport.scale[1] = dst->height;
viewport.scale[2] = 1;
viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
memset(&fb_state, 0, sizeof(fb_state));
fb_state.width = dst->width;

View File

@ -500,6 +500,10 @@ vl_zscan_init_buffer(struct vl_zscan *zscan, struct vl_zscan_buffer *buffer,
buffer->viewport.translate[0] = 0;
buffer->viewport.translate[1] = 0;
buffer->viewport.translate[2] = 0;
buffer->viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
buffer->viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
buffer->viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
buffer->viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
buffer->fb_state.width = dst->width;
buffer->fb_state.height = dst->height;

View File

@ -790,6 +790,10 @@ update_viewport(struct NineDevice9 *device)
pvport.translate[0] = (float)vport->Width * 0.5f + (float)vport->X;
pvport.translate[1] = (float)vport->Height * 0.5f + (float)vport->Y;
pvport.translate[2] = vport->MinZ;
pvport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
pvport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
pvport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
pvport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
/* We found R600 and SI cards have some imprecision
* on the barycentric coordinates used for interpolation.

View File

@ -345,6 +345,10 @@ renderer_bind_destination(struct xa_context *r,
viewport.translate[0] = width / 2.f;
viewport.translate[1] = height / 2.f;
viewport.translate[2] = 0.0;
viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
/* Constant buffer set up to match viewport dimensions:
*/

View File

@ -148,6 +148,11 @@ static void set_viewport( float x, float y,
vp.translate[1] = half_height + y;
vp.translate[2] = half_depth + z;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ctx->set_viewport_states( ctx, 0, 1, &vp );
}

View File

@ -201,6 +201,11 @@ graw_util_viewport(struct graw_info *info,
vp.translate[1] = half_height + y;
vp.translate[2] = half_depth + z;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
info->ctx->set_viewport_states(info->ctx, 0, 1, &vp);
}

View File

@ -206,6 +206,11 @@ static void set_viewport( float x, float y,
vp.translate[1] = half_height + y;
vp.translate[2] = half_depth + z;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ctx->set_viewport_states( ctx, 0, 1, &vp );
}

View File

@ -76,6 +76,11 @@ static void set_viewport( float x, float y,
vp.translate[1] = half_height + y;
vp.translate[2] = half_depth + z;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ctx->set_viewport_states( ctx, 0, 1, &vp );
}

View File

@ -66,6 +66,11 @@ static void set_viewport( float x, float y,
vp.translate[1] = half_height + y;
vp.translate[2] = half_depth + z;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ctx->set_viewport_states( ctx, 0, 1, &vp );
}

View File

@ -67,6 +67,11 @@ static void set_viewport( float x, float y,
vp.translate[1] = half_height + y;
vp.translate[2] = half_depth + z;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ctx->set_viewport_states( ctx, 0, 1, &vp );
}

View File

@ -96,6 +96,11 @@ static void set_viewport( float x, float y,
vp.translate[1] = half_height + y;
vp.translate[2] = half_depth + z;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ctx->set_viewport_states( ctx, 0, 1, &vp );
}

View File

@ -128,6 +128,11 @@ static void set_viewport( float x, float y,
vp.translate[1] = half_height + y;
vp.translate[2] = half_depth + z;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
ctx->set_viewport_states( ctx, 0, 1, &vp );
}

View File

@ -250,6 +250,11 @@ static void init_prog(struct program *p)
p->viewport.translate[0] = half_width + x;
p->viewport.translate[1] = (half_height + y) * scale + bias;
p->viewport.translate[2] = half_depth + z;
p->viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
p->viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
p->viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
p->viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
}
/* vertex elements state */

View File

@ -193,6 +193,11 @@ static void init_prog(struct program *p)
p->viewport.translate[0] = half_width + x;
p->viewport.translate[1] = (half_height + y) * scale + bias;
p->viewport.translate[2] = half_depth + z;
p->viewport.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
p->viewport.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
p->viewport.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
p->viewport.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
}
/* vertex elements state */

View File

@ -330,6 +330,10 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
vp.translate[0] = 0.5f * width;
vp.translate[1] = 0.5f * height;
vp.translate[2] = 0.0f;
vp.swizzle_x = PIPE_VIEWPORT_SWIZZLE_POSITIVE_X;
vp.swizzle_y = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Y;
vp.swizzle_z = PIPE_VIEWPORT_SWIZZLE_POSITIVE_Z;
vp.swizzle_w = PIPE_VIEWPORT_SWIZZLE_POSITIVE_W;
cso_set_viewport(cso, &vp);
}