summaryrefslogtreecommitdiff
path: root/source/slang-capture-replay/slang-type-conformance.cpp
diff options
context:
space:
mode:
authorkaizhangNV <149626564+kaizhangNV@users.noreply.github.com>2024-06-20 20:59:33 -0700
committerGitHub <noreply@github.com>2024-06-20 20:59:33 -0700
commitd349fd9e1f65fd32b2f4ea0e38c5084256d0dd04 (patch)
tree3e4869c01b041830f06b953abbb835284abcb89f /source/slang-capture-replay/slang-type-conformance.cpp
parentc3c1cb6776eacdc01ea5bc197b635471960994e4 (diff)
Add capture logic to other interfaces. (#4412)
* Add capture logic to other interfaces. Add capture logics to ISession, IModule, ITypeConformance, IEntryPoint ICompositeComponentType. Add few encode methods to encode the array. Fix some capture logic in global session. We will not need to encode the null_ptr output before actual actual of the captured APIs. Previously we used this as a place holder, but it's actually not necessary, it can be detected if the output is not captured during replay. * capture/replay: dump the shader files to disk Dump the shader files to disk. Also set a default directory for the capture files.
Diffstat (limited to 'source/slang-capture-replay/slang-type-conformance.cpp')
-rw-r--r--source/slang-capture-replay/slang-type-conformance.cpp185
1 files changed, 177 insertions, 8 deletions
diff --git a/source/slang-capture-replay/slang-type-conformance.cpp b/source/slang-capture-replay/slang-type-conformance.cpp
index 747ed119e..3eb108510 100644
--- a/source/slang-capture-replay/slang-type-conformance.cpp
+++ b/source/slang-capture-replay/slang-type-conformance.cpp
@@ -3,12 +3,17 @@
namespace SlangCapture
{
- TypeConformanceCapture::TypeConformanceCapture(slang::ITypeConformance* typeConformance)
- : m_actualTypeConformance(typeConformance)
+ TypeConformanceCapture::TypeConformanceCapture(slang::ITypeConformance* typeConformance, CaptureManager* captureManager)
+ : m_actualTypeConformance(typeConformance),
+ m_captureManager(captureManager)
{
SLANG_CAPTURE_ASSERT(m_actualTypeConformance != nullptr);
+ SLANG_CAPTURE_ASSERT(m_captureManager != nullptr);
+
+ m_typeConformanceHandle = reinterpret_cast<uint64_t>(m_actualTypeConformance.get());
slangCaptureLog(LogLevel::Verbose, "%s: %p\n", __PRETTY_FUNCTION__, typeConformance);
}
+
TypeConformanceCapture::~TypeConformanceCapture()
{
m_actualTypeConformance->release();
@@ -29,7 +34,20 @@ namespace SlangCapture
SLANG_NO_THROW slang::ISession* TypeConformanceCapture::getSession()
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_getSession, m_typeConformanceHandle);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
slang::ISession* res = m_actualTypeConformance->getSession();
+
+ {
+ encoder->encodeAddress(res);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
return res;
}
@@ -38,8 +56,23 @@ namespace SlangCapture
slang::IBlob** outDiagnostics)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
- slang::ProgramLayout* res = m_actualTypeConformance->getLayout(targetIndex, outDiagnostics);
- return res;
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ICompositeComponentType_getLayout, m_typeConformanceHandle);
+ encoder->encodeInt64(targetIndex);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
+ slang::ProgramLayout* programLayout = m_actualTypeConformance->getLayout(targetIndex, outDiagnostics);
+
+ {
+ encoder->encodeAddress(*outDiagnostics);
+ encoder->encodeAddress(programLayout);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
+ return programLayout;
}
SLANG_NO_THROW SlangInt TypeConformanceCapture::getSpecializationParamCount()
@@ -56,7 +89,23 @@ namespace SlangCapture
slang::IBlob** outDiagnostics)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_getEntryPointCode, m_typeConformanceHandle);
+ encoder->encodeInt64(entryPointIndex);
+ encoder->encodeInt64(targetIndex);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
SlangResult res = m_actualTypeConformance->getEntryPointCode(entryPointIndex, targetIndex, outCode, outDiagnostics);
+
+ {
+ encoder->encodeAddress(*outCode);
+ encoder->encodeAddress(*outDiagnostics);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
return res;
}
@@ -66,7 +115,22 @@ namespace SlangCapture
slang::IBlob** outDiagnostics)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_getTargetCode, m_typeConformanceHandle);
+ encoder->encodeInt64(targetIndex);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
SlangResult res = m_actualTypeConformance->getTargetCode(targetIndex, outCode, outDiagnostics);
+
+ {
+ encoder->encodeAddress(*outCode);
+ encoder->encodeAddress(*outDiagnostics);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
return res;
}
@@ -76,7 +140,22 @@ namespace SlangCapture
ISlangMutableFileSystem** outFileSystem)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_getResultAsFileSystem, m_typeConformanceHandle);
+ encoder->encodeInt64(entryPointIndex);
+ encoder->encodeInt64(targetIndex);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
SlangResult res = m_actualTypeConformance->getResultAsFileSystem(entryPointIndex, targetIndex, outFileSystem);
+
+ {
+ encoder->encodeAddress(*outFileSystem);
+ }
+
+ // TODO: We might need to wrap the file system object.
return res;
}
@@ -86,17 +165,47 @@ namespace SlangCapture
slang::IBlob** outHash)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_getEntryPointHash, m_typeConformanceHandle);
+ encoder->encodeInt64(entryPointIndex);
+ encoder->encodeInt64(targetIndex);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
m_actualTypeConformance->getEntryPointHash(entryPointIndex, targetIndex, outHash);
+
+ {
+ encoder->encodeAddress(*outHash);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
}
SLANG_NO_THROW SlangResult TypeConformanceCapture::specialize(
- slang::SpecializationArg const* specializationArgs,
- SlangInt specializationArgCount,
- slang::IComponentType** outSpecializedComponentType,
- ISlangBlob** outDiagnostics)
+ slang::SpecializationArg const* specializationArgs,
+ SlangInt specializationArgCount,
+ slang::IComponentType** outSpecializedComponentType,
+ ISlangBlob** outDiagnostics)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_specialize, m_typeConformanceHandle);
+ encoder->encodeInt64(specializationArgCount);
+ encoder->encodeStructArray(specializationArgs, specializationArgCount);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
SlangResult res = m_actualTypeConformance->specialize(specializationArgs, specializationArgCount, outSpecializedComponentType, outDiagnostics);
+
+ {
+ encoder->encodeAddress(*outSpecializedComponentType);
+ encoder->encodeAddress(*outDiagnostics);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
return res;
}
@@ -105,7 +214,21 @@ namespace SlangCapture
ISlangBlob** outDiagnostics)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_link, m_typeConformanceHandle);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
SlangResult res = m_actualTypeConformance->link(outLinkedComponentType, outDiagnostics);
+
+ {
+ encoder->encodeAddress(*outLinkedComponentType);
+ encoder->encodeAddress(*outDiagnostics);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
return res;
}
@@ -116,7 +239,23 @@ namespace SlangCapture
slang::IBlob** outDiagnostics)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_getEntryPointHostCallable, m_typeConformanceHandle);
+ encoder->encodeInt32(entryPointIndex);
+ encoder->encodeInt32(targetIndex);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
SlangResult res = m_actualTypeConformance->getEntryPointHostCallable(entryPointIndex, targetIndex, outSharedLibrary, outDiagnostics);
+
+ {
+ encoder->encodeAddress(*outSharedLibrary);
+ encoder->encodeAddress(*outDiagnostics);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
return res;
}
@@ -124,7 +263,21 @@ namespace SlangCapture
const char* newName, IComponentType** outEntryPoint)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_renameEntryPoint, m_typeConformanceHandle);
+ encoder->encodeString(newName);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
SlangResult res = m_actualTypeConformance->renameEntryPoint(newName, outEntryPoint);
+
+ {
+ encoder->encodeAddress(*outEntryPoint);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
return res;
}
@@ -135,7 +288,23 @@ namespace SlangCapture
ISlangBlob** outDiagnostics)
{
slangCaptureLog(LogLevel::Verbose, "%s\n", __PRETTY_FUNCTION__);
+
+ ParameterEncoder* encoder {};
+ {
+ encoder = m_captureManager->beginMethodCapture(ApiCallId::ITypeConformance_linkWithOptions, m_typeConformanceHandle);
+ encoder->encodeUint32(compilerOptionEntryCount);
+ encoder->encodeStructArray(compilerOptionEntries, compilerOptionEntryCount);
+ encoder = m_captureManager->endMethodCapture();
+ }
+
SlangResult res = m_actualTypeConformance->linkWithOptions(outLinkedComponentType, compilerOptionEntryCount, compilerOptionEntries, outDiagnostics);
+
+ {
+ encoder->encodeAddress(*outLinkedComponentType);
+ encoder->encodeAddress(*outDiagnostics);
+ m_captureManager->endMethodCaptureAppendOutput();
+ }
+
return res;
}
}