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