summaryrefslogtreecommitdiff
path: root/tools/gfx/d3d11/render-d3d11.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gfx/d3d11/render-d3d11.cpp')
-rw-r--r--tools/gfx/d3d11/render-d3d11.cpp48
1 files changed, 32 insertions, 16 deletions
diff --git a/tools/gfx/d3d11/render-d3d11.cpp b/tools/gfx/d3d11/render-d3d11.cpp
index 8eafd24b4..30c982ab3 100644
--- a/tools/gfx/d3d11/render-d3d11.cpp
+++ b/tools/gfx/d3d11/render-d3d11.cpp
@@ -514,6 +514,19 @@ D3D11Renderer::ScopeNVAPI::~ScopeNVAPI()
// !!!!!!!!!!!!!!!!!!!!!!!!!!!! Renderer interface !!!!!!!!!!!!!!!!!!!!!!!!!!
+static bool _isSupportedNVAPIOp(IUnknown* dev, uint32_t op)
+{
+#ifdef GFX_NVAPI
+ {
+ bool isSupported;
+ NvAPI_Status status = NvAPI_D3D11_IsNvShaderExtnOpCodeSupported(dev, NvU32(op), &isSupported);
+ return status == NVAPI_OK && isSupported;
+ }
+#else
+ return false;
+#endif
+}
+
SlangResult D3D11Renderer::initialize(const Desc& desc, void* inWindowHandle)
{
auto windowHandle = (HWND)inWindowHandle;
@@ -647,29 +660,32 @@ SlangResult D3D11Renderer::initialize(const Desc& desc, void* inWindowHandle)
}
// NVAPI
+ if (desc.nvapiExtnSlot >= 0)
{
- const char* features[] = { "nvapi", "atomic-float", "atomic-int64" };
- bool needsNvapi = false;
- for (Index i = 0; i < SLANG_COUNT_OF(features); ++i)
+ if (SLANG_FAILED(NVAPIUtil::initialize()))
{
- if (desc.requiredFeatures.indexOf(features[i]) >= 0)
- {
- needsNvapi = true;
- break;
- }
+ return SLANG_E_NOT_AVAILABLE;
}
- if (needsNvapi && SLANG_SUCCEEDED(NVAPIUtil::initialize()))
+#ifdef GFX_NVAPI
+ if (NvAPI_D3D11_SetNvShaderExtnSlot(m_device, NvU32(desc.nvapiExtnSlot)) != NVAPI_OK)
{
- // TODO(JS): We should test for specific features here.
- for (Index i = 0; i < SLANG_COUNT_OF(features); ++i)
- {
- m_features.add(features[i]);
- }
- m_nvapi = true;
+ return SLANG_E_NOT_AVAILABLE;
}
- }
+ if (_isSupportedNVAPIOp(m_device, NV_EXTN_OP_UINT64_ATOMIC ))
+ {
+ m_features.add("atomic-int64");
+ }
+ if (_isSupportedNVAPIOp(m_device, NV_EXTN_OP_FP32_ATOMIC))
+ {
+ m_features.add("atomic-float");
+ }
+
+ m_nvapi = true;
+#endif
+ }
+
// TODO: Add support for debugging to help detect leaks:
//
// ComPtr<ID3D11Debug> gDebug;