OROCHI
 
Loading...
Searching...
No Matches
GxRenderShader.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15//===========================================================================
18//===========================================================================
20{
21 //-------------------------------------------------------------
23 //-------------------------------------------------------------
25public:
26 GX_RTTI_ABSTRACT_CLASS(GxRenderShader, GxRenderResource)
27 // ClassBaseReference継承クラス用禁止宣言
29
30 friend class GxRenderDevice;
31
34 {
35 BOOL,
36 INT4,
37 FLOAT4,
38 SAMPLER,
39 MAX,
40 };
41
43 enum class PARAMETER_TYPE
44 {
45 VOID_POINTER,
46 BOOL,
47 INT,
48 FLOAT,
49 STRING,
50 TEXTURE,
51 TEXTURE_1D,
52 TEXTURE_2D,
53 TEXTURE_3D,
54 TEXTURE_CUBE,
55 SAMPLER,
56 SAMPLER_1D,
57 SAMPLER_2D,
58 SAMPLER_3D,
59 SAMPLER_CUBE,
60 PIXEL_SHADER,
61 VERTEX_SHADER,
62 PIXEL_FRAGMENT,
63 VERTEX_FRAGMENT,
64 MAX,
65 };
66
69 {
71 static constexpr u32 PARAMETER_NAME_MAX = GxMath::VALUE_64;
72
75#if GX_USE_OPENGL
76 u32 _bindingLocationIndex;
77#endif //GX_USE_OPENGL
80 GX_CHAR _name[PARAMETER_NAME_MAX];
81 };
82
91
92protected:
93#if defined(_NX64)
95 static constexpr u32 INVALID_POOL_OFFSET = static_cast<u32>(-1);
96#endif //_NX64
97
99 //-------------------------------------------------------------
101 //-------------------------------------------------------------
103public:
105 void cleanup(void) override;
106
107protected:
109 virtual b32 initialize(const void* pAssembledCode, u32 assembledCodeSize, u32 constantRegisterParameterCount, u32 usageInputSemantics, u32 constantBufferSize) = 0;
111 b32 initializeParameter(u32 constantRegisterParameterCount, u32 usageInputSemantics, u32 constantBufferSize);
112
113#if defined(_NX64)
115 void createShader(void* pShaderData, u32 shaderDataSize, void* pShaderControl, GxNativeShaderStageBits shaderStage);
116#endif //_NX64
117
119 GxRenderShader(void);
120
122 //-------------------------------------------------------------
124 //-------------------------------------------------------------
126public:
128 constexpr u32 getUsageInputSemantics(void) const { return _usageInputSemantics; }
130 constexpr u32 getParameterCount(void) const { return _constantRegisterParameterCount; }
132 constexpr u32 getConstantBufferSize(void) const { return _constantBufferSize; }
133
135 constexpr void* getBuffer(void) const { return _pBuffer; }
137 constexpr u32 getBufferSize(void) const { return _bufferSize; }
138
140 constexpr u32 getParameterCount(REGISTER_SET_TYPE type) const { return _registerSet[static_cast<s32>(type)]._constantRegisterParameterCount; }
142 constexpr GX_HANDLE getParameterHandle(REGISTER_SET_TYPE type, u32 index) const { return _registerSet[static_cast<s32>(type)]._pConstantRegisterParameter[index]._handle; }
144 constexpr PARAMETER_TYPE getParameterType(REGISTER_SET_TYPE type, u32 index) const { return _registerSet[static_cast<s32>(type)]._pConstantRegisterParameter[index]._type; }
145#if GX_USE_OPENGL
147 constexpr u32 getParameterBindLocationIndex(REGISTER_SET_TYPE type, u32 index) const { return _registerSet[static_cast<s32>(type)]._pConstantRegisterParameter[index]._bindingLocationIndex; }
148#endif //GX_USE_OPENGL
150 constexpr u32 getParameterRegisterIndex(REGISTER_SET_TYPE type, u32 index) const { return _registerSet[static_cast<s32>(type)]._pConstantRegisterParameter[index]._registerIndex; }
152 constexpr u32 getParameterRegisterCount(REGISTER_SET_TYPE type, u32 index) const { return _registerSet[static_cast<s32>(type)]._pConstantRegisterParameter[index]._registerCount; }
154 constexpr GX_CSTR getParameterName(REGISTER_SET_TYPE type, u32 index) const { return _registerSet[static_cast<s32>(type)]._pConstantRegisterParameter[index]._name; }
155
157 constexpr u32 getRegisterStart(REGISTER_SET_TYPE type) const { return _registerSet[static_cast<s32>(type)]._constantRegisterStart; }
159 constexpr u32 getRegisterCount(REGISTER_SET_TYPE type) const { return _registerSet[static_cast<s32>(type)]._constantRegisterCount; }
161 virtual void getAssembledCode(void* pBuffer, u32 size) const;
163 virtual u32 getAssembledCodeSize(void) const;
164
166 // (DX11 など解放できるプラットフォームのみ)
167 // isStoreDevelopMemory はバッファを ALLOCATOR_DEVELOP に移動します
168 // これは開発中にシェーダーパッケージを保存する際に必要になります。
169 GX_FORCE_INLINE virtual void releaseDiscardBuffer(b32 isStoreDevelopMemory = true) {}
170
171#if defined(_NX64)
173 GX_FORCE_INLINE GxNativeShader* getShader(void) { return &_shader; }
174#elif defined(_PS5)
176 constexpr GxNativeShader* getShader(void) const { return _pShader; }
177#endif // _PS5
178
179#if GX_SHADER_DEBUG
181 constexpr GX_CSTR getPath(void) const { return _path.getString(); }
183 GX_FORCE_INLINE void setPath(GxString path) { _path = path; }
184#endif //GX_SHADER_DEBUG
185
187 //-------------------------------------------------------------
189 //-------------------------------------------------------------
191public:
193 virtual b32 map(GxRegisterSet*& pRegisterSet, void*& pConstantRegisterParameterTable, u32 mappingType = 0);
195 virtual void unmap(void);
196
197#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
199 GX_FORCE_INLINE void writeConstantBuffer(u32 startRegister, const f32* pFloatArray, u32 count);
201 void updateConstantBuffer(void);
202#if GX_USE_DX11
204 ID3D11Buffer* getConstantBuffer(void) const { return _pD3D11ConstantBuffer; }
205#endif //GX_USE_DX11
206#endif // _WINDOWS || _PS4 || _PS5 || _XBOX_XS
207
209 //-------------------------------------------------------------
211 //-------------------------------------------------------------
213protected:
214 GxRegisterSet _registerSet[static_cast<s32>(REGISTER_SET_TYPE::MAX)];
220 void* _pBuffer;
222
223#if GX_USE_DX11
224 ID3D11Buffer* _pD3D11ConstantBuffer;
225#endif //GX_USE_DX11
226#if GX_USE_DX11 || GX_USE_DX12 || defined(_PS5)
227 GxVector4* _pConstantBufferNow;
228 GxVector4* _pConstantBufferSet;
229#elif defined(_NX64)
230 u32 _poolOffset;
231#endif // _NX64
232#if defined(_NX64)
233 GxNativeShader _shader;
234#elif defined(_PS5)
235 GxNativeShader* _pShader;
236#endif //_PS5
237#if GX_SHADER_DEBUG
238 GxString _path;
239#endif //GX_SHADER_DEBUG
240
242};
243
244#if defined(_WINDOWS) || defined(_PS4) || defined(_PS5) || defined(_XBOX_XS)
245//---------------------------------------------------------------------------
246// 定数バッファ書き込み
250//---------------------------------------------------------------------------
251void GxRenderShader::writeConstantBuffer(u32 startRegister, const f32* pFloatArray, u32 count)
252{
253 GX_MEMCPY(&_pConstantBufferNow[startRegister], pFloatArray, sizeof(GxVector4) * count);
254}
255#endif //_WINDOWS || _PS4 || _PS5 || _XBOX_XS
256
257GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
@ MAX
定義数
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
@ FLOAT4
4D f32 (f, f, f, f) に展開される
static constexpr u32 VALUE_64
64
Definition GxMath.h:125
描画関連の依存をこのクラスで吸収します
Definition GxRenderDevice.h:450
GPUリソースを管理する
Definition GxRenderResource.h:20
シェーダ共通の処理を記述
Definition GxRenderShader.h:20
constexpr void * getBuffer(void) const
バッファを取得
Definition GxRenderShader.h:135
PARAMETER_TYPE
パラメータの種類
Definition GxRenderShader.h:44
constexpr u32 getUsageInputSemantics(void) const
使用する入力セマンティックス
Definition GxRenderShader.h:128
constexpr GX_HANDLE getParameterHandle(REGISTER_SET_TYPE type, u32 index) const
パラメータのハンドルを取得
Definition GxRenderShader.h:142
constexpr u32 getParameterCount(REGISTER_SET_TYPE type) const
パラメータ数を取得
Definition GxRenderShader.h:140
constexpr u32 getParameterCount(void) const
パラメータ数の合計を取得
Definition GxRenderShader.h:130
constexpr GX_CSTR getParameterName(REGISTER_SET_TYPE type, u32 index) const
パラメータの名前を取得
Definition GxRenderShader.h:154
void * _pConstantRegisterParameterTable
定数レジスタパラメータを格納しておくメモリ領域
Definition GxRenderShader.h:215
constexpr u32 getConstantBufferSize(void) const
定数バッファサイズを取得
Definition GxRenderShader.h:132
constexpr u32 getParameterRegisterCount(REGISTER_SET_TYPE type, u32 index) const
パラメータの定数レジスタ数を取得
Definition GxRenderShader.h:152
constexpr u32 getRegisterStart(REGISTER_SET_TYPE type) const
使用定数レジスタ開始位置を取得
Definition GxRenderShader.h:157
u32 _constantRegisterParameterCount
シェーダ内の定数レジスタパラメータ数の合計
Definition GxRenderShader.h:216
constexpr PARAMETER_TYPE getParameterType(REGISTER_SET_TYPE type, u32 index) const
パラメータのパラメータの種類を取得
Definition GxRenderShader.h:144
constexpr u32 getRegisterCount(REGISTER_SET_TYPE type) const
使用定数レジスタ数を取得
Definition GxRenderShader.h:159
u32 _bufferSize
バッファサイズ
Definition GxRenderShader.h:221
u32 _mappingType
マップタイプ
Definition GxRenderShader.h:219
virtual GX_FORCE_INLINE void releaseDiscardBuffer(b32 isStoreDevelopMemory=true)
シェーダ命令コードのバッファなど中間データを解放
Definition GxRenderShader.h:169
REGISTER_SET_TYPE
定数レジスタの種類
Definition GxRenderShader.h:34
constexpr u32 getBufferSize(void) const
バッファサイズを取得
Definition GxRenderShader.h:137
u32 _constantBufferSize
定数バッファサイズ
Definition GxRenderShader.h:218
void * _pBuffer
データバッファ
Definition GxRenderShader.h:220
virtual b32 initialize(const void *pAssembledCode, u32 assembledCodeSize, u32 constantRegisterParameterCount, u32 usageInputSemantics, u32 constantBufferSize)=0
初期化関数
u32 _usageInputSemantics
使用する入力セマンティックス
Definition GxRenderShader.h:217
定数レジスタパラメータ
Definition GxRenderShader.h:69
PARAMETER_TYPE _type
パラメータの種類
Definition GxRenderShader.h:74
GX_HANDLE _handle
ハンドル
Definition GxRenderShader.h:73
u32 _registerIndex
レジスタインデックス
Definition GxRenderShader.h:78
u32 _registerCount
レジスタ数
Definition GxRenderShader.h:79
定数レジスタ情報
Definition GxRenderShader.h:85
u32 _constantRegisterStart
定数レジスタ開始位置
Definition GxRenderShader.h:88
GxConstantRegisterParameter * _pConstantRegisterParameter
定数レジスタパラメータ情報
Definition GxRenderShader.h:86
u32 _constantRegisterParameterCount
定数レジスタパラメータ情報数
Definition GxRenderShader.h:87
u32 _constantRegisterCount
定数レジスタ数
Definition GxRenderShader.h:89
文字列型クラス
Definition GxString.h:18
4次元ベクトル
Definition GxVector.h:582
32bitブーリアン
Definition GxDefine.h:173