From 2f44d9e01234911dd563f0456b9d861fd8db286d Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 18 Oct 2021 12:19:45 -0700 Subject: GFX: implement mutable shader objects. (#1963) * GFX: implement mutable shader objects. * Revert unnecessary changes * Revert more changes. * Fix clang errors. * Fix clang/gcc errors. * Fix clang errors. * Remove CPU test. * Fix after merge. * Fix after merge. * Remove gl test * Code review fixes. * Fixing all vk validation errors. * Flush test output more often. * Fix a crash in `specializeDynamicAssociatedTypeLookup`. * temporarily disable std-lib-serialize test to see what happens * Fix crashes. * Make sure cpu gfx unit tests are properly disabled on TeamCity. * Disable cpu test. * Fix. * Fix cuda. * Disable nv-ray-tracing-motion-blur Co-authored-by: Yong He --- tools/gfx-unit-test/gfx-test-util.cpp | 87 +++++++++++++++++++++++++++++------ 1 file changed, 74 insertions(+), 13 deletions(-) (limited to 'tools/gfx-unit-test/gfx-test-util.cpp') diff --git a/tools/gfx-unit-test/gfx-test-util.cpp b/tools/gfx-unit-test/gfx-test-util.cpp index 1b23047a1..f1dd6be58 100644 --- a/tools/gfx-unit-test/gfx-test-util.cpp +++ b/tools/gfx-unit-test/gfx-test-util.cpp @@ -3,6 +3,14 @@ #include +#define GFX_ENABLE_RENDERDOC_INTEGRATION 0 + +#if GFX_ENABLE_RENDERDOC_INTEGRATION +# include "external/renderdoc_app.h" +# define WIN32_LEAN_AND_MEAN +# include +#endif + using Slang::ComPtr; namespace gfx_test @@ -64,23 +72,76 @@ namespace gfx_test ComPtr resultBlob; GFX_CHECK_CALL_ABORT(device->readBufferResource( buffer, 0, expectedBufferSize, resultBlob.writeRef())); - if (resultBlob->getBufferSize() < expectedBufferSize) + SLANG_CHECK(resultBlob->getBufferSize() == expectedBufferSize); + // Compare results. + SLANG_CHECK(memcmp(resultBlob->getBufferPointer(), expectedResult, expectedBufferSize) == 0); + } + + Slang::ComPtr createTestingDevice(UnitTestContext* context, Slang::RenderApiFlag::Enum api) + { + Slang::ComPtr device; + gfx::IDevice::Desc deviceDesc = {}; + switch (api) { - getTestReporter()->addResult(TestResult::Fail); - return; + 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; + case Slang::RenderApiFlag::CPU: + deviceDesc.deviceType = gfx::DeviceType::CPU; + break; + case Slang::RenderApiFlag::CUDA: + deviceDesc.deviceType = gfx::DeviceType::CUDA; + break; + case Slang::RenderApiFlag::OpenGl: + deviceDesc.deviceType = gfx::DeviceType::OpenGl; + break; + default: + SLANG_IGNORE_TEST } - - // Compare results. - auto result = reinterpret_cast(resultBlob->getBufferPointer()); - for (int i = 0; i < expectedBufferSize; i++) + 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)) { - if (expectedResult[i] != result[i]) - { - getTestReporter()->addResult(TestResult::Fail); - return; - } + SLANG_IGNORE_TEST + } + return device; + } +#if GFX_ENABLE_RENDERDOC_INTEGRATION + RENDERDOC_API_1_1_2* rdoc_api = NULL; + void initializeRenderDoc() + { + if (HMODULE mod = GetModuleHandleA("renderdoc.dll")) + { + pRENDERDOC_GetAPI RENDERDOC_GetAPI = + (pRENDERDOC_GetAPI)GetProcAddress(mod, "RENDERDOC_GetAPI"); + int ret = RENDERDOC_GetAPI(eRENDERDOC_API_Version_1_1_2, (void**)&rdoc_api); + assert(ret == 1); } - getTestReporter()->addResult(TestResult::Pass); } + void renderDocBeginFrame() + { + if (!rdoc_api) initializeRenderDoc(); + if (rdoc_api) rdoc_api->StartFrameCapture(nullptr, nullptr); + } + void renderDocEndFrame() + { + if (rdoc_api) + rdoc_api->EndFrameCapture(nullptr, nullptr); + _fgetchar(); + } +#else + void initializeRenderDoc() {} + void renderDocBeginFrame() {} + void renderDocEndFrame() {} +#endif } -- cgit v1.2.3