1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     gr_Shader.h
4 
5   Copyright (C)2010 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 33710 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_GR_SHADER_H_
17 #define NN_GR_SHADER_H_
18 
19 #include <nn/gr/CTR/gr_Prefix.h>
20 #include <nn/gr/CTR/gr_BindSymbol.h>
21 
22 namespace nn
23 {
24     namespace gr
25     {
26         namespace CTR
27         {
28 
29             /*!
30                 @brief シェーダーバイナリ設定のためのクラスです。
31              */
32             class Shader
33             {
34             public :
35                 /*!
36                     @brief シェーダーバイナリ設定を初期化するコンストラクタです。
37                 */
38                 Shader( void );
39 
40                 /*!
41                     @brief シェーダーバイナリをもとに、コマンド生成用の情報をセットアップします。
42                            ※バイナリのコピーはしないので、コマンド生成までバイナリは破棄しないで下さい。
43                            指定されたインデクスが有効なシェーダーでない場合、ASSERTです。
44                            指定するインデクスは、ctr_VertexShaderLinker32.exeでのリンク時に生成される
45                            MAPファイルを参考にして下さい。
46                            geo_shader_indexについては、-1を指定することでジオメトリシェーダーを無効化することが出来ます。
47 
48                     @param [in] shader_binary ctr_VertexShaderLinker32.exeでリンクされたシェーダーバイナリです。
49                     @param [in] vtx_shader_index 有効にする頂点シェーダーのインデクスです。
50                     @param [in] geo_shader_index 有効にするジオメトリシェーダーシェーダーのインデクスです。
51                 */
52                 void SetupBinary( const void* shader_binary, const int vtx_shader_index, const int geo_shader_index );
53 
54             public :
55                 /*!
56                     @brief 頂点シェーダーにブールレジスタの値を設定します。
57 
58                     @param [in] symbol   頂点シェーダのブール型のシンボルです。
59                     @param [in] isEnable 有効にするときは true、そうでないときは false にします。
60                  */
SetUniformBool(const BindSymbolVSBool & symbol,bool isEnable)61                 void SetUniformBool( const BindSymbolVSBool& symbol, bool isEnable )
62                 {
63                     m_VtxShaderBoolMapUniform = ( m_VtxShaderBoolMapUniform & ~( 1 << symbol.start ) ) | ( ( isEnable ? 1 : 0 ) << symbol.start );
64                 }
65 
66                 /*!
67                     @brief ジオメトリシェーダーにブールレジスタの値を設定します。
68 
69                     @param [in] symbol   ジオメトリシェーダのブール型のシンボルです。
70                     @param [in] isEnable 有効にするときは true、そうでないときは false にします。
71                  */
SetUniformBool(const BindSymbolGSBool & symbol,bool isEnable)72                 void SetUniformBool( const BindSymbolGSBool& symbol, bool isEnable )
73                 {
74                     m_GeoShaderBoolMapUniform = ( m_GeoShaderBoolMapUniform & ~( 1 << symbol.start ) ) | ( ( isEnable ? 1 : 0 ) << symbol.start );
75                 }
76 
77                 /*!
78                     @brief 描画モードの設定を行います。
79                            デフォルトは PICA_DATA_DRAW_TRIANGLESです。
80 
81                     @param[in] draw_mode 設定する描画モード
82                  */
SetDrawMode(const PicaDataDrawMode draw_mode)83                 void SetDrawMode( const PicaDataDrawMode draw_mode )
84                 {
85                     m_DrawMode = draw_mode;
86                 }
87 
88             public :
89                 /*!
90                     @brief シェーダー切り替えに必要な全てのコマンドを生成します。
91                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
92 
93                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
94 
95                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
96                  */
97                 bit32* MakeFullCommand( bit32* command ) const;
98 
99                 /*!
100                     @brief 無効化するコマンドを生成します。
101 
102                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
103 
104                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
105                  */
106                 static bit32* MakeDisableCommand( bit32* command );
107 
108             public :
109                 /*!
110                     @brief 頂点シェーダーのブールレジスタへ値を設定するコマンドを生成します。
111                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
112 
113                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
114 
115                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
116                  */
MakeVtxBoolMapCommand(bit32 * command)117                 bit32* MakeVtxBoolMapCommand( bit32* command ) const
118                 {
119                     *command++ = 0x7fff0000 | m_VtxShaderBoolMapUniform;
120                     *command++ = PICA_CMD_HEADER_SINGLE( PICA_REG_VS_BOOL ); // 0x2b0
121                     return command;
122                 }
123 
124                 /*!
125                     @brief ジオメトリシェーダーのブールレジスタへ値を設定するコマンドを生成します。
126                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
127 
128                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
129                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
130                  */
MakeGeoBoolMapCommand(bit32 * command)131                 bit32* MakeGeoBoolMapCommand( bit32* command ) const
132                 {
133                     *command++ = 0x7fff0000 | m_GeoShaderBoolMapUniform;
134                     *command++ = PICA_CMD_HEADER_SINGLE( PICA_REG_GS_BOOL ); // 0x280
135                     return command;
136                 }
137 
138                 /*!
139                     @brief ジオメトリシェーダー使用設定コマンドを生成します。
140                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
141                            ジオメトリシェーダーの有効/無効を設定するときに必要なダミーコマンド、
142                            有効、無効の設定コマンドなどが含まれます。
143                     @param[in] command 描画コマンドの書き込み先の先頭アドレスです。
144                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
145                  */
146                 bit32* MakePrepareCommand( bit32* command ) const;
147 
148                 /*!
149                     @brief 頂点シェーダーについて、プログラムロードのコマンドを生成します。
150                            エントリポイントのアドレス、シェーダーバイナリ内の実行コード部分などが含まれます。
151                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
152 
153                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
154                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
155                  */
156                 bit32* MakeVtxProgramCommand( bit32* command ) const;
157 
158                 /*!
159                     @brief ジオメトリシェーダーについて、プログラムロードのコマンドを生成します。
160                            エントリポイントのアドレス、シェーダーバイナリ内の実行コード部分などが含まれます。
161                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
162 
163                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
164 
165                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
166                  */
167                 bit32* MakeGeoProgramCommand( bit32* command ) const;
168 
169                 /*!
170                     @brief 頂点シェーダーについて、Swizzleパターンロードのコマンドを生成します。
171                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
172 
173                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
174 
175                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
176                  */
MakeVtxSwizzleCommand(bit32 * command)177                 bit32* MakeVtxSwizzleCommand( bit32* command ) const
178                 {
179                     *command++ = 0;
180                     *command++ = PICA_CMD_HEADER_SINGLE( PICA_REG_VS_PROG_SWIZZLE_ADDR );
181                     return MakeLoadCommand_( command, PICA_REG_VS_PROG_SWIZZLE_DATA0, m_Swizzle, m_SwizzleCount );
182                 }
183 
184                 /*!
185                     @brief ジオメトリシェーダーについて、Swizzleパターンロードのコマンド生成します。
186                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
187 
188                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
189 
190                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
191                  */
MakeGeoSwizzleCommand(bit32 * command)192                 bit32* MakeGeoSwizzleCommand( bit32* command ) const
193                 {
194                     *command++ = 0;
195                     *command++ = PICA_CMD_HEADER_SINGLE( PICA_REG_GS_PROG_SWIZZLE_ADDR );
196                     return MakeLoadCommand_( command, PICA_REG_GS_PROG_SWIZZLE_DATA0, m_Swizzle, m_SwizzleCount );
197                 }
198 
199                 /*!
200                     @brief 頂点シェーダーについて、定数レジスタをUniformするコマンド生成をします。
201                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
202 
203                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
204 
205                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
206                  */
MakeVtxConstRgCommand(bit32 * command)207                 bit32* MakeVtxConstRgCommand( bit32* command ) const
208                 {
209                     std::memcpy( command, m_CmdCacheVtxConst, m_CmdCacheVtxConstNum * sizeof( bit32 ) );
210                     return command + m_CmdCacheVtxConstNum;
211                 }
212 
213                 /*!
214                     @brief ジオメトリシェーダーについて、定数レジスタのコマンドを生成します。
215                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
216 
217                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
218 
219                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
220                  */
MakeGeoConstRgCommand(bit32 * command)221                 bit32* MakeGeoConstRgCommand( bit32* command ) const
222                 {
223                     std::memcpy( command, m_CmdCacheGeoConst, m_CmdCacheGeoConstNum * sizeof( bit32 ) );
224                     return command + m_CmdCacheGeoConstNum;
225                 }
226 
227                 /*!
228                     @brief シェーダーの出力属性を設定するコマンド生成します。
229                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
230 
231                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
232 
233                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
234                  */
MakeOutAttrCommand(bit32 * command)235                 bit32* MakeOutAttrCommand( bit32* command ) const
236                 {
237                     // ジオメトリシェーダのモードと描画モードが一致していなかったら、ASSERT
238                     NN_GR_ASSERT( ( ! IsEnableGeoShader() ) || ( m_DrawMode == PICA_DATA_DRAW_GEOMETRY_PRIMITIVE ) );
239 
240                     // 三角形の描画モードに応じて、コマンドを生成
241                     // 0x229 [8:8]
242                     bit32 value_229 = 0x0100;
243                     if ( m_DrawMode != PICA_DATA_DRAW_TRIANGLES )
244                     {
245                         value_229 = 0x0;
246                     }
247                     *command++ = value_229;
248                     *command++ = PICA_CMD_HEADER_SINGLE_BE( PICA_REG_DRAW_MODE0, 0x2 );
249 
250                     // 0x253 [8:8]
251                     bit32 value_253 = 0x0100;
252                     if ( m_DrawMode != PICA_DATA_DRAW_TRIANGLES )
253                     {
254                         value_253 = 0x0;
255                     }
256                     *command++ = value_253;
257                     *command++ = PICA_CMD_HEADER_SINGLE_BE( PICA_REG_DRAW_MODE1, 0x2 );
258 
259                     std::memcpy( command, m_CmdCacheOutAttr, m_CmdCacheOutAttrNum * sizeof( bit32 ) );
260                     return command + m_CmdCacheOutAttrNum;
261                 }
262 
263             public : // バイナリからの情報を取得
264                 /*!
265                    @brief シンボル名から、シンボル情報への変換をおこないます。
266                          「シェーダーコード内で#pragma bind_symbol() で設定したシンボル名」を引数に与えることで、
267                           シンボルの型情報とバインドされているレジスタ番号が取得できます。
268                           SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
269 
270                  * @param[out] symbol             シンボル名によって検索されたシンボルです。
271                  * @param[in]  name               検索したいシンボル名です。
272 
273                  * @return     検索対象が見つかった場合、trueを返します。
274                  */
275                 bool SearchBindSymbol(
276                     BindSymbol*      symbol,
277                     const char*      name ) const;
278 
279                  /*!
280                     @brief 指定された型のシンボルについて、いくつあるか検索します。
281                            シェーダーコード内で#pragma bind_symbol() されているもののうち、
282                            指定された型のものがいくつあるか検索します。
283                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
284 
285                     @param[in]  shader_type 検索したいシェーダーの種類です。
286                     @param[in]  symbol_type 検索したい型です。
287 
288                     @return     見つかったシンボルの数を返します。
289                  */
290                 u32  SearchBindSymbolNum(
291                     const BindSymbol::ShaderType shader_type,
292                     const BindSymbol::SymbolType symbol_type ) const;
293 
294                 /*!
295                    @brief 指定された型のシンボルについて、インデックス(0からシンボル数-1)からシンボル情報への変換を行います。
296                           シェーダーコード内で、#pragma bind_symbol() されている順番で、
297                           0,1,...シンボル数-1というインデックスが振られます。
298                           指定されたインデックスを検索し、見つかったシンボルの情報を取得できます。
299                           SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
300 
301                    @param[out] symbol             インデックスに対応するシンボルです。
302                    @param[in]  symbol_index       検索したいインデックスです。
303 
304                    @return     検索対象が見つかった場合、trueを返します。
305                  */
306                 bool SearchBindSymbol(
307                     BindSymbol*      symbol,
308                     const u8         symbol_index ) const;
309 
310             public : // 設定の取得
311                 /*!
312                     @brief シェーダーバイナリに含まれる実行可能シェーダーの数を取得します。
313 
314                     @return 実行可能シェーダーの数です。
315                  */
GetShaderNum()316                 u8 GetShaderNum()           const
317                 {
318                     return m_ExeImageInfoNum;
319                 }
320 
321                 /*!
322                     @brief  ジオメトリシェーダーが有効かどうかを取得します。
323 
324                     @return EnableGeoShader()によって有効化されていれば、true です。
325                     @see    EnableGeoShader()、DisableGeoShader()
326                  */
IsEnableGeoShader()327                 bool IsEnableGeoShader()    const
328                 {
329                     return ( 0 <= GetGeoShaderIndex() );
330                 }
331 
332                 /*!
333                     @brief  有効になっている頂点シェーダーのインデックスを取得します。
334 
335                     @return EnableVtxShader()によって有効化されているシェーダーインデックスです。
336                     @see    EnableVtxShader()
337                  */
338 
GetVtxShaderIndex()339                 int GetVtxShaderIndex()     const
340                 {
341                     return m_VtxShaderIndex;
342                 }
343 
344                 /*!
345                     @brief  有効になっている有効になっているジオメトリシェーダーのインデックスを取得します。
346 
347                     @return EnableGeoShader()によって有効化されているシェーダーインデックス
348                     @see    EnableGeoShader()、DisableGeoShader()
349                  */
GetGeoShaderIndex()350                 int GetGeoShaderIndex()     const
351                 {
352                     return m_GeoShaderIndex;
353                 }
354 
355                 /*!
356                     @brief 頂点シェーダーに設定されるブールマップを取得します。
357 
358                     @return ブールマップです。
359                  */
GetVtxShaderBoolMapUniform()360                 bit32 GetVtxShaderBoolMapUniform() const
361                 {
362                     return m_VtxShaderBoolMapUniform;
363                 }
364 
365                 /*!
366                     @brief ジオメトリシェーダーに設定されるブールマップを取得します。
367 
368                     @return ブールマップです。
369                  */
GetGeoShaderBoolMap()370                 bit32 GetGeoShaderBoolMap()    const
371                 {
372                     return m_GeoShaderBoolMapUniform;
373                 }
374 
375             protected :
376                 /*!
377                     @brief クラス定数です。
378                  */
379                 enum
380                 {
381                     //! 実行可能シェーダーの最大数です。
382                     EXE_IMAGE_MAX = 32,
383 
384                     //! Swizzleパターンの最大数です。
385                     SWIZZLE_PATTERN_MAX = 128,
386 
387                     //! 0x251に設定するダミーコマンドの数です。
388                     DUMMY_DATA_NUM_251 = 10,
389 
390                     //! 0x200に設定するダミーコマンドの数です。
391                     DUMMY_DATA_NUM_200 = 30,
392 
393                     //! ダミーコマンドなど、パディングにつかう値です。
394                     PADDING_DATA = 0xead0fead,
395 
396                     //! 出力属性のコマンドの最大数です。
397                     OUT_ATTR_COMMAND_MAX = 48,
398 
399                     //! 定数レジスタコマンドの最大数です。
400                     CONST_REG_COMMAND_MAX = 96 * 6 + 5 * 2
401                 };
402 
403             protected :
404                 /*!
405                     @brief ジオメトリシェーダーの有効/無効を設定するときに必要なダミーコマンド、
406                            有効、無効の設定コマンドを生成します。
407                     @param[in] command           描画コマンドの書き込み先の先頭アドレスです。
408                     @param[in] isEnableGeoShader ジオメトリシェーダモードにするときに true にします。
409                     @param[in] drawMode          描画モードです。
410 
411                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
412                  */
413                 static bit32* MakeShaderModeCommand_( bit32* command,
414                                                       const bool isEnableGeoShader,
415                                                       const PicaDataDrawMode drawMode );
416 
417                 /*!
418                     @brief 定数レジスタをUniformするコマンド生成します。
419                            SetupBinaryでシェーダーバイナリを設定した後に呼ぶようにして下さい。
420 
421                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
422                     @param[in] is_geometry_shader ジオメトリシェーダーについてのコマンドを生成したい場合、trueを設定します。
423                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
424                  */
425 
426                 bit32* MakeConstRgCommand_(
427                     bit32* command,
428                     const bool is_geometry_shader = false );
429 
430                 /*!
431                     @brief シェーダーの出力属性を設定するコマンド生成します。
432 
433                     @param[in] command            描画コマンドの書き込み先の先頭アドレスです。
434                     @param[in] is_geometry_shader ジオメトリシェーダーについてのコマンドを生成したい場合、trueを設定します。
435 
436                     @return    書き込まれた描画コマンドの終端の次のアドレスを返します。
437                  */
438                 bit32* MakeOutAttrCommand_( bit32* command );
439 
440                 /*!
441                     @brief ひとまとまりのデータを指定されたレジスタに送信するコマンドを生成します。SEQ、BEには非対応です。
442 
443                     @param   command        [in] コマンドを追加するバッファのアドレスです。
444                     @param   load_reg       [in]  送信するレジスタです。
445                     @param   src_buffer_ptr [in]  送信したいデータのバッファの先頭アドレスです。
446                     @param   src_data_num   [in]  送信したいデータの数です。
447 
448                     @return                       書き込まれた描画コマンドの終端の次のアドレスを返します。
449                  */
450                 bit32* MakeLoadCommand_( bit32* command,
451                                        const bit32  load_reg,
452                                        const u32* src_buffer_ptr,
453                                        const u32  src_size ) const;
454 
455                 /*!
456                     @brief 指定されたレジスタにダミーコマンドを送信するコマンドを生成します。
457 
458                     @param   command        [in] コマンドを追加するバッファのアドレス
459                     @param   load_reg       [in]  送信するレジスタ
460                     @param   data_num       [in]  送信したいデータの数
461 
462                     @return                       書き込まれた描画コマンドの終端の次のアドレスを返します。
463                  */
464                 static bit32* MakeDummyCommand_( bit32* command,
465                                                  const bit32 load_reg,
466                                                  const u32 data_num );
467 
468                 /*!
469                     @brief シェーダーバイナリ内の実行コード部分をあらわす構造体です。
470                  */
471                 struct ExeImageInfo
472                 {
473                     //! 型は bit32 です。
474                     bit32 signature;
475                     //! 型は u16 です。
476                     u16 version;
477                     //! 型は u8 です。
478                     u8  isGeoShader;
479                     //! 型は u8 です。
480                     u8  outputMaps;
481                     //! 型は uptr です。
482                     uptr mainAddress;
483                     //! 型は uptr です。
484                     uptr endAddress;
485                     //! 型は bit32 です。
486                     bit32 maskInputOutput;
487                     //! 型は u8 です。
488                     u8  gsDataMode;
489                     //! 型は u8 です。
490                     u8  gsVertexStartIndex;
491                     //! 型は u8 です。
492                     u8  gsPatchSize;
493                     //! 型は u8 です。
494                     u8  gsVertexNum;
495                     //! 型は u32 です。
496                     u32 setupOffset;
497                     //! 型は u32 です。
498                     u32 setupCount;
499                     //! 型は u32 です。
500                     u32 labelOffset;
501                     //! 型は u32 です。
502                     u32 labelCount;
503                     //! 型は u32 です。
504                     u32 outMapOffset;
505                     //! 型は u32 です。
506                     u32 outMapCount;
507                     //! 型は u32 です。
508                     u32 bindSymbolOffset;
509                     //! 型は u32 です。
510                     u32 bindSymbolCount;
511                     //! 型は u32 です。
512                     u32 stringOffset;
513                     //! 型は u32 です。
514                     u32 stringCount;
515                 };
516 
517                 /*!
518                     @brief 有効になっている頂点シェーダーのインデックスです。型は int です。
519                 */
520                 int m_VtxShaderIndex;
521 
522                 /*!
523                     @brief 有効になっているジオメトリシェーダーのインデックスです。型は int です。
524                 */
525                 int m_GeoShaderIndex;
526 
527                 /*!
528                     @brief シェーダーバイナリ内の、実行可能シェーダーの数です。
529                 */
530                 u8 m_ExeImageInfoNum;
531                 NN_PADDING3;
532 
533                 /*!
534                     @brief シェーダーバイナリ内の、実行可能シェーダーの情報へのポインタを保持します。型は @ref ExeImageInfo[] です。
535                 */
536                 const ExeImageInfo* m_ExeImageInfo[ EXE_IMAGE_MAX ];
537 
538                 /*!
539                     @brief シェーダーバイナリ内の、シェーダーの実行コード部分へのポインタです。型は bit32* です。
540                 */
541                 const bit32* m_Instruction;
542 
543                 /*!
544                     @brief シェーダーバイナリ内の、シェーダーの実行コード部分のサイズです。型は u32 です。
545                 */
546                 u32 m_InstructionCount;
547 
548                 /*!
549                     @brief Swizzleパターンをコマンド形式に表現したものです。型は bit32[] です。
550                 */
551                 bit32 m_Swizzle[ SWIZZLE_PATTERN_MAX ];
552 
553                 /*!
554                     @brief Swizzleパターンの数です。型は u32 です。
555                 */
556                 u32 m_SwizzleCount;
557 
558                 /*!
559                     @brief 描画モードをあらわします。デフォルトはPICA_DATA_DRAW_TRIANGLESです。型は @ref PicaDataDrawMode です。
560                 */
561                 PicaDataDrawMode m_DrawMode;
562                 NN_PADDING3;
563 
564                 /*!
565                     @brief ユニフォームされる頂点シェーダーのブールマップです。型は bit32 です。
566                 */
567                 bit32 m_VtxShaderBoolMapUniform;
568 
569                 /*!
570                     @brief ユニフォームされるジオメトリシェーダーのブールマップです。型は bit32 です。
571                 */
572                 bit32 m_GeoShaderBoolMapUniform;
573 
574                 /*!
575                     @brief 出力属性のコマンドキャッシュです。型は bit32[] です。
576                 */
577                 bit32 m_CmdCacheOutAttr[ OUT_ATTR_COMMAND_MAX ];
578 
579                 /*!
580                     @brief 出力属性のコマンド数です。型は u32 です。
581                 */
582                 u32 m_CmdCacheOutAttrNum;
583 
584                 /*!
585                     @brief 頂点シェーダーの定数レジスタのコマンドキャッシュです。型は bit32[] です。
586                 */
587                 bit32 m_CmdCacheVtxConst[ CONST_REG_COMMAND_MAX ];
588 
589                 /*!
590                     @brief 頂点シェーダーの定数レジスタのコマンド数です。型は u32 です。
591                 */
592                 u32 m_CmdCacheVtxConstNum;
593 
594                 /*!
595                     @brief ジオメトリシェーダーの定数レジスタのコマンドキャッシュです。型は bit32[] です。
596                 */
597                 bit32 m_CmdCacheGeoConst[ CONST_REG_COMMAND_MAX ];
598 
599                 /*!
600                     @brief ジオメトリシェーダーの定数レジスタのコマンド数です。型は u32 です。
601                 */
602                 u32 m_CmdCacheGeoConstNum;
603             };
604 
605         } // namespace CTR
606     } // namespace gr
607 } // namespace nn
608 
609 #endif // NN_GR_SHADER_H_
610