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