get rid of float_multiply, float_add, float_divide
[mesa.git] / src / mesa / shader / slang / library / slang_120_core.gc
1 /*
2 * Mesa 3-D graphics library
3 * Version: 6.5
4 *
5 * Copyright (C) 2006 Brian Paul All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25 //
26 // Constructors and operators introduced in GLSL 1.20 - mostly on new
27 // (non-square) types of matrices.
28 //
29 // One important change in the language is that when a matrix is used
30 // as an argument to a matrix constructor, it must be the only argument
31 // for the constructor. The compiler takes care of it by itself and
32 // here we only care to re-introduce constructors for old (square)
33 // types of matrices.
34 //
35
36 //
37 // From Shader Spec, ver. 1.20, rev. 6
38 //
39
40 mat2x3 __constructor (const float df) {
41 return mat2x3 (
42 df, 0., 0.,
43 0., df, 0.
44 );
45 }
46
47 mat2x3 __constructor (const int di) {
48 float df;
49 __asm int_to_float df, di;
50 return mat2x3 (df);
51 }
52
53 mat2x3 __constructor (const bool db) {
54 return mat2x3 (db ? 1. : 0.);
55 }
56
57
58 mat2x4 __constructor (const float df) {
59 return mat2x4 (
60 df, 0., 0., 0.,
61 0., df, 0., 0.
62 );
63 }
64
65 mat2x4 __constructor (const int di) {
66 float df;
67 __asm int_to_float df, di;
68 return mat2x4 (df);
69 }
70
71 mat2x4 __constructor (const bool db) {
72 return mat2x4 (db ? 1. : 0.);
73 }
74
75
76 mat3x2 __constructor (const float df) {
77 return mat3x2 (
78 df, 0.,
79 0., df,
80 0., 0.
81 );
82 }
83
84 mat3x2 __constructor (const int di) {
85 float df;
86 __asm int_to_float df, di;
87 return mat3x2 (df);
88 }
89
90 mat3x2 __constructor (const bool db) {
91 return mat3x2 (db ? 1. : 0.);
92 }
93
94
95 mat3x4 __constructor (const float df) {
96 return mat3x4 (
97 df, 0., 0., 0.,
98 0., df, 0., 0.,
99 0., 0., df, 0.
100 );
101 }
102
103 mat3x4 __constructor (const int di) {
104 float df;
105 __asm int_to_float df, di;
106 return mat3x4 (df);
107 }
108
109 mat3x4 __constructor (const bool db) {
110 return mat3x4 (db ? 1. : 0.);
111 }
112
113
114 mat4x2 __constructor (const float df) {
115 return mat4x2 (
116 df, 0.,
117 0., df,
118 0., 0.,
119 0., 0.
120 );
121 }
122
123 mat4x2 __constructor (const int di) {
124 float df;
125 __asm int_to_float df, di;
126 return mat4x2 (df);
127 }
128
129 mat4x2 __constructor (const bool db) {
130 return mat4x2 (db ? 1. : 0.);
131 }
132
133
134 mat4x3 __constructor (const float df) {
135 return mat4x3 (
136 df, 0., 0.,
137 0., df, 0.,
138 0., 0., df,
139 0., 0., 0.
140 );
141 }
142
143 mat4x3 __constructor (const int di) {
144 float df;
145 __asm int_to_float df, di;
146 return mat4x3 (df);
147 }
148
149 mat4x3 __constructor (const bool db) {
150 return mat4x3 (db ? 1. : 0.);
151 }
152
153
154 mat2 __constructor (const mat2 m) {
155 return m;
156 }
157
158 mat2 __constructor (const mat3x2 m) {
159 return mat2 (
160 m[0],
161 m[1]
162 );
163 }
164
165 mat2 __constructor (const mat4x2 m) {
166 return mat2 (
167 m[0],
168 m[1]
169 );
170 }
171
172 mat2 __constructor (const mat2x3 m) {
173 return mat2 (
174 m[0].xy,
175 m[1].xy
176 );
177 }
178
179 mat2 __constructor (const mat2x4 m) {
180 return mat2 (
181 m[0].xy,
182 m[1].xy
183 );
184 }
185
186 mat2 __constructor (const mat3 m) {
187 return mat2 (
188 m[0].xy,
189 m[1].xy
190 );
191 }
192
193 mat2 __constructor (const mat3x4 m) {
194 return mat2 (
195 m[0].xy,
196 m[1].xy
197 );
198 }
199
200 mat2 __constructor (const mat4x3 m) {
201 return mat2 (
202 m[0].xy,
203 m[1].xy
204 );
205 }
206
207 mat2 __constructor (const mat4 m) {
208 return mat2 (
209 m[0].xy,
210 m[1].xy
211 );
212 }
213
214
215 mat2x3 __constructor (const mat2x3 m) {
216 return m;
217 }
218
219 mat2x3 __constructor (const mat3 m) {
220 return mat2x3 (
221 m[0],
222 m[1]
223 );
224 }
225
226 mat2x3 __constructor (const mat4x3 m) {
227 return mat2x3 (
228 m[0],
229 m[1]
230 );
231 }
232
233 mat2x3 __constructor (const mat2x4 m) {
234 return mat2x3 (
235 m[0].xyz,
236 m[1].xyz
237 );
238 }
239
240 mat2x3 __constructor (const mat3x4 m) {
241 return mat2x3 (
242 m[0].xyz,
243 m[1].xyz
244 );
245 }
246
247 mat2x3 __constructor (const mat4 m) {
248 return mat2x3 (
249 m[0].xyz,
250 m[1].xyz
251 );
252 }
253
254 mat2x3 __constructor (const mat2 m) {
255 return mat2x3 (
256 m[0], 0.,
257 m[1], 0.
258 );
259 }
260
261 mat2x3 __constructor (const mat3x2 m) {
262 return mat2x3 (
263 m[0], 0.,
264 m[1], 0.
265 );
266 }
267
268 mat2x3 __constructor (const mat4x2 m) {
269 return mat2x3 (
270 m[0], 0.,
271 m[1], 0.
272 );
273 }
274
275
276 mat2x4 __constructor (const mat2x4 m) {
277 return m;
278 }
279
280 mat2x4 __constructor (const mat3x4 m) {
281 return mat2x4 (
282 m[0],
283 m[1]
284 );
285 }
286
287 mat2x4 __constructor (const mat4 m) {
288 return mat2x4 (
289 m[0],
290 m[1]
291 );
292 }
293
294 mat2x4 __constructor (const mat2x3 m) {
295 return mat2x4 (
296 m[0], 0.,
297 m[1], 0.
298 );
299 }
300
301 mat2x4 __constructor (const mat3 m) {
302 return mat2x4 (
303 m[0], 0.,
304 m[1], 0.
305 );
306 }
307
308 mat2x4 __constructor (const mat4x3 m) {
309 return mat2x4 (
310 m[0], 0.,
311 m[1], 0.
312 );
313 }
314
315 mat2x4 __constructor (const mat2 m) {
316 return mat2x4 (
317 m[0], 0., 0.,
318 m[1], 0., 0.
319 );
320 }
321
322 mat2x4 __constructor (const mat3x2 m) {
323 return mat2x4 (
324 m[0], 0., 0.,
325 m[1], 0., 0.
326 );
327 }
328
329 mat2x4 __constructor (const mat4x2 m) {
330 return mat2x4 (
331 m[0], 0., 0.,
332 m[1], 0., 0.
333 );
334 }
335
336
337 mat3x2 __constructor (const mat3x2 m) {
338 return m;
339 }
340
341 mat3x2 __constructor (const mat4x2 m) {
342 return mat3x2 (
343 m[0],
344 m[1],
345 m[2]
346 );
347 }
348
349 mat3x2 __constructor (const mat3 m) {
350 return mat3x2 (
351 m[0].xy,
352 m[1].xy,
353 m[2].xy
354 );
355 }
356
357 mat3x2 __constructor (const mat3x4 m) {
358 return mat3x2 (
359 m[0].xy,
360 m[1].xy,
361 m[2].xy
362 );
363 }
364
365 mat3x2 __constructor (const mat4x3 m) {
366 return mat3x2 (
367 m[0].xy,
368 m[1].xy,
369 m[2].xy
370 );
371 }
372
373 mat3x2 __constructor (const mat4 m) {
374 return mat3x2 (
375 m[0].xy,
376 m[1].xy,
377 m[2].xy
378 );
379 }
380
381 mat3x2 __constructor (const mat2 m) {
382 return mat3x2 (
383 m[0],
384 m[1],
385 0., 0.
386 );
387 }
388
389 mat3x2 __constructor (const mat2x3 m) {
390 return mat3x2 (
391 m[0].xy,
392 m[1].xy,
393 0., 0.
394 );
395 }
396
397 mat3x2 __constructor (const mat2x4 m) {
398 return mat3x2 (
399 m[0].xy,
400 m[1].xy,
401 0., 0.
402 );
403 }
404
405
406 mat3 __constructor (const mat3 m) {
407 return m;
408 }
409
410 mat3 __constructor (const mat4x3 m) {
411 return mat3 (
412 m[0],
413 m[1],
414 m[2]
415 );
416 }
417
418 mat3 __constructor (const mat3x4 m) {
419 return mat3 (
420 m[0].xyz,
421 m[1].xyz,
422 m[2].xyz
423 );
424 }
425
426 mat3 __constructor (const mat4 m) {
427 return mat3 (
428 m[0].xyz,
429 m[1].xyz,
430 m[2].xyz
431 );
432 }
433
434 mat3 __constructor (const mat2x3 m) {
435 return mat3 (
436 m[0],
437 m[1],
438 0., 0., 1.
439 );
440 }
441
442 mat3 __constructor (const mat2x4 m) {
443 return mat3 (
444 m[0].xyz,
445 m[1].xyz,
446 0., 0., 1.
447 );
448 }
449
450 mat3 __constructor (const mat3x2 m) {
451 return mat3 (
452 m[0], 0.,
453 m[1], 0.,
454 m[2], 1.
455 );
456 }
457
458 mat3 __constructor (const mat4x2 m) {
459 return mat3 (
460 m[0], 0.,
461 m[1], 0.,
462 m[2], 1.
463 );
464 }
465
466 mat3 __constructor (const mat2 m) {
467 return mat3 (
468 m[0], 0.,
469 m[1], 0.,
470 0., 0., 1.
471 );
472 }
473
474
475 mat3x4 __constructor (const mat3x4 m) {
476 return m;
477 }
478
479 mat3x4 __constructor (const mat4 m) {
480 return mat3x4 (
481 m[0],
482 m[1],
483 m[2]
484 );
485 }
486
487 mat3x4 __constructor (const mat3 m) {
488 return mat3x4 (
489 m[0], 0.,
490 m[1], 0.,
491 m[2], 0.
492 );
493 }
494
495 mat3x4 __constructor (const mat4x3 m) {
496 return mat3x4 (
497 m[0], 0.,
498 m[1], 0.,
499 m[2], 0.
500 );
501 }
502
503 mat3x4 __constructor (const mat2x4 m) {
504 return mat3x4 (
505 m[0],
506 m[1],
507 0., 0., 1., 0.
508 );
509 }
510
511 mat3x4 __constructor (const mat2x3 m) {
512 return mat3x4 (
513 m[0], 0.,
514 m[1], 0.,
515 0., 0., 1., 0.
516 );
517 }
518
519 mat3x4 __constructor (const mat3x2 m) {
520 return mat3x4 (
521 m[0], 0., 0.,
522 m[1], 0., 0.,
523 m[2], 1., 0.
524 );
525 }
526
527 mat3x4 __constructor (const mat4x2 m) {
528 return mat3x4 (
529 m[0], 0., 0.,
530 m[1], 0., 0.,
531 m[2], 1., 0.
532 );
533 }
534
535 mat3x4 __constructor (const mat2 m) {
536 return mat3x4 (
537 m[0], 0., 0.,
538 m[1], 0., 0.,
539 0., 0., 1., 0.
540 );
541 }
542
543
544 mat4x2 __constructor (const mat4x2 m) {
545 return m;
546 }
547
548 mat4x2 __constructor (const mat4x3 m) {
549 return mat4x2 (
550 m[0].xy,
551 m[1].xy,
552 m[2].xy,
553 m[3].xy
554 );
555 }
556
557 mat4x2 __constructor (const mat4 m) {
558 return mat4x2 (
559 m[0].xy,
560 m[1].xy,
561 m[2].xy,
562 m[3].xy
563 );
564 }
565
566 mat4x2 __constructor (const mat3x2 m) {
567 return mat4x2 (
568 m[0],
569 m[1],
570 0., 0.
571 );
572 }
573
574 mat4x2 __constructor (const mat3 m) {
575 return mat4x2 (
576 m[0].xy,
577 m[1].xy,
578 m[2].xy,
579 0., 0.
580 );
581 }
582
583 mat4x2 __constructor (const mat3x4 m) {
584 return mat4x2 (
585 m[0].xy,
586 m[1].xy,
587 m[2].xy,
588 0., 0.
589 );
590 }
591
592 mat4x2 __constructor (const mat2 m) {
593 return mat4x2 (
594 m[0],
595 m[1],
596 0., 0.,
597 0., 0.
598 );
599 }
600
601 mat4x2 __constructor (const mat2x3 m) {
602 return mat4x2 (
603 m[0].xy,
604 m[1].xy,
605 0., 0.,
606 0., 0.
607 );
608 }
609
610 mat4x2 __constructor (const mat2x4 m) {
611 return mat4x2 (
612 m[0].xy,
613 m[1].xy,
614 0., 0.,
615 0., 0.
616 );
617 }
618
619
620 mat4x3 __constructor (const mat4x3 m) {
621 return m;
622 }
623
624 mat4x3 __constructor (const mat4 m) {
625 return mat4x3 (
626 m[0].xyz,
627 m[1].xyz,
628 m[2].xyz,
629 m[3].xyz
630 );
631 }
632
633 mat4x3 __constructor (const mat3 m) {
634 return mat4x3 (
635 m[0],
636 m[1],
637 m[2],
638 0., 0., 0.
639 );
640 }
641
642 mat4x3 __constructor (const mat3x4 m) {
643 return mat4x3 (
644 m[0].xyz,
645 m[1].xyz,
646 m[2].xyz,
647 0., 0., 0.
648 );
649 }
650
651 mat4x3 __constructor (const mat4x2 m) {
652 return mat4x3 (
653 m[0], 0.,
654 m[1], 0.,
655 m[2], 1.,
656 m[3], 0.
657 );
658 }
659
660 mat4x3 __constructor (const mat2x3 m) {
661 return mat4x3 (
662 m[0],
663 m[1],
664 0., 0., 1.,
665 0., 0., 0.
666 );
667 }
668
669 mat4x3 __constructor (const mat3x2 m) {
670 return mat4x3 (
671 m[0], 0.,
672 m[1], 0.,
673 m[2], 1.,
674 0., 0., 0.
675 );
676 }
677
678 mat4x3 __constructor (const mat2x4 m) {
679 return mat4x3 (
680 m[0].xyz,
681 m[1].xyz,
682 0., 0., 1.,
683 0., 0., 0.
684 );
685 }
686
687 mat4x3 __constructor (const mat2 m) {
688 return mat4x3 (
689 m[0], 0.,
690 m[1], 0.,
691 0., 0., 1.,
692 0., 0., 0.
693 );
694 }
695
696
697 mat4 __constructor (const mat4 m) {
698 return m;
699 }
700
701 mat4 __constructor (const mat3x4 m) {
702 return mat4 (
703 m[0],
704 m[1],
705 m[2],
706 0., 0., 0., 1.
707 );
708 }
709
710 mat4 __constructor (const mat4x3 m) {
711 return mat4 (
712 m[0], 0.,
713 m[1], 0.,
714 m[2], 0.,
715 m[3], 1.
716 );
717 }
718
719 mat4 __constructor (const mat2x4 m) {
720 return mat4 (
721 m[0],
722 m[1],
723 0., 0., 1., 0.,
724 0., 0., 0., 1.
725 );
726 }
727
728 mat4 __constructor (const mat4x2 m) {
729 return mat4 (
730 m[0], 0., 0.,
731 m[1], 0., 0.,
732 m[2], 1., 0.,
733 m[3], 0., 1.
734 );
735 }
736
737 mat4 __constructor (const mat3 m) {
738 return mat4 (
739 m[0], 0.,
740 m[1], 0.,
741 m[2], 0.,
742 0., 0., 0., 1.
743 );
744 }
745
746 mat4 __constructor (const mat2x3 m) {
747 return mat4 (
748 m[0], 0.,
749 m[1], 0.,
750 0., 0., 1., 0.,
751 0., 0., 0., 1.
752 );
753 }
754
755 mat4 __constructor (const mat3x2 m) {
756 return mat4 (
757 m[0], 0., 0.,
758 m[1], 0., 0.,
759 m[2], 1., 0.,
760 0., 0., 0., 1.
761 );
762 }
763
764 mat4 __constructor (const mat2 m) {
765 return mat4 (
766 m[0], 0., 0.,
767 m[1], 0., 0.,
768 0., 0., 1., 0.,
769 0., 0., 0., 1.
770 );
771 }
772
773
774 void __operator += (inout mat2x3 m, const mat2x3 n) {
775 m[0] += n[0];
776 m[1] += n[1];
777 }
778
779 void __operator += (inout mat2x4 m, const mat2x4 n) {
780 m[0] += n[0];
781 m[1] += n[1];
782 }
783
784 void __operator += (inout mat3x2 m, const mat3x2 n) {
785 m[0] += n[0];
786 m[1] += n[1];
787 m[2] += n[2];
788 }
789
790 void __operator += (inout mat3x4 m, const mat3x4 n) {
791 m[0] += n[0];
792 m[1] += n[1];
793 m[2] += n[2];
794 }
795
796 void __operator += (inout mat4x2 m, const mat4x2 n) {
797 m[0] += n[0];
798 m[1] += n[1];
799 m[2] += n[2];
800 m[3] += n[3];
801 }
802
803 void __operator += (inout mat4x3 m, const mat4x3 n) {
804 m[0] += n[0];
805 m[1] += n[1];
806 m[2] += n[2];
807 m[3] += n[3];
808 }
809
810
811 void __operator -= (inout mat2x3 m, const mat2x3 n) {
812 m[0] -= n[0];
813 m[1] -= n[1];
814 }
815
816 void __operator -= (inout mat2x4 m, const mat2x4 n) {
817 m[0] -= n[0];
818 m[1] -= n[1];
819 }
820
821 void __operator -= (inout mat3x2 m, const mat3x2 n) {
822 m[0] -= n[0];
823 m[1] -= n[1];
824 m[2] -= n[2];
825 }
826
827 void __operator -= (inout mat3x4 m, const mat3x4 n) {
828 m[0] -= n[0];
829 m[1] -= n[1];
830 m[2] -= n[2];
831 }
832
833 void __operator -= (inout mat4x2 m, const mat4x2 n) {
834 m[0] -= n[0];
835 m[1] -= n[1];
836 m[2] -= n[2];
837 m[3] -= n[3];
838 }
839
840 void __operator -= (inout mat4x3 m, const mat4x3 n) {
841 m[0] -= n[0];
842 m[1] -= n[1];
843 m[2] -= n[2];
844 m[3] -= n[3];
845 }
846
847
848 void __operator /= (inout mat2x3 m, const mat2x3 n) {
849 m[0] /= n[0];
850 m[1] /= n[1];
851 }
852
853 void __operator /= (inout mat2x4 m, const mat2x4 n) {
854 m[0] /= n[0];
855 m[1] /= n[1];
856 }
857
858 void __operator /= (inout mat3x2 m, const mat3x2 n) {
859 m[0] /= n[0];
860 m[1] /= n[1];
861 m[2] /= n[2];
862 }
863
864 void __operator /= (inout mat3x4 m, const mat3x4 n) {
865 m[0] /= n[0];
866 m[1] /= n[1];
867 m[2] /= n[2];
868 }
869
870 void __operator /= (inout mat4x2 m, const mat4x2 n) {
871 m[0] /= n[0];
872 m[1] /= n[1];
873 m[2] /= n[2];
874 m[3] /= n[3];
875 }
876
877 void __operator /= (inout mat4x3 m, const mat4x3 n) {
878 m[0] /= n[0];
879 m[1] /= n[1];
880 m[2] /= n[2];
881 m[3] /= n[3];
882 }
883
884
885 vec3 __operator * (const mat2x3 m, const vec2 v) {
886 return vec3 (
887 v.x * m[0].x + v.y * m[1].x,
888 v.x * m[0].y + v.y * m[1].y,
889 v.x * m[0].z + v.y * m[1].z
890 );
891 }
892
893 vec4 __operator * (const mat2x4 m, const vec2 v) {
894 return vec4 (
895 v.x * m[0].x + v.y * m[1].x,
896 v.x * m[0].y + v.y * m[1].y,
897 v.x * m[0].z + v.y * m[1].z,
898 v.x * m[0].w + v.y * m[1].w
899 );
900 }
901
902 vec2 __operator * (const mat3x2 m, const vec3 v) {
903 return vec2 (
904 v.x * m[0].x + v.y * m[1].x + v.z * m[2].x,
905 v.x * m[0].y + v.y * m[1].y + v.z * m[2].y
906 );
907 }
908
909 vec4 __operator * (const mat3x4 m, const vec3 v) {
910 return vec4 (
911 v.x * m[0].x + v.y * m[1].x + v.z * m[2].x,
912 v.x * m[0].y + v.y * m[1].y + v.z * m[2].y,
913 v.x * m[0].z + v.y * m[1].z + v.z * m[2].z,
914 v.x * m[0].w + v.y * m[1].w + v.z * m[2].w
915 );
916 }
917
918 vec2 __operator * (const mat4x2 m, const vec4 v) {
919 return vec2 (
920 v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x,
921 v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y
922 );
923 }
924
925 vec3 __operator * (const mat4x3 m, const vec4 v) {
926 return vec3 (
927 v.x * m[0].x + v.y * m[1].x + v.z * m[2].x + v.w * m[3].x,
928 v.x * m[0].y + v.y * m[1].y + v.z * m[2].y + v.w * m[3].y,
929 v.x * m[0].z + v.y * m[1].z + v.z * m[2].z + v.w * m[3].z
930 );
931 }
932
933
934 mat3x2 __operator * (const mat2 m, const mat3x2 n) {
935 return mat3x2 (m * n[0], m * n[1], m * n[2]);
936 }
937
938 mat4x2 __operator * (const mat2 m, const mat4x2 n) {
939 return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
940 }
941
942
943 mat2x3 __operator * (const mat2x3 m, const mat2 n) {
944 return mat2x3 (m * n[0], m * n[1]);
945 }
946
947 mat3 __operator * (const mat2x3 m, const mat3x2 n) {
948 return mat3 (m * n[0], m * n[1], m * n[2]);
949 }
950
951 mat4x3 __operator * (const mat2x3 m, const mat4x2 n) {
952 return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
953 }
954
955
956 mat2x4 __operator * (const mat2x4 m, const mat2 n) {
957 return mat2x4 (m * n[0], m * n[1]);
958 }
959
960 mat3x4 __operator * (const mat2x4 m, const mat3x2 n) {
961 return mat3x4 (m * n[0], m * n[1], m * n[2]);
962 }
963
964 mat4 __operator * (const mat2x4 m, const mat4x2 n) {
965 return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
966 }
967
968
969 mat2 __operator * (const mat3x2 m, const mat2x3 n) {
970 return mat2 (m * n[0], m * n[1]);
971 }
972
973 mat3x2 __operator * (const mat3x2 m, const mat3 n) {
974 return mat3x2 (m * n[0], m * n[1], m * n[2]);
975 }
976
977 mat4x2 __operator * (const mat3x2 m, const mat4x3 n) {
978 return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
979 }
980
981
982 mat2x3 __operator * (const mat3 m, const mat2x3 n) {
983 return mat2x3 (m * n[0], m * n[1]);
984 }
985
986 mat4x3 __operator * (const mat3 m, const mat4x3 n) {
987 return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
988 }
989
990
991 mat2x4 __operator * (const mat3x4 m, const mat2x3 n) {
992 return mat2x4 (m * n[0], m * n[1]);
993 }
994
995 mat3x4 __operator * (const mat3x4 m, const mat3 n) {
996 return mat3x4 (m * n[0], m * n[1], m * n[2]);
997 }
998
999 mat4 __operator * (const mat3x4 m, const mat4x3 n) {
1000 return mat4 (m * n[0], m * n[1], m * n[2], m * n[3]);
1001 }
1002
1003
1004 mat2 __operator * (const mat4x2 m, const mat2x4 n) {
1005 return mat2 (m * n[0], m * n[1]);
1006 }
1007
1008 mat3x2 __operator * (const mat4x2 m, const mat3x4 n) {
1009 return mat3x2 (m * n[0], m * n[1], m * n[2]);
1010 }
1011
1012 mat4x2 __operator * (const mat4x2 m, const mat4 n) {
1013 return mat4x2 (m * n[0], m * n[1], m * n[2], m * n[3]);
1014 }
1015
1016
1017 mat2x3 __operator * (const mat4x3 m, const mat2x4 n) {
1018 return mat2x3 (m * n[0], m * n[1]);
1019 }
1020
1021 mat3 __operator * (const mat4x3 m, const mat3x4 n) {
1022 return mat3 (m * n[0], m * n[1], m * n[2]);
1023 }
1024
1025 mat4x3 __operator * (const mat4x3 m, const mat4 n) {
1026 return mat4x3 (m * n[0], m * n[1], m * n[2], m * n[3]);
1027 }
1028
1029
1030 mat2x4 __operator * (const mat4 m, const mat2x4 n) {
1031 return mat2x4 (m * n[0], m * n[1]);
1032 }
1033
1034 mat3x4 __operator * (const mat4 m, const mat3x4 n) {
1035 return mat3x4 (m * n[0], m * n[1], m * n[2]);
1036 }
1037
1038
1039 void __operator *= (inout mat2x3 m, const mat2 n) {
1040 m = m * n;
1041 }
1042
1043 void __operator *= (inout mat2x4 m, const mat2 n) {
1044 m = m * n;
1045 }
1046
1047 void __operator *= (inout mat3x2 m, const mat3 n) {
1048 m = m * n;
1049 }
1050
1051 void __operator *= (inout mat3x4 m, const mat3 n) {
1052 m = m * n;
1053 }
1054
1055 void __operator *= (inout mat4x2 m, const mat4 n) {
1056 m = m * n;
1057 }
1058
1059 void __operator *= (inout mat4x3 m, const mat4 n) {
1060 m = m * n;
1061 }
1062
1063
1064 vec3 __operator * (const vec2 v, const mat3x2 m) {
1065 return vec3 (
1066 v.x * m[0].x + v.y * m[0].y,
1067 v.x * m[1].x + v.y * m[1].y,
1068 v.x * m[2].x + v.y * m[2].y
1069 );
1070 }
1071
1072 vec4 __operator * (const vec2 v, const mat4x2 m) {
1073 return vec4 (
1074 v.x * m[0].x + v.y * m[0].y,
1075 v.x * m[1].x + v.y * m[1].y,
1076 v.x * m[2].x + v.y * m[2].y,
1077 v.x * m[3].x + v.y * m[3].y
1078 );
1079 }
1080
1081 vec2 __operator * (const vec3 v, const mat2x3 m) {
1082 return vec2 (
1083 v.x * m[0].x + v.y * m[0].y + v.z * m[0].z,
1084 v.x * m[1].x + v.y * m[1].y + v.z * m[1].z
1085 );
1086 }
1087
1088 vec4 __operator * (const vec3 v, const mat4x3 m) {
1089 return vec4 (
1090 v.x * m[0].x + v.y * m[0].y + v.z * m[0].z,
1091 v.x * m[1].x + v.y * m[1].y + v.z * m[1].z,
1092 v.x * m[2].x + v.y * m[2].y + v.z * m[2].z,
1093 v.x * m[3].x + v.y * m[3].y + v.z * m[3].z
1094 );
1095 }
1096
1097 vec2 __operator * (const vec4 v, const mat2x4 m) {
1098 return vec2 (
1099 v.x * m[0].x + v.y * m[0].y + v.z * m[0].z + v.w * m[0].w,
1100 v.x * m[1].x + v.y * m[1].y + v.z * m[1].z + v.w * m[1].w
1101 );
1102 }
1103
1104 vec3 __operator * (const vec4 v, const mat3x4 m) {
1105 return vec3 (
1106 v.x * m[0].x + v.y * m[0].y + v.z * m[0].z + v.w * m[0].w,
1107 v.x * m[1].x + v.y * m[1].y + v.z * m[1].z + v.w * m[1].w,
1108 v.x * m[2].x + v.y * m[2].y + v.z * m[2].z + v.w * m[2].w
1109 );
1110 }
1111
1112
1113 void __operator += (inout mat2x3 m, const float a) {
1114 m[0] += a;
1115 m[1] += a;
1116 }
1117
1118 void __operator += (inout mat2x4 m, const float a) {
1119 m[0] += a;
1120 m[1] += a;
1121 }
1122
1123 void __operator += (inout mat3x2 m, const float a) {
1124 m[0] += a;
1125 m[1] += a;
1126 m[2] += a;
1127 }
1128
1129 void __operator += (inout mat3x4 m, const float a) {
1130 m[0] += a;
1131 m[1] += a;
1132 m[2] += a;
1133 }
1134
1135 void __operator += (inout mat4x2 m, const float a) {
1136 m[0] += a;
1137 m[1] += a;
1138 m[2] += a;
1139 m[3] += a;
1140 }
1141
1142 void __operator += (inout mat4x3 m, const float a) {
1143 m[0] += a;
1144 m[1] += a;
1145 m[2] += a;
1146 m[3] += a;
1147 }
1148
1149
1150 void __operator -= (inout mat2x3 m, const float a) {
1151 m[0] -= a;
1152 m[1] -= a;
1153 }
1154
1155 void __operator -= (inout mat2x4 m, const float a) {
1156 m[0] -= a;
1157 m[1] -= a;
1158 }
1159
1160 void __operator -= (inout mat3x2 m, const float a) {
1161 m[0] -= a;
1162 m[1] -= a;
1163 m[2] -= a;
1164 }
1165
1166 void __operator -= (inout mat3x4 m, const float a) {
1167 m[0] -= a;
1168 m[1] -= a;
1169 m[2] -= a;
1170 }
1171
1172 void __operator -= (inout mat4x2 m, const float a) {
1173 m[0] -= a;
1174 m[1] -= a;
1175 m[2] -= a;
1176 m[3] -= a;
1177 }
1178
1179 void __operator -= (inout mat4x3 m, const float a) {
1180 m[0] -= a;
1181 m[1] -= a;
1182 m[2] -= a;
1183 m[3] -= a;
1184 }
1185
1186
1187 void __operator *= (inout mat2x3 m, const float a) {
1188 m[0] *= a;
1189 m[1] *= a;
1190 }
1191
1192 void __operator *= (inout mat2x4 m, const float a) {
1193 m[0] *= a;
1194 m[1] *= a;
1195 }
1196
1197 void __operator *= (inout mat3x2 m, const float a) {
1198 m[0] *= a;
1199 m[1] *= a;
1200 m[2] *= a;
1201 }
1202
1203 void __operator *= (inout mat3x4 m, const float a) {
1204 m[0] *= a;
1205 m[1] *= a;
1206 m[2] *= a;
1207 }
1208
1209 void __operator *= (inout mat4x2 m, const float a) {
1210 m[0] *= a;
1211 m[1] *= a;
1212 m[2] *= a;
1213 m[3] *= a;
1214 }
1215
1216 void __operator *= (inout mat4x3 m, const float a) {
1217 m[0] *= a;
1218 m[1] *= a;
1219 m[2] *= a;
1220 m[3] *= a;
1221 }
1222
1223
1224 void __operator /= (inout mat2x3 m, const float a) {
1225 m[0] /= a;
1226 m[1] /= a;
1227 }
1228
1229 void __operator /= (inout mat2x4 m, const float a) {
1230 m[0] /= a;
1231 m[1] /= a;
1232 }
1233
1234 void __operator /= (inout mat3x2 m, const float a) {
1235 m[0] /= a;
1236 m[1] /= a;
1237 m[2] /= a;
1238 }
1239
1240 void __operator /= (inout mat3x4 m, const float a) {
1241 m[0] /= a;
1242 m[1] /= a;
1243 m[2] /= a;
1244 }
1245
1246 void __operator /= (inout mat4x2 m, const float a) {
1247 m[0] /= a;
1248 m[1] /= a;
1249 m[2] /= a;
1250 m[3] /= a;
1251 }
1252
1253 void __operator /= (inout mat4x3 m, const float a) {
1254 m[0] /= a;
1255 m[1] /= a;
1256 m[2] /= a;
1257 m[3] /= a;
1258 }
1259
1260
1261 mat2x3 __operator + (const mat2x3 m, const mat2x3 n) {
1262 return mat2x3 (m[0] + n[0], m[1] + n[1]);
1263 }
1264
1265 mat2x4 __operator + (const mat2x4 m, const mat2x4 n) {
1266 return mat2x4 (m[0] + n[0], m[1] + n[1]);
1267 }
1268
1269 mat3x2 __operator + (const mat3x2 m, const mat3x2 n) {
1270 return mat3x2 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
1271 }
1272
1273 mat3x4 __operator + (const mat3x4 m, const mat3x4 n) {
1274 return mat3x4 (m[0] + n[0], m[1] + n[1], m[2] + n[2]);
1275 }
1276
1277 mat4x2 __operator + (const mat4x2 m, const mat4x2 n) {
1278 return mat4x2 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
1279 }
1280
1281 mat4x3 __operator + (const mat4x3 m, const mat4x3 n) {
1282 return mat4x3 (m[0] + n[0], m[1] + n[1], m[2] + n[2], m[3] + n[3]);
1283 }
1284
1285
1286 mat2x3 __operator - (const mat2x3 m, const mat2x3 n) {
1287 return mat2x3 (m[0] - n[0], m[1] - n[1]);
1288 }
1289
1290 mat2x4 __operator - (const mat2x4 m, const mat2x4 n) {
1291 return mat2x4 (m[0] - n[0], m[1] - n[1]);
1292 }
1293
1294 mat3x2 __operator - (const mat3x2 m, const mat3x2 n) {
1295 return mat3x2 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
1296 }
1297
1298 mat3x4 __operator - (const mat3x4 m, const mat3x4 n) {
1299 return mat3x4 (m[0] - n[0], m[1] - n[1], m[2] - n[2]);
1300 }
1301
1302 mat4x2 __operator - (const mat4x2 m, const mat4x2 n) {
1303 return mat4x2 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
1304 }
1305
1306 mat4x3 __operator - (const mat4x3 m, const mat4x3 n) {
1307 return mat4x3 (m[0] - n[0], m[1] - n[1], m[2] - n[2], m[3] - n[3]);
1308 }
1309
1310
1311 mat2x3 __operator / (const mat2x3 m, const mat2x3 n) {
1312 return mat2x3 (m[0] / n[0], m[1] / n[1]);
1313 }
1314
1315 mat2x4 __operator / (const mat2x4 m, const mat2x4 n) {
1316 return mat2x4 (m[0] / n[0], m[1] / n[1]);
1317 }
1318
1319 mat3x2 __operator / (const mat3x2 m, const mat3x2 n) {
1320 return mat3x2 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
1321 }
1322
1323 mat3x4 __operator / (const mat3x4 m, const mat3x4 n) {
1324 return mat3x4 (m[0] / n[0], m[1] / n[1], m[2] / n[2]);
1325 }
1326
1327 mat4x2 __operator / (const mat4x2 m, const mat4x2 n) {
1328 return mat4x2 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
1329 }
1330
1331 mat4x3 __operator / (const mat4x3 m, const mat4x3 n) {
1332 return mat4x3 (m[0] / n[0], m[1] / n[1], m[2] / n[2], m[3] / n[3]);
1333 }
1334
1335
1336 mat2x3 __operator + (const float a, const mat2x3 n) {
1337 return mat2x3 (a + n[0], a + n[1]);
1338 }
1339
1340 mat2x3 __operator + (const mat2x3 m, const float b) {
1341 return mat2x3 (m[0] + b, m[1] + b);
1342 }
1343
1344 mat2x4 __operator + (const float a, const mat2x4 n) {
1345 return mat2x4 (a + n[0], a + n[1]);
1346 }
1347
1348 mat2x4 __operator + (const mat2x4 m, const float b) {
1349 return mat2x4 (m[0] + b, m[1] + b);
1350 }
1351
1352 mat3x2 __operator + (const float a, const mat3x2 n) {
1353 return mat3x2 (a + n[0], a + n[1], a + n[2]);
1354 }
1355
1356 mat3x2 __operator + (const mat3x2 m, const float b) {
1357 return mat3x2 (m[0] + b, m[1] + b, m[2] + b);
1358 }
1359
1360 mat3x4 __operator + (const float a, const mat3x4 n) {
1361 return mat3x4 (a + n[0], a + n[1], a + n[2]);
1362 }
1363
1364 mat3x4 __operator + (const mat3x4 m, const float b) {
1365 return mat3x4 (m[0] + b, m[1] + b, m[2] + b);
1366 }
1367
1368 mat4x2 __operator + (const mat4x2 m, const float b) {
1369 return mat4x2 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
1370 }
1371
1372 mat4x2 __operator + (const float a, const mat4x2 n) {
1373 return mat4x2 (a + n[0], a + n[1], a + n[2], a + n[3]);
1374 }
1375
1376 mat4x3 __operator + (const mat4x3 m, const float b) {
1377 return mat4x3 (m[0] + b, m[1] + b, m[2] + b, m[3] + b);
1378 }
1379
1380 mat4x3 __operator + (const float a, const mat4x3 n) {
1381 return mat4x3 (a + n[0], a + n[1], a + n[2], a + n[3]);
1382 }
1383
1384
1385 mat2x3 __operator - (const float a, const mat2x3 n) {
1386 return mat2x3 (a - n[0], a - n[1]);
1387 }
1388
1389 mat2x3 __operator - (const mat2x3 m, const float b) {
1390 return mat2x3 (m[0] - b, m[1] - b);
1391 }
1392
1393 mat2x4 __operator - (const float a, const mat2x4 n) {
1394 return mat2x4 (a - n[0], a - n[1]);
1395 }
1396
1397 mat2x4 __operator - (const mat2x4 m, const float b) {
1398 return mat2x4 (m[0] - b, m[1] - b);
1399 }
1400
1401 mat3x2 __operator - (const float a, const mat3x2 n) {
1402 return mat3x2 (a - n[0], a - n[1], a - n[2]);
1403 }
1404
1405 mat3x2 __operator - (const mat3x2 m, const float b) {
1406 return mat3x2 (m[0] - b, m[1] - b, m[2] - b);
1407 }
1408
1409 mat3x4 __operator - (const float a, const mat3x4 n) {
1410 return mat3x4 (a - n[0], a - n[1], a - n[2]);
1411 }
1412
1413 mat3x4 __operator - (const mat3x4 m, const float b) {
1414 return mat3x4 (m[0] - b, m[1] - b, m[2] - b);
1415 }
1416
1417 mat4x2 __operator - (const mat4x2 m, const float b) {
1418 return mat4x2 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
1419 }
1420
1421 mat4x2 __operator - (const float a, const mat4x2 n) {
1422 return mat4x2 (a - n[0], a - n[1], a - n[2], a - n[3]);
1423 }
1424
1425 mat4x3 __operator - (const mat4x3 m, const float b) {
1426 return mat4x3 (m[0] - b, m[1] - b, m[2] - b, m[3] - b);
1427 }
1428
1429 mat4x3 __operator - (const float a, const mat4x3 n) {
1430 return mat4x3 (a - n[0], a - n[1], a - n[2], a - n[3]);
1431 }
1432
1433
1434 mat2x3 __operator * (const float a, const mat2x3 n) {
1435 return mat2x3 (a * n[0], a * n[1]);
1436 }
1437
1438 mat2x3 __operator * (const mat2x3 m, const float b) {
1439 return mat2x3 (m[0] * b, m[1] * b);
1440 }
1441
1442 mat2x4 __operator * (const float a, const mat2x4 n) {
1443 return mat2x4 (a * n[0], a * n[1]);
1444 }
1445
1446 mat2x4 __operator * (const mat2x4 m, const float b) {
1447 return mat2x4 (m[0] * b, m[1] * b);
1448 }
1449
1450 mat3x2 __operator * (const float a, const mat3x2 n) {
1451 return mat3x2 (a * n[0], a * n[1], a * n[2]);
1452 }
1453
1454 mat3x2 __operator * (const mat3x2 m, const float b) {
1455 return mat3x2 (m[0] * b, m[1] * b, m[2] * b);
1456 }
1457
1458 mat3x4 __operator * (const float a, const mat3x4 n) {
1459 return mat3x4 (a * n[0], a * n[1], a * n[2]);
1460 }
1461
1462 mat3x4 __operator * (const mat3x4 m, const float b) {
1463 return mat3x4 (m[0] * b, m[1] * b, m[2] * b);
1464 }
1465
1466 mat4x2 __operator * (const mat4x2 m, const float b) {
1467 return mat4x2 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
1468 }
1469
1470 mat4x2 __operator * (const float a, const mat4x2 n) {
1471 return mat4x2 (a * n[0], a * n[1], a * n[2], a * n[3]);
1472 }
1473
1474 mat4x3 __operator * (const mat4x3 m, const float b) {
1475 return mat4x3 (m[0] * b, m[1] * b, m[2] * b, m[3] * b);
1476 }
1477
1478 mat4x3 __operator * (const float a, const mat4x3 n) {
1479 return mat4x3 (a * n[0], a * n[1], a * n[2], a * n[3]);
1480 }
1481
1482
1483 mat2x3 __operator / (const float a, const mat2x3 n) {
1484 return mat2x3 (a / n[0], a / n[1]);
1485 }
1486
1487 mat2x3 __operator / (const mat2x3 m, const float b) {
1488 return mat2x3 (m[0] / b, m[1] / b);
1489 }
1490
1491 mat2x4 __operator / (const float a, const mat2x4 n) {
1492 return mat2x4 (a / n[0], a / n[1]);
1493 }
1494
1495 mat2x4 __operator / (const mat2x4 m, const float b) {
1496 return mat2x4 (m[0] / b, m[1] / b);
1497 }
1498
1499 mat3x2 __operator / (const float a, const mat3x2 n) {
1500 return mat3x2 (a / n[0], a / n[1], a / n[2]);
1501 }
1502
1503 mat3x2 __operator / (const mat3x2 m, const float b) {
1504 return mat3x2 (m[0] / b, m[1] / b, m[2] / b);
1505 }
1506
1507 mat3x4 __operator / (const float a, const mat3x4 n) {
1508 return mat3x4 (a / n[0], a / n[1], a / n[2]);
1509 }
1510
1511 mat3x4 __operator / (const mat3x4 m, const float b) {
1512 return mat3x4 (m[0] / b, m[1] / b, m[2] / b);
1513 }
1514
1515 mat4x2 __operator / (const mat4x2 m, const float b) {
1516 return mat4x2 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
1517 }
1518
1519 mat4x2 __operator / (const float a, const mat4x2 n) {
1520 return mat4x2 (a / n[0], a / n[1], a / n[2], a / n[3]);
1521 }
1522
1523 mat4x3 __operator / (const mat4x3 m, const float b) {
1524 return mat4x3 (m[0] / b, m[1] / b, m[2] / b, m[3] / b);
1525 }
1526
1527 mat4x3 __operator / (const float a, const mat4x3 n) {
1528 return mat4x3 (a / n[0], a / n[1], a / n[2], a / n[3]);
1529 }
1530
1531
1532 mat2x3 __operator - (const mat2x3 m) {
1533 return mat2x3 (-m[0], -m[1]);
1534 }
1535
1536 mat2x4 __operator - (const mat2x4 m) {
1537 return mat2x4 (-m[0], -m[1]);
1538 }
1539
1540 mat3x2 __operator - (const mat3x2 m) {
1541 return mat3x2 (-m[0], -m[1], -m[2]);
1542 }
1543
1544 mat3x4 __operator - (const mat3x4 m) {
1545 return mat3x4 (-m[0], -m[1], -m[2]);
1546 }
1547
1548 mat4x2 __operator - (const mat4x2 m) {
1549 return mat4x2 (-m[0], -m[1], -m[2], -m[3]);
1550 }
1551
1552 mat4x3 __operator - (const mat4x3 m) {
1553 return mat4x3 (-m[0], -m[1], -m[2], -m[3]);
1554 }
1555
1556
1557 void __operator -- (inout mat2x3 m) {
1558 --m[0];
1559 --m[1];
1560 }
1561
1562 void __operator -- (inout mat2x4 m) {
1563 --m[0];
1564 --m[1];
1565 }
1566
1567 void __operator -- (inout mat3x2 m) {
1568 --m[0];
1569 --m[1];
1570 --m[2];
1571 }
1572
1573 void __operator -- (inout mat3x4 m) {
1574 --m[0];
1575 --m[1];
1576 --m[2];
1577 }
1578
1579 void __operator -- (inout mat4x2 m) {
1580 --m[0];
1581 --m[1];
1582 --m[2];
1583 --m[3];
1584 }
1585
1586 void __operator -- (inout mat4x3 m) {
1587 --m[0];
1588 --m[1];
1589 --m[2];
1590 --m[3];
1591 }
1592
1593
1594 void __operator ++ (inout mat2x3 m) {
1595 ++m[0];
1596 ++m[1];
1597 }
1598
1599 void __operator ++ (inout mat2x4 m) {
1600 ++m[0];
1601 ++m[1];
1602 }
1603
1604 void __operator ++ (inout mat3x2 m) {
1605 ++m[0];
1606 ++m[1];
1607 ++m[2];
1608 }
1609
1610 void __operator ++ (inout mat3x4 m) {
1611 ++m[0];
1612 ++m[1];
1613 ++m[2];
1614 }
1615
1616 void __operator ++ (inout mat4x2 m) {
1617 ++m[0];
1618 ++m[1];
1619 ++m[2];
1620 ++m[3];
1621 }
1622
1623 void __operator ++ (inout mat4x3 m) {
1624 ++m[0];
1625 ++m[1];
1626 ++m[2];
1627 ++m[3];
1628 }
1629
1630
1631 mat2x3 __operator -- (inout mat2x3 m, const int) {
1632 return mat2x3 (m[0]--, m[1]--);
1633 }
1634
1635 mat2x4 __operator -- (inout mat2x4 m, const int) {
1636 return mat2x4 (m[0]--, m[1]--);
1637 }
1638
1639 mat3x2 __operator -- (inout mat3x2 m, const int) {
1640 return mat3x2 (m[0]--, m[1]--, m[2]--);
1641 }
1642
1643 mat3x4 __operator -- (inout mat3x4 m, const int) {
1644 return mat3x4 (m[0]--, m[1]--, m[2]--);
1645 }
1646
1647 mat4x2 __operator -- (inout mat4x2 m, const int) {
1648 return mat4x2 (m[0]--, m[1]--, m[2]--, m[3]--);
1649 }
1650
1651 mat4x3 __operator -- (inout mat4x3 m, const int) {
1652 return mat4x3 (m[0]--, m[1]--, m[2]--, m[3]--);
1653 }
1654
1655
1656 mat2x3 __operator ++ (inout mat2x3 m, const int) {
1657 return mat2x3 (m[0]++, m[1]++);
1658 }
1659
1660 mat2x4 __operator ++ (inout mat2x4 m, const int) {
1661 return mat2x4 (m[0]++, m[1]++);
1662 }
1663
1664 mat3x2 __operator ++ (inout mat3x2 m, const int) {
1665 return mat3x2 (m[0]++, m[1]++, m[2]++);
1666 }
1667
1668 mat3x4 __operator ++ (inout mat3x4 m, const int) {
1669 return mat3x4 (m[0]++, m[1]++, m[2]++);
1670 }
1671
1672 mat4x2 __operator ++ (inout mat4x2 m, const int) {
1673 return mat4x2 (m[0]++, m[1]++, m[2]++, m[3]++);
1674 }
1675
1676 mat4x3 __operator ++ (inout mat4x3 m, const int) {
1677 return mat4x3 (m[0]++, m[1]++, m[2]++, m[3]++);
1678 }
1679
1680
1681 void printMESA (const mat2x3 m) {
1682 printMESA (m[0]);
1683 printMESA (m[1]);
1684 }
1685
1686 void printMESA (const mat2x4 m) {
1687 printMESA (m[0]);
1688 printMESA (m[1]);
1689 }
1690
1691 void printMESA (const mat3x2 m) {
1692 printMESA (m[0]);
1693 printMESA (m[1]);
1694 printMESA (m[2]);
1695 }
1696
1697 void printMESA (const mat3x4 m) {
1698 printMESA (m[0]);
1699 printMESA (m[1]);
1700 printMESA (m[2]);
1701 }
1702
1703 void printMESA (const mat4x2 m) {
1704 printMESA (m[0]);
1705 printMESA (m[1]);
1706 printMESA (m[2]);
1707 printMESA (m[3]);
1708 }
1709
1710 void printMESA (const mat4x3 m) {
1711 printMESA (m[0]);
1712 printMESA (m[1]);
1713 printMESA (m[2]);
1714 printMESA (m[3]);
1715 }
1716