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_batch.h"
|
||||||
#include "d3d12_bufmgr.h"
|
#include "d3d12_bufmgr.h"
|
||||||
#include "d3d12_residency.h"
|
#include "d3d12_residency.h"
|
||||||
|
#include "d3d12_resource.h"
|
||||||
#include "d3d12_screen.h"
|
#include "d3d12_screen.h"
|
||||||
|
|
||||||
#include "util/os_time.h"
|
#include "util/os_time.h"
|
||||||
@@ -260,3 +261,28 @@ d3d12_deinit_residency(struct d3d12_screen *screen)
|
|||||||
screen->residency_fence = nullptr;
|
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
|
void
|
||||||
d3d12_deinit_residency(struct d3d12_screen *screen);
|
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