[Mesa-dev] [PATCH 04/10] radeon/winsys: add layer support for BO export

Christian König deathsimple at vodafone.de
Tue Mar 8 12:21:45 UTC 2016


From: Christian König <christian.koenig at amd.com>

Add layer support to export individual array layers.

Signed-off-by: Christian König <christian.koenig at amd.com>
---
 src/gallium/drivers/radeon/r600_texture.c     | 1 +
 src/gallium/drivers/radeon/radeon_winsys.h    | 1 +
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.c     | 2 ++
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 3 +++
 4 files changed, 7 insertions(+)

diff --git a/src/gallium/drivers/radeon/r600_texture.c b/src/gallium/drivers/radeon/r600_texture.c
index cb0c33e..22ef0a5 100644
--- a/src/gallium/drivers/radeon/r600_texture.c
+++ b/src/gallium/drivers/radeon/r600_texture.c
@@ -261,6 +261,7 @@ static boolean r600_texture_get_handle(struct pipe_screen* screen,
 	return rscreen->ws->buffer_get_handle(resource->buf,
 					      surface->level[0].pitch_bytes,
 					      surface->level[0].offset,
+					      surface->level[0].slice_size,
 					      whandle);
 }
 
diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h
index 233d089..25901a3 100644
--- a/src/gallium/drivers/radeon/radeon_winsys.h
+++ b/src/gallium/drivers/radeon/radeon_winsys.h
@@ -537,6 +537,7 @@ struct radeon_winsys {
      */
     boolean (*buffer_get_handle)(struct pb_buffer *buf,
                                  unsigned stride, unsigned offset,
+                                 unsigned slice_size,
                                  struct winsys_handle *whandle);
 
     /**
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
index 4e2c1d9..5b06d85 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
@@ -626,6 +626,7 @@ error:
 
 static boolean amdgpu_bo_get_handle(struct pb_buffer *buffer,
                                     unsigned stride, unsigned offset,
+                                    unsigned slice_size,
                                     struct winsys_handle *whandle)
 {
    struct amdgpu_winsys_bo *bo = amdgpu_winsys_bo(buffer);
@@ -654,6 +655,7 @@ static boolean amdgpu_bo_get_handle(struct pb_buffer *buffer,
 
    whandle->stride = stride;
    whandle->offset = offset;
+   whandle->offset += slice_size * whandle->layer;
    bo->is_shared = true;
    return TRUE;
 }
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 52000c0..420c32b 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -1019,6 +1019,7 @@ fail:
 
 static boolean radeon_winsys_bo_get_handle(struct pb_buffer *buffer,
                                            unsigned stride, unsigned offset,
+                                           unsigned slice_size,
                                            struct winsys_handle *whandle)
 {
     struct drm_gem_flink flink;
@@ -1053,6 +1054,8 @@ static boolean radeon_winsys_bo_get_handle(struct pb_buffer *buffer,
 
     whandle->stride = stride;
     whandle->offset = offset;
+    whandle->offset += slice_size * whandle->layer;
+
     return TRUE;
 }
 
-- 
2.5.0



More information about the mesa-dev mailing list