From b3dfe383c6d31ff3dbd76dcfb32de8d536382f3e Mon Sep 17 00:00:00 2001 From: lucy96chen <47800040+lucy96chen@users.noreply.github.com> Date: Mon, 4 Oct 2021 09:46:33 -0700 Subject: Get native handles for TextureResource and BufferResource (#1960) * Added getNativeHandle() to TextureResource and BufferResource; Implemented getNativeHandle() in Vulkan and D3D12; Added new unit test files for the aforementioned implementation * Added missing getNativeHandle() implementations to renderer-shared.cpp and CUDA * Finished new getNativeHandle() unit tests for ITextureResource and IBufferResource; Modified ICommandQueue and ICommandBuffer unit tests to call QueryInterface to convert to IUnknown then back and compare resulting pointers for equality * Unit tests updated and pass locally * Cast m_buffer.m_buffer and m_image to uint64_t --- tools/gfx-unit-test/get-cmd-queue-handle-test.cpp | 84 +++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 tools/gfx-unit-test/get-cmd-queue-handle-test.cpp (limited to 'tools/gfx-unit-test/get-cmd-queue-handle-test.cpp') diff --git a/tools/gfx-unit-test/get-cmd-queue-handle-test.cpp b/tools/gfx-unit-test/get-cmd-queue-handle-test.cpp new file mode 100644 index 000000000..5e530e3f2 --- /dev/null +++ b/tools/gfx-unit-test/get-cmd-queue-handle-test.cpp @@ -0,0 +1,84 @@ +#include "tools/unit-test/slang-unit-test.h" + +#include "slang-gfx.h" +#include "gfx-test-util.h" +#include "tools/gfx-util/shader-cursor.h" +#include "source/core/slang-basic.h" + +#if SLANG_WINDOWS_FAMILY +#include +#endif + +using namespace gfx; + +namespace gfx_test +{ + void getQueueHandleTestImpl(IDevice* device, UnitTestContext* context) + { + ICommandQueue::Desc queueDesc = { ICommandQueue::QueueType::Graphics }; + auto queue = device->createCommandQueue(queueDesc); + ICommandQueue::NativeHandle handle; + GFX_CHECK_CALL_ABORT(queue->getNativeHandle(&handle)); + if (device->getDeviceInfo().deviceType == gfx::DeviceType::Vulkan) + { + SLANG_CHECK(handle != NULL); + } +#if SLANG_WINDOWS_FAMILY + else + { + auto d3d12Queue = (ID3D12CommandQueue*)handle; + Slang::ComPtr testHandle1; + GFX_CHECK_CALL_ABORT(d3d12Queue->QueryInterface(testHandle1.writeRef())); + Slang::ComPtr testHandle2; + GFX_CHECK_CALL_ABORT(testHandle1->QueryInterface(testHandle2.writeRef())); + SLANG_CHECK(d3d12Queue == testHandle2.get()); + } +#endif + } + + void getQueueHandleTestAPI(UnitTestContext* context, Slang::RenderApiFlag::Enum api) + { + if ((api & context->enabledApis) == 0) + { + SLANG_IGNORE_TEST; + } + Slang::ComPtr device; + IDevice::Desc deviceDesc = {}; + switch (api) + { + case Slang::RenderApiFlag::D3D11: + deviceDesc.deviceType = gfx::DeviceType::DirectX11; + break; + case Slang::RenderApiFlag::D3D12: + deviceDesc.deviceType = gfx::DeviceType::DirectX12; + break; + case Slang::RenderApiFlag::Vulkan: + deviceDesc.deviceType = gfx::DeviceType::Vulkan; + break; + default: + SLANG_IGNORE_TEST; + } + deviceDesc.slang.slangGlobalSession = context->slangGlobalSession; + const char* searchPaths[] = { "", "../../tools/gfx-unit-test", "tools/gfx-unit-test" }; + deviceDesc.slang.searchPathCount = (SlangInt)SLANG_COUNT_OF(searchPaths); + deviceDesc.slang.searchPaths = searchPaths; + auto createDeviceResult = gfxCreateDevice(&deviceDesc, device.writeRef()); + if (SLANG_FAILED(createDeviceResult)) + { + SLANG_IGNORE_TEST; + } + + getQueueHandleTestImpl(device, context); + } + + SLANG_UNIT_TEST(getCmdQueueHandleD3D12) + { + return getQueueHandleTestAPI(unitTestContext, Slang::RenderApiFlag::D3D12); + } + + SLANG_UNIT_TEST(getCmdQueueHandleVulkan) + { + return getQueueHandleTestAPI(unitTestContext, Slang::RenderApiFlag::Vulkan); + } + +} -- cgit v1.2.3