OROCHI
 
Loading...
Searching...
No Matches
GxResShader.h
Go to the documentation of this file.
1//===========================================================================
11//===========================================================================
12#pragma once
13
14GX_CORE_NAMESPACE_BEGIN()
15class GxShaderCompiler;
16//===========================================================================
18//===========================================================================
19#if GX_USE_HLSL
20#define GX_SHADER_PACKAGE_DIR(_Dir, _ShaderFile) (_Dir "/shader_hlsl/" _ShaderFile)
21#elif GX_USE_OPENGL
22#define GX_SHADER_PACKAGE_DIR(_Dir, _ShaderFile) (_Dir "/shader_glsl/" _ShaderFile)
23#endif // !GX_USE_OPENGL
24
25//===========================================================================
27//===========================================================================
29{
30 //-----------------------------------------------------------
32 //-----------------------------------------------------------
34public:
35 // RTTI定義
37 // ClassBaseReference継承クラス用禁止宣言
39
40public:
52
55 {
57 GX_CSTR _entryName;
58#if GX_USE_DX11
59 b32 _backwardsCompatibility;
60#endif //GX_USE_DX11
61 };
62protected:
64 static GX_CSTR SHADER_ENTRYPOINT;
65
67 //-----------------------------------------------------------
69 //-----------------------------------------------------------
71protected:
74 : _pRenderShader(nullptr)
75 , _pShaderCode(nullptr)
76 , _usePragma(true)
78#if GX_USE_DX11
79 , _backwardsCompatibility(false)
80#endif //GX_USE_DX11
81 {
82 GX_MEMSET(&_header, 0, sizeof(GxResShaderHeader));
83 }
84
85public:
87 void cleanup(void) override;
88
90 //-----------------------------------------------------------
92 //-----------------------------------------------------------
94public:
96 b32 load(GxStream& stream, u32 dataSize);
97#if GX_DEVELOP
99 b32 save(GxStream& stream);
100#endif // GX_DEVELOP
101
102protected:
104 GX_FORCE_INLINE virtual b32 createShader(void) { return false; }
106 void createCallback(void* pUser);
107
112
113#if GX_DEVELOP
115 b32 writeShaderCode(GxStreamWriter& writer);
117 b32 writeConstantRegisterTable(GxStreamWriter& writer);
118
120 b32 setHeaderFromCompiler(const GxShaderCompiler& shaderCompiler);
122 b32 setShaderCodeFromCompiler(const GxShaderCompiler& shaderCompiler);
124 b32 setConstantRegisterTableFromCompiler(const GxShaderCompiler& shaderCompiler);
125#endif // GX_DEVELOP
126
128 void setConstantRegisterSetInformation(GxRenderShader::GxRegisterSet* pConstantRegisterSet, void* pConstantRegisterParameterTable);
129#if GX_DEVELOP
131 void setConstantRegisterParameterInformation(void* pConstantRegisterParameterTable, const GxShaderCompiler& shaderCompiler);
132
134 static b32 isCommentCode(GX_CSTR string, u32& codeSize);
136 static void* allocateCompilerMemory(size_t size);
138 static void freeCompilerMemory(void* pAddress);
139#endif // GX_DEVELOP
140
142 //-----------------------------------------------------------
144 //-----------------------------------------------------------
146protected:
150
152 GX_CSTR _entryName;
153#if GX_USE_DX11
154 b32 _backwardsCompatibility;
155#endif //GX_USE_DX11
156
158};
159
160//===========================================================================
162//===========================================================================
164{
165 //-----------------------------------------------------------
167 //-----------------------------------------------------------
169public:
170 // RTTI定義
172 // ClassBaseReference継承クラス用禁止宣言
174
175
176 //-----------------------------------------------------------
178 //-----------------------------------------------------------
180protected:
183
185 //-----------------------------------------------------------
187 //-----------------------------------------------------------
189public:
192
194 //-----------------------------------------------------------
196 //-----------------------------------------------------------
198protected:
200 b32 createShader(void) override;
201
203};
204
205#if GX_DEVELOP
206//===========================================================================
208//===========================================================================
209class GxResShaderVertexVsh : public GxResShaderVertex
210{
211 //-----------------------------------------------------------
213 //-----------------------------------------------------------
215public:
216 // RTTI定義
217 GX_RTTI_RESOURCE(GxResShaderVertexVsh, GxResShaderVertex)
218 // ClassBaseReference継承クラス用禁止宣言
219 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResShaderVertexVsh)
220
221
222 //-----------------------------------------------------------
224 //-----------------------------------------------------------
226protected:
228 GxResShaderVertexVsh(void) {}
229
231 //-----------------------------------------------------------
233 //-----------------------------------------------------------
235public:
237 b32 load(GxStream& stream, u32 size);
238
240};
241#endif // GX_DEVELOP
242
243//===========================================================================
245//===========================================================================
247{
248 //-----------------------------------------------------------
250 //-----------------------------------------------------------
252public:
253 // RTTI定義
255 // ClassBaseReference継承クラス用禁止宣言
257
258
259 //-----------------------------------------------------------
261 //-----------------------------------------------------------
263protected:
266
268 //-----------------------------------------------------------
270 //-----------------------------------------------------------
272public:
275
277 //-----------------------------------------------------------
279 //-----------------------------------------------------------
281protected:
283 b32 createShader(void) override;
284
286};
287
288#if GX_DEVELOP
289//===========================================================================
291//===========================================================================
292class GxResShaderPixelPsh : public GxResShaderPixel
293{
294 //-----------------------------------------------------------
296 //-----------------------------------------------------------
298public:
299 // RTTI定義
300 GX_RTTI_RESOURCE(GxResShaderPixelPsh, GxResShaderPixel)
301 // ClassBaseReference継承クラス用禁止宣言
302 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResShaderPixelPsh)
303
304
305 //-----------------------------------------------------------
307 //-----------------------------------------------------------
309protected:
311 GxResShaderPixelPsh(void) {}
312
314 //-----------------------------------------------------------
316 //-----------------------------------------------------------
318public:
320 b32 load(GxStream& stream, u32 size);
321
323};
324#endif // GX_DEVELOP
325
326#if GX_ENABLE_TESSELLATION
327//===========================================================================
329//===========================================================================
330class GxResShaderHull : public GxResShaderBase
331{
332 //-----------------------------------------------------------
334 //-----------------------------------------------------------
336public:
337 // RTTI定義
338 GX_RTTI_RESOURCE(GxResShaderHull, GxResShaderBase)
339 // ClassBaseReference継承クラス用禁止宣言
340 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResShaderHull)
341
342
343 //-----------------------------------------------------------
345 //-----------------------------------------------------------
347protected:
349 GxResShaderHull(void) {}
350
352 //-----------------------------------------------------------
354 //-----------------------------------------------------------
356public:
358 GX_FORCE_INLINE GxRenderHullShader* getHullShader(void) const { return gx_cast<GxRenderHullShader*>(_pRenderShader); }
359
361 //-----------------------------------------------------------
363 //-----------------------------------------------------------
365protected:
367 b32 createShader(void) override;
368
370};
371
372#if GX_DEVELOP
373//===========================================================================
375//===========================================================================
376class GxResShaderHullHsh : public GxResShaderHull
377{
378 //-----------------------------------------------------------
380 //-----------------------------------------------------------
382public:
383 // RTTI定義
384 GX_RTTI_RESOURCE(GxResShaderHullHsh, GxResShaderHull)
385 // ClassBaseReference継承クラス用禁止宣言
386 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResShaderHullHsh)
387
388
389 //-----------------------------------------------------------
391 //-----------------------------------------------------------
393protected:
395 GxResShaderHullHsh(void) {}
396
398 //-----------------------------------------------------------
400 //-----------------------------------------------------------
402public:
404 b32 load(GxStream& stream, u32 size);
405
407};
408#endif // GX_DEVELOP
409
410//===========================================================================
412//===========================================================================
413class GxResShaderDomain : public GxResShaderBase
414{
415 //-----------------------------------------------------------
417 //-----------------------------------------------------------
419public:
420 // RTTI定義
421 GX_RTTI_RESOURCE(GxResShaderDomain, GxResShaderBase)
422 // ClassBaseReference継承クラス用禁止宣言
423 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResShaderDomain)
424
425
426 //-----------------------------------------------------------
428 //-----------------------------------------------------------
430protected:
432 GxResShaderDomain(void) {}
433
435 //-----------------------------------------------------------
437 //-----------------------------------------------------------
439public:
441 GX_FORCE_INLINE GxRenderDomainShader* getDomainShader(void) const { return gx_cast<GxRenderDomainShader*>(_pRenderShader); }
442
444 //-----------------------------------------------------------
446 //-----------------------------------------------------------
448protected:
450 b32 createShader(void) override;
451
453};
454
455#if GX_DEVELOP
456//===========================================================================
458//===========================================================================
459class GxResShaderDomainDsh : public GxResShaderDomain
460{
461 //-----------------------------------------------------------
463 //-----------------------------------------------------------
465public:
466 // RTTI定義
467 GX_RTTI_RESOURCE(GxResShaderDomainDsh, GxResShaderDomain)
468 // ClassBaseReference継承クラス用禁止宣言
469 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResShaderDomainDsh)
470
471
472 //-----------------------------------------------------------
474 //-----------------------------------------------------------
476protected:
478 GxResShaderDomainDsh(void) {}
479
481 //-----------------------------------------------------------
483 //-----------------------------------------------------------
485public:
487 b32 load(GxStream& stream, u32 size);
488
490};
491#endif // GX_DEVELOP
492#endif //GX_ENABLE_TESSELLATION
493
494#if GX_ENABLE_COMPUTE_SHADER
495//===========================================================================
497//===========================================================================
498class GxResShaderCompute : public GxResShaderBase
499{
500 //-----------------------------------------------------------
502 //-----------------------------------------------------------
504public:
505 GX_RTTI_RESOURCE(GxResShaderCompute, GxResShaderBase)
506 // ClassBaseReference継承クラス用禁止宣言
507 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResShaderCompute)
508
509
510 //-----------------------------------------------------------
512 //-----------------------------------------------------------
514protected:
516 GxResShaderCompute(void) {}
517
519 //-----------------------------------------------------------
521 //-----------------------------------------------------------
523public:
525 GX_FORCE_INLINE GxRenderComputeShader* getComputeShader(void) const { return gx_cast<GxRenderComputeShader*>(_pRenderShader); }
526
528 //-----------------------------------------------------------
530 //-----------------------------------------------------------
532protected:
534 b32 createShader(void) override;
535
537};
538
539#if GX_DEVELOP
540//===========================================================================
542//===========================================================================
543class GxResShaderComputeCsh : public GxResShaderCompute
544{
545 //-----------------------------------------------------------
547 //-----------------------------------------------------------
549public:
550 // RTTI定義
551 GX_RTTI_RESOURCE(GxResShaderComputeCsh, GxResShaderCompute)
552 // ClassBaseReference継承クラス用禁止宣言
553 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResShaderComputeCsh)
554
555
556 //-----------------------------------------------------------
558 //-----------------------------------------------------------
560protected:
562 GxResShaderComputeCsh(void) {}
563
565 //-----------------------------------------------------------
567 //-----------------------------------------------------------
569public:
571 b32 load(GxStream& stream, u32 size);
572
574};
575#endif // GX_DEVELOP
576#endif // GX_ENABLE_COMPUTE_SHADER
577
578GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
T gx_cast(GxClassBaseRoot *pObject)
Definition GxBase.h:264
#define GX_RTTI_ABSTRACT_RESOURCE(__THIS__, __BASE__)
リソース抽象クラス型情報宣言
Definition GxRttiResource.h:115
#define GX_RTTI_RESOURCE(__THIS__, __BASE__)
リソースクラス型情報宣言
Definition GxRttiResource.h:102
コンピュートシェーダを管理する
Definition GxRenderComputeShader.h:21
ピクセルシェーダを管理する
Definition GxRenderPixelShader.h:20
シェーダ共通の処理を記述
Definition GxRenderShader.h:20
頂点シェーダを管理する
Definition GxRenderVertexShader.h:22
リソース基底クラス
Definition GxResBase.h:23
マクロ
Definition GxResShader.h:29
GxResShaderBase(void)
コンストラクタ
Definition GxResShader.h:73
GX_CSTR _entryName
エントリー名
Definition GxResShader.h:152
GxRenderShader * _pRenderShader
シェーダポインタ
Definition GxResShader.h:147
void cleanup(void) override
解放
Definition GxResShader.cpp:33
static GX_CSTR SHADER_ENTRYPOINT
シェーダエントリポイント関数名定義
Definition GxResShader.h:64
b32 load(GxStream &stream, u32 dataSize)
リソース読み込み
Definition GxResShader.cpp:50
b32 readShaderCode(GxStreamReader &reader)
シェーダコード読み込み
Definition GxResShader.cpp:140
void createCallback(void *pUser)
リソース作成時コールバック
Definition GxResShader.cpp:122
virtual GX_FORCE_INLINE b32 createShader(void)
シェーダ生成 (※継承先で実装)
Definition GxResShader.h:104
void * _pShaderCode
シェーダーコードポインタ
Definition GxResShader.h:149
GxResShaderHeader _header
ヘッダー情報
Definition GxResShader.h:148
b32 readConstantRegisterTable(GxStreamReader &reader)
定数レジスタテーブル読み込み
Definition GxResShader.cpp:175
void setConstantRegisterSetInformation(GxRenderShader::GxRegisterSet *pConstantRegisterSet, void *pConstantRegisterParameterTable)
定数レジスタセット情報設定
Definition GxResShader.cpp:357
b32 _usePragma
プラグマを使用するか
Definition GxResShader.h:151
ピクセルシェーダリソース
Definition GxResShader.h:247
GX_FORCE_INLINE GxRenderPixelShader * getPixelShader(void) const
シェーダ管理クラス取得
Definition GxResShader.h:274
GxResShaderPixel(void)
コンストラクタ
Definition GxResShader.h:265
b32 createShader(void) override
シェーダ生成
Definition GxResShader.cpp:613
頂点シェーダリソース
Definition GxResShader.h:164
b32 createShader(void) override
シェーダ生成
Definition GxResShader.cpp:474
GxResShaderVertex(void)
コンストラクタ
Definition GxResShader.h:182
GX_FORCE_INLINE GxRenderVertexShader * getVertexShader(void) const
シェーダ管理クラス取得
Definition GxResShader.h:191
ストリーム基礎クラス
Definition GxStream.h:20
ストリーム読み込みクラス
Definition GxStreamReader.h:19
ストリーム書き込みクラス
Definition GxStreamWriter.h:19
定数レジスタ情報
Definition GxRenderShader.h:85
リソース作成時コールバックの引数情報
Definition GxResShader.h:55
b32 _usePragma
プラグマを使用するか
Definition GxResShader.h:56
GX_CSTR _entryName
エントリー名
Definition GxResShader.h:57
シェーダリソース情報ヘッダー
Definition GxResShader.h:43
u32 _usageInputSemantics
使用する入力セマンティックス
Definition GxResShader.h:46
u32 _registerTableTotal
レジスタ情報個数 (トータル)
Definition GxResShader.h:47
u32 _registerCount[static_cast< s32 >(GxRenderShader::REGISTER_SET_TYPE::MAX)]
レジスタ使用個数 (タイプ別)
Definition GxResShader.h:49
u32 _registerTableCount[static_cast< s32 >(GxRenderShader::REGISTER_SET_TYPE::MAX)]
レジスタ情報個数 (タイプ別)
Definition GxResShader.h:48
u32 _registerStart[static_cast< s32 >(GxRenderShader::REGISTER_SET_TYPE::MAX)]
レジスタ使用開始番号 (タイプ別)
Definition GxResShader.h:50
u32 _shaderSize
シェーダサイズ
Definition GxResShader.h:44
u32 _constantBufferSize
定数バッファサイズ
Definition GxResShader.h:45
32bitブーリアン
Definition GxDefine.h:173