summaryrefslogtreecommitdiffstats
path: root/tools/gfx-unit-test/gfx-test-util.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2021-10-18 12:19:45 -0700
committerGitHub <noreply@github.com>2021-10-18 12:19:45 -0700
commit2f44d9e01234911dd563f0456b9d861fd8db286d (patch)
treee2727f31654ebc93bae6a1de4b25586be6fb9d10 /tools/gfx-unit-test/gfx-test-util.cpp
parent87e7c49fbfccd54be0d1cee61fba8f309b1f792e (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.cpp87
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
}