diff options
author | Neha Bhende <[email protected]> | 2017-12-13 15:02:13 -0800 |
---|---|---|
committer | Brian Paul <[email protected]> | 2018-09-10 13:07:30 -0600 |
commit | c6103328ab9a985b637b940d6d6a49de961b7c9f (patch) | |
tree | 752b51577dd8b29153d368f30c4ac732980a27c9 | |
parent | fdf58851833c6521fba7038425dcea8f063ced38 (diff) |
svga: Use texture_copy_region instead of texture_copy_handle for multisampling
This fixes some of tests cases in arb_copy_image-formats and also fixes
SurfaceCopy related errors in vmware.log when multi sampled surfaces are
used.
Tested with piglit, glretrace on windows and linux VM.
v2: As per Brian's comment
Reviewed-by: Brian Paul <[email protected]>
Reviewed-by: Charmaine Lee <[email protected]>
-rw-r--r-- | src/gallium/drivers/svga/svga_surface.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/gallium/drivers/svga/svga_surface.c b/src/gallium/drivers/svga/svga_surface.c index bc1212f8302..73208cf58ac 100644 --- a/src/gallium/drivers/svga/svga_surface.c +++ b/src/gallium/drivers/svga/svga_surface.c @@ -170,15 +170,24 @@ svga_texture_copy_handle_resource(struct svga_context *svga, unsigned depth = (zslice_pick < 0 ? u_minify(src_tex->b.b.depth0, miplevel) : 1); - svga_texture_copy_handle(svga, - src_tex->handle, - 0, 0, zoffset, - miplevel, - j + layeroffset, - dst, 0, 0, 0, i, j, - u_minify(src_tex->b.b.width0, miplevel), - u_minify(src_tex->b.b.height0, miplevel), - depth); + if (src_tex->b.b.nr_samples > 1) { + unsigned subResource = j * numMipLevels + i; + svga_texture_copy_region(svga, src_tex->handle, + subResource, 0, 0, zoffset, + dst, subResource, 0, 0, 0, + src_tex->b.b.width0, src_tex->b.b.height0, depth); + } + else { + svga_texture_copy_handle(svga, + src_tex->handle, + 0, 0, zoffset, + miplevel, + j + layeroffset, + dst, 0, 0, 0, i, j, + u_minify(src_tex->b.b.width0, miplevel), + u_minify(src_tex->b.b.height0, miplevel), + depth); + } } } } |