1// --------------------------------------------------------------------------- 2// Project: NintendoWare 3// File: gfx_ParticleVShader.vsh 4// 5// Copyright (C)2009-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// $Revision: 15928 $ 14// --------------------------------------------------------------------------- 15#include "VertexShader.h" 16 17// Input registers map 18// �p�[�e�B�N���p�̐ݒ�ł� 19#define aTranslate v0 20#define aScale v1 21#define aRotate v2 22#define aColor v3 23#define aAlpha v4 24#define aTextureTranslate v5 25#define aTextureScale v6 26#define aTextureRotate v7 27#define aScaleExt v8 28 29// ���O�͎g��Ȃ��̂ŁA�ԈႦ���N����Ȃ��悤�ɒP���ȋK���ɂ��Ă��܂��B 30#pragma bind_symbol(aInput0.xyz, v0, v0) // translate 31#pragma bind_symbol(aInput1.xyz, v1, v1) // rotate 32#pragma bind_symbol(aInput2.xyz, v2, v2) // scale 33#pragma bind_symbol(aInput3.xyz, v3, v3) // color 34#pragma bind_symbol(aInput4.x, v4, v4) // alpha 35#pragma bind_symbol(aInput5.xy, v5, v5) // textureTranslate 36#pragma bind_symbol(aInput6.xy, v6, v6) // textureScale 37#pragma bind_symbol(aInput7.x, v7, v7) // textureRotate 38#pragma bind_symbol(aInput8.xyz, v8, v8) // scaleExt 39 40#pragma output_map(position, o0) 41#pragma output_map(quaternion, o1) 42#pragma output_map(view, o2) 43#pragma output_map(color, o3) 44#pragma output_map (generic, o4) 45#pragma output_map (generic, o5) 46#pragma output_map (generic, o6) 47#pragma output_map (generic, o7) 48 49#pragma bind_symbol(WrldMtx, c0, c2) 50#pragma bind_symbol(NormMtx, c3, c5) 51#pragma bind_symbol(PosOffs.xyz, c6, c6) 52#pragma bind_symbol(IrScale, c7, c9) 53#pragma bind_symbol(TexcMap.xyz, c10, c10) 54#pragma bind_symbol(TexMtx0, c11, c13) 55#pragma bind_symbol(TexMtx1, c14, c16) 56#pragma bind_symbol(TexMtx2, c17, c19) 57#pragma bind_symbol(MatAmbi, c20, c20) 58#pragma bind_symbol(MatDiff, c21, c21) 59#pragma bind_symbol(HslGCol, c22, c22) 60#pragma bind_symbol(HslSCol, c23, c23) 61#pragma bind_symbol(HslSDir, c24, c24) 62#pragma bind_symbol(UnivReg, c25, c80) 63 64#pragma bind_symbol(ProjMtx, c86, c89) 65#pragma bind_symbol(ViewMtx, c90, c92) 66 67#define uModelView c25 // view . model 68#define uInvModelView c28 // Inv(view . model) 69#define uInvModel c31 // Inv(model) 70#define uModel c34 // model 71#define uOffset c37 72#define uScaleOffset c38 73#define uRotateOffset c39 74 75#pragma bind_symbol(IsSmoSk, b1, b1) 76#pragma bind_symbol(IsRgdSk, b2, b2) 77#pragma bind_symbol(IsUniSc, b3, b3) 78#pragma bind_symbol(UseNorM, b4, b4) 79#pragma bind_symbol(IsHemiL, b5, b5) 80#pragma bind_symbol(IsHemiO, b6, b6) 81#pragma bind_symbol(IsVertA, b7, b7) 82#pragma bind_symbol(IsBoneW, b8, b8) 83#pragma bind_symbol(UvMap0, b9, b9) 84#pragma bind_symbol(UvMap1, b10, b10) 85#pragma bind_symbol(UvMap2, b11, b11) 86#pragma bind_symbol(IsVertL, b12, b12) 87#pragma bind_symbol(IsText1, b13, b13) 88#pragma bind_symbol(IsText2, b14, b14) 89#pragma bind_symbol(IsQuate, b15, b15) 90 91#define shapeType0 b1 // ���q��XYZ�̉�]�s��̐��� 92#define shapeType1 b2 93#define shapeType2 b3 94#define shapeType3 b4 95 96#define CONST_1__2PI c84.x 97 98#define sincos_table c81 99def c81, 64.81226000634280664816344, -41.1989059448242187500, -19.733086445622068119813801, 6.27851724624633789062 100def c82, 57.38797321366921352108833, -72.0021514892578125000, -84.572341395128292218841051, 80.3578109741210937500 101def c83, 3.765142073243151942892024, -6.68470811843872070312, -21.659571217007130946603447, 33.2480163574218750000 102def c84, 0.1591549430918, 6.747892669487678532020627, 0, 0 103 104main: 105 106 // �������炵�炭�|���S���̊��x�N�g���̌v�Z 107 108#define xvector r6 109#define yvector r7 110#define zvector r8 111#define mat0 r9 112#define mat1 r10 113#define mat2 r11 114#define in_rotate r12 115#define in_scale r13 116 117 mov TEMP0, aRotate 118 add TEMP0, TEMP0, uRotateOffset 119 mul TEMP0, TEMP0, CONST_1__2PI 120 flr TEMP1, TEMP0 121 add in_rotate, TEMP0, -TEMP1 122 123 mov TEMP0, aScale 124 mul TEMP0, TEMP0, aScaleExt 125 mul in_scale, TEMP0, uScaleOffset 126 127 ifb shapeType0 128 // ��]�s�� 129 mov mat0, CONST_0 130 mov mat1, CONST_0 131 mov mat2, CONST_0 132 133 mul TEMP3, in_rotate, in_rotate 134 135 mov TEMP1, sincos_table[2] 136 mov TEMP2, sincos_table[1] 137 mov TEMP5, sincos_table[0] 138 // sincos x 139 mad TEMP0.xy, TEMP3.x, TEMP1.xy, TEMP1.zw 140 mad TEMP0.xy, TEMP3.x, TEMP0.xy, TEMP2.xy 141 mad TEMP0.xy, TEMP3.x, TEMP0.xy, TEMP2.zw 142 mad TEMP0.xy, TEMP3.x, TEMP0.xy, TEMP5.xy 143 mad TEMP0.xy, TEMP3.x, TEMP0.xy, TEMP5.zw 144 mul TEMP0.y, TEMP0.y, in_rotate.x 145 mad TEMP0.x, TEMP3.x, TEMP0.x, CONST_1 146 147 mov TEMP4.xy, TEMP0 // TEMP4 = cos x, sin x, -, - 148 149 // sincos y 150 mad TEMP0.xy, TEMP3.y, TEMP1.xy, TEMP1.zw 151 mad TEMP0.xy, TEMP3.y, TEMP0.xy, TEMP2.xy 152 mad TEMP0.xy, TEMP3.y, TEMP0.xy, TEMP2.zw 153 mad TEMP0.xy, TEMP3.y, TEMP0.xy, TEMP5.xy 154 mad TEMP0.xy, TEMP3.y, TEMP0.xy, TEMP5.zw 155 mul TEMP0.y, TEMP0.y, in_rotate.y 156 mad TEMP0.x, TEMP3.y, TEMP0.x, CONST_1 157 158 mov TEMP4.zw, TEMP0.xxxy // TEMP4 = cos x, sin x, cos y, sin y 159 160 // sincos z 161 mad TEMP0.xy, TEMP3.z, TEMP1.xy, TEMP1.zw 162 mad TEMP0.xy, TEMP3.z, TEMP0.xy, TEMP2.xy 163 mad TEMP0.xy, TEMP3.z, TEMP0.xy, TEMP2.zw 164 mad TEMP0.xy, TEMP3.z, TEMP0.xy, TEMP5.xy 165 mad TEMP0.xy, TEMP3.z, TEMP0.xy, TEMP5.zw 166 mul TEMP0.y, TEMP0.y, in_rotate.z 167 mad TEMP0.x, TEMP3.z, TEMP0.x, CONST_1 168 169#define cosx TEMP4.x 170#define sinx TEMP4.y 171#define cosy TEMP4.z 172#define siny TEMP4.w 173#define cosz TEMP0.x 174#define sinz TEMP0.y 175#define cossinx TEMP4.xy 176#define sincosz TEMP0.yx 177#define sincosx TEMP4.yx 178 179 mov mat2.x, -siny 180 mul mat0.x, cosz, cosy 181 mul mat1.x, sinz, cosy 182 mul mat2.y, sinx, cosy 183 mul mat2.z, cosx, cosy 184 185 mul TEMP1.xy, cossinx, sincosz 186 mad mat0.y, TEMP1.y, siny, -TEMP1.x 187 mad mat1.z, TEMP1.x, siny, -TEMP1.y 188 189 mul TEMP1.xy, sincosx, sincosz 190 mad mat0.z, TEMP1.y, siny, TEMP1.x 191 mad mat1.y, TEMP1.x, siny, TEMP1.y 192 193#undef cosx 194#undef sinx 195#undef cosy 196#undef siny 197#undef cosz 198#undef sinz 199 endif 200 201 ifb shapeType2 202 // �|���S���� 203 mov xvector.yz, CONST_0 204 mov yvector.xz, CONST_0 205 mov xvector.xw, CONST_1 206 mov yvector.yw, CONST_1 207 208 mul xvector.xyz, xvector, in_scale.x 209 mul yvector.xyz, yvector, in_scale.y 210 211 dp3 TEMP0.x, xvector, mat0 212 dp3 TEMP0.y, xvector, mat1 213 dp3 TEMP0.z, xvector, mat2 214 mov xvector, TEMP0 215 dp3 TEMP1.x, yvector, mat0 216 dp3 TEMP1.y, yvector, mat1 217 dp3 TEMP1.z, yvector, mat2 218 mov yvector, TEMP1 219 220 mov TEMP0, xvector 221 dp3 xvector.x, TEMP0.xyz, uModelView[0]._XYZ 222 dp3 xvector.y, TEMP0.xyz, uModelView[1]._XYZ 223 dp3 xvector.z, TEMP0.xyz, uModelView[2]._XYZ 224 225 mov TEMP0, yvector 226 dp3 yvector.x, TEMP0.xyz, uModelView[0]._XYZ 227 dp3 yvector.y, TEMP0.xyz, uModelView[1]._XYZ 228 dp3 yvector.z, TEMP0.xyz, uModelView[2]._XYZ 229 else 230 ifb shapeType1 231 // Y���r���{�[�h 232 mov zvector.x, uInvModelView[0]._Z 233 mov zvector.y, uInvModelView[1]._Z 234 mov zvector.z, uInvModelView[2]._Z 235 dp3 TEMP0, zvector, zvector 236 rsq TEMP1, TEMP0.x 237 mul zvector, zvector, TEMP1.x 238 239 mov xvector, CONST_0 240 mov yvector, CONST_0 241 mov xvector.x, CONST_1 242 mov yvector.y, CONST_1 243 244 dp3 TEMP0.x, xvector, mat0 245 dp3 TEMP0.y, xvector, mat1 246 dp3 TEMP0.z, xvector, mat2 247 mov xvector, TEMP0 248 dp3 TEMP1.x, yvector, mat0 249 dp3 TEMP1.y, yvector, mat1 250 dp3 TEMP1.z, yvector, mat2 251 mov yvector, TEMP1 252 253 crs TEMP0.xyz, yvector, zvector 254 crs zvector.xyz, TEMP0, yvector 255 256 dp3 TEMP1, xvector, xvector 257 rsq TEMP3, TEMP1.x 258 259 crs xvector.xyz, yvector, zvector 260 dp3 TEMP0, xvector, xvector 261 rsq TEMP1, TEMP0.x 262 mul xvector, xvector, TEMP1.x 263 mul xvector, xvector, TEMP3.x 264 265 // �����܂�local���W�n 266 267 mov TEMP0, xvector 268 dp3 xvector.x, TEMP0.xyz, uModelView[0]._XYZ 269 dp3 xvector.y, TEMP0.xyz, uModelView[1]._XYZ 270 dp3 xvector.z, TEMP0.xyz, uModelView[2]._XYZ 271 272 mov TEMP0, yvector 273 dp3 yvector.x, TEMP0.xyz, uModelView[0]._XYZ 274 dp3 yvector.y, TEMP0.xyz, uModelView[1]._XYZ 275 dp3 yvector.z, TEMP0.xyz, uModelView[2]._XYZ 276 277 // �X�P�[�����O 278 mul xvector, xvector, in_scale.x 279 mul yvector, yvector, in_scale.y 280 281 else 282 ifb shapeType3 283 // ���[���h�w�� 284 mov zvector.x, uInvModelView[0]._Z 285 mov zvector.y, uInvModelView[1]._Z 286 mov zvector.z, uInvModelView[2]._Z 287 dp3 TEMP0, zvector, zvector 288 rsq TEMP1, TEMP0.x 289 mul zvector, zvector, TEMP1.x 290 291 mov yvector.xz, CONST_0 292 mov yvector.yw, CONST_1 293 294 crs TEMP0.xyz, yvector, zvector 295 crs yvector.xyz, zvector, TEMP0 296 crs xvector.xyz, yvector, zvector 297 else 298 // �X�N���[�����s 299 mov zvector.x, uInvModelView[0]._Z 300 mov zvector.y, uInvModelView[1]._Z 301 mov zvector.z, uInvModelView[2]._Z 302 dp3 TEMP0, zvector, zvector 303 rsq TEMP1, TEMP0.x 304 mul zvector, zvector, TEMP1.x 305 306 mov yvector.x, uInvModelView[0]._Y 307 mov yvector.y, uInvModelView[1]._Y 308 mov yvector.z, uInvModelView[2]._Y 309 dp3 TEMP0, yvector, yvector 310 rsq TEMP1, TEMP0.x 311 mul yvector, yvector, TEMP1.x 312 313 crs TEMP0.xyz, yvector, zvector 314 crs yvector.xyz, zvector, TEMP0 315 crs xvector.xyz, yvector, zvector 316 endif 317 318 dp3 TEMP0, xvector, xvector 319 rsq TEMP1, TEMP0.x 320 mul xvector, xvector, TEMP1.x 321 322 dp3 TEMP0, yvector, yvector 323 rsq TEMP1, TEMP0.x 324 mul yvector, yvector, TEMP1.x 325 326 // �����܂�local���W�n 327 328 mov TEMP0, xvector 329 dp3 xvector.x, TEMP0.xyz, uModelView[0]._XYZ 330 dp3 xvector.y, TEMP0.xyz, uModelView[1]._XYZ 331 dp3 xvector.z, TEMP0.xyz, uModelView[2]._XYZ 332 333 mov TEMP0, yvector 334 dp3 yvector.x, TEMP0.xyz, uModelView[0]._XYZ 335 dp3 yvector.y, TEMP0.xyz, uModelView[1]._XYZ 336 dp3 yvector.z, TEMP0.xyz, uModelView[2]._XYZ 337 338 // �X�P�[�����O 339 mul xvector, xvector, in_scale.x 340 mul yvector, yvector, in_scale.y 341 342 // ��] 343 // sincos TEMP0.xy, in_rotate.z, TEMP1, TEMP2 // cos, sin 344 mov TEMP1, sincos_table[2] 345 mov TEMP2, sincos_table[1] 346 mul TEMP0.z, in_rotate.z, in_rotate.z 347 mad TEMP0.xy, TEMP0.z, TEMP1.xy, TEMP1.zw 348 mad TEMP0.xy, TEMP0.z, TEMP0.xy, TEMP2.xy 349 mad TEMP0.xy, TEMP0.z, TEMP0.xy, TEMP2.zw 350 mov TEMP1, sincos_table[0] 351 mad TEMP0.xy, TEMP0.z, TEMP0.xy, TEMP1.xy 352 mad TEMP0.xy, TEMP0.z, TEMP0.xy, TEMP1.zw 353 mul TEMP0.y, TEMP0.y, in_rotate.z 354 mad TEMP0.x, TEMP0.z, TEMP0.x, CONST_1 355 356 mov TEMP0.z, -TEMP0.y 357 358 mul TEMP1.xyzw, TEMP0.xzyx, xvector.xyxy 359 add xvector.xy, TEMP1.xz, TEMP1.yw 360 mov xvector.zw, CONST_0 361 362 mul TEMP1.xyzw, TEMP0.xzyx, yvector.xyxy 363 add yvector.xy, TEMP1.xz, TEMP1.yw 364 mov yvector.zw, CONST_0 365 endif 366 367 nop 368 369 endif 370 371 // �����܂łŁAxvector, yvector�ɂ̓r���[���W�n�Ń|���S���̊��x�N�g���������Ă��܂��B 372 // ���`�Ȃ̂ŁA���S�_�{���x�N�g���Ŏ��ۂ̌`�\����A�W�I���g���V�F�[�_�Ōv�Z����܂��B 373 374 // ���S�ʒu��View���W�� 375 mov TEMP_POSI.w, CONST_1 376 add TEMP_POSI.xyz, nw_position, nw_position_offset._XYZW 377 378 dp4 WRLD_POSI.x, TEMP_POSI, uModel[0]._XYZW 379 dp4 WRLD_POSI.y, TEMP_POSI, uModel[1]._XYZW 380 dp4 WRLD_POSI.z, TEMP_POSI, uModel[2]._XYZW 381 mov WRLD_POSI.w, CONST_1 382 383 dp4 TEMP_VIEW.x, WRLD_POSI, nw_world_to_view_matrix[0]._XYZW 384 dp4 TEMP_VIEW.y, WRLD_POSI, nw_world_to_view_matrix[1]._XYZW 385 dp4 TEMP_VIEW.z, WRLD_POSI, nw_world_to_view_matrix[2]._XYZW 386 mov TEMP_VIEW.w, CONST_1 387 388 // ���x�N�g���̃I�t�Z�b�g�ɂ��ړ������Z 389 mul TEMP0, xvector, uOffset.x 390 mul TEMP1, yvector, uOffset.y 391 add TEMP_VIEW.xyz, TEMP_VIEW, -TEMP0 392 add TEMP_VIEW.xyz, TEMP_VIEW, -TEMP1 393 394 // Quaternion 395 mov o_Quaternion.xyzw, CONST_0 396 397 // View 398 mov o_View, -TEMP_VIEW 399 400 // �ʒu�i���S�j 401 dp4 o_Position.x, TEMP_VIEW, nw_projection_matrix[0]._XYZW 402 dp4 o_Position.y, TEMP_VIEW, nw_projection_matrix[1]._XYZW 403 dp4 o_Position.z, TEMP_VIEW, nw_projection_matrix[2]._XYZW 404 dp4 o_Position.w, TEMP_VIEW, nw_projection_matrix[3]._XYZW 405 406 // �J���[�E�A���t�@ 407 mov o_Color.xyz, aColor.xyz 408 mov o_Color.w, aAlpha.x 409 410 // �e�N�X�`�����W 411 mul TEMP0, aTextureRotate, CONST_1__2PI 412 flr TEMP1, TEMP0 413 add TEMP3, TEMP0, -TEMP1 414 415 // TEMP3.x��sin��TEMP0.y�ɁAcos��TEMP0.x�ɓ���܂��B 416 mov TEMP1, sincos_table[2] 417 mov TEMP2, sincos_table[1] 418 mul TEMP0.z, TEMP3.x, TEMP3.x 419 mad TEMP0.xy, TEMP0.z, TEMP1.xy, TEMP1.zw 420 mad TEMP0.xy, TEMP0.z, TEMP0.xy, TEMP2.xy 421 mad TEMP0.xy, TEMP0.z, TEMP0.xy, TEMP2.zw 422 mov TEMP1, sincos_table[0] 423 mad TEMP0.xy, TEMP0.z, TEMP0.xy, TEMP1.xy 424 mad TEMP0.xy, TEMP0.z, TEMP0.xy, TEMP1.zw 425 mul TEMP0.y, TEMP0.y, TEMP3.x 426 mad TEMP0.x, TEMP0.z, TEMP0.x, CONST_1 427 428 mul TEMP1.xyzw, aTextureScale.xyxy, TEMP0.yxxy // TEMP1.xyzw = scaleXsin,scaleYcos, scaleXcos, scaleYsin 429 mov TEMP1.x, -TEMP1.x 430 431 add TEMP2.x, -aTextureTranslate.x, -CONST_HALF 432 add TEMP2.y, aTextureTranslate.y, -CONST_HALF 433 434 mul TEMP0.xyzw, TEMP1.xyzw, TEMP2.yyxx 435 add TEMP2.xy, TEMP0.xy, CONST_HALF 436 add TEMP0.xy, TEMP0.zw, TEMP2.xy 437 438 // �e�N�X�`�����W�̊�_ 439 mov TEMP2.xy, TEMP0 440 mov TEMP2.zw, CONST_0_0_0_1 441 dp4 TEMP0.x, TEMP2, nw_texture_matrix0[0]._XYZW 442 dp4 TEMP0.y, TEMP2, nw_texture_matrix0[1]._XYZW 443 dp4 TEMP0.z, TEMP2, nw_texture_matrix0[2]._XYZW 444 mov o4, TEMP0 445 446 // �e�N�X�`�����W�̊��x�N�g��1 447 mov TEMP2.xy, TEMP1.xy 448 dp3 TEMP0.x, TEMP2, nw_texture_matrix0[0]._XYZ 449 dp3 TEMP0.y, TEMP2, nw_texture_matrix0[1]._XYZ 450 mov o5.xy, TEMP0.xy 451 452 // �e�N�X�`�����W�̊��x�N�g��2 453 mov TEMP2.xy, TEMP1.zw 454 dp3 TEMP0.x, TEMP2, nw_texture_matrix0[0]._XYZ 455 dp3 TEMP0.y, TEMP2, nw_texture_matrix0[1]._XYZ 456 mov o5.zw, TEMP0.xxxy 457 458 // �|���S���̊��x�N�g��1 459 add TEMP0.xyz, xvector.xyz, yvector.xyz 460 dp3 o6.x, TEMP0, nw_projection_matrix[0]._XYZ 461 dp3 o6.y, TEMP0, nw_projection_matrix[1]._XYZ 462 dp3 o6.z, TEMP0, nw_projection_matrix[2]._XYZ 463 dp3 o6.w, TEMP0, nw_projection_matrix[3]._XYZ 464 465 // �|���S���̊��x�N�g��2 466 add TEMP0.xyz, xvector.xyz, -yvector.xyz 467 dp3 o7.x, TEMP0, nw_projection_matrix[0]._XYZ 468 dp3 o7.y, TEMP0, nw_projection_matrix[1]._XYZ 469 dp3 o7.z, TEMP0, nw_projection_matrix[2]._XYZ 470 dp3 o7.w, TEMP0, nw_projection_matrix[3]._XYZ 471 472 end 473endmain: 474