diff options
Diffstat (limited to 'tools/render-test/slang-support.h')
| -rw-r--r-- | tools/render-test/slang-support.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tools/render-test/slang-support.h b/tools/render-test/slang-support.h index 916166c3a..51a2c8de1 100644 --- a/tools/render-test/slang-support.h +++ b/tools/render-test/slang-support.h @@ -1,6 +1,7 @@ // slang-support.h #pragma once +#include "core/slang-std-writers.h" #include "options.h" #include "shader-input-layout.h" #include "slang.h" @@ -10,6 +11,61 @@ namespace renderer_test { +/// Bridge from core debug callback to RHI debug callback +/// This allows core callbacks to receive messages from RHI systems +/// TODO: We should replace rhi::IDebugCallback with Slang::IDebugCallback. +class CoreToRHIDebugBridge : public rhi::IDebugCallback +{ +public: + void setCoreCallback(Slang::IDebugCallback* coreCallback) { m_coreCallback = coreCallback; } + + virtual SLANG_NO_THROW void SLANG_MCALL handleMessage( + rhi::DebugMessageType type, + rhi::DebugMessageSource source, + const char* message) override + { + if (m_coreCallback) + { + // Convert RHI types to core types + Slang::DebugMessageType coreType = static_cast<Slang::DebugMessageType>(type); + Slang::DebugMessageSource coreSource = static_cast<Slang::DebugMessageSource>(source); + m_coreCallback->handleMessage(coreType, coreSource, message); + } + } + +private: + Slang::IDebugCallback* m_coreCallback = nullptr; +}; + +/// Core debug callback that captures debug messages in a string buffer +class CoreDebugCallback : public Slang::IDebugCallback +{ +public: + virtual SLANG_NO_THROW void SLANG_MCALL handleMessage( + Slang::DebugMessageType type, + Slang::DebugMessageSource source, + const char* message) override + { + SLANG_UNUSED(source); + + // Only capture error messages + if (type == Slang::DebugMessageType::Error) + { + m_buf << message; + if (message[strlen(message) - 1] != '\n') + { + m_buf << '\n'; + } + } + } + + void clear() { m_buf.clear(); } + Slang::String getString() { return m_buf.toString(); } + +private: + Slang::StringBuilder m_buf; +}; + struct ShaderCompileRequest { struct SourceInfo |
