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