summaryrefslogtreecommitdiffstats
path: root/tools/render-test/slang-support.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/render-test/slang-support.h')
-rw-r--r--tools/render-test/slang-support.h56
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