yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

jarcherNVAdd record and replay support for IComponentType2 (#8215)a5e6ddd00

master
12.8 KiB265 linesraw
1#ifndef SLANG_DECODER_H
2#define SLANG_DECODER_H
3
4#include "../../core/slang-list.h"
5#include "../util/record-format.h"
6#include "decoder-consumer.h"
7
8#include <unordered_map>
9#include <vector>
10
11namespace SlangRecord
12{
13class SlangDecoder
14{
15public:
16    struct ParameterBlock
17    {
18        const uint8_t* parameterBuffer = nullptr;
19        int64_t parameterBufferSize = 0;
20
21        const uint8_t* outputBuffer = nullptr;
22        int64_t outputBufferSize = 0;
23    };
24
25    struct OutputObject
26    {
27        ObjectID recorddObjectId;
28    };
29
30    SlangDecoder(){};
31    ~SlangDecoder(){};
32
33    void addConsumer(IDecoderConsumer* consumer) { m_consumers.add(consumer); }
34
35    bool processMethodCall(FunctionHeader const& header, ParameterBlock const& parameterBlock);
36    bool processFunctionCall(FunctionHeader const& header, ParameterBlock const& parameterBlock);
37
38    bool processIGlobalSessionMethods(
39        ApiCallId callId,
40        ObjectID objectId,
41        ParameterBlock const& parameterBlock);
42    bool processISessionMethods(
43        ApiCallId callId,
44        ObjectID objectId,
45        ParameterBlock const& parameterBlock);
46    bool processIModuleMethods(
47        ApiCallId callId,
48        ObjectID objectId,
49        ParameterBlock const& parameterBlock);
50    bool processIEntryPointMethods(
51        ApiCallId callId,
52        ObjectID objectId,
53        ParameterBlock const& parameterBlock);
54    bool processICompositeComponentTypeMethods(
55        ApiCallId callId,
56        ObjectID objectId,
57        ParameterBlock const& parameterBlock);
58    bool processITypeConformanceMethods(
59        ApiCallId callId,
60        ObjectID objectId,
61        ParameterBlock const& parameterBlock);
62
63    bool CreateGlobalSession(ParameterBlock const& parameterBlock);
64    bool IGlobalSession_createSession(ObjectID objectId, ParameterBlock const& parameterBlock);
65    void IGlobalSession_findProfile(ObjectID objectId, ParameterBlock const& parameterBlock);
66    void IGlobalSession_setDownstreamCompilerPath(
67        ObjectID objectId,
68        ParameterBlock const& parameterBlock);
69    void IGlobalSession_setDownstreamCompilerPrelude(
70        ObjectID objectId,
71        ParameterBlock const& parameterBlock);
72    void IGlobalSession_getDownstreamCompilerPrelude(
73        ObjectID objectId,
74        ParameterBlock const& parameterBlock);
75    void IGlobalSession_getBuildTagString(ObjectID objectId, ParameterBlock const& parameterBlock);
76    void IGlobalSession_setDefaultDownstreamCompiler(
77        ObjectID objectId,
78        ParameterBlock const& parameterBlock);
79    void IGlobalSession_getDefaultDownstreamCompiler(
80        ObjectID objectId,
81        ParameterBlock const& parameterBlock);
82    void IGlobalSession_setLanguagePrelude(ObjectID objectId, ParameterBlock const& parameterBlock);
83    void IGlobalSession_getLanguagePrelude(ObjectID objectId, ParameterBlock const& parameterBlock);
84    void IGlobalSession_createCompileRequest(
85        ObjectID objectId,
86        ParameterBlock const& parameterBlock);
87    void IGlobalSession_addBuiltins(ObjectID objectId, ParameterBlock const& parameterBlock);
88    void IGlobalSession_setSharedLibraryLoader(
89        ObjectID objectId,
90        ParameterBlock const& parameterBlock);
91    void IGlobalSession_getSharedLibraryLoader(
92        ObjectID objectId,
93        ParameterBlock const& parameterBlock);
94    void IGlobalSession_checkCompileTargetSupport(
95        ObjectID objectId,
96        ParameterBlock const& parameterBlock);
97    void IGlobalSession_checkPassThroughSupport(
98        ObjectID objectId,
99        ParameterBlock const& parameterBlock);
100    void IGlobalSession_compileCoreModule(ObjectID objectId, ParameterBlock const& parameterBlock);
101    void IGlobalSession_loadCoreModule(ObjectID objectId, ParameterBlock const& parameterBlock);
102    void IGlobalSession_saveCoreModule(ObjectID objectId, ParameterBlock const& parameterBlock);
103    void IGlobalSession_findCapability(ObjectID objectId, ParameterBlock const& parameterBlock);
104    void IGlobalSession_setDownstreamCompilerForTransition(
105        ObjectID objectId,
106        ParameterBlock const& parameterBlock);
107    void IGlobalSession_getDownstreamCompilerForTransition(
108        ObjectID objectId,
109        ParameterBlock const& parameterBlock);
110    void IGlobalSession_getCompilerElapsedTime(
111        ObjectID objectId,
112        ParameterBlock const& parameterBlock);
113    void IGlobalSession_setSPIRVCoreGrammar(
114        ObjectID objectId,
115        ParameterBlock const& parameterBlock);
116    void IGlobalSession_parseCommandLineArguments(
117        ObjectID objectId,
118        ParameterBlock const& parameterBlock);
119    void IGlobalSession_getSessionDescDigest(
120        ObjectID objectId,
121        ParameterBlock const& parameterBlock);
122
123    void ISession_getGlobalSession(ObjectID objectId, ParameterBlock const& parameterBlock);
124    void ISession_loadModule(ObjectID objectId, ParameterBlock const& parameterBlock);
125    void ISession_loadModuleFromBlob(ObjectID objectId, ParameterBlock const& parameterBlock);
126    void ISession_loadModuleFromIRBlob(ObjectID objectId, ParameterBlock const& parameterBlock);
127    void ISession_loadModuleFromSource(ObjectID objectId, ParameterBlock const& parameterBlock);
128    void ISession_loadModuleFromSourceString(
129        ObjectID objectId,
130        ParameterBlock const& parameterBlock);
131    void ISession_createCompositeComponentType(
132        ObjectID objectId,
133        ParameterBlock const& parameterBlock);
134    void ISession_specializeType(ObjectID objectId, ParameterBlock const& parameterBlock);
135    void ISession_getTypeLayout(ObjectID objectId, ParameterBlock const& parameterBlock);
136    void ISession_getContainerType(ObjectID objectId, ParameterBlock const& parameterBlock);
137    void ISession_getDynamicType(ObjectID objectId, ParameterBlock const& parameterBlock);
138    void ISession_getTypeRTTIMangledName(ObjectID objectId, ParameterBlock const& parameterBlock);
139    void ISession_getTypeConformanceWitnessMangledName(
140        ObjectID objectId,
141        ParameterBlock const& parameterBlock);
142    void ISession_getTypeConformanceWitnessSequentialID(
143        ObjectID objectId,
144        ParameterBlock const& parameterBlock);
145    void ISession_createTypeConformanceComponentType(
146        ObjectID objectId,
147        ParameterBlock const& parameterBlock);
148    void ISession_createCompileRequest(ObjectID objectId, ParameterBlock const& parameterBlock);
149    void ISession_getLoadedModuleCount(ObjectID objectId, ParameterBlock const& parameterBlock);
150    void ISession_getLoadedModule(ObjectID objectId, ParameterBlock const& parameterBlock);
151    void ISession_isBinaryModuleUpToDate(ObjectID objectId, ParameterBlock const& parameterBlock);
152
153    void IModule_findEntryPointByName(ObjectID objectId, ParameterBlock const& parameterBlock);
154    void IModule_getDefinedEntryPointCount(ObjectID objectId, ParameterBlock const& parameterBlock);
155    void IModule_getDefinedEntryPoint(ObjectID objectId, ParameterBlock const& parameterBlock);
156    void IModule_serialize(ObjectID objectId, ParameterBlock const& parameterBlock);
157    void IModule_writeToFile(ObjectID objectId, ParameterBlock const& parameterBlock);
158    void IModule_getName(ObjectID objectId, ParameterBlock const& parameterBlock);
159    void IModule_getFilePath(ObjectID objectId, ParameterBlock const& parameterBlock);
160    void IModule_getUniqueIdentity(ObjectID objectId, ParameterBlock const& parameterBlock);
161    void IModule_findAndCheckEntryPoint(ObjectID objectId, ParameterBlock const& parameterBlock);
162    void IModule_getSession(ObjectID objectId, ParameterBlock const& parameterBlock);
163    void IModule_getLayout(ObjectID objectId, ParameterBlock const& parameterBlock);
164    void IModule_getSpecializationParamCount(
165        ObjectID objectId,
166        ParameterBlock const& parameterBlock);
167    void IModule_getEntryPointCode(ObjectID objectId, ParameterBlock const& parameterBlock);
168    void IModule_getTargetCode(ObjectID objectId, ParameterBlock const& parameterBlock);
169    void IModule_getResultAsFileSystem(ObjectID objectId, ParameterBlock const& parameterBlock);
170    void IModule_getEntryPointHash(ObjectID objectId, ParameterBlock const& parameterBlock);
171    void IModule_specialize(ObjectID objectId, ParameterBlock const& parameterBlock);
172    void IModule_link(ObjectID objectId, ParameterBlock const& parameterBlock);
173    void IModule_getEntryPointHostCallable(ObjectID objectId, ParameterBlock const& parameterBlock);
174    void IModule_renameEntryPoint(ObjectID objectId, ParameterBlock const& parameterBlock);
175    void IModule_linkWithOptions(ObjectID objectId, ParameterBlock const& parameterBlock);
176
177    void IEntryPoint_getSession(ObjectID objectId, ParameterBlock const& parameterBlock);
178    void IEntryPoint_getLayout(ObjectID objectId, ParameterBlock const& parameterBlock);
179    void IEntryPoint_getSpecializationParamCount(
180        ObjectID objectId,
181        ParameterBlock const& parameterBlock);
182    void IEntryPoint_getEntryPointCode(ObjectID objectId, ParameterBlock const& parameterBlock);
183    void IEntryPoint_getTargetCode(ObjectID objectId, ParameterBlock const& parameterBlock);
184    void IEntryPoint_getResultAsFileSystem(ObjectID objectId, ParameterBlock const& parameterBlock);
185    void IEntryPoint_getEntryPointHash(ObjectID objectId, ParameterBlock const& parameterBlock);
186    void IEntryPoint_specialize(ObjectID objectId, ParameterBlock const& parameterBlock);
187    void IEntryPoint_link(ObjectID objectId, ParameterBlock const& parameterBlock);
188    void IEntryPoint_getEntryPointHostCallable(
189        ObjectID objectId,
190        ParameterBlock const& parameterBlock);
191    void IEntryPoint_renameEntryPoint(ObjectID objectId, ParameterBlock const& parameterBlock);
192    void IEntryPoint_linkWithOptions(ObjectID objectId, ParameterBlock const& parameterBlock);
193
194    void ICompositeComponentType_getSession(
195        ObjectID objectId,
196        ParameterBlock const& parameterBlock);
197    void ICompositeComponentType_getLayout(ObjectID objectId, ParameterBlock const& parameterBlock);
198    void ICompositeComponentType_getSpecializationParamCount(
199        ObjectID objectId,
200        ParameterBlock const& parameterBlock);
201    void ICompositeComponentType_getEntryPointCode(
202        ObjectID objectId,
203        ParameterBlock const& parameterBlock);
204    void ICompositeComponentType_getTargetCode(
205        ObjectID objectId,
206        ParameterBlock const& parameterBlock);
207    void ICompositeComponentType_getResultAsFileSystem(
208        ObjectID objectId,
209        ParameterBlock const& parameterBlock);
210    void ICompositeComponentType_getEntryPointHash(
211        ObjectID objectId,
212        ParameterBlock const& parameterBlock);
213    void ICompositeComponentType_specialize(
214        ObjectID objectId,
215        ParameterBlock const& parameterBlock);
216    void ICompositeComponentType_link(ObjectID objectId, ParameterBlock const& parameterBlock);
217    void ICompositeComponentType_getEntryPointHostCallable(
218        ObjectID objectId,
219        ParameterBlock const& parameterBlock);
220    void ICompositeComponentType_renameEntryPoint(
221        ObjectID objectId,
222        ParameterBlock const& parameterBlock);
223    void ICompositeComponentType_linkWithOptions(
224        ObjectID objectId,
225        ParameterBlock const& parameterBlock);
226    void ICompositeComponentType_queryInterface(
227        ObjectID objectId,
228        ParameterBlock const& parameterBlock);
229
230    void ITypeConformance_getSession(ObjectID objectId, ParameterBlock const& parameterBlock);
231    void ITypeConformance_getLayout(ObjectID objectId, ParameterBlock const& parameterBlock);
232    void ITypeConformance_getSpecializationParamCount(
233        ObjectID objectId,
234        ParameterBlock const& parameterBlock);
235    void ITypeConformance_getEntryPointCode(
236        ObjectID objectId,
237        ParameterBlock const& parameterBlock);
238    void ITypeConformance_getTargetCode(ObjectID objectId, ParameterBlock const& parameterBlock);
239    void ITypeConformance_getResultAsFileSystem(
240        ObjectID objectId,
241        ParameterBlock const& parameterBlock);
242    void ITypeConformance_getEntryPointHash(
243        ObjectID objectId,
244        ParameterBlock const& parameterBlock);
245    void ITypeConformance_specialize(ObjectID objectId, ParameterBlock const& parameterBlock);
246    void ITypeConformance_link(ObjectID objectId, ParameterBlock const& parameterBlock);
247    void ITypeConformance_getEntryPointHostCallable(
248        ObjectID objectId,
249        ParameterBlock const& parameterBlock);
250    void ITypeConformance_renameEntryPoint(ObjectID objectId, ParameterBlock const& parameterBlock);
251    void ITypeConformance_linkWithOptions(ObjectID objectId, ParameterBlock const& parameterBlock);
252
253    // IComponentType2 methods.
254    void IComponentType2_getTargetCompileResult(
255        ObjectID objectId,
256        ParameterBlock const& parameterBlock);
257    void IComponentType2_getEntryPointCompileResult(
258        ObjectID objectId,
259        ParameterBlock const& parameterBlock);
260
261private:
262    Slang::List<IDecoderConsumer*> m_consumers;
263};
264} // namespace SlangRecord
265#endif // SLANG_DECODER_H