unsigned dst_level, unsigned dst_layer_face,
unsigned width, unsigned height, unsigned depth)
{
- enum pipe_error ret;
uint32 srcSubResource, dstSubResource;
struct svga_texture *dtex, *stex;
- SVGA3dCopyBox box;
stex = svga_texture(src_tex);
dtex = svga_texture(dst_tex);
svga_surfaces_flush(svga);
- box.x = dst_x;
- box.y = dst_y;
- box.z = dst_z;
- box.w = width;
- box.h = height;
- box.d = depth;
- box.srcx = src_x;
- box.srcy = src_y;
- box.srcz = src_z;
-
srcSubResource = src_layer_face * (src_tex->last_level + 1) + src_level;
dstSubResource = dst_layer_face * (dst_tex->last_level + 1) + dst_level;
- ret = SVGA3D_vgpu10_PredCopyRegion(svga->swc,
- dtex->handle, dstSubResource,
- stex->handle, srcSubResource, &box);
- if (ret != PIPE_OK) {
- svga_context_flush(svga, NULL);
- ret = SVGA3D_vgpu10_PredCopyRegion(svga->swc,
- dtex->handle, dstSubResource,
- stex->handle, srcSubResource, &box);
- assert(ret == PIPE_OK);
- }
+ svga_texture_copy_region(svga, stex->handle, srcSubResource,
+ src_x, src_y, src_z,
+ dtex->handle, dstSubResource,
+ dst_x, dst_y, dst_z,
+ width, height, depth);
/* Mark the texture subresource as defined. */
svga_define_texture_level(dtex, dst_layer_face, dst_level);
has_layer_face_index_in_z(enum pipe_texture_target target)
{
if (target == PIPE_TEXTURE_CUBE ||
+ target == PIPE_TEXTURE_1D_ARRAY ||
target == PIPE_TEXTURE_2D_ARRAY ||
- target == PIPE_TEXTURE_1D_ARRAY)
+ target == PIPE_TEXTURE_CUBE_ARRAY)
return true;
else
return false;
int z_in, unsigned *layer_out, unsigned *z_out)
{
if (target == PIPE_TEXTURE_CUBE ||
+ target == PIPE_TEXTURE_1D_ARRAY ||
target == PIPE_TEXTURE_2D_ARRAY ||
- target == PIPE_TEXTURE_1D_ARRAY) {
+ target == PIPE_TEXTURE_CUBE_ARRAY) {
*layer_out = z_in;
*z_out = 0;
}
if (svga->curr.blend) {
if (svga->curr.blend->independent_blend_enable) {
for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) {
- if (svga->curr.framebuffer.cbufs[i]->texture == blit->dst.resource) {
+ struct pipe_surface *cbuf = svga->curr.framebuffer.cbufs[i];
+ if (cbuf && (cbuf->texture == blit->dst.resource)) {
if (svga->curr.blend->rt[i].blend_enable) {
blend_enable = true;
}
if (!svga_have_vgpu10(svga))
return false;
+ /* src surface cannot be multisample */
+ if (blit_info->src.resource->nr_samples > 1)
+ return false;
+
if (!sws->have_intra_surface_copy)
return false;