1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: gd_Texture.h
4
5 Copyright (C)2011 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 *---------------------------------------------------------------------------*/
14 #ifndef NN_GD_CTR_GD_TEXTURE_H_
15 #define NN_GD_CTR_GD_TEXTURE_H_
16
17 #include <limits>
18 #include <nn/gd/CTR/gd_Types.h>
19 #include <nn/gd/CTR/gd_Result.h>
20 #include <nn/gd/CTR/gd_Utils.h>
21
22 #include <nn/gd/CTR/gd_Memory.h>
23 #include <nn/gd/CTR/gd_Resource.h>
24
25 #include <nn/dbg/dbg_DebugString.h>
26
27 #if NN_GD_DOCUMENT_TYPE == ENGLISH
28 /* Please see man pages for details
29
30 */
31 #else
32 /* Please see man pages for details
33
34 */
35 #endif
36
37 namespace nn {
38 namespace gd {
39 namespace CTR {
40
41
42 /*********************************************************************************************************/
43 /********************************************** Internal data ********************************************/
44 class TextureStage;
45 class CombinerStage;
46 class ProceduralTextureStage;
47 class VertexInputStage;
48 namespace internal
49 {
50
51 class TextureStage;
52 class LightingStage;
53 class CombinerStage;
54 class VertexInputStage;
55 class ProceduralTextureSettings
56 {
57 private:
58 u32 m_Proctex0; // 0xa8
59 u32 m_Proctex1; // 0xa9
60 u32 m_Proctex2; // 0xaa
61 u32 m_Proctex3; // 0xab
62 u32 m_Proctex4; // 0xac
63 u32 m_Proctex5; // 0xad
64
65 u32 m_PaddingEndStruct;
66 u32 m_DirtyFieldMask;
67
68 enum
69 {
70 PTMASK_PROCTEX0 = 1 << 0,
71 PTMASK_PROCTEX1 = 1 << 1,
72 PTMASK_PROCTEX2 = 1 << 2,
73 PTMASK_PROCTEX3 = 1 << 3,
74 PTMASK_PROCTEX4 = 1 << 4,
75 PTMASK_PROCTEX5 = 1 << 5,
76
77 PTMASK_REGISTRY_COUNT = 6
78 };
79
80 friend class nn::gd::CTR::internal::TextureStage;
81 friend class nn::gd::CTR::ProceduralTextureStage;
82 friend class nn::gd::CTR::TextureStage;
83 }; // ProceduralTextureSettings
84
85 class TextureSettings
86 {
87 private:
88 u32 m_TextureUnitControl; // 0x80
89
90 //used by sampler states
91 u32 m_FormatTextureUnit0; //0x83
92 u32 m_FormatTextureUnit1; //0x93
93 u32 m_FormatTextureUnit2; //0x9b
94 u32 m_MipLevelsTextureUnit0; //0x84
95 u32 m_MipLevelsTextureUnit1; //0x94
96 u32 m_MipLevelsTextureUnit2; //0x9c
97 u32 m_TypeTextureUnit0; //0x83
98 u32 m_ShadowTextureSetting; //0x8b
99
100 u32 m_ProcTexHardwareEnabled;
101 u32 m_DirtyFieldMask;
102
103 enum
104 {
105 TXMASK_SEND_TEXTURE_UNIT_CONTROL = 1 << 0,
106 TXMASK_UPDATE_TEXTURE_UNIT_CONTROL = 1 << 0 | 1 << 1,
107 TXMASK_UPDATE_TEXTURE_SHADOW_SETTINGS = 1 << 2
108 };
109
110 friend class nn::gd::CTR::ProceduralTextureStage;
111 friend class nn::gd::CTR::internal::TextureStage;
112 friend class nn::gd::CTR::CombinerStage;
113 friend class nn::gd::CTR::TextureStage;
114 friend class nn::gd::CTR::internal::CombinerStage;
115 friend class nn::gd::CTR::internal::LightingStage;
116 friend class nn::gd::CTR::VertexInputStage;
117 friend class nn::gd::CTR::internal::VertexInputStage;
118 }; // TextureSettings
119
120 #if NN_GD_DOCUMENT_TYPE == ENGLISH
121 /* Please see man pages for details */
122 #else
123 /* Please see man pages for details */
124 #endif
125 extern ProceduralTextureSettings g_proceduralTexture;
126
127 #if NN_GD_DOCUMENT_TYPE == ENGLISH
128 /* Please see man pages for details */
129 #else
130 /* Please see man pages for details */
131 #endif
132 extern TextureSettings g_texture;
133
134 } // internal
135
136 #if NN_GD_DOCUMENT_TYPE == ENGLISH
137 /* Please see man pages for details
138 */
139 #else
140 /* Please see man pages for details
141 */
142 #endif
143 class Texture2DDescription;
144
145 #if NN_GD_DOCUMENT_TYPE == ENGLISH
146 /* Please see man pages for details
147 */
148 #else
149 /* Please see man pages for details
150 */
151 #endif
152 class TextureCubeDescription;
153
154 #if NN_GD_DOCUMENT_TYPE == ENGLISH
155 /* Please see man pages for details
156 */
157 #else
158 /* Please see man pages for details
159 */
160 #endif
161 class SamplerStateDescription;
162
163 #if NN_GD_DOCUMENT_TYPE == ENGLISH
164 /* Please see man pages for details
165 */
166 #else
167 /* Please see man pages for details
168 */
169 #endif
170 class Texture2DProperties;
171
172 #if NN_GD_DOCUMENT_TYPE == ENGLISH
173 /* Please see man pages for details
174 */
175 #else
176 /* Please see man pages for details
177 */
178 #endif
179 class TextureCubeProperties;
180
181 #if NN_GD_DOCUMENT_TYPE == ENGLISH
182 /* Please see man pages for details
183 */
184 #else
185 /* Please see man pages for details
186 */
187 #endif
188 class Texture2D;
189
190 #if NN_GD_DOCUMENT_TYPE == ENGLISH
191 /* Please see man pages for details
192 */
193 #else
194 /* Please see man pages for details
195 */
196 #endif
197 class TextureCube;
198
199 #if NN_GD_DOCUMENT_TYPE == ENGLISH
200 /* Please see man pages for details
201 */
202 #else
203 /* Please see man pages for details
204 */
205 #endif
206 class SamplerState;
207
208
209 /**************************************************************************************************************************/
210 /****************************************************** Texture Stage *****************************************************/
211 #if NN_GD_DOCUMENT_TYPE == ENGLISH
212 /* Please see man pages for details
213
214
215
216
217
218
219
220 */
221 #else
222 /* Please see man pages for details
223
224
225
226
227
228
229
230 */
231 #endif
232 class TextureStage
233 {
234 public:
235
236 #if NN_GD_DOCUMENT_TYPE == ENGLISH
237 /* Please see man pages for details */
238 #else
239 /* Please see man pages for details */
240 #endif
241 enum TextureUnitId
242 {
243 #if NN_GD_DOCUMENT_TYPE == ENGLISH
244 /* Please see man pages for details */
245 #else
246 /* Please see man pages for details */
247 #endif
248 TEXTURE_UNIT_0 = 0,
249
250 #if NN_GD_DOCUMENT_TYPE == ENGLISH
251 /* Please see man pages for details */
252 #else
253 /* Please see man pages for details */
254 #endif
255 TEXTURE_UNIT_1 = 1,
256
257 #if NN_GD_DOCUMENT_TYPE == ENGLISH
258 /* Please see man pages for details */
259 #else
260 /* Please see man pages for details */
261 #endif
262 TEXTURE_UNIT_2 = 2,
263
264 #if NN_GD_DOCUMENT_TYPE == ENGLISH
265 /* Please see man pages for details */
266 #else
267 /* Please see man pages for details */
268 #endif
269 TEXTURE_UNIT_3_PROCEDURAL = 3,
270
271 TEXTURE_UNIT_MAX_U32 = 0xffffffffu
272 };
273
274 #if NN_GD_DOCUMENT_TYPE == ENGLISH
275 /* Please see man pages for details */
276 #else
277 /* Please see man pages for details */
278 #endif
279 enum SamplerWrapMode
280 {
281 #if NN_GD_DOCUMENT_TYPE == ENGLISH
282 /* Please see man pages for details */
283 #else
284 /* Please see man pages for details */
285 #endif
286 SAMPLER_WRAP_CLAMP_TO_EDGE = 0x0,
287
288 #if NN_GD_DOCUMENT_TYPE == ENGLISH
289 /* Please see man pages for details */
290 #else
291 /* Please see man pages for details */
292 #endif
293 SAMPLER_WRAP_CLAMP_TO_BORDER = 0x1,
294
295 #if NN_GD_DOCUMENT_TYPE == ENGLISH
296 /* Please see man pages for details */
297 #else
298 /* Please see man pages for details */
299 #endif
300 SAMPLER_WRAP_REPEAT = 0x2,
301
302 #if NN_GD_DOCUMENT_TYPE == ENGLISH
303 /* Please see man pages for details */
304 #else
305 /* Please see man pages for details */
306 #endif
307 SAMPLER_WRAP_MIRRORED_REPEAT = 0x3,
308
309 SAMPLER_WRAP_MAX_U32 = 0xffffffffu
310 };
311
312 #if NN_GD_DOCUMENT_TYPE == ENGLISH
313 /* Please see man pages for details */
314 #else
315 /* Please see man pages for details */
316 #endif
317 enum SamplerMinFilter
318 {
319 #if NN_GD_DOCUMENT_TYPE == ENGLISH
320 /* Please see man pages for details */
321 #else
322 /* Please see man pages for details */
323 #endif
324 SAMPLER_MIN_FILTER_NEAREST = 0x0,
325
326 #if NN_GD_DOCUMENT_TYPE == ENGLISH
327 /* Please see man pages for details */
328 #else
329 /* Please see man pages for details */
330 #endif
331 SAMPLER_MIN_FILTER_LINEAR = 0x1,
332
333 #if NN_GD_DOCUMENT_TYPE == ENGLISH
334 /* Please see man pages for details */
335 #else
336 /* Please see man pages for details */
337 #endif
338 SAMPLER_MIN_FILTER_NEAREST_MIPMAP_NEAREST = 0x2,
339
340 #if NN_GD_DOCUMENT_TYPE == ENGLISH
341 /* Please see man pages for details */
342 #else
343 /* Please see man pages for details */
344 #endif
345 SAMPLER_MIN_FILTER_LINEAR_MIPMAP_NEAREST = 0x3,
346
347 #if NN_GD_DOCUMENT_TYPE == ENGLISH
348 /* Please see man pages for details */
349 #else
350 /* Please see man pages for details */
351 #endif
352 SAMPLER_MIN_FILTER_NEAREST_MIPMAP_LINEAR = 0x4,
353
354 #if NN_GD_DOCUMENT_TYPE == ENGLISH
355 /* Please see man pages for details */
356 #else
357 /* Please see man pages for details */
358 #endif
359 SAMPLER_MIN_FILTER_LINEAR_MIPMAP_LINEAR = 0x5,
360
361 SAMPLER_MIN_FILTER_RESERVED_MAX_U32 = 0xffffffffu
362 };
363
364 #if NN_GD_DOCUMENT_TYPE == ENGLISH
365 /* Please see man pages for details */
366 #else
367 /* Please see man pages for details */
368 #endif
369 enum SamplerMagFilter
370 {
371 #if NN_GD_DOCUMENT_TYPE == ENGLISH
372 /* Please see man pages for details */
373 #else
374 /* Please see man pages for details */
375 #endif
376 SAMPLER_MAG_FILTER_NEAREST = 0x0,
377
378 #if NN_GD_DOCUMENT_TYPE == ENGLISH
379 /* Please see man pages for details */
380 #else
381 /* Please see man pages for details */
382 #endif
383 SAMPLER_MAG_FILTER_LINEAR = 0x1,
384
385 SAMPLER_MAG_FILTER_RESERVED_MAX_U32 = 0xffffffffu
386 };
387
388 #if NN_GD_DOCUMENT_TYPE == ENGLISH
389 /* Please see man pages for details */
390 #else
391 /* Please see man pages for details */
392 #endif
393 enum TextureCoordinateSourceUnit2
394 {
395 #if NN_GD_DOCUMENT_TYPE == ENGLISH
396 /* Please see man pages for details */
397 #else
398 /* Please see man pages for details */
399 #endif
400 UNIT2_TEXTURE_COORDINATE_FROM_UNIT_2 = 0x0,
401
402 #if NN_GD_DOCUMENT_TYPE == ENGLISH
403 /* Please see man pages for details */
404 #else
405 /* Please see man pages for details */
406 #endif
407 UNIT2_TEXTURE_COORDINATE_FROM_UNIT_1 = 0x1,
408
409 UNIT2_TEXTURE_COORDINATE_RESERVED_MAX_U32 = 0xffffffffu
410 };
411
412 #if NN_GD_DOCUMENT_TYPE == ENGLISH
413 /* Please see man pages for details */
414 #else
415 /* Please see man pages for details */
416 #endif
417 enum TextureCoordinateSourceUnit3Procedural
418 {
419 #if NN_GD_DOCUMENT_TYPE == ENGLISH
420 /* Please see man pages for details */
421 #else
422 /* Please see man pages for details */
423 #endif
424 UNIT3_PROCEDURAL_TEXTURE_COORDINATE_FROM_UNIT_0 = 0x0,
425
426 #if NN_GD_DOCUMENT_TYPE == ENGLISH
427 /* Please see man pages for details */
428 #else
429 /* Please see man pages for details */
430 #endif
431 UNIT3_PROCEDURAL_TEXTURE_COORDINATE_FROM_UNIT_1 = 0x1,
432
433 #if NN_GD_DOCUMENT_TYPE == ENGLISH
434 /* Please see man pages for details */
435 #else
436 /* Please see man pages for details */
437 #endif
438 UNIT3_PROCEDURAL_TEXTURE_COORDINATE_FROM_UNIT_2 = 0x2,
439
440 UNIT3_PROCEDURAL_TEXTURE_COORDINATE_RESERVED_MAX_U32 = 0xffffffffu
441 };
442
443 #if NN_GD_DOCUMENT_TYPE == ENGLISH
444 /* Please see man pages for details
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462 */
463 #else
464 /* Please see man pages for details
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481 */
482 #endif
483 static nnResult CreateTexture2D(const Texture2DResource* tex2DResource, Texture2DDescription* desc, Texture2D** texture2D);
484
485 #if NN_GD_DOCUMENT_TYPE == ENGLISH
486 /* Please see man pages for details
487
488
489
490
491
492
493 */
494 #else
495 /* Please see man pages for details
496
497
498
499
500
501
502 */
503 #endif
504 static nnResult GetTexture2DProperties(const Texture2D* texture2D, Texture2DProperties* properties);
505
506 #if NN_GD_DOCUMENT_TYPE == ENGLISH
507 /* Please see man pages for details
508
509
510
511
512
513 */
514 #else
515 /* Please see man pages for details
516
517
518
519
520
521 */
522 #endif
523 static nnResult ReleaseTexture2D(Texture2D* texture2D);
524
525
526 #if NN_GD_DOCUMENT_TYPE == ENGLISH
527 /* Please see man pages for details
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548 */
549 #else
550 /* Please see man pages for details
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573 */
574 #endif
575 static nnResult CreateTextureCube(Texture2DResource** tex2DResources, TextureCubeDescription* desc, TextureCube** textureCube);
576
577 #if NN_GD_DOCUMENT_TYPE == ENGLISH
578 /* Please see man pages for details
579
580
581
582
583
584 */
585 #else
586 /* Please see man pages for details
587
588
589
590
591
592
593 */
594 #endif
595 static nnResult GetTextureCubeProperties(const TextureCube* TextureCube, TextureCubeProperties* properties);
596
597 #if NN_GD_DOCUMENT_TYPE == ENGLISH
598 /* Please see man pages for details
599
600
601
602
603
604 */
605 #else
606 /* Please see man pages for details
607
608
609
610
611
612 */
613 #endif
614 static nnResult ReleaseTextureCube(TextureCube* textureCube);
615
616 #if NN_GD_DOCUMENT_TYPE == ENGLISH
617 /* Please see man pages for details
618
619
620
621
622
623
624
625
626 */
627 #else
628 /* Please see man pages for details
629
630
631
632
633
634
635
636
637 */
638 #endif
639 static nnResult SetTexture(TextureUnitId textureUnitId, Texture2D& texture2D);
640
641 #if NN_GD_DOCUMENT_TYPE == ENGLISH
642 /* Please see man pages for details
643
644
645
646
647
648 */
649 #else
650 /* Please see man pages for details
651
652
653
654
655
656 */
657 #endif
658 static nnResult SetTextureUnit0(TextureCube& textureCube);
659
660 #if NN_GD_DOCUMENT_TYPE == ENGLISH
661 /* Please see man pages for details
662
663 */
664 #else
665 /* Please see man pages for details
666
667 */
668 #endif
669 static void SetTexture2DProjectionForUnit0(gdBool value);
670
671 #if NN_GD_DOCUMENT_TYPE == ENGLISH
672 /* Please see man pages for details
673
674 */
675 #else
676 /* Please see man pages for details
677
678 */
679 #endif
680 static void SetTextureCoordinateSourceForUnit2(TextureCoordinateSourceUnit2 u);
681
682 #if NN_GD_DOCUMENT_TYPE == ENGLISH
683 /* Please see man pages for details
684
685 */
686 #else
687 /* Please see man pages for details
688
689 */
690 #endif
691 static void SetTextureCoordinateSourceForUnit3Procedural(TextureCoordinateSourceUnit3Procedural u);
692
693 #if NN_GD_DOCUMENT_TYPE == ENGLISH
694 /* Please see man pages for details
695
696
697
698
699
700
701
702
703 */
704 #else
705 /* Please see man pages for details
706
707
708
709
710
711
712
713
714 */
715 #endif
716 static nnResult CreateSamplerState(const SamplerStateDescription* desc, SamplerState** sampler);
717
718 #if NN_GD_DOCUMENT_TYPE == ENGLISH
719 /* Please see man pages for details
720
721
722
723
724
725
726
727
728 */
729 #else
730 /* Please see man pages for details
731
732
733
734
735
736
737
738
739 */
740 #endif
741 static nnResult SetSamplerState(TextureUnitId textureUnitId, SamplerState* sampler);
742
743 #if NN_GD_DOCUMENT_TYPE == ENGLISH
744 /* Please see man pages for details
745
746
747
748
749
750
751 */
752 #else
753 /* Please see man pages for details
754
755
756
757
758
759
760 */
761 #endif
762 static nnResult ReleaseSamplerState(SamplerState* sampler);
763
764 #if NN_GD_DOCUMENT_TYPE == ENGLISH
765 /* Please see man pages for details
766
767 */
768 #else
769 /* Please see man pages for details
770
771 */
772 #endif
773 static void SetPerspectiveShadow(gdBool v);
774
775 #if NN_GD_DOCUMENT_TYPE == ENGLISH
776 /* Please see man pages for details
777
778 */
779 #else
780 /* Please see man pages for details
781
782 */
783 #endif
784 static void SetShadowZBias(f32 zBias);
785
786 }; // TextureStage
787
788 /*************************************************************************************************************************/
789 /**************************************************** Procedural Texture *************************************************/
790 #if NN_GD_DOCUMENT_TYPE == ENGLISH
791 /* Please see man pages for details
792
793
794
795
796
797
798 */
799 #else
800 /* Please see man pages for details
801
802
803
804
805
806
807 */
808 #endif
809 class ProceduralTextureStage
810 {
811 public:
812
813 #if NN_GD_DOCUMENT_TYPE == ENGLISH
814 /* Please see man pages for details
815
816 */
817 #else
818 /* Please see man pages for details */
819 #endif
820 enum UvMap
821 {
822 UV_MAP_U = 0x0,
823 UV_MAP_U2 = 0x1,
824 UV_MAP_V = 0x2,
825 UV_MAP_V2 = 0x3,
826 UV_MAP_ADD = 0x4,
827 UV_MAP_ADD2 = 0x5,
828 UV_MAP_ADDSQRT2 = 0x6,
829 UV_MAP_MIN = 0x7,
830 UV_MAP_MAX = 0x8,
831 UV_MAP_RMAX = 0x9,
832
833 UV_MAP_RESERVED_MAX_U32 = 0xffffffffu
834 };
835
836 #if NN_GD_DOCUMENT_TYPE == ENGLISH
837 /* Please see man pages for details
838
839
840 */
841 #else
842 /* Please see man pages for details
843
844
845 */
846 #endif
847 enum Clamp
848 {
849 #if NN_GD_DOCUMENT_TYPE == ENGLISH
850 /* Please see man pages for details */
851 #else
852 /* Please see man pages for details */
853 #endif
854 CLAMP_TO_ZERO = 0x0,
855
856 #if NN_GD_DOCUMENT_TYPE == ENGLISH
857 /* Please see man pages for details */
858 #else
859 /* Please see man pages for details */
860 #endif
861 CLAMP_TO_EDGE = 0x1,
862
863 #if NN_GD_DOCUMENT_TYPE == ENGLISH
864 /* Please see man pages for details */
865 #else
866 /* Please see man pages for details */
867 #endif
868 CLAMP_SYMMETRICAL_REPEAT = 0x2,
869
870 #if NN_GD_DOCUMENT_TYPE == ENGLISH
871 /* Please see man pages for details */
872 #else
873 /* Please see man pages for details */
874 #endif
875 CLAMP_MIRRORED_REPEAT = 0x3,
876
877 #if NN_GD_DOCUMENT_TYPE == ENGLISH
878 /* Please see man pages for details */
879 #else
880 /* Please see man pages for details */
881 #endif
882 CLAMP_PULSE = 0x4,
883
884 CLAMP_RESERVED_MAX_U32 = 0xffffffffu
885 };
886
887 #if NN_GD_DOCUMENT_TYPE == ENGLISH
888 /* Please see man pages for details
889
890 */
891 #else
892 /* Please see man pages for details */
893 #endif
894 enum Shift
895 {
896 SHIFT_NONE = 0x0,
897 SHIFT_ODD = 0x1,
898 SHIFT_EVEN = 0x2,
899
900 SHIFT_RESERVED_MAX_U32 = 0xffffffffu
901 };
902
903 #if NN_GD_DOCUMENT_TYPE == ENGLISH
904 /* Please see man pages for details */
905 #else
906 /* Please see man pages for details */
907 #endif
908 enum MinFilter
909 {
910 #if NN_GD_DOCUMENT_TYPE == ENGLISH
911 /* Please see man pages for details */
912 #else
913 /* Please see man pages for details */
914 #endif
915 MIN_FILTER_NEAREST = 0x0,
916
917 #if NN_GD_DOCUMENT_TYPE == ENGLISH
918 /* Please see man pages for details */
919 #else
920 /* Please see man pages for details */
921 #endif
922 MIN_FILTER_LINEAR = 0x1,
923
924 #if NN_GD_DOCUMENT_TYPE == ENGLISH
925 /* Please see man pages for details */
926 #else
927 /* Please see man pages for details */
928 #endif
929 MIN_FILTER_NEAREST_MIPMAP_NEAREST = 0x2,
930
931 #if NN_GD_DOCUMENT_TYPE == ENGLISH
932 /* Please see man pages for details */
933 #else
934 /* Please see man pages for details */
935 #endif
936 MIN_FILTER_LINEAR_MIPMAP_NEAREST = 0x3,
937
938 #if NN_GD_DOCUMENT_TYPE == ENGLISH
939 /* Please see man pages for details */
940 #else
941 /* Please see man pages for details */
942 #endif
943 MIN_FILTER_NEAREST_MIPMAP_LINEAR = 0x4,
944
945 #if NN_GD_DOCUMENT_TYPE == ENGLISH
946 /* Please see man pages for details */
947 #else
948 /* Please see man pages for details */
949 #endif
950 MIN_FILTER_LINEAR_MIPMAP_LINEAR = 0x5,
951
952 MIN_FILTER_RESERVED_MAX_U32 = 0xffffffffu
953 };
954
955 #if NN_GD_DOCUMENT_TYPE == ENGLISH
956 /* Please see man pages for details
957
958
959 */
960 #else
961 /* Please see man pages for details
962
963
964 */
965 #endif
966 static void SetClampUV(Clamp u, Clamp v);
967
968 #if NN_GD_DOCUMENT_TYPE == ENGLISH
969 /* Please see man pages for details
970
971 */
972 #else
973 /* Please see man pages for details
974
975 */
976 #endif
977 static void SetRgbMap(UvMap rgbMap);
978
979 #if NN_GD_DOCUMENT_TYPE == ENGLISH
980 /* Please see man pages for details
981
982 */
983 #else
984 /* Please see man pages for details
985
986 */
987 #endif
988 static void SetAlphaMap(UvMap alphaMap);
989
990 #if NN_GD_DOCUMENT_TYPE == ENGLISH
991 /* Please see man pages for details
992
993 */
994 #else
995 /* Please see man pages for details
996
997 */
998 #endif
999 static void SetAlphaSeparate(gdBool alphaSeparate);
1000
1001 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1002 /* Please see man pages for details
1003
1004 */
1005 #else
1006 /* Please see man pages for details
1007
1008 */
1009 #endif
1010 static void SetNoiseEnable(gdBool noiseEnable);
1011
1012 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1013 /* Please see man pages for details
1014
1015
1016 */
1017 #else
1018 /* Please see man pages for details
1019
1020
1021 */
1022 #endif
1023 static void SetShiftUV(Shift u, Shift v);
1024
1025 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1026 /* Please see man pages for details
1027
1028 */
1029 #else
1030 /* Please see man pages for details
1031
1032 */
1033 #endif
1034 static void SetTexBias(f32 texBias);
1035
1036 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1037 /* Please see man pages for details
1038
1039 */
1040 #else
1041 /* Please see man pages for details
1042
1043 */
1044 #endif
1045 static void SetMinFilter(MinFilter minFilter);
1046
1047 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1048 /* Please see man pages for details
1049
1050 */
1051 #else
1052 /* Please see man pages for details
1053
1054 */
1055 #endif
1056 static void SetTexWidth(u8 texWidth);
1057
1058 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1059 /* Please see man pages for details
1060
1061 */
1062 #else
1063 /* Please see man pages for details
1064
1065 */
1066 #endif
1067 static void SetTexOffset(u8 texOffset);
1068
1069 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1070 /* Please see man pages for details
1071
1072
1073 */
1074 #else
1075 /* Please see man pages for details
1076
1077
1078 */
1079 #endif
1080 static void SetNoiseUV(f32 noiseU[3], f32 noiseV[3]);
1081
1082 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1083 /* Please see man pages for details
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096 */
1097 #else
1098 /* Please see man pages for details
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111 */
1112 #endif
1113 static nnResult UploadLookUpTableRgbMapFloat(u32 index, f32 *Map, f32 *MapDelta, u32 lutSize);
1114
1115 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1116 /* Please see man pages for details
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127 */
1128 #else
1129 /* Please see man pages for details
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140 */
1141 #endif
1142 static nnResult UploadLookUpTableRgbMapNative(u32 index, u32 *Map, u32 lutSize);
1143
1144 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1145 /* Please see man pages for details
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158 */
1159 #else
1160 /* Please see man pages for details
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173 */
1174 #endif
1175 static nnResult UploadLookUpTableAlphaMapFloat(u32 index, f32 *Map, f32 *MapDelta, u32 lutSize);
1176
1177 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1178 /* Please see man pages for details
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189 */
1190 #else
1191 /* Please see man pages for details
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202 */
1203 #endif
1204 static nnResult UploadLookUpTableAlphaMapNative(u32 index, u32 *Map, u32 lutSize);
1205
1206 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1207 /* Please see man pages for details
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220 */
1221 #else
1222 /* Please see man pages for details
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235 */
1236 #endif
1237 static nnResult UploadLookUpTableNoiseMapFloat(u32 index, f32 *Map, f32 *MapDelta, u32 lutSize);
1238
1239 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1240 /* Please see man pages for details
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251 */
1252 #else
1253 /* Please see man pages for details
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264 */
1265 #endif
1266 static nnResult UploadLookUpTableNoiseMapNative(u32 index, u32 *Map, u32 lutSize);
1267
1268 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1269 /* Please see man pages for details
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283 */
1284 #else
1285 /* Please see man pages for details
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298 */
1299 #endif
1300 static nnResult UploadLookUpTableColorMapFloat(u32 index, f32 **Map, f32 **MapDelta, u32 lutSize);
1301
1302 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1303 /* Please see man pages for details
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315 */
1316 #else
1317 /* Please see man pages for details
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331 */
1332 #endif
1333 static nnResult UploadLookUpTableColorMapNative(u32 index, u32 *Map, u32 *MapDelta, u32 lutSize);
1334
1335 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1336 /* Please see man pages for details
1337
1338 */
1339 #else
1340 /* Please see man pages for details
1341
1342 */
1343 #endif
1344 class Helper
1345 {
1346 public:
1347 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1348 /* Please see man pages for details
1349
1350
1351
1352
1353
1354
1355
1356
1357 */
1358 #else
1359 /* Please see man pages for details
1360
1361
1362
1363
1364
1365
1366
1367
1368 */
1369 #endif
1370 static nnResult ConvertLookUpTableDataFloatToNative(f32 *valueData, f32 *deltaData, u32 lutSize, u32* destination);
1371
1372 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1373 /* Please see man pages for details
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386 */
1387 #else
1388 /* Please see man pages for details
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402 */
1403 #endif
1404 static nnResult ConvertColorLookUpTableDataFloatToNative(f32 **refArray, f32 **deltaArray, u32 lutSize, u32* destRef, u32* destDelta);
1405 };
1406
1407 }; // ProceduralTextureStage
1408
1409 /*****************************************************************************************************************************/
1410 /********************************************* Descriptor/Properties class definition ****************************************/
1411 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1412 /* Please see man pages for details
1413
1414
1415 */
1416 #else
1417 /* Please see man pages for details
1418
1419
1420 */
1421 #endif
1422 class Texture2DDescription
1423 {
1424 public:
1425 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1426 /* Please see man pages for details */
1427 #else
1428 /* Please see man pages for details */
1429 #endif
1430 s32 m_MinMipLevelIndex;
1431
1432 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1433 /* Please see man pages for details */
1434 #else
1435 /* Please see man pages for details */
1436 #endif
1437 s32 m_MaxMipLevelIndex;
1438 };
1439
1440
1441 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1442 /* Please see man pages for details
1443
1444
1445 */
1446 #else
1447 /* Please see man pages for details
1448
1449
1450 */
1451 #endif
1452 class Texture2DProperties
1453 {
1454 public:
1455 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1456 /* Please see man pages for details */
1457 #else
1458 /* Please see man pages for details */
1459 #endif
1460 u32 m_Width;
1461
1462 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1463 /* Please see man pages for details */
1464 #else
1465 /* Please see man pages for details */
1466 #endif
1467 u32 m_Height;
1468
1469 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1470 /* Please see man pages for details */
1471 #else
1472 /* Please see man pages for details */
1473 #endif
1474 u32 m_CountMipLevels;
1475
1476 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1477 /* Please see man pages for details */
1478 #else
1479 /* Please see man pages for details */
1480 #endif
1481 u32 m_PixelSize;
1482
1483 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1484 /* Please see man pages for details */
1485 #else
1486 /* Please see man pages for details */
1487 #endif
1488 Resource::NativeFormat m_Format;
1489
1490 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1491 /* Please see man pages for details */
1492 #else
1493 /* Please see man pages for details */
1494 #endif
1495 Memory::MemoryLayout m_MemLayout;
1496
1497 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1498 /* Please see man pages for details */
1499 #else
1500 /* Please see man pages for details */
1501 #endif
1502 Memory::MemoryLocation m_MemLocation;
1503
1504 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1505 /* Please see man pages for details */
1506 #else
1507 /* Please see man pages for details */
1508 #endif
1509 u8* m_MemAddr;
1510
1511 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1512 /* Please see man pages for details
1513
1514 */
1515 #else
1516 /* Please see man pages for details
1517
1518
1519
1520
1521 */
1522 #endif
GetMipmapAddress(u32 mipmapLevel)1523 MipmapResourceInfo GetMipmapAddress(u32 mipmapLevel)
1524 {
1525 MipmapResourceInfo mipmapInfo;
1526 mipmapInfo.m_Width = m_Width;
1527 mipmapInfo.m_Height = m_Height;
1528 mipmapInfo.m_MemAddr = m_MemAddr;
1529 for (u32 i=0; i<mipmapLevel; ++i)
1530 {
1531 mipmapInfo.m_MemAddr += (mipmapInfo.m_Width * mipmapInfo.m_Height * m_PixelSize) >> 3;
1532 mipmapInfo.m_Width >>= 1;
1533 mipmapInfo.m_Height >>= 1;
1534 }
1535 return mipmapInfo;
1536 }
1537 }; // Texture2DProperties
1538
1539
1540 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1541 /* Please see man pages for details
1542
1543
1544 */
1545 #else
1546 /* Please see man pages for details
1547
1548
1549 */
1550 #endif
1551 class TextureCubeDescription
1552 {
1553 public:
1554 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1555 /* Please see man pages for details */
1556 #else
1557 /* Please see man pages for details */
1558 #endif
1559 s32 m_MinMipLevelIndex[6];
1560
1561 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1562 /* Please see man pages for details */
1563 #else
1564 /* Please see man pages for details */
1565 #endif
1566 s32 m_MaxMipLevelIndex[6];
1567
1568 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1569 /* Please see man pages for details */
1570 #else
1571 /* Please see man pages for details */
1572 #endif
TextureCubeDescription()1573 TextureCubeDescription(){
1574 for (int i=0; i<6; ++i){
1575 m_MinMipLevelIndex[i] = 0;
1576 m_MaxMipLevelIndex[i] = -1;
1577 }
1578 }
1579
1580 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1581 /* Please see man pages for details
1582
1583
1584 */
1585 #else
1586 /* Please see man pages for details
1587
1588
1589 */
1590 #endif
TextureCubeDescription(int minMipLevelIndex,int maxMipLevelIndex)1591 TextureCubeDescription(int minMipLevelIndex, int maxMipLevelIndex){
1592 for (int i=0; i<6; ++i){
1593 m_MinMipLevelIndex[i] = minMipLevelIndex;
1594 m_MaxMipLevelIndex[i] = maxMipLevelIndex;
1595 }
1596 }
1597 }; // TextureCubeDescription
1598
1599
1600 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1601 /* Please see man pages for details
1602
1603
1604 */
1605 #else
1606 /* Please see man pages for details
1607
1608
1609 */
1610 #endif
1611 class TextureCubeProperties
1612 {
1613 public:
1614 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1615 /* Please see man pages for details */
1616 #else
1617 /* Please see man pages for details */
1618 #endif
1619 u32 m_Width;
1620
1621 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1622 /* Please see man pages for details */
1623 #else
1624 /* Please see man pages for details */
1625 #endif
1626 u32 m_Height;
1627
1628 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1629 /* Please see man pages for details */
1630 #else
1631 /* Please see man pages for details */
1632 #endif
1633 u32 m_CountMipLevels;
1634
1635 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1636 /* Please see man pages for details */
1637 #else
1638 /* Please see man pages for details */
1639 #endif
1640 u32 m_PixelSize;
1641
1642 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1643 /* Please see man pages for details */
1644 #else
1645 /* Please see man pages for details */
1646 #endif
1647 Resource::NativeFormat m_Format;
1648
1649 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1650 /* Please see man pages for details */
1651 #else
1652 /* Please see man pages for details */
1653 #endif
1654 Memory::MemoryLayout m_MemLayout;
1655
1656 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1657 /* Please see man pages for details */
1658 #else
1659 /* Please see man pages for details */
1660 #endif
1661 Memory::MemoryLocation m_MemLocation;
1662
1663 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1664 /* Please see man pages for details */
1665 #else
1666 /* Please see man pages for details */
1667 #endif
1668 u8* m_MemAddr[6];
1669
1670 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1671 /* Please see man pages for details
1672
1673
1674 */
1675 #else
1676 /* Please see man pages for details
1677
1678
1679
1680
1681
1682 */
1683 #endif
GetMipmapAddress(u32 faceIndex,u32 mipmapLevel)1684 MipmapResourceInfo GetMipmapAddress(u32 faceIndex, u32 mipmapLevel)
1685 {
1686 MipmapResourceInfo mipmapInfo;
1687 mipmapInfo.m_Width = m_Width;
1688 mipmapInfo.m_Height = m_Height;
1689 mipmapInfo.m_MemAddr = m_MemAddr[faceIndex];
1690 for (u32 i=0; i<mipmapLevel; ++i)
1691 {
1692 mipmapInfo.m_MemAddr += (mipmapInfo.m_Width * mipmapInfo.m_Height * m_PixelSize) >> 3;
1693 mipmapInfo.m_Width >>= 1;
1694 mipmapInfo.m_Height >>= 1;
1695 }
1696 return mipmapInfo;
1697 }
1698 }; // TextureCubeProperties
1699
1700
1701 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1702 /* Please see man pages for details
1703
1704
1705 */
1706 #else
1707 /* Please see man pages for details
1708
1709
1710 */
1711 #endif
1712 class SamplerStateDescription
1713 {
1714 public:
1715
1716 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1717 /* Please see man pages for details
1718
1719 */
1720 #else
1721 /* Please see man pages for details
1722
1723 */
1724 #endif
1725 TextureStage::SamplerMinFilter m_MinFilter;
1726
1727 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1728 /* Please see man pages for details
1729
1730 */
1731 #else
1732 /* Please see man pages for details
1733
1734 */
1735 #endif
1736 TextureStage::SamplerMagFilter m_MagFilter;
1737
1738 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1739 /* Please see man pages for details
1740
1741 */
1742 #else
1743 /* Please see man pages for details
1744
1745 */
1746 #endif
1747 TextureStage::SamplerWrapMode m_WrapS;
1748
1749 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1750 /* Please see man pages for details
1751
1752 */
1753 #else
1754 /* Please see man pages for details
1755
1756 */
1757 #endif
1758 TextureStage::SamplerWrapMode m_WrapT;
1759
1760 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1761 /* Please see man pages for details
1762
1763 */
1764 #else
1765 /* Please see man pages for details
1766
1767 */
1768 #endif
1769 u8 m_BorderColor[4];
1770
1771 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1772 /* Please see man pages for details
1773
1774 */
1775 #else
1776 /* Please see man pages for details
1777
1778 */
1779 #endif
1780 u32 m_LodBias;
1781
1782 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1783 /* Please see man pages for details
1784
1785 */
1786 #else
1787 /* Please see man pages for details
1788
1789 */
1790 #endif
1791 u32 m_MinLod;
1792
1793 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1794 /* Please see man pages for details
1795
1796 */
1797 #else
1798 /* Please see man pages for details
1799
1800 */
1801 #endif
1802 u32 m_MaxLod;
1803
1804 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1805 /* Please see man pages for details
1806
1807 */
1808 #else
1809 /* Please see man pages for details
1810
1811 */
1812 #endif
SetMinFilter(TextureStage::SamplerMinFilter filter)1813 void SetMinFilter(TextureStage::SamplerMinFilter filter) { m_MinFilter = filter; }
1814
1815 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1816 /* Please see man pages for details
1817
1818 */
1819 #else
1820 /* Please see man pages for details
1821
1822 */
1823 #endif
SetMagFilter(TextureStage::SamplerMagFilter filter)1824 void SetMagFilter(TextureStage::SamplerMagFilter filter) { m_MagFilter = filter; }
1825
1826 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1827 /* Please see man pages for details
1828
1829 */
1830 #else
1831 /* Please see man pages for details
1832
1833 */
1834 #endif
SetWrapS(TextureStage::SamplerWrapMode wrap)1835 void SetWrapS(TextureStage::SamplerWrapMode wrap) { m_WrapS = wrap; }
1836
1837 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1838 /* Please see man pages for details
1839
1840 */
1841 #else
1842 /* Please see man pages for details
1843
1844 */
1845 #endif
SetWrapT(TextureStage::SamplerWrapMode wrap)1846 void SetWrapT(TextureStage::SamplerWrapMode wrap) { m_WrapT = wrap; }
1847
1848 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1849 /* Please see man pages for details
1850
1851
1852
1853
1854 */
1855 #else
1856 /* Please see man pages for details
1857
1858
1859
1860
1861 */
1862 #endif
SetBorderColor(u8 colorR,u8 colorG,u8 colorB,u8 colorA)1863 void SetBorderColor(u8 colorR, u8 colorG, u8 colorB, u8 colorA)
1864 {
1865 m_BorderColor[0] = colorR;
1866 m_BorderColor[1] = colorG;
1867 m_BorderColor[2] = colorB;
1868 m_BorderColor[3] = colorA;
1869 }
1870
1871 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1872 /* Please see man pages for details
1873
1874
1875
1876
1877 */
1878 #else
1879 /* Please see man pages for details
1880
1881
1882
1883
1884 */
1885 #endif
SetBorderColor(f32 colorR,f32 colorG,f32 colorB,f32 colorA)1886 void SetBorderColor(f32 colorR, f32 colorG, f32 colorB, f32 colorA)
1887 {
1888 m_BorderColor[0] = Utils::FloatToUnsignedByte(colorR);
1889 m_BorderColor[1] = Utils::FloatToUnsignedByte(colorG);
1890 m_BorderColor[2] = Utils::FloatToUnsignedByte(colorB);
1891 m_BorderColor[3] = Utils::FloatToUnsignedByte(colorA);
1892 }
1893
1894 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1895 /* Please see man pages for details
1896
1897 */
1898 #else
1899 /* Please see man pages for details
1900
1901 */
1902 #endif
SetLodBias(f32 biasValue)1903 void SetLodBias(f32 biasValue) { m_LodBias = Utils::Float32ToFix13Fraction8(biasValue); }
1904
1905 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1906 /* Please see man pages for details
1907
1908 */
1909 #else
1910 /* Please see man pages for details
1911
1912 */
1913 #endif
SetMinLod(u32 lodValue)1914 void SetMinLod(u32 lodValue) { m_MinLod = lodValue; }
1915
1916 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1917 /* Please see man pages for details
1918
1919 */
1920 #else
1921 /* Please see man pages for details
1922
1923 */
1924 #endif
SetMaxLod(u32 lodValue)1925 void SetMaxLod(u32 lodValue) { m_MaxLod = lodValue; }
1926
SamplerStateDescription()1927 SamplerStateDescription() { ToDefault(); }
1928
1929 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1930 /* Please see man pages for details
1931 */
1932 #else
1933 /* Please see man pages for details
1934 */
1935 #endif
ToDefault()1936 void ToDefault()
1937 {
1938 m_MinFilter = TextureStage::SAMPLER_MIN_FILTER_NEAREST;
1939 m_MagFilter = TextureStage::SAMPLER_MAG_FILTER_NEAREST;
1940 m_WrapS = TextureStage::SAMPLER_WRAP_REPEAT;
1941 m_WrapT = TextureStage::SAMPLER_WRAP_REPEAT;
1942 m_BorderColor[0] = m_BorderColor[1] = m_BorderColor[2] = m_BorderColor[3] = 0;
1943 m_LodBias = 0;
1944 m_MinLod = 0;
1945 m_MaxLod = UINT_MAX;
1946 }
1947
1948 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1949 /* Please see man pages for details
1950 */
1951 #else
1952 /* Please see man pages for details
1953 */
1954 #endif
SetShadow()1955 void SetShadow()
1956 {
1957 m_MinFilter = TextureStage::SAMPLER_MIN_FILTER_LINEAR;
1958 m_MagFilter = TextureStage::SAMPLER_MAG_FILTER_LINEAR;
1959 m_WrapS = TextureStage::SAMPLER_WRAP_CLAMP_TO_BORDER;
1960 m_WrapT = TextureStage::SAMPLER_WRAP_CLAMP_TO_BORDER;
1961 m_BorderColor[0] = m_BorderColor[1] = m_BorderColor[2] = m_BorderColor[3] = 0;
1962 m_LodBias = 0;
1963 m_MinLod = 0;
1964 m_MaxLod = UINT_MAX;
1965 }
1966
1967 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1968 /* Please see man pages for details
1969 */
1970 #else
1971 /* Please see man pages for details
1972 */
1973 #endif
SetShadowCube()1974 void SetShadowCube()
1975 {
1976 m_MinFilter = TextureStage::SAMPLER_MIN_FILTER_LINEAR;
1977 m_MagFilter = TextureStage::SAMPLER_MAG_FILTER_LINEAR;
1978 m_WrapS = TextureStage::SAMPLER_WRAP_CLAMP_TO_EDGE;
1979 m_WrapT = TextureStage::SAMPLER_WRAP_CLAMP_TO_EDGE;
1980 m_BorderColor[0] = m_BorderColor[1] = m_BorderColor[2] = m_BorderColor[3] = 0;
1981 m_LodBias = 0;
1982 m_MinLod = 0;
1983 m_MaxLod = UINT_MAX;
1984 }
1985
1986 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1987 /* Please see man pages for details
1988 */
1989 #else
1990 /* Please see man pages for details
1991 */
1992 #endif
SetGas()1993 void SetGas()
1994 {
1995 m_MinFilter = TextureStage::SAMPLER_MIN_FILTER_NEAREST;
1996 m_MagFilter = TextureStage::SAMPLER_MAG_FILTER_NEAREST;
1997 m_WrapS = TextureStage::SAMPLER_WRAP_CLAMP_TO_EDGE;
1998 m_WrapT = TextureStage::SAMPLER_WRAP_CLAMP_TO_EDGE;
1999 m_BorderColor[0] = m_BorderColor[1] = m_BorderColor[2] = m_BorderColor[3] = 0;
2000 m_LodBias = 0;
2001 m_MinLod = 0;
2002 m_MaxLod = UINT_MAX;
2003 }
2004 }; // SamplerStateDescription
2005
2006
2007 /**************************************************************************************************************************/
2008 /******************************************* TextureStage inline functions *************************************************/
SetPerspectiveShadow(gdBool v)2009 NN_FORCE_INLINE void TextureStage::SetPerspectiveShadow(gdBool v)
2010 {
2011 // 0x8b[0:0]
2012 internal::g_texture.m_ShadowTextureSetting &= ~(0x1);
2013 if (!v) internal::g_texture.m_ShadowTextureSetting |= 0x1;
2014 internal::g_texture.m_DirtyFieldMask |= internal::TextureSettings::TXMASK_UPDATE_TEXTURE_SHADOW_SETTINGS;
2015 }
2016
SetShadowZBias(f32 zBias)2017 NN_FORCE_INLINE void TextureStage::SetShadowZBias(f32 zBias)
2018 {
2019 u32 bias = Utils::Float32ToUnsignedFix24(zBias);
2020
2021 // Bias: 0x8b[23:1]
2022 internal::g_texture.m_ShadowTextureSetting &= ~(0x7fffff << 1);
2023 internal::g_texture.m_ShadowTextureSetting |= bias & 0xfffffe;
2024
2025 // Scale: 0x8b[31:24]
2026 /*u32 scale = ((((*(u32*)&zScale) >> 23) & 0xff) - 127);
2027 internal::g_texture.m_ShadowTextureSetting &= ~(0xff000000);
2028 internal::g_texture.m_ShadowTextureSetting |= scale << 24;*/
2029
2030 internal::g_texture.m_DirtyFieldMask |= internal::TextureSettings::TXMASK_UPDATE_TEXTURE_SHADOW_SETTINGS;
2031 }
2032
SetTextureCoordinateSourceForUnit2(TextureCoordinateSourceUnit2 u)2033 NN_FORCE_INLINE void TextureStage::SetTextureCoordinateSourceForUnit2(TextureCoordinateSourceUnit2 u)
2034 {
2035 internal::g_texture.m_TextureUnitControl &= ~(0x1 << 13);
2036 internal::g_texture.m_TextureUnitControl |= (u & 0x1) << 13;
2037 internal::g_texture.m_DirtyFieldMask |= internal::TextureSettings::TXMASK_SEND_TEXTURE_UNIT_CONTROL;
2038 }
2039
2040 /**************************************************************************************************************************/
2041 /**************************************** ProceduralTextureStage inline functions **********************************************/
2042
SetTextureCoordinateSourceForUnit3Procedural(TextureCoordinateSourceUnit3Procedural u)2043 NN_FORCE_INLINE void TextureStage::SetTextureCoordinateSourceForUnit3Procedural(TextureCoordinateSourceUnit3Procedural u)
2044 {
2045 internal::g_texture.m_TextureUnitControl &= ~(0x3 << 8);
2046 internal::g_texture.m_TextureUnitControl |= (u & 0x3) << 8;
2047 internal::g_texture.m_DirtyFieldMask |= internal::TextureSettings::TXMASK_SEND_TEXTURE_UNIT_CONTROL;
2048 }
2049
2050
SetClampUV(Clamp u,Clamp v)2051 NN_FORCE_INLINE void ProceduralTextureStage::SetClampUV(Clamp u, Clamp v)
2052 {
2053 internal::g_proceduralTexture.m_Proctex0 &= ~(0x3f);
2054 internal::g_proceduralTexture.m_Proctex0 |= (u & 0x7) | ((v & 0x7) << 3);
2055 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2056 }
2057
SetRgbMap(UvMap rgbMap)2058 NN_FORCE_INLINE void ProceduralTextureStage::SetRgbMap(UvMap rgbMap)
2059 {
2060 internal::g_proceduralTexture.m_Proctex0 &= ~(0xf << 6);
2061 internal::g_proceduralTexture.m_Proctex0 |= (rgbMap & 0xf) << 6;
2062 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2063 }
2064
SetAlphaMap(UvMap alphaMap)2065 NN_FORCE_INLINE void ProceduralTextureStage::SetAlphaMap(UvMap alphaMap)
2066 {
2067 internal::g_proceduralTexture.m_Proctex0 &= ~(0xf << 10);
2068 internal::g_proceduralTexture.m_Proctex0 |= (alphaMap & 0xf) << 10;
2069 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2070 }
2071
SetAlphaSeparate(gdBool alphaSeparate)2072 NN_FORCE_INLINE void ProceduralTextureStage::SetAlphaSeparate(gdBool alphaSeparate)
2073 {
2074 internal::g_proceduralTexture.m_Proctex0 &= ~(1 << 14);
2075 if (alphaSeparate) internal::g_proceduralTexture.m_Proctex0 |= 1 << 14;
2076 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2077 }
2078
SetNoiseEnable(gdBool noiseEnable)2079 NN_FORCE_INLINE void ProceduralTextureStage::SetNoiseEnable(gdBool noiseEnable)
2080 {
2081 internal::g_proceduralTexture.m_Proctex0 &= ~(1 << 15);
2082 if (noiseEnable) internal::g_proceduralTexture.m_Proctex0 |= 1 << 15;
2083 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2084 }
2085
SetShiftUV(Shift u,Shift v)2086 NN_FORCE_INLINE void ProceduralTextureStage::SetShiftUV(Shift u, Shift v)
2087 {
2088 internal::g_proceduralTexture.m_Proctex0 &= ~(0xf << 16);
2089 internal::g_proceduralTexture.m_Proctex0 |= ((u & 0x3) << 16) | ((v & 0x3) << 18);
2090 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2091 }
2092
SetTexBias(f32 texBias)2093 NN_FORCE_INLINE void ProceduralTextureStage::SetTexBias(f32 texBias)
2094 {
2095 u32 v = Utils::Float32ToFloat16(texBias);
2096
2097 internal::g_proceduralTexture.m_Proctex0 &= ~(0xff << 20);
2098 internal::g_proceduralTexture.m_Proctex0 |= (v & 0xff) << 20 ;
2099 internal::g_proceduralTexture.m_Proctex4 &= ~(0xff << 19);
2100 internal::g_proceduralTexture.m_Proctex4 |= ((v>>8) & 0xff) << 19 ;
2101
2102 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0 |
2103 internal::ProceduralTextureSettings::PTMASK_PROCTEX4;
2104 }
2105
SetMinFilter(MinFilter minFilter)2106 NN_FORCE_INLINE void ProceduralTextureStage::SetMinFilter(MinFilter minFilter)
2107 {
2108 internal::g_proceduralTexture.m_Proctex4 &= ~0x7;
2109 internal::g_proceduralTexture.m_Proctex4 |= minFilter & 0x7;
2110 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX4;
2111 }
2112
SetTexWidth(u8 texWidth)2113 NN_FORCE_INLINE void ProceduralTextureStage::SetTexWidth(u8 texWidth)
2114 {
2115 internal::g_proceduralTexture.m_Proctex4 &= ~(0xff << 11);
2116 internal::g_proceduralTexture.m_Proctex4 |= texWidth << 11;
2117 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX4;
2118 }
2119
SetTexOffset(u8 texOffset)2120 NN_FORCE_INLINE void ProceduralTextureStage::SetTexOffset(u8 texOffset)
2121 {
2122 internal::g_proceduralTexture.m_Proctex5 = texOffset | 0xe0c08000;
2123 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX5;
2124 }
2125
2126 } // namespace CTR
2127 } // gd
2128 } // nn
2129
2130
2131 #endif // NN_GD_CTR_GD_TEXTURE_H_
2132