From: Conor McCarthy cmccarthy@codeweavers.com
--- libs/vkd3d/device.c | 17 ++++++++++++++--- tests/d3d12.c | 8 ++------ 2 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index e6459e7e6..8a2dcba8b 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -4562,12 +4562,23 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CreatePlacedResource1(ID3D12Device D3D12_RESOURCE_STATES initial_state, const D3D12_CLEAR_VALUE *optimized_clear_value, REFIID iid, void **resource) { - FIXME("iface %p, heap %p, heap_offset %#"PRIx64", desc %p, initial_state %#x, " - "optimized_clear_value %p, iid %s, resource %p stub!\n", + struct d3d12_device *device = impl_from_ID3D12Device8(iface); + struct d3d12_heap *heap_object; + struct d3d12_resource *object; + HRESULT hr; + + TRACE("iface %p, heap %p, heap_offset %#"PRIx64", desc %p, initial_state %#x, " + "optimized_clear_value %p, iid %s, resource %p.\n", iface, heap, heap_offset, resource_desc, initial_state, optimized_clear_value, debugstr_guid(iid), resource);
- return E_NOTIMPL; + heap_object = unsafe_impl_from_ID3D12Heap(heap); + + if (FAILED(hr = d3d12_placed_resource_create(device, heap_object, heap_offset, + resource_desc, initial_state, optimized_clear_value, &object))) + return hr; + + return return_interface(&object->ID3D12Resource2_iface, &IID_ID3D12Resource2, iid, resource); }
static void STDMETHODCALLTYPE d3d12_device_CreateSamplerFeedbackUnorderedAccessView(ID3D12Device8 *iface, diff --git a/tests/d3d12.c b/tests/d3d12.c index aebe45791..247685f02 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -2296,15 +2296,11 @@ static void test_create_placed_resource(void)
hr = ID3D12Device8_CreatePlacedResource1(device8, heap, 0, &resource_desc1, D3D12_RESOURCE_STATE_COMMON, NULL, &IID_ID3D12Resource2, (void **)&resource2); - todo ok(hr == S_OK, "Failed to create placed resource, hr %#x.\n", hr);
- if (!hr) - { - check_interface(resource2, &IID_ID3D12Resource2, true); - ID3D12Resource2_Release(resource2); - } + check_interface(resource2, &IID_ID3D12Resource2, true);
+ ID3D12Resource2_Release(resource2); ID3D12Device8_Release(device8); }