diff options
Diffstat (limited to 'tools/gfx/render.cpp')
| -rw-r--r-- | tools/gfx/render.cpp | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/tools/gfx/render.cpp b/tools/gfx/render.cpp index 81fa73f22..d14ce904a 100644 --- a/tools/gfx/render.cpp +++ b/tools/gfx/render.cpp @@ -8,12 +8,14 @@ #include "vulkan/render-vk.h" #include "cuda/render-cuda.h" #include "cpu/render-cpu.h" +#include "debug-layer.h" + #include <cstring> namespace gfx { using namespace Slang; -static const IResource::DescBase s_emptyDescBase = {}; +static bool debugLayerEnabled = false; /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Global Renderer Functions !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ @@ -47,8 +49,7 @@ extern "C" return s_formatSize[int(format)]; } - SLANG_GFX_API SlangResult SLANG_MCALL - gfxCreateDevice(const IDevice::Desc* desc, IDevice** outDevice) + SlangResult _createDevice(const IDevice::Desc* desc, IDevice** outDevice) { switch (desc->deviceType) { @@ -77,16 +78,16 @@ extern "C" { IDevice::Desc newDesc = *desc; newDesc.deviceType = DeviceType::DirectX12; - if (gfxCreateDevice(&newDesc, outDevice) == SLANG_OK) + if (_createDevice(&newDesc, outDevice) == SLANG_OK) return SLANG_OK; newDesc.deviceType = DeviceType::Vulkan; - if (gfxCreateDevice(&newDesc, outDevice) == SLANG_OK) + if (_createDevice(&newDesc, outDevice) == SLANG_OK) return SLANG_OK; newDesc.deviceType = DeviceType::DirectX11; - if (gfxCreateDevice(&newDesc, outDevice) == SLANG_OK) + if (_createDevice(&newDesc, outDevice) == SLANG_OK) return SLANG_OK; newDesc.deviceType = DeviceType::OpenGl; - if (gfxCreateDevice(&newDesc, outDevice) == SLANG_OK) + if (_createDevice(&newDesc, outDevice) == SLANG_OK) return SLANG_OK; return SLANG_FAIL; } @@ -113,6 +114,35 @@ extern "C" } } + SLANG_GFX_API SlangResult SLANG_MCALL + gfxCreateDevice(const IDevice::Desc* desc, IDevice** outDevice) + { + ComPtr<IDevice> innerDevice; + auto resultCode = _createDevice(desc, innerDevice.writeRef()); + if (SLANG_FAILED(resultCode)) + return resultCode; + if (!debugLayerEnabled) + { + returnComPtr(outDevice, innerDevice); + return resultCode; + } + RefPtr<DebugDevice> debugDevice = new DebugDevice(); + debugDevice->baseObject = innerDevice; + returnComPtr(outDevice, debugDevice); + return resultCode; + } + + SLANG_GFX_API SlangResult SLANG_MCALL gfxSetDebugCallback(IDebugCallback* callback) + { + _getDebugCallback() = callback; + return SLANG_OK; + } + + SLANG_GFX_API void SLANG_MCALL gfxEnableDebugLayer() + { + debugLayerEnabled = true; + } + const char* SLANG_MCALL gfxGetDeviceTypeName(DeviceType type) { switch (type) |
