OROCHI
 
Loading...
Searching...
No Matches
GxSysShader.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13#define USE_SHADER_COMPILE_THREAD 1
14
15GX_CORE_NAMESPACE_BEGIN()
16
17//===========================================================================
19//===========================================================================
21{
22 //-------------------------------------------------------------
24 //-------------------------------------------------------------
26public:
27 GX_RTTI_ABSTRACT_CLASS(GxSysShader, GxSysBase)
28 // ClassBase継承クラス用禁止宣言
30
31
32 static const u32 PARAMETER_COUNT_MAX = GxMath::VALUE_1K;
33
34protected:
35#if GX_DEVELOP && USE_SHADER_COMPILE_THREAD
37 class GxShaderCompileThread : public GxThread
38 {
39 //-------------------------------------------------------------
41 //-------------------------------------------------------------
43 public:
45 GxShaderCompileThread(void) : _busyFlag(false) {}
46
48 void threadMain(void* pArgument) override;
49
51 //-------------------------------------------------------------
53 //-------------------------------------------------------------
55
57 GX_FORCE_INLINE b32 waitStartEvent(void) { return _startEvent.waitEvent(-1); }
59 GX_FORCE_INLINE b32 setStartEvent(void) { _busyFlag = true; return _startEvent.setEvent(); }
61 GX_FORCE_INLINE b32 isBusy(void) const { return _busyFlag; }
62
64 //-------------------------------------------------------------
66 //-------------------------------------------------------------
68 private:
69 GxEvent _startEvent;
70 b32 _busyFlag;
71
73 };
74#endif // GX_DEVELOP && USE_SHADER_COMPILE_THREAD
75
77 //-------------------------------------------------------------
79 //-------------------------------------------------------------
81public:
83 GxSysShader(void);
85 ~GxSysShader(void) override {}
87 b32 initialize(const GxClassBase* pInitialInformation = nullptr) override;
89 void terminate(void) override;
90
92 //-------------------------------------------------------------
94 //-------------------------------------------------------------
96
98 void update(void) override;
99
100#if GX_DEVELOP
102 GX_FORCE_INLINE void addDefaultIncludePath(GX_STR path) { _defaultIncludePaths.addBottom(path); }
103#endif //GX_DEVELOP
104
106 //-----------------------------------------------------------
108 //-----------------------------------------------------------
110
112 GX_HANDLE getHandleByParameterName(GX_CSTR parameterName);
113
115 GX_CSTR getParameterNameByHandle(GX_HANDLE handle);
116
117#if GX_DEVELOP
119 GX_FORCE_INLINE b32 getShaderPackageAutoSaveEnable(void) const { return _shaderPackageAutoSaveEnable; }
120
122 GX_FORCE_INLINE void setShaderPackageAutoSaveEnable(b32 enable) { _shaderPackageAutoSaveEnable = enable; }
123
125 void registerShaderCreateCallback(GxShaderPackage::GxShaderCode* pShaderCode);
126
128 void saveUpdatedShaderPackages(void);
129
131 GX_FORCE_INLINE b32 isShaderCompiling(void) const { return (getShaderCompileCountRest() > 0); }
132
134 u32 getShaderCompileCountRest(void) const;
135
137 GX_FORCE_INLINE const GxArray& getDefaultIncludePaths(void) { return _defaultIncludePaths; }
138#endif // GX_DEVELOP
139
141 //-------------------------------------------------------------
143 //-------------------------------------------------------------
145private:
146 GxHashMap _parameterList;
147#if GX_DEVELOP
148 GxArray _createCallbackArray;
149 GxArray _updatedPackages;
150 b32 _shaderPackageAutoSaveEnable;
151
152#if ENABLE_PARARELL_SHADER_COMPILE
153#define MAX_SHADER_THREAD_NUM 4
154 struct ShaderCompileContext
155 {
156 GxShaderCompileThread _shaderCompileThread;
157 volatile bool _isStopShaderCompileThread;
158 GxShaderPackage::GxShaderCode* _pCompileShaderCode;
159 GxShaderPackage::GxShaderObject _compiledShaderObject;
160 };
161 ShaderCompileContext _contexts[MAX_SHADER_THREAD_NUM];
162
163 GxShaderCompileRequestSender _sendThread;
164
165#else //ENABLE_PARARELL_SHADER_COMPILE
166#if USE_SHADER_COMPILE_THREAD
167 GxShaderCompileThread _shaderCompileThread;
168 volatile bool _isStopShaderCompileThread;
169 GxShaderPackage::GxShaderCode* _pCompileShaderCode;
170 GxShaderPackage::GxShaderObject _compiledShaderObject;
171#endif // USE_SHADER_COMPILE_THREAD
172
173#endif // !ENABLE_PARARELL_SHADER_COMPILE
174
175 GxArray _defaultIncludePaths;
176#endif // GX_DEVELOP
177
179};
180
181// アクセスインターフェース
182GX_FORCE_INLINE GxSysShader* getGxSysShader(void){ return GxSysShader::getSingletonPointer(); }
183
184GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
配列クラス
Definition GxArray.h:18
オブジェクト基底クラス
Definition GxBase.h:88
イベントクラス
Definition GxThread.h:132
連想配列クラス
Definition GxHashMap.h:18
算術演算クラス
Definition GxMath.h:84
システム基底クラス
Definition GxSysBase.h:18
シェーダシステムクラス
Definition GxSysShader.h:21
~GxSysShader(void) override
デストラクタ
Definition GxSysShader.h:85
スレッドクラス
Definition GxThread.h:177
virtual void threadMain(void *pArgument)=0
メインループ
シングルトン基礎クラス
Definition GxSingleton.h:19
static constexpr GxSysShader * getSingletonPointer(void)
Definition GxSingleton.h:59
シェーダコード
Definition GxShaderPackage.h:52
シェーダオブジェクト
Definition GxShaderPackage.h:151
32bitブーリアン
Definition GxDefine.h:173