OROCHI
 
Loading...
Searching...
No Matches
GxShaderCompiler.h
Go to the documentation of this file.
1//===========================================================================
11//===========================================================================
12#pragma once
13
14GX_CORE_NAMESPACE_BEGIN()
15
16#if GX_DEVELOP
17class GxShaderCompileMessenger;
18//===========================================================================
20//===========================================================================
21class GxShaderCompiler
22{
23 //-----------------------------------------------------------
25 //-----------------------------------------------------------
27public:
29 enum class COMPILE_SHADER
30 {
31 INVALID = -1,
32
33 VERTEX_2_0 = 0,
34 VERTEX_3_0,
35 PIXEL_2_0,
36 PIXEL_3_0,
37#if GX_SHADER_MODEL >= GX_SHADER_MODEL_4
38 VERTEX_4_0,
39 PIXEL_4_0,
40#if GX_ENABLE_TESSELLATION
41 HULL_4_0,
42 DOMAIN_4_0,
43#endif //GX_ENABLE_TESSELLATION
44#endif //GX_SHADER_MODEL >= GX_SHADER_MODEL_4
45#if GX_SHADER_MODEL >= GX_SHADER_MODEL_5
46 VERTEX_5_0,
47 PIXEL_5_0,
48#if GX_ENABLE_TESSELLATION
49 HULL_5_0,
50 DOMAIN_5_0,
51#endif //GX_ENABLE_TESSELLATION
52 COMPUTE_5_0,
53#endif //GX_SHADER_MODEL >= GX_SHADER_MODEL_5
54#if GX_USE_DX12
55 VERTEX_6_0,
56 PIXEL_6_0,
57#endif //GX_USE_DX12
58 MAX,
59 };
61 static const GX_CHAR* COMPILE_SHADER_TEXT[static_cast<u32>(COMPILE_SHADER::MAX)];
62public:
64 struct GxShaderCompilerMemorySuite
65 {
67 void* (*_pMallocFunction)(size_t size);
69 void (*_pFreeFunction)(void* pPointer);
70 };
71
73 struct GxConstantRegisterTypeInformation
74 {
75 u32 _registerTableCount;
76 u32 _registerStart;
77 u32 _registerEnd;
78 };
79
81 struct GxConstantRegisterElement
82 {
84 static constexpr u32 PARAMETER_NAME_MAX = GxMath::VALUE_64;
85#if GX_USE_OPENGL
86 u32 _bindingLocationIndex;
87#endif //GX_USE_OPENGL
89 u32 _registerIndex;
90 u32 _registerCount;
92 GX_CHAR _name[PARAMETER_NAME_MAX];
93 };
94
95public:
97 static GX_CSTR VERTEX_SHADER_PROFILE_2_0;
99 static GX_CSTR VERTEX_SHADER_PROFILE_3_0;
101 static GX_CSTR PIXEL_SHADER_PROFILE_2_0;
103 static GX_CSTR PIXEL_SHADER_PROFILE_3_0;
104
106 //-----------------------------------------------------------
108 //-----------------------------------------------------------
110public:
112 GxShaderCompiler(void);
114 ~GxShaderCompiler(void);
115
117 //-----------------------------------------------------------
119 //-----------------------------------------------------------
121public:
123 static void setMemoryFunction(const GxShaderCompilerMemorySuite& memoryFunctionSuite);
124
126 void clear(void);
128 b32 compile(const void* pSrcData, u32 size, COMPILE_SHADER shaderType, GX_CSTR entryName, GX_CSTR* ppPragmaArray = nullptr, b32 noneRegisterSpace = true);
129
130private:
132 static void* allocateMemory(u32 size);
134 static void freeMemory(void* pAddress);
136 static void* allocateDevelopMemory(size_t size);
138 static void freeDevelopMemory(void* pAddress);
140 static b32 convertShader(const void* pSrcData, u32 srcSize, void** ppDstData, u32& dstSize, GX_CSTR* ppPragmaArray = nullptr);
142 static b32 isCommentLine(GX_CSTR text);
144 static b32 isReturnCode(GX_CSTR text, u32& codeSize);
146 static b32 addReturnCode(GX_STR& pDst, u32& size);
147
148#if defined(_NX64)
150 b32 compileLocal(const void* pSrcData, u32 size, COMPILE_SHADER shaderType);
152 static GxRenderShader::REGISTER_SET_TYPE getRegisterType(GLSLCpiqUniformKind kind, GLSLCpiqTypeEnum type);
154 static u32 getRegisterCount(const GLSLCuniformInfo* pUniformData);
156 static GxRenderShader::PARAMETER_TYPE getParameterType(GLSLCpiqTypeEnum type);
157#endif //_NX64
158
160 //-----------------------------------------------------------
162 //-----------------------------------------------------------
164public:
166 static GX_CSTR getShaderFolder(b32 isGlsl, u32 shaderModel);
168 u32 getShaderSize(void) const;
170 void getShaderCode(void* pDst, u32 size) const;
172 u32 getConstantRegisterTableTotal(void) const;
174 u32 getConstantRegisterTableCount(GxRenderShader::REGISTER_SET_TYPE type) const;
176 u32 getConstantRegisterStart(GxRenderShader::REGISTER_SET_TYPE type) const;
178 u32 getConstantRegisterCount(GxRenderShader::REGISTER_SET_TYPE type) const;
180 u32 getConstantRegisterTotal(GxRenderShader::REGISTER_SET_TYPE type) const;
182 const GxConstantRegisterElement* getConstantRegisterElement(u32 index) const;
184 u32 getUsageInputSemantics(void) const;
186 b32 isUsageInputSemantics(RENDER_SEMANTICS semantics) const;
188 u32 getConstantBufferSize(void) const;
190 GX_CSTR getShaderVersion(void) const { return _shaderVersion; }
191
193 //-----------------------------------------------------------
195 //-----------------------------------------------------------
197private:
198 static GxShaderCompilerMemorySuite _memoryManager;
199
200 GX_CSTR _shaderVersion;
201 u32 _registerTotal;
202 GxConstantRegisterTypeInformation _registerTypeInformation[static_cast<s32>(GxRenderShader::REGISTER_SET_TYPE::MAX)];
203 GxConstantRegisterElement* _pRegisterElementTable;
204 u32 _constantBufferSize;
205
206#if defined(_XBOX_XS)
207 ComPtr<IDxcBlob> _pShader;
208#elif GX_USE_DX11 || GX_USE_DX12
209 ID3DBlob* _pShader;
210#elif defined(_NX64) || defined(_PS5)
211 void* _pProgram;
212 u32 _programSize;
213#endif //_NX64 || _PS5
214
215#if ENABLE_PARARELL_SHADER_COMPILE
216 GxShaderCompileMessenger* _pCompileMessenger;
217 u32 _currentCount;
218#endif //ENABLE_PARARELL_SHADER_COMPILE
220};
221
222#if GX_USE_DX11 || (GX_USE_DX12 && !defined(_XBOX_XS))
223//===========================================================================
225//===========================================================================
226class GxShaderMacro
227{
228 //-----------------------------------------------------------
230 //-----------------------------------------------------------
232private:
234 struct MacroInformation
235 {
236 public:
237 GX_CSTR _name;
238 GX_CSTR _attribute;
239 struct MacroInformation* _pNext;
240 };
241
243 //-----------------------------------------------------------
245 //-----------------------------------------------------------
247public:
249 GxShaderMacro(void) : _pTop(nullptr), _pLast(nullptr), _pMacro(nullptr){}
251 ~GxShaderMacro(void);
252
254 //-----------------------------------------------------------
256 //-----------------------------------------------------------
258
260 void push(GX_CSTR name, GX_CSTR attribute);
262 s32 count(void);
264 void clear(void);
265
267 //-----------------------------------------------------------
269 //-----------------------------------------------------------
271
273 D3D10_SHADER_MACRO* getD3D10(void);
274
276 //-----------------------------------------------------------
278 //-----------------------------------------------------------
280private:
281 MacroInformation* _pTop;
282 MacroInformation* _pLast;
283 D3D10_SHADER_MACRO* _pMacro;
284
286};
287#endif //GX_USE_DX11 || (GX_USE_DX12 && !_XBOX_XS)
288
289#endif // GX_DEVELOP
290
291GX_CORE_NAMESPACE_END()
@ MAX
定義数
@ INVALID
無効なビュー
RENDER_SEMANTICS
セマンティックス
Definition GxRender.h:234
static constexpr u32 VALUE_64
64
Definition GxMath.h:125
PARAMETER_TYPE
パラメータの種類
Definition GxRenderShader.h:44
REGISTER_SET_TYPE
定数レジスタの種類
Definition GxRenderShader.h:34
32bitブーリアン
Definition GxDefine.h:173