summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2017-11-06 04:06:35 +0000
committerDave Airlie <airlied@redhat.com>2017-11-06 21:45:59 +0000
commit201b3b8d0d2359f56d8797867f59047cce5d160d (patch)
treecb72bf5c4d795c826bf01b9a2fd5c318a3bca15c
parent25660499b62a60f99ad72807fcc37f9fb622a2ea (diff)
radv: move is_local up to the winsys level.
We can avoid adding the buffer in the non-local case, this will avoid all the overhead of the indirect call. Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--src/amd/vulkan/radv_radeon_winsys.h4
-rw-r--r--src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c2
-rw-r--r--src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h1
-rw-r--r--src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c2
4 files changed, 6 insertions, 3 deletions
diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h
index bab19a6233d..66a2bcccb4d 100644
--- a/src/amd/vulkan/radv_radeon_winsys.h
+++ b/src/amd/vulkan/radv_radeon_winsys.h
@@ -147,6 +147,7 @@ struct radeon_winsys_fence;
struct radeon_winsys_bo {
uint64_t va;
+ bool is_local;
};
struct radv_winsys_sem_counts {
uint32_t syncobj_count;
@@ -284,6 +285,9 @@ static inline void radv_cs_add_buffer(struct radeon_winsys *ws,
struct radeon_winsys_bo *bo,
uint8_t priority)
{
+ if (bo->is_local)
+ return;
+
ws->cs_add_buffer(cs, bo, priority);
}
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
index dac549a20ad..9ec4b4fb561 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
@@ -333,7 +333,7 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
if (!(flags & RADEON_FLAG_IMPLICIT_SYNC) && ws->info.drm_minor >= 22)
request.flags |= AMDGPU_GEM_CREATE_EXPLICIT_SYNC;
if (flags & RADEON_FLAG_NO_INTERPROCESS_SHARING && ws->info.drm_minor >= 20) {
- bo->is_local = true;
+ bo->base.is_local = true;
request.flags |= AMDGPU_GEM_CREATE_VM_ALWAYS_VALID;
}
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
index f9aac9451c0..f32e4308386 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
@@ -45,7 +45,6 @@ struct radv_amdgpu_winsys_bo {
uint64_t size;
struct radv_amdgpu_winsys *ws;
bool is_virtual;
- bool is_local;
int ref_count;
union {
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index 939c221e0c8..c10bdd6c91e 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -473,7 +473,7 @@ static void radv_amdgpu_cs_add_buffer(struct radeon_winsys_cs *_cs,
return;
}
- if (bo->is_local)
+ if (bo->base.is_local)
return;
radv_amdgpu_cs_add_buffer_internal(cs, bo->bo, priority);