d3d12: Add d3d12_promote_to_permanent_residency

Reviewed-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16286>
This commit is contained in:
Sil Vilerino
2022-05-03 11:00:31 -07:00
committed by Marge Bot
parent e5df8ecab9
commit 5b27c9d880
2 changed files with 29 additions and 0 deletions

View File

@@ -24,6 +24,7 @@
#include "d3d12_batch.h"
#include "d3d12_bufmgr.h"
#include "d3d12_residency.h"
#include "d3d12_resource.h"
#include "d3d12_screen.h"
#include "util/os_time.h"
@@ -260,3 +261,28 @@ d3d12_deinit_residency(struct d3d12_screen *screen)
screen->residency_fence = nullptr;
}
}
void
d3d12_promote_to_permanent_residency(struct d3d12_screen *screen, struct d3d12_resource* resource)
{
mtx_lock(&screen->submit_mutex);
uint64_t offset;
struct d3d12_bo *base_bo = d3d12_bo_get_base(resource->bo, &offset);
/* Promote non-permanent resident resources to permanent residency*/
if(base_bo->residency_status != d3d12_permanently_resident) {
/* Mark as permanently resident*/
base_bo->residency_status = d3d12_permanently_resident;
/* If it wasn't made resident before, make it*/
bool was_made_resident = (base_bo->residency_status == d3d12_resident);
if(!was_made_resident) {
list_addtail(&base_bo->residency_list_entry, &screen->residency_list);
ID3D12Pageable *pageable = base_bo->res;
HRESULT hr = screen->dev->MakeResident(1, &pageable);
assert(SUCCEEDED(hr));
}
}
mtx_unlock(&screen->submit_mutex);
}

View File

@@ -34,3 +34,6 @@ d3d12_init_residency(struct d3d12_screen *screen);
void
d3d12_deinit_residency(struct d3d12_screen *screen);
void
d3d12_promote_to_permanent_residency(struct d3d12_screen *screen, struct d3d12_resource* resource);