diff options
| author | Yong He <yonghe@outlook.com> | 2021-10-18 12:19:45 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-18 12:19:45 -0700 |
| commit | 2f44d9e01234911dd563f0456b9d861fd8db286d (patch) | |
| tree | e2727f31654ebc93bae6a1de4b25586be6fb9d10 /tools/gfx-unit-test/gfx-test-util.cpp | |
| parent | 87e7c49fbfccd54be0d1cee61fba8f309b1f792e (diff) | |
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 <yhe@nvidia.com>
Diffstat (limited to 'tools/gfx-unit-test/gfx-test-util.cpp')
| -rw-r--r-- | tools/gfx-unit-test/gfx-test-util.cpp | 87 |
1 files changed, 74 insertions, 13 deletions
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 <slang-com-ptr.h> +#define GFX_ENABLE_RENDERDOC_INTEGRATION 0 + +#if GFX_ENABLE_RENDERDOC_INTEGRATION +# include "external/renderdoc_app.h" +# define WIN32_LEAN_AND_MEAN +# include <Windows.h> +#endif + using Slang::ComPtr; namespace gfx_test @@ -64,23 +72,76 @@ namespace gfx_test ComPtr<ISlangBlob> 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<gfx::IDevice> createTestingDevice(UnitTestContext* context, Slang::RenderApiFlag::Enum api) + { + Slang::ComPtr<gfx::IDevice> 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<const uint8_t*>(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 } |
