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