1// --------------------------------------------------------------------------- 2// Project: NintendoWare 3// File: font_RectDrawerShader.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:$ 14// --------------------------------------------------------------------------- 15 16//---------------------------------------------------------- 17// Input registers map 18 19#pragma bind_symbol( vVtxData, v0, v0 ) 20#define vVtxData v0 21 22// Input map 23// { bufferIndex, vtxIndex, X, Y } 24//---------------------------------------------------------- 25 26//---------------------------------------------------------- 27// Constant values 28 29#define cVal c5 30def cVal, 0.0, 1.0, 2.0, 3.0 31//---------------------------------------------------------- 32 33//---------------------------------------------------------- 34// Uniform 35 36#define uProjection c0 37#define uStereoCamera c4 38#define uUniformAddr c6 39#define uUniformMtx c32 40#define uUniformData c64 41#define uTexCoordMode i0 42 43//---------------------------------------------------------- 44 45 46//---------------------------------------------------------- 47// Output registers map 48 49#pragma output_map(position, o0) 50#pragma output_map(color, o1) 51#pragma output_map(texture0, o2.xy) 52#pragma output_map(texture1, o3.xy) 53#pragma output_map(texture2, o4.xy) 54#define oPosition o0 55#define oColor o1 56#define oTexCoord0 o2 57#define oTexCoord1 o3 58#define oTexCoord2 o4 59//---------------------------------------------------------- 60 61//---------------------------------------------------------- 62// Temporary registers 63 64#define rQuad r0 65#define rPosition r1 66#define rTransform r2 67#define rTempView r3 68#define rTempPos r4 69#define rTexCoord0 r5 70#define rTexCoord1 r6 71#define rTexCoord2 r7 72#define rCounter r8 73 74//---------------------------------------------------------- 75 76main: 77 // ���Ԗڂ̎l�p�`�����擾 78 mova a0.x, vVtxData 79 80 // �A�h���X����ۑ� 81 mov rQuad, uUniformAddr[ a0.x ].wzyx 82 83 // ��{�l�p�`�̍��W��ݒ� 84 mov rPosition.xy, vVtxData.zwzw 85 mov rPosition.zw, cVal.xyxy 86 87 // �s��f�[�^�̃A�h���X�A����сA��`���̃A�h���X���擾 88 mova a0.xy, rQuad.xy 89 90 // �l�p�`��ό`�i���[�J�����W�n�j 91 mov rTransform.xw, uUniformData[ a0.y ].wwyy 92 mov rTransform.yz, cVal.xxxx 93 dp4 rTempPos.x, rPosition, rTransform 94 mov rTransform.yw, uUniformData[ a0.y ].zzxx 95 mov rTransform.xz, cVal.xxxx 96 dp4 rTempPos.y, rPosition, rTransform 97 mov rTempPos.zw, rPosition.zwzw 98 99 // �l�p�`���X�N���[�����W�n�ɕϊ� 100 dp4 rTempView.x, rTempPos, uUniformMtx[ a0.x + 0 ].wzyx 101 dp4 rTempView.y, rTempPos, uUniformMtx[ a0.x + 1 ].wzyx 102 dp4 rTempView.z, rTempPos, uUniformMtx[ a0.x + 2 ].wzyx 103 mov rTempView.w, rPosition.w 104 105 mov rTempPos.z, uUniformMtx[ a0.x + 2 ].x // temp z = z 106 abs rTempPos.z, rTempPos.z // temp z = abs(temp z) 107 add rTempPos.z, rTempPos.z, uStereoCamera.y // temp z += add dist 108 109 // ���������邩�ǂ����̔��� 110 mov rTempPos.x, uStereoCamera.w 111 cmp 1, 1, rTempPos.xz, cVal.xx // 1: != half parallax != 0, z != 0 ? 112 ifc 1, 1, 1 // 1: AND 113 114 mov rTempPos.x, uStereoCamera.w // temp x = half parallax 115 sub rTempPos.y, rTempPos.z, uStereoCamera.z // temp y = temp z - Dlevel 116 rcp rTempPos.z, rTempPos.z // temp z = 1 / temp z 117 mul rTempPos.z, rTempPos.y, rTempPos.z // temp z *= temp y 118 mad rTempView.x, rTempPos.x, rTempPos.z, rTempView.x // x = temp x * temp z + x 119 120 endif 121 122 dp4 oPosition.x, rTempView, uProjection[ 0 ].wzyx 123 dp4 oPosition.y, rTempView, uProjection[ 1 ].wzyx 124 dp4 oPosition.z, rTempView, uProjection[ 2 ].wzyx 125 dp4 oPosition.w, rTempView, uProjection[ 3 ].wzyx 126 127 // ���_�J���[�̏���邩���擾 128 cmp 3, 3, rQuad.w, cVal.y 129 130 ifc 1, 1, 1 131 // ���_�J���[�̐ݒ�Ȃ��B 132 133 // ���_�J���[���f�t�H���g�Őݒ� 134 mov oColor.xyz, cVal.y 135 136 // �A���t�@��ݒ� 137 mov oColor.w, rQuad.w 138 139 else 140 // ���_�J���[�̐ݒ肠��B 141 142 // ���_�J���[���̃A�h���X���擾 143 mova a0.y, rQuad.w 144 145 // ���ݏ������Ă��钸�_�ɂ��āA�㉺���E�̔��� 146 cmp 1, 1, cVal.xx, rPosition.xy 147 148 ifc 0, 0, 1 // ���� 149 mov oColor, uUniformMtx[ a0.y + 0 ].wzyx 150 endif 151 ifc 1, 0, 1 // �E�� 152 mov oColor, uUniformMtx[ a0.y + 1 ].wzyx 153 endif 154 ifc 0, 1, 1 // ���� 155 mov oColor, uUniformMtx[ a0.y + 2 ].wzyx 156 endif 157 ifc 1, 1, 1 // �E�� 158 mov oColor, uUniformMtx[ a0.y + 3 ].wzyx 159 endif 160 nop 161 endif 162 163 // �e�N�X�`�����W�̏����� 164 cmp 1, 1, cVal.xx, rPosition.xy 165 ifc 0, 0, 1 // ���� 166 mov rTexCoord0, cVal.xyyy 167 mov rTexCoord1, cVal.xyyy 168 mov rTexCoord2, cVal.xyyy 169 endif 170 ifc 1, 0, 1 // �E�� 171 mov rTexCoord0, cVal.yyyy 172 mov rTexCoord1, cVal.yyyy 173 mov rTexCoord2, cVal.yyyy 174 endif 175 ifc 0, 1, 1 // ���� 176 mov rTexCoord0, cVal.xxyy 177 mov rTexCoord1, cVal.xxyy 178 mov rTexCoord2, cVal.xxyy 179 endif 180 ifc 1, 1, 1 // �E�� 181 mov rTexCoord0, cVal.yxyy 182 mov rTexCoord1, cVal.yxyy 183 mov rTexCoord2, cVal.yxyy 184 endif 185 186 // �e�N�X�`�����W�̐ݒ� 187 mov rCounter, cVal.x 188 loop uTexCoordMode 189 190 cmp 0, 0, cVal.y, rCounter 191 ifc 1, 1, 1 192 193 // �e�N�X�`�����W�̃A�h���X���擾 194 mova a0.y, rQuad.z 195 cmp 1, 1, cVal.xx, rPosition.xy 196 ifc 0, 0, 1 // ���� 197 mov rTexCoord0.xy, uUniformData[ a0.y + 0 ].wz 198 mov rTexCoord1.xy, uUniformData[ a0.y + 1 ].wz 199 mov rTexCoord2.xy, uUniformData[ a0.y + 2 ].wz 200 endif 201 ifc 1, 0, 1 // �E�� 202 mov rTexCoord0.xy, uUniformData[ a0.y + 0 ].yz 203 mov rTexCoord1.xy, uUniformData[ a0.y + 1 ].yz 204 mov rTexCoord2.xy, uUniformData[ a0.y + 2 ].yz 205 endif 206 ifc 0, 1, 1 // ���� 207 mov rTexCoord0.xy, uUniformData[ a0.y + 0 ].wx 208 mov rTexCoord1.xy, uUniformData[ a0.y + 1 ].wx 209 mov rTexCoord2.xy, uUniformData[ a0.y + 2 ].wx 210 endif 211 ifc 1, 1, 1 // �E�� 212 mov rTexCoord0.xy, uUniformData[ a0.y + 0 ].yx 213 mov rTexCoord1.xy, uUniformData[ a0.y + 1 ].yx 214 mov rTexCoord2.xy, uUniformData[ a0.y + 2 ].yx 215 endif 216 nop 217 endif 218 219 // �e�N�X�`���s��]���Ă���ꍇ�Ɍ���A�E��ƍ����̍��W�������Ă��� 220 cmp 2, 2, cVal.w, rCounter 221 ifc 1, 1, 1 222 223 cmp 1, 1, cVal.xx, rPosition.xy 224 ifc 1, 0, 1 // �E����㏑�� 225 mov rTexCoord0.xy, uUniformData[ a0.y + 3 ].yx 226 mov rTexCoord1.xy, uUniformData[ a0.y + 4 ].yx 227 mov rTexCoord2.xy, uUniformData[ a0.y + 5 ].yx 228 endif 229 ifc 0, 1, 1 // �������㏑�� 230 mov rTexCoord0.xy, uUniformData[ a0.y + 3 ].wz 231 mov rTexCoord1.xy, uUniformData[ a0.y + 4 ].wz 232 mov rTexCoord2.xy, uUniformData[ a0.y + 5 ].wz 233 endif 234 nop 235 endif 236 237 add rCounter, rCounter, cVal.y 238 endloop 239 240 mov oTexCoord0, rTexCoord0 241 mov oTexCoord1, rTexCoord1 242 mov oTexCoord2, rTexCoord2 243 244 end 245endmain: 246