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