summaryrefslogtreecommitdiffstats
path: root/tools/render-test
diff options
context:
space:
mode:
Diffstat (limited to 'tools/render-test')
-rw-r--r--tools/render-test/render-test-main.cpp22
-rw-r--r--tools/render-test/slang-support.h56
2 files changed, 59 insertions, 19 deletions
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp
index 23035280c..af0415bd0 100644
--- a/tools/render-test/render-test-main.cpp
+++ b/tools/render-test/render-test-main.cpp
@@ -4,6 +4,7 @@
#include "../../source/core/slang-test-tool-util.h"
#include "../source/core/slang-io.h"
+#include "../source/core/slang-std-writers.h"
#include "../source/core/slang-string-util.h"
#include "core/slang-token-reader.h"
#include "options.h"
@@ -1322,23 +1323,6 @@ static void renderDocBeginFrame() {}
static void renderDocEndFrame() {}
#endif
-class StdWritersDebugCallback : public rhi::IDebugCallback
-{
-public:
- Slang::StdWriters* writers;
- virtual SLANG_NO_THROW void SLANG_MCALL handleMessage(
- rhi::DebugMessageType type,
- rhi::DebugMessageSource source,
- const char* message) override
- {
- SLANG_UNUSED(source);
- if (type == rhi::DebugMessageType::Error)
- {
- writers->getOut().print("%s\n", message);
- }
- }
-};
-
static SlangResult _innerMain(
Slang::StdWriters* stdWriters,
SlangSession* session,
@@ -1456,8 +1440,8 @@ static SlangResult _innerMain(
}
}
- StdWritersDebugCallback debugCallback;
- debugCallback.writers = stdWriters;
+ renderer_test::CoreToRHIDebugBridge debugCallback;
+ debugCallback.setCoreCallback(stdWriters->getDebugCallback());
// Use the profile name set on options if set
input.profile = options.profileName.getLength() ? options.profileName : input.profile;
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