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:
@@ -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);
|
||||
}
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user