summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorCharmaine Lee <charmainel@vmware.com>2017-04-04 13:14:54 -0600
committerBrian Paul <brianp@vmware.com>2017-04-07 13:46:44 -0600
commit35a748e79c2fef090ea02404247f1061b8db34cc (patch)
tree08152d841b9ab24f8bbd99c928aa76faefc12b4b /src/gallium
parent5637a497a3d86ff0bff793a1ecc706239cfe6a6f (diff)
svga: Fix zslice index to svga_texture_copy_handle_resource()
The zslice index to svga_texture_copy_handle_resource() is not adjusted and should be a signed integer. This patch fixes piglit tests for non-vgpu10 including spec@arb_framebuffer_object@fbo-generatemipmap-3d spec@glsl-1.20@execution@tex-miplevel-selection gl2:texture* 3d Tested with MTT piglit and glretrace
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/svga/svga_surface.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/gallium/drivers/svga/svga_surface.c b/src/gallium/drivers/svga/svga_surface.c
index 18bce3467fd..bbd31c63c8c 100644
--- a/src/gallium/drivers/svga/svga_surface.c
+++ b/src/gallium/drivers/svga/svga_surface.c
@@ -111,18 +111,25 @@ svga_texture_copy_handle_resource(struct svga_context *svga,
struct svga_winsys_surface *dst,
unsigned int numMipLevels,
unsigned int numLayers,
- unsigned int zoffset,
+ int zslice_pick,
unsigned int mipoffset,
unsigned int layeroffset)
{
unsigned int i, j;
+ unsigned int zoffset = 0;
+
+ /* A negative zslice_pick implies zoffset at 0, and depth to copy is
+ * from the depth of the texture at the particular mipmap level.
+ */
+ if (zslice_pick >= 0)
+ zoffset = zslice_pick;
for (i = 0; i < numMipLevels; i++) {
unsigned int miplevel = i + mipoffset;
for (j = 0; j < numLayers; j++) {
if (svga_is_texture_level_defined(src_tex, j+layeroffset, miplevel)) {
- unsigned depth = (zoffset < 0 ?
+ unsigned depth = (zslice_pick < 0 ?
u_minify(src_tex->b.b.depth0, miplevel) : 1);
svga_texture_copy_handle(svga,
@@ -155,7 +162,6 @@ svga_texture_view_surface(struct svga_context *svga,
{
struct svga_screen *ss = svga_screen(svga->pipe.screen);
struct svga_winsys_surface *handle;
- unsigned z_offset = 0;
boolean validated;
SVGA_DBG(DEBUG_PERF,
@@ -205,13 +211,10 @@ svga_texture_view_surface(struct svga_context *svga,
if (layer_pick < 0)
layer_pick = 0;
- if (zslice_pick >= 0)
- z_offset = zslice_pick;
-
svga_texture_copy_handle_resource(svga, tex, handle,
key->numMipLevels,
key->numFaces * key->arraySize,
- z_offset, start_mip, layer_pick);
+ zslice_pick, start_mip, layer_pick);
return handle;
}