mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 15:20:10 +01:00
svga: use new adjust_z_layer() helper in svga_pipe_blit.c
To handle z/layer fix-ups for blitting and copying. Note that we weren't doing this properly in svga_blit() before. Also, remove redundant stex, dtex assignments. Reviewed-by: Charmaine Lee <charmainel@vmware.com>
This commit is contained in:
parent
c42000545d
commit
14639cdf8f
1 changed files with 28 additions and 44 deletions
|
|
@ -86,6 +86,28 @@ copy_region_vgpu10(struct svga_context *svga, struct pipe_resource *src_tex,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* For some texture types, we need to move the z (slice) coordinate
|
||||
* to the layer value. For example, to select the z=3 slice of a 2D ARRAY
|
||||
* texture, we need to use layer=3 and set z=0.
|
||||
*/
|
||||
static void
|
||||
adjust_z_layer(enum pipe_texture_target target,
|
||||
int z_in, unsigned *layer_out, unsigned *z_out)
|
||||
{
|
||||
if (target == PIPE_TEXTURE_CUBE ||
|
||||
target == PIPE_TEXTURE_2D_ARRAY ||
|
||||
target == PIPE_TEXTURE_1D_ARRAY) {
|
||||
*layer_out = z_in;
|
||||
*z_out = 0;
|
||||
}
|
||||
else {
|
||||
*layer_out = 0;
|
||||
*z_out = z_in;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
svga_resource_copy_region(struct pipe_context *pipe,
|
||||
struct pipe_resource *dst_tex,
|
||||
|
|
@ -136,32 +158,8 @@ svga_resource_copy_region(struct pipe_context *pipe,
|
|||
stex = svga_texture(src_tex);
|
||||
dtex = svga_texture(dst_tex);
|
||||
|
||||
if (src_tex->target == PIPE_TEXTURE_CUBE ||
|
||||
src_tex->target == PIPE_TEXTURE_2D_ARRAY ||
|
||||
src_tex->target == PIPE_TEXTURE_1D_ARRAY) {
|
||||
src_face_layer = src_box->z;
|
||||
src_z = 0;
|
||||
assert(src_box->depth == 1);
|
||||
}
|
||||
else {
|
||||
src_face_layer = 0;
|
||||
src_z = src_box->z;
|
||||
}
|
||||
|
||||
if (dst_tex->target == PIPE_TEXTURE_CUBE ||
|
||||
dst_tex->target == PIPE_TEXTURE_2D_ARRAY ||
|
||||
dst_tex->target == PIPE_TEXTURE_1D_ARRAY) {
|
||||
dst_face_layer = dstz;
|
||||
dst_z = 0;
|
||||
assert(src_box->depth == 1);
|
||||
}
|
||||
else {
|
||||
dst_face_layer = 0;
|
||||
dst_z = dstz;
|
||||
}
|
||||
|
||||
stex = svga_texture(src_tex);
|
||||
dtex = svga_texture(dst_tex);
|
||||
adjust_z_layer(src_tex->target, src_box->z, &src_face_layer, &src_z);
|
||||
adjust_z_layer(dst_tex->target, dstz, &dst_face_layer, &dst_z);
|
||||
|
||||
if (svga_have_vgpu10(svga)) {
|
||||
/* vgpu10 */
|
||||
|
|
@ -295,25 +293,11 @@ svga_blit(struct pipe_context *pipe,
|
|||
if (can_blit_via_copy_region_vgpu10(svga, blit_info)) {
|
||||
unsigned src_face, src_z, dst_face, dst_z;
|
||||
|
||||
if (blit.src.resource->target == PIPE_TEXTURE_CUBE) {
|
||||
src_face = blit.src.box.z;
|
||||
src_z = 0;
|
||||
assert(blit.src.box.depth == 1);
|
||||
}
|
||||
else {
|
||||
src_face = 0;
|
||||
src_z = blit.src.box.z;
|
||||
}
|
||||
adjust_z_layer(blit.src.resource->target, blit.src.box.z,
|
||||
&src_face, &src_z);
|
||||
|
||||
if (blit.dst.resource->target == PIPE_TEXTURE_CUBE) {
|
||||
dst_face = blit.dst.box.z;
|
||||
dst_z = 0;
|
||||
assert(blit.src.box.depth == 1);
|
||||
}
|
||||
else {
|
||||
dst_face = 0;
|
||||
dst_z = blit.dst.box.z;
|
||||
}
|
||||
adjust_z_layer(blit.dst.resource->target, blit.dst.box.z,
|
||||
&dst_face, &dst_z);
|
||||
|
||||
copy_region_vgpu10(svga,
|
||||
blit.src.resource,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue