From 2482271fffbe85efc1bd7efcf74a76f6ed436012 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 29 Apr 2021 14:19:51 -0700 Subject: `gfx` DebugCallback and debug layer. (#1822) * `gfx` DebugCallback and debug layer. --- tools/gfx/open-gl/render-gl.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'tools/gfx/open-gl/render-gl.cpp') diff --git a/tools/gfx/open-gl/render-gl.cpp b/tools/gfx/open-gl/render-gl.cpp index d5735add5..3ef3c1aa1 100644 --- a/tools/gfx/open-gl/render-gl.cpp +++ b/tools/gfx/open-gl/render-gl.cpp @@ -1789,17 +1789,16 @@ SlangResult SLANG_MCALL createGLDevice(const IDevice::Desc* desc, IDevice** outR void GLDevice::debugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message) { - ::OutputDebugStringA("GL: "); - ::OutputDebugStringA(message); - ::OutputDebugStringA("\n"); - - switch (type) + DebugMessageType msgType = DebugMessageType::Info; + switch(type) { - case GL_DEBUG_TYPE_ERROR: - break; - default: - break; + case GL_DEBUG_TYPE_ERROR: + msgType = DebugMessageType::Error; + break; + default: + break; } + getDebugCallback()->handleMessage(msgType, DebugMessageSource::Driver, message); } /* static */void APIENTRY GLDevice::staticDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam) @@ -2862,7 +2861,16 @@ Result GLDevice::createProgram(const IShaderProgram::Desc& desc, IShaderProgram* { ComPtr kernelCode; ComPtr diagnostics; - SLANG_RETURN_ON_FAIL(desc.slangProgram->getEntryPointCode(i, 0, kernelCode.writeRef(), diagnostics.writeRef())); + auto compileResult = desc.slangProgram->getEntryPointCode( + i, 0, kernelCode.writeRef(), diagnostics.writeRef()); + if (diagnostics) + { + getDebugCallback()->handleMessage( + compileResult == SLANG_OK ? DebugMessageType::Warning : DebugMessageType::Error, + DebugMessageSource::Slang, + (char*)diagnostics->getBufferPointer()); + } + SLANG_RETURN_ON_FAIL(compileResult); GLenum glShaderType = 0; auto stage = programLayout->getEntryPointByIndex(i)->getStage(); switch (stage) -- cgit v1.2.3