[Mesa-dev] [PATCH 104/140] radeonsi/gfx9: pass correct parameters to buffer_get_handle

Marek Olšák maraeo at gmail.com
Mon Mar 20 22:48:50 UTC 2017


From: Marek Olšák <marek.olsak at amd.com>

---
 src/gallium/drivers/radeon/r600_texture.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
index ebd2c5c..129b3f4 100644
--- a/src/gallium/drivers/radeon/r600_texture.c
+++ b/src/gallium/drivers/radeon/r600_texture.c
@@ -500,6 +500,7 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
 	struct r600_texture *rtex = (struct r600_texture*)resource;
 	struct radeon_bo_metadata metadata;
 	bool update_metadata = false;
+	unsigned stride, offset, slice_size;
 
 	/* This is not supported now, but it might be required for OpenCL
 	 * interop in the future.
@@ -553,12 +554,19 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
 		res->external_usage = usage;
 	}
 
-	return rscreen->ws->buffer_get_handle(res->buf,
-					      rtex->surface.u.legacy.level[0].nblk_x *
-					      rtex->surface.bpe,
-					      rtex->surface.u.legacy.level[0].offset,
-					      rtex->surface.u.legacy.level[0].slice_size,
-					      whandle);
+	if (rscreen->chip_class >= GFX9) {
+		offset = 0;
+		stride = rtex->surface.u.gfx9.surf_pitch *
+			 rtex->surface.bpe;
+		slice_size = rtex->surface.u.gfx9.surf_slice_size;
+	} else {
+		offset = rtex->surface.u.legacy.level[0].offset;
+		stride = rtex->surface.u.legacy.level[0].nblk_x *
+			 rtex->surface.bpe;
+		slice_size = rtex->surface.u.legacy.level[0].slice_size;
+	}
+	return rscreen->ws->buffer_get_handle(res->buf, stride, offset,
+					      slice_size, whandle);
 }
 
 static void r600_texture_destroy(struct pipe_screen *screen,
-- 
2.7.4



More information about the mesa-dev mailing list