mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 00:38:48 +02:00
d3d12: Fix importing external resources
Fixes:97061dd7("d3d12: Add support for Xbox GDK.") (cherry picked from commit9e277ed2b6) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40359>
This commit is contained in:
parent
f1f583b3bc
commit
5bf2bcd81e
2 changed files with 15 additions and 1 deletions
|
|
@ -4164,7 +4164,7 @@
|
|||
"description": "d3d12: Fix importing external resources",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "97061dd7ee40d3ab82caff5485065a5e25016147",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -604,11 +604,18 @@ d3d12_resource_from_handle(struct pipe_screen *pscreen,
|
|||
if (res->bo) {
|
||||
d3d12_res = res->bo->res;
|
||||
} else if (handle->type == WINSYS_HANDLE_TYPE_D3D12_RES) {
|
||||
#ifdef _GAMING_XBOX
|
||||
if (handle->modifier == 1) {
|
||||
d3d12_heap = (ID3D12Heap *) handle->com_obj;
|
||||
} else {
|
||||
d3d12_res = (ID3D12Resource *) handle->com_obj;
|
||||
}
|
||||
#else
|
||||
IUnknown *obj = (IUnknown *) handle->com_obj;
|
||||
(void)obj->QueryInterface(&d3d12_res);
|
||||
(void)obj->QueryInterface(&d3d12_heap);
|
||||
obj->Release();
|
||||
#endif
|
||||
} else {
|
||||
screen->dev->OpenSharedHandle(d3d_handle, IID_PPV_ARGS(&d3d12_res));
|
||||
}
|
||||
|
|
@ -1070,12 +1077,17 @@ d3d12_memobj_create_from_handle(struct pipe_screen *pscreen, struct winsys_handl
|
|||
}
|
||||
memobj->base.dedicated = dedicated;
|
||||
|
||||
#ifdef _GAMING_XBOX
|
||||
obj->AddRef();
|
||||
if (handle->modifier == 1) {
|
||||
memobj->heap = (ID3D12Heap *) obj;
|
||||
} else {
|
||||
memobj->res = (ID3D12Resource *) obj;
|
||||
}
|
||||
#else
|
||||
(void)obj->QueryInterface(&memobj->heap);
|
||||
(void)obj->QueryInterface(&memobj->res);
|
||||
#endif
|
||||
|
||||
obj->Release();
|
||||
if (!memobj->res && !memobj->heap) {
|
||||
|
|
@ -1123,7 +1135,9 @@ d3d12_resource_from_memobj(struct pipe_screen *pscreen,
|
|||
|
||||
whandle.offset = static_cast<unsigned int>(offset);
|
||||
whandle.format = templ->format;
|
||||
#ifdef _GAMING_XBOX
|
||||
whandle.modifier = memobj->res ? 0 : 1;
|
||||
#endif
|
||||
|
||||
// WINSYS_HANDLE_TYPE_D3D12_RES implies taking ownership of the reference
|
||||
((IUnknown *)whandle.com_obj)->AddRef();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue