yum-mirror/slang

Making it easier to work with shaders

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

Gangzheng TongAdd RHI Device Caching and Test Prefix Exclusion (#8448)ba8132345

master
2.9 KiB113 linesraw
1// options.h
2#pragma once
3
4#include <stdint.h>
5
6#ifndef SLANG_HANDLE_RESULT_FAIL
7#define SLANG_HANDLE_RESULT_FAIL(x) assert(!"failure")
8#endif
9
10#include "../../source/compiler-core/slang-command-line-args.h"
11#include "../../source/core/slang-process-util.h"
12#include "../../source/core/slang-writer.h"
13#include "slang-com-helper.h"
14
15#include <slang-rhi.h>
16
17namespace renderer_test
18{
19
20using namespace rhi;
21
22struct Options
23{
24    enum class InputLanguageID
25    {
26        // Slang being used as an HLSL-ish compiler
27        Slang,
28
29        // Raw HLSL or GLSL input, bypassing Slang
30        Native,
31    };
32
33    enum class ShaderProgramType
34    {
35        // Vertex and Fragment shader, writing an image out
36        Graphics,
37        // Compute shader, writing buffer contents out
38        Compute,
39        // Vertex and Fragment shader, writing buffer contents out
40        GraphicsCompute,
41        // Ray tracing shaders, writing buffer contents out
42        RayTracing,
43        // Mesh and Fragment shader, writing buffer contents out
44        GraphicsMeshCompute,
45        // Task, Mesh and Fragment shader, writing buffer contents out
46        GraphicsTaskMeshCompute,
47    };
48
49    Slang::String appName = "render-test";
50    Slang::String sourcePath;
51    Slang::String outputPath;
52    ShaderProgramType shaderType = ShaderProgramType::Graphics;
53
54    /// The renderer type inferred from the target language type. Used if a rendererType is not
55    /// explicitly set.
56    DeviceType targetLanguageDeviceType = DeviceType::Default;
57    /// The set render type
58    DeviceType deviceType = DeviceType::Default;
59    InputLanguageID inputLanguageID = InputLanguageID::Slang;
60    SlangSourceLanguage sourceLanguage = SLANG_SOURCE_LANGUAGE_UNKNOWN;
61
62    /// Can be used for overriding the profile
63    Slang::String profileName;
64
65    bool outputUsingType = false;
66
67    bool useDXBC = false;
68
69    bool onlyStartup = false;
70
71    bool performanceProfile = false;
72
73    bool dontAddDefaultEntryPoints = false;
74
75    bool disableDebugInfo = false;
76
77    bool allowGLSL = false;
78
79    Slang::String entryPointName;
80
81    Slang::List<Slang::String> renderFeatures; /// Required render features for this test to run
82
83    uint32_t computeDispatchSize[3] = {1, 1, 1};
84
85    Slang::String nvapiExtnSlot; ///< The nvapiRegister to use.
86
87    Slang::DownstreamArgs downstreamArgs; ///< Args to downstream tools. Here it's just slang
88
89    bool generateSPIRVDirectly = true;
90
91    bool enableDebugLayers = false;
92
93    bool dx12Experimental = false;
94
95    bool showAdapterInfo = false;
96
97    bool skipSPIRVValidation = false;
98
99    // Whether to enable RHI device caching (default: false in render-test)
100    bool cacheRhiDevice = false;
101
102    Slang::List<Slang::String> capabilities;
103
104    Options() { downstreamArgs.addName("slang"); }
105
106    static SlangResult parse(
107        int argc,
108        const char* const* argv,
109        Slang::WriterHelper stdError,
110        Options& outOptions);
111};
112
113} // namespace renderer_test