1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gr_BindSymbol.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: 26168 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_GR_BIND_SYMBOL_H_ 17 #define NN_GR_BIND_SYMBOL_H_ 18 19 #include <nn/gr/CTR/gr_Prefix.h> 20 #include <nn/gr/CTR/gr_Utility.h> 21 22 namespace nn 23 { 24 namespace gr 25 { 26 namespace CTR 27 { 28 29 /*! 30 @brief 各シンボルについての情報をやり取りするためのクラスです。 31 */ 32 class BindSymbol 33 { 34 public : 35 /*! 36 @brief シンボルの型情報を表します。 37 */ 38 enum SymbolType 39 { 40 //! 無効な型です。 41 SYMBOL_TYPE_INVALID, 42 //! シェーダーへの入力を表します。v0 ... v15 に対応します。 43 SYMBOL_TYPE_INPUT, 44 //! 浮動小数レジスタです。 c0 ... c95に対応します。 45 SYMBOL_TYPE_FLOAT, 46 //! 整数レジスタです。i0 ... i3に対応します。 47 SYMBOL_TYPE_INTEGER, 48 //! ブールレジスタです。b0 ... b15に対応します。 49 SYMBOL_TYPE_BOOL 50 }; 51 52 /*! 53 @brief シェーダの種類を表します。 54 */ 55 enum ShaderType 56 { 57 //! 頂点シェーダーを表します。 58 SHADER_TYPE_VERTEX, 59 //! ジオメトリシェーダーを表します。 60 SHADER_TYPE_GEOMETRY 61 }; 62 63 /*! 64 @brief バインドされているシェーダーの種類です。 65 型は nn::gr::CTR::BindSymbol::ShaderType です。 66 */ 67 const ShaderType shaderType; 68 69 /*! 70 @brief シンボルの型情報です。 71 型は nn::gr::CTR::BindSymbol::SymbolType です。 72 */ 73 const SymbolType symbolType; 74 75 /*! 76 @brief バインドされている先頭のレジスタ番号です。 77 型は u8 です。 78 */ 79 u8 start; 80 81 /*! 82 @brief バインドされている最終のレジスタ番号です。 83 型は u8 です。 84 */ 85 u8 end; 86 87 /*! 88 @brief バインド名が格納されている、シェーダーバイナリデータ内のアドレス指すポインタです。 89 型は const char* です。 90 */ 91 const char* name; 92 93 protected : 94 /*! 95 @brief コンストラクタです。直接生成することを禁止します。 96 97 @param[in] shader_type シェーダの種類です。 98 @param[in] symbol_type シンボルの型情報です。 99 */ BindSymbol(const ShaderType shader_type,const SymbolType symbol_type)100 explicit BindSymbol( const ShaderType shader_type, const SymbolType symbol_type ) 101 : shaderType( shader_type ), 102 symbolType( symbol_type ), 103 start( 0xff ), 104 end( 0xff ), 105 name( NULL ) 106 { 107 } 108 }; 109 110 /*! 111 @brief 頂点シェーダーの入力レジスタシンボルについての情報をやり取りするためのクラスです。 112 */ 113 class BindSymbolVSInput : public BindSymbol 114 { 115 public : 116 /*! 117 @brief コンストラクタです。 118 */ BindSymbolVSInput()119 explicit BindSymbolVSInput() : 120 BindSymbol( SHADER_TYPE_VERTEX, SYMBOL_TYPE_INPUT ) 121 { 122 } 123 }; 124 125 /*! 126 @brief 頂点シェーダーの浮動小数レジスタシンボルについての情報をやり取りするためのクラスです。 127 */ 128 class BindSymbolVSFloat : public BindSymbol 129 { 130 public : 131 /*! 132 @brief コンストラクタです。 133 */ BindSymbolVSFloat()134 explicit BindSymbolVSFloat() : 135 BindSymbol( SHADER_TYPE_VERTEX, SYMBOL_TYPE_FLOAT ) 136 { 137 } 138 139 /*! 140 @brief 34行列を頂点シェーダのユニフォームにセットするコマンドを生成します。 141 142 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 143 @param[in] mtx34 34行列です。 144 145 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 146 */ MakeUniformCommand(u32 * command,const nn::math::MTX34 & mtx34)147 u32* MakeUniformCommand( u32* command, const nn::math::MTX34& mtx34 ) const 148 { 149 return MakeUniformCommandVS( command, start, mtx34 ); 150 } 151 152 /*! 153 @brief 44行列を頂点シェーダのユニフォームにセットするコマンドを生成します。 154 155 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 156 @param[in] mtx44 44行列です。 157 158 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 159 */ MakeUniformCommand(u32 * command,const nn::math::MTX44 & mtx44)160 u32* MakeUniformCommand( u32* command, const nn::math::MTX44& mtx44 ) const 161 { 162 return MakeUniformCommandVS( command, start, mtx44 ); 163 } 164 165 /*! 166 @brief 4次元のベクトルを頂点シェーダのユニフォームにセットするコマンドを生成します。 167 168 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 169 @param[in] vec4 4次元のベクトルです。 170 171 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 172 */ MakeUniformCommand(u32 * command,const nn::math::VEC4 & vec4)173 u32* MakeUniformCommand( u32* command, const nn::math::VEC4& vec4 ) const 174 { 175 return MakeUniformCommandVS( command, start, vec4 ); 176 } 177 178 /*! 179 @brief 4次元のベクトルの配列を頂点シェーダのユニフォームにセットするコマンドを生成します. 180 181 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 182 183 @param[in] vec4[] 設定する4次元ベクトルの配列です。 184 @param[in] num 設定するベクトルの数です。( 2以上を設定するようにして下さい。) 185 186 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 187 */ MakeUniformCommand(u32 * command,const nn::math::VEC4 vec4[],const int num)188 u32* MakeUniformCommand( u32* command, const nn::math::VEC4 vec4[], const int num ) const 189 { 190 return MakeUniformCommandVS( command, start, vec4, num ); 191 } 192 }; 193 194 /*! 195 @brief 整数レジスタシンボルについての情報をやり取りするためのクラスです。 196 */ 197 class BindSymbolVSInteger : public BindSymbol 198 { 199 public : BindSymbolVSInteger()200 explicit BindSymbolVSInteger() : 201 BindSymbol( SHADER_TYPE_VERTEX, SYMBOL_TYPE_INTEGER ) 202 { 203 } 204 205 /*! 206 @brief 整数を頂点シェーダのユニフォームにセットするコマンドを生成します。 207 208 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 209 @param[in] x x座標の値です。 210 @param[in] y y座標の値です。 211 @param[in] z z座標の値です。 212 213 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 214 */ MakeUniformCommand(u32 * command,u8 x,u8 y,u8 z)215 u32* MakeUniformCommand( u32* command, u8 x, u8 y, u8 z ) const 216 { 217 return MakeUniformCommandVS( command, start, x, y, z ); 218 } 219 }; 220 221 /*! 222 @brief ブールレジスタシンボルについての情報をやり取りするためのクラスです。 223 */ 224 class BindSymbolVSBool : public BindSymbol 225 { 226 public : 227 /*! 228 @brief コンストラクタです。 229 */ BindSymbolVSBool(void)230 explicit BindSymbolVSBool( void ) : 231 BindSymbol( SHADER_TYPE_VERTEX, SYMBOL_TYPE_BOOL ) 232 { 233 } 234 }; 235 236 /*! 237 @brief ジオメトリシェーダーの浮動小数レジスタシンボルについての情報をやり取りするためのクラスです。 238 */ 239 class BindSymbolGSFloat : public BindSymbol 240 { 241 public : 242 /*! 243 @brief コンストラクタです。 244 */ BindSymbolGSFloat(void)245 explicit BindSymbolGSFloat( void ) : 246 BindSymbol( SHADER_TYPE_GEOMETRY, SYMBOL_TYPE_FLOAT ) 247 { 248 } 249 250 /*! 251 @brief 34行列をジオメトリシェーダのユニフォームにセットするコマンドを生成します。 252 253 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 254 @param[in] mtx34 34行列です。 255 256 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 257 */ MakeUniformCommand(u32 * command,const nn::math::MTX34 & mtx34)258 u32* MakeUniformCommand( u32* command, const nn::math::MTX34& mtx34 ) const 259 { 260 return MakeUniformCommandGS( command, start, mtx34 ); 261 } 262 263 /*! 264 @brief 44行列をジオメトリシェーダのユニフォームにセットするコマンドを生成します。 265 266 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 267 @param[in] mtx44 44行列です。 268 269 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 270 */ MakeUniformCommand(u32 * command,const nn::math::MTX44 & mtx44)271 u32* MakeUniformCommand( u32* command, const nn::math::MTX44& mtx44 ) const 272 { 273 return MakeUniformCommandGS( command, start, mtx44 ); 274 } 275 276 /*! 277 @brief ベクトルをジオメトリシェーダのユニフォームにセットするコマンドを生成します。 278 279 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 280 @param[in] vec4 4次元のベクトルです。 281 282 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 283 */ MakeUniformCommand(u32 * command,const nn::math::VEC4 & vec4)284 u32* MakeUniformCommand( u32* command, const nn::math::VEC4& vec4 ) const 285 { 286 return MakeUniformCommandGS( command, start, vec4 ); 287 } 288 289 /*! 290 @brief 4次元ベクトルの配列をジオメトリシェーダのユニフォームにセットするコマンドを生成します。 291 292 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 293 @param[in] vec4[] 設定する値の配列です。 294 @param[in] num 設定するベクトルの数です。( 2以上を設定して下さい。) 295 296 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 297 */ MakeUniformCommand(u32 * command,const nn::math::VEC4 vec4[],const int num)298 u32* MakeUniformCommand( u32* command, const nn::math::VEC4 vec4[], const int num ) const 299 { 300 return MakeUniformCommandGS( command, start, vec4, num ); 301 } 302 303 /*! 304 @brief 整数をジオメトリシェーダのユニフォームにセットするコマンドを生成します。 305 306 @param[in] command 描画コマンドの書き込み先の先頭アドレスです。 307 @param[in] x x座標の値です。 308 @param[in] y y座標の値です。 309 @param[in] z z座標の値です。 310 311 @return 書き込まれた描画コマンドの終端の次のアドレスを返します。 312 */ MakeUniformCommand(u32 * command,u8 x,u8 y,u8 z)313 u32* MakeUniformCommand( u32* command, u8 x, u8 y, u8 z ) const 314 { 315 return MakeUniformCommandGS( command, start, x, y, z ); 316 } 317 }; 318 319 /*! 320 @brief ブールレジスタシンボルについての情報をやり取りするためのクラスです。 321 */ 322 class BindSymbolGSBool : public BindSymbol 323 { 324 public : 325 /*! 326 @brief コンストラクタです。 327 */ BindSymbolGSBool()328 explicit BindSymbolGSBool() : 329 BindSymbol( SHADER_TYPE_GEOMETRY, SYMBOL_TYPE_BOOL ) 330 { 331 } 332 }; 333 334 } // namespace CTR 335 } // namespace gr 336 } // namespace nn 337 338 #endif // NN_GR_BIND_SYMBOL_H_ 339