summaryrefslogtreecommitdiffstats
path: root/tools/gfx-unit-test/get-buffer-resource-handle-test.cpp
diff options
context:
space:
mode:
authorlucy96chen <47800040+lucy96chen@users.noreply.github.com>2021-11-09 11:59:43 -0800
committerGitHub <noreply@github.com>2021-11-09 11:59:43 -0800
commit4d4cd569ad7fcc88693c18f848603f18894e24be (patch)
tree4c7fb036eea9e259d1610a933b448a5d0edcd918 /tools/gfx-unit-test/get-buffer-resource-handle-test.cpp
parent8fe3f9cd7d664fc98e33cf276427390b42b9b468 (diff)
Allow buffers to be shared between D3D12 and CUDA (#2005)
* Added both the SharedHandle struct containing a handle and the API the handle originated from and the getSharedHandle() method to IResource, which returns a Windows system handle for the resource that can then be shared between multiple APIs (currently only fully implemented for D3D12); Added createTextureFromNativeHandle() and createBufferFromNativeHandle() to IDevice, which creates a buffer or texture resource using the provided handle (currently only fully implemented for D3D12); Added createBufferFromSharedHandle() to IDevice, which creates a BufferResource using the provided system handle (currently only fully implemented for the D3D12 to CUDA interface); Provided a proper implementation for CUDADevice::getNativeHandle(); Added several new tests testing the aforementioned implementations; Moved NativeHandle and getNativeHandle() for IBufferResource and ITextureResource up a layer into IResource and renamed to NativeResourceHandle; Modified NativeResourceHandle to be a struct containing the handle and the API it originated from and propagated these changes where appropriate * Combined all native and shared handle representations into a unified InteropHandle struct which tracks the handle's value and source API; Modified all getNativeHandle() and getSharedHandle() variants to operate on InteropHandle and modified all affected files * D3D12 buffers and textures are now responsible for closing their shared handles if they exist; Renamed IDevice::getNativeHandle() to getNativeDeviceHandles() * Fixed getNativeDeviceHandles() in render-cuda to match updated method elsewhere * Temporarily disabling existingDeviceHandleCUDA and sharedHandleD3D12ToCUDA due to currently unreproducable test failures on TC
Diffstat (limited to 'tools/gfx-unit-test/get-buffer-resource-handle-test.cpp')
-rw-r--r--tools/gfx-unit-test/get-buffer-resource-handle-test.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/tools/gfx-unit-test/get-buffer-resource-handle-test.cpp b/tools/gfx-unit-test/get-buffer-resource-handle-test.cpp
index 1b7aaa439..a5fa5e441 100644
--- a/tools/gfx-unit-test/get-buffer-resource-handle-test.cpp
+++ b/tools/gfx-unit-test/get-buffer-resource-handle-test.cpp
@@ -35,16 +35,18 @@ namespace gfx_test
(void*)initialData,
buffer.writeRef()));
- IBufferResource::NativeHandle handle;
- GFX_CHECK_CALL_ABORT(buffer->getNativeHandle(&handle));
+ InteropHandle handle;
+ GFX_CHECK_CALL_ABORT(buffer->getNativeResourceHandle(&handle));
if (device->getDeviceInfo().deviceType == gfx::DeviceType::Vulkan)
{
- SLANG_CHECK(handle != NULL);
+ SLANG_CHECK(handle.handleValue != 0);
+ SLANG_CHECK(handle.api == InteropHandleAPI::Vulkan);
}
#if SLANG_WINDOWS_FAMILY
else
{
- auto d3d12Handle = (ID3D12Resource*)handle;
+ SLANG_CHECK(handle.api == InteropHandleAPI::D3D12);
+ auto d3d12Handle = (ID3D12Resource*)handle.handleValue;
Slang::ComPtr<IUnknown> testHandle1;
GFX_CHECK_CALL_ABORT(d3d12Handle->QueryInterface<IUnknown>(testHandle1.writeRef()));
Slang::ComPtr<ID3D12Resource> testHandle2;