Mesa (master): radv/winsys: add buffer_make_resident() to the API

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Feb 9 10:24:46 UTC 2021


Module: Mesa
Branch: master
Commit: afdbd71ba5ef3ab07dc71282a566cee582a1a675
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=afdbd71ba5ef3ab07dc71282a566cee582a1a675

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Thu Feb  4 18:03:02 2021 +0100

radv/winsys: add buffer_make_resident() to the API

To make a BO resident (or to evict one).

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8868>

---

 src/amd/vulkan/radv_radeon_winsys.h           |  5 +++++
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c | 31 +++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h
index 06d8ad114ee..c7b67253a45 100644
--- a/src/amd/vulkan/radv_radeon_winsys.h
+++ b/src/amd/vulkan/radv_radeon_winsys.h
@@ -261,6 +261,11 @@ struct radeon_winsys {
 					struct radeon_winsys_bo *parent,
 					uint64_t offset, uint64_t size,
 					struct radeon_winsys_bo *bo, uint64_t bo_offset);
+
+	VkResult (*buffer_make_resident)(struct radeon_winsys *ws,
+					 struct radeon_winsys_bo *bo,
+					 bool resident);
+
 	VkResult (*ctx_create)(struct radeon_winsys *ws,
 	                       enum radeon_ctx_priority priority,
 	                       struct radeon_winsys_ctx **ctx);
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
index a23be0f0469..862bcd88970 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
@@ -950,6 +950,36 @@ radv_amdgpu_winsys_bo_get_metadata(struct radeon_winsys *_ws,
 	memcpy(md->metadata, info.metadata.umd_metadata, sizeof(md->metadata));
 }
 
+static VkResult
+radv_amdgpu_winsys_bo_make_resident(struct radeon_winsys *_ws,
+				    struct radeon_winsys_bo *_bo,
+				    bool resident)
+{
+	struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws);
+	struct radv_amdgpu_winsys_bo *bo = radv_amdgpu_winsys_bo(_bo);
+	VkResult result = VK_SUCCESS;
+
+	/* Do not add the BO to the global list if it's a local BO because the
+	 * kernel maintains a list for us.
+	 */
+	if (bo->base.is_local)
+		return VK_SUCCESS;
+
+	/* Do not add the BO twice to the global list if the allbos debug
+	 * option is enabled.
+	 */
+	if (ws->debug_all_bos)
+		return VK_SUCCESS;
+
+	if (resident) {
+		result = radv_amdgpu_global_bo_list_add(ws, bo);
+	} else {
+		radv_amdgpu_global_bo_list_del(ws, bo);
+	}
+
+	return result;
+}
+
 static int radv_amdgpu_bo_va_compare(const void *a, const void *b)
 {
 	const struct radv_amdgpu_winsys_bo *bo_a = *(const struct radv_amdgpu_winsys_bo * const*)a;
@@ -1018,6 +1048,7 @@ void radv_amdgpu_bo_init_functions(struct radv_amdgpu_winsys *ws)
 	ws->base.buffer_get_metadata = radv_amdgpu_winsys_bo_get_metadata;
 	ws->base.buffer_virtual_bind = radv_amdgpu_winsys_bo_virtual_bind;
 	ws->base.buffer_get_flags_from_fd = radv_amdgpu_bo_get_flags_from_fd;
+	ws->base.buffer_make_resident = radv_amdgpu_winsys_bo_make_resident;
 	ws->base.dump_bo_ranges = radv_amdgpu_dump_bo_ranges;
 	ws->base.dump_bo_log = radv_amdgpu_dump_bo_log;
 }



More information about the mesa-commit mailing list