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:
parent
befd9fbbba
commit
3e68e7f90d
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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++)
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
||||
*/
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue