d3d12: Default newly-created resources to not-resident

Reviewed-by: Bill Kristiansen <billkris@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14959>
This commit is contained in:
Jesse Natalie
2022-02-09 12:12:18 -08:00
committed by Marge Bot
parent e3a2cb4b67
commit 22fc534930
4 changed files with 20 additions and 4 deletions

View File

@@ -122,9 +122,14 @@ d3d12_bo_new(struct d3d12_screen *screen, uint64_t size, const pb_desc *pb_desc)
else if (pb_desc->usage & PB_USAGE_CPU_WRITE) else if (pb_desc->usage & PB_USAGE_CPU_WRITE)
heap_type = D3D12_HEAP_TYPE_UPLOAD; heap_type = D3D12_HEAP_TYPE_UPLOAD;
D3D12_HEAP_FLAGS heap_flags = screen->support_create_not_resident ?
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT : D3D12_HEAP_FLAG_NONE;
enum d3d12_residency_status init_residency = screen->support_create_not_resident ?
d3d12_evicted : d3d12_resident;
D3D12_HEAP_PROPERTIES heap_pris = dev->GetCustomHeapProperties(0, heap_type); D3D12_HEAP_PROPERTIES heap_pris = dev->GetCustomHeapProperties(0, heap_type);
HRESULT hres = dev->CreateCommittedResource(&heap_pris, HRESULT hres = dev->CreateCommittedResource(&heap_pris,
D3D12_HEAP_FLAG_NONE, heap_flags,
&res_desc, &res_desc,
D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_COMMON,
NULL, NULL,
@@ -133,7 +138,7 @@ d3d12_bo_new(struct d3d12_screen *screen, uint64_t size, const pb_desc *pb_desc)
if (FAILED(hres)) if (FAILED(hres))
return NULL; return NULL;
return d3d12_bo_wrap_res(screen, res, PIPE_FORMAT_NONE, d3d12_resident); return d3d12_bo_wrap_res(screen, res, PIPE_FORMAT_NONE, init_residency);
} }
struct d3d12_bo * struct d3d12_bo *

View File

@@ -249,8 +249,13 @@ init_texture(struct d3d12_screen *screen,
D3D12_HEAP_PROPERTIES heap_pris = screen->dev->GetCustomHeapProperties(0, D3D12_HEAP_TYPE_DEFAULT); D3D12_HEAP_PROPERTIES heap_pris = screen->dev->GetCustomHeapProperties(0, D3D12_HEAP_TYPE_DEFAULT);
D3D12_HEAP_FLAGS heap_flags = screen->support_create_not_resident ?
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT : D3D12_HEAP_FLAG_NONE;
enum d3d12_residency_status init_residency = screen->support_create_not_resident ?
d3d12_evicted : d3d12_resident;
HRESULT hres = screen->dev->CreateCommittedResource(&heap_pris, HRESULT hres = screen->dev->CreateCommittedResource(&heap_pris,
D3D12_HEAP_FLAG_NONE, heap_flags,
&desc, &desc,
D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_COMMON,
NULL, NULL,
@@ -269,7 +274,7 @@ init_texture(struct d3d12_screen *screen,
&res->dt_stride); &res->dt_stride);
} }
res->bo = d3d12_bo_wrap_res(screen, d3d12_res, templ->format, d3d12_resident); res->bo = d3d12_bo_wrap_res(screen, d3d12_res, templ->format, init_residency);
return true; return true;
} }

View File

@@ -1233,6 +1233,11 @@ d3d12_init_screen(struct d3d12_screen *screen, struct sw_winsys *winsys, IUnknow
screen->have_load_at_vertex = can_attribute_at_vertex(screen); screen->have_load_at_vertex = can_attribute_at_vertex(screen);
screen->support_shader_images = can_shader_image_load_all_formats(screen); screen->support_shader_images = can_shader_image_load_all_formats(screen);
ID3D12Device8 *dev8;
if (SUCCEEDED(screen->dev->QueryInterface(&dev8))) {
dev8->Release();
screen->support_create_not_resident = true;
}
screen->nir_options = *dxil_get_nir_compiler_options(); screen->nir_options = *dxil_get_nir_compiler_options();

View File

@@ -112,6 +112,7 @@ struct d3d12_screen {
double timestamp_multiplier; double timestamp_multiplier;
bool have_load_at_vertex; bool have_load_at_vertex;
bool support_shader_images; bool support_shader_images;
bool support_create_not_resident;
}; };
static inline struct d3d12_screen * static inline struct d3d12_screen *