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 #else
453 /* Please see man pages for details
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469 */
470 #endif
471 static nnResult CreateTexture2D(const Texture2DResource* tex2DResource, Texture2DDescription* desc, Texture2D** texture2D);
472
473 #if NN_GD_DOCUMENT_TYPE == ENGLISH
474 /* Please see man pages for details
475
476
477 */
478 #else
479 /* Please see man pages for details
480
481
482
483
484
485
486 */
487 #endif
488 static nnResult GetTexture2DProperties(const Texture2D* texture2D, Texture2DProperties* properties);
489
490 #if NN_GD_DOCUMENT_TYPE == ENGLISH
491 /* Please see man pages for details
492
493 */
494 #else
495 /* Please see man pages for details
496
497
498
499
500
501 */
502 #endif
503 static nnResult ReleaseTexture2D(Texture2D* texture2D);
504
505
506 #if NN_GD_DOCUMENT_TYPE == ENGLISH
507 /* Please see man pages for details
508
509
510
511
512
513
514
515 */
516 #else
517 /* Please see man pages for details
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539 */
540 #endif
541 static nnResult CreateTextureCube(Texture2DResource** tex2DResources, TextureCubeDescription* desc, TextureCube** textureCube);
542
543 #if NN_GD_DOCUMENT_TYPE == ENGLISH
544 /* Please see man pages for details
545
546
547 */
548 #else
549 /* Please see man pages for details
550
551
552
553
554
555
556 */
557 #endif
558 static nnResult GetTextureCubeProperties(const TextureCube* TextureCube, TextureCubeProperties* properties);
559
560 #if NN_GD_DOCUMENT_TYPE == ENGLISH
561 /* Please see man pages for details
562
563 */
564 #else
565 /* Please see man pages for details
566
567
568
569
570
571 */
572 #endif
573 static nnResult ReleaseTextureCube(TextureCube* textureCube);
574
575 #if NN_GD_DOCUMENT_TYPE == ENGLISH
576 /* Please see man pages for details
577
578
579
580 */
581 #else
582 /* Please see man pages for details
583
584
585
586
587
588
589
590
591 */
592 #endif
593 static nnResult SetTexture(TextureUnitId textureUnitId, Texture2D& texture2D);
594
595 #if NN_GD_DOCUMENT_TYPE == ENGLISH
596 /* Please see man pages for details
597
598
599 */
600 #else
601 /* Please see man pages for details
602
603
604
605
606
607 */
608 #endif
609 static nnResult SetTextureUnit0(TextureCube& textureCube);
610
611 #if NN_GD_DOCUMENT_TYPE == ENGLISH
612 /* Please see man pages for details
613
614 */
615 #else
616 /* Please see man pages for details
617
618 */
619 #endif
620 static void SetTexture2DProjectionForUnit0(gdBool value);
621
622 #if NN_GD_DOCUMENT_TYPE == ENGLISH
623 /* Please see man pages for details
624
625 */
626 #else
627 /* Please see man pages for details
628
629 */
630 #endif
631 static void SetTextureCoordinateSourceForUnit2(TextureCoordinateSourceUnit2 u);
632
633 #if NN_GD_DOCUMENT_TYPE == ENGLISH
634 /* Please see man pages for details
635
636 */
637 #else
638 /* Please see man pages for details
639
640 */
641 #endif
642 static void SetTextureCoordinateSourceForUnit3Procedural(TextureCoordinateSourceUnit3Procedural u);
643
644 #if NN_GD_DOCUMENT_TYPE == ENGLISH
645 /* Please see man pages for details
646
647
648 */
649 #else
650 /* Please see man pages for details
651
652
653
654
655
656
657
658
659 */
660 #endif
661 static nnResult CreateSamplerState(const SamplerStateDescription* desc, SamplerState** sampler);
662
663 #if NN_GD_DOCUMENT_TYPE == ENGLISH
664 /* Please see man pages for details
665
666
667 */
668 #else
669 /* Please see man pages for details
670
671
672
673
674
675
676
677
678 */
679 #endif
680 static nnResult SetSamplerState(TextureUnitId textureUnitId, SamplerState* sampler);
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
691
692
693
694 */
695 #endif
696 static nnResult ReleaseSamplerState(SamplerState* sampler);
697
698 #if NN_GD_DOCUMENT_TYPE == ENGLISH
699 /* Please see man pages for details
700
701 */
702 #else
703 /* Please see man pages for details
704
705 */
706 #endif
707 static void SetPerspectiveShadow(gdBool v);
708
709 #if NN_GD_DOCUMENT_TYPE == ENGLISH
710 /* Please see man pages for details
711
712
713 */
714 #else
715 /* Please see man pages for details
716
717
718 */
719 #endif
720 static void SetShadowZScaleBias(f32 zScale, f32 zBias);
721
722 }; // TextureStage
723
724 /*************************************************************************************************************************/
725 /**************************************************** Procedural Texture *************************************************/
726 #if NN_GD_DOCUMENT_TYPE == ENGLISH
727 /* Please see man pages for details
728
729
730
731
732
733
734 */
735 #else
736 /* Please see man pages for details
737
738
739
740
741
742
743 */
744 #endif
745 class ProceduralTextureStage
746 {
747 public:
748
749 #if NN_GD_DOCUMENT_TYPE == ENGLISH
750 /* Please see man pages for details
751
752 */
753 #else
754 /* Please see man pages for details */
755 #endif
756 enum UvMap
757 {
758 UV_MAP_U = 0x0,
759 UV_MAP_U2 = 0x1,
760 UV_MAP_V = 0x2,
761 UV_MAP_V2 = 0x3,
762 UV_MAP_ADD = 0x4,
763 UV_MAP_ADD2 = 0x5,
764 UV_MAP_ADDSQRT2 = 0x6,
765 UV_MAP_MIN = 0x7,
766 UV_MAP_MAX = 0x8,
767 UV_MAP_RMAX = 0x9,
768
769 #if NN_GD_DOCUMENT_TYPE == ENGLISH
770 /* Please see man pages for details */
771 #else
772 /* Please see man pages for details */
773 #endif
774 RGB_MAP_U = 0x0,
775
776 #if NN_GD_DOCUMENT_TYPE == ENGLISH
777 /* Please see man pages for details */
778 #else
779 /* Please see man pages for details */
780 #endif
781 RGB_MAP_U2 = 0x1,
782
783 #if NN_GD_DOCUMENT_TYPE == ENGLISH
784 /* Please see man pages for details */
785 #else
786 /* Please see man pages for details */
787 #endif
788 RGB_MAP_V = 0x2,
789
790 #if NN_GD_DOCUMENT_TYPE == ENGLISH
791 /* Please see man pages for details */
792 #else
793 /* Please see man pages for details */
794 #endif
795 RGB_MAP_V2 = 0x3,
796
797 #if NN_GD_DOCUMENT_TYPE == ENGLISH
798 /* Please see man pages for details */
799 #else
800 /* Please see man pages for details */
801 #endif
802 RGB_MAP_ADD = 0x4,
803
804 #if NN_GD_DOCUMENT_TYPE == ENGLISH
805 /* Please see man pages for details */
806 #else
807 /* Please see man pages for details */
808 #endif
809 RGB_MAP_ADD2 = 0x5,
810
811 #if NN_GD_DOCUMENT_TYPE == ENGLISH
812 /* Please see man pages for details */
813 #else
814 /* Please see man pages for details */
815 #endif
816 RGB_MAP_ADDSQRT2 = 0x6,
817
818 #if NN_GD_DOCUMENT_TYPE == ENGLISH
819 /* Please see man pages for details */
820 #else
821 /* Please see man pages for details */
822 #endif
823 RGB_MAP_MIN = 0x7,
824
825 #if NN_GD_DOCUMENT_TYPE == ENGLISH
826 /* Please see man pages for details */
827 #else
828 /* Please see man pages for details */
829 #endif
830 RGB_MAP_MAX = 0x8,
831
832 #if NN_GD_DOCUMENT_TYPE == ENGLISH
833 /* Please see man pages for details */
834 #else
835 /* Please see man pages for details */
836 #endif
837 RGB_MAP_RMAX = 0x9,
838
839 UV_MAP_RESERVED_MAX_U32 = 0xffffffffu
840 };
841
842 #if NN_GD_DOCUMENT_TYPE == ENGLISH
843 /* Please see man pages for details */
844 #else
845 /* Please see man pages for details */
846 #endif
847 typedef UvMap ProceduralTextureRgbMap;
848
849 #if NN_GD_DOCUMENT_TYPE == ENGLISH
850 /* Please see man pages for details
851
852
853 */
854 #else
855 /* Please see man pages for details
856
857
858 */
859 #endif
860 enum Clamp
861 {
862 #if NN_GD_DOCUMENT_TYPE == ENGLISH
863 /* Please see man pages for details */
864 #else
865 /* Please see man pages for details */
866 #endif
867 CLAMP_TO_ZERO = 0x0,
868
869 #if NN_GD_DOCUMENT_TYPE == ENGLISH
870 /* Please see man pages for details */
871 #else
872 /* Please see man pages for details */
873 #endif
874 CLAMP_TO_EDGE = 0x1,
875
876 #if NN_GD_DOCUMENT_TYPE == ENGLISH
877 /* Please see man pages for details */
878 #else
879 /* Please see man pages for details */
880 #endif
881 CLAMP_SYMMETRICAL_REPEAT = 0x2,
882
883 #if NN_GD_DOCUMENT_TYPE == ENGLISH
884 /* Please see man pages for details */
885 #else
886 /* Please see man pages for details */
887 #endif
888 CLAMP_MIRRORED_REPEAT = 0x3,
889
890 #if NN_GD_DOCUMENT_TYPE == ENGLISH
891 /* Please see man pages for details */
892 #else
893 /* Please see man pages for details */
894 #endif
895 CLAMP_PULSE = 0x4,
896
897 CLAMP_RESERVED_MAX_U32 = 0xffffffffu
898 };
899
900 #if NN_GD_DOCUMENT_TYPE == ENGLISH
901 /* Please see man pages for details */
902 #else
903 /* Please see man pages for details */
904 #endif
905 typedef Clamp ProceduralTextureClamp;
906
907 #if NN_GD_DOCUMENT_TYPE == ENGLISH
908 /* Please see man pages for details
909
910 */
911 #else
912 /* Please see man pages for details */
913 #endif
914 enum Shift
915 {
916 SHIFT_NONE = 0x0,
917 SHIFT_ODD = 0x1,
918 SHIFT_EVEN = 0x2,
919
920 SHIFT_RESERVED_MAX_U32 = 0xffffffffu
921 };
922
923 #if NN_GD_DOCUMENT_TYPE == ENGLISH
924 /* Please see man pages for details */
925 #else
926 /* Please see man pages for details */
927 #endif
928 typedef Shift ProceduralTextureShift;
929
930 #if NN_GD_DOCUMENT_TYPE == ENGLISH
931 /* Please see man pages for details */
932 #else
933 /* Please see man pages for details */
934 #endif
935 enum MinFilter
936 {
937 #if NN_GD_DOCUMENT_TYPE == ENGLISH
938 /* Please see man pages for details */
939 #else
940 /* Please see man pages for details */
941 #endif
942 MIN_FILTER_NEAREST = 0x0,
943
944 #if NN_GD_DOCUMENT_TYPE == ENGLISH
945 /* Please see man pages for details */
946 #else
947 /* Please see man pages for details */
948 #endif
949 MIN_FILTER_LINEAR = 0x1,
950
951 #if NN_GD_DOCUMENT_TYPE == ENGLISH
952 /* Please see man pages for details */
953 #else
954 /* Please see man pages for details */
955 #endif
956 MIN_FILTER_NEAREST_MIPMAP_NEAREST = 0x2,
957
958 #if NN_GD_DOCUMENT_TYPE == ENGLISH
959 /* Please see man pages for details */
960 #else
961 /* Please see man pages for details */
962 #endif
963 MIN_FILTER_LINEAR_MIPMAP_NEAREST = 0x3,
964
965 #if NN_GD_DOCUMENT_TYPE == ENGLISH
966 /* Please see man pages for details */
967 #else
968 /* Please see man pages for details */
969 #endif
970 MIN_FILTER_NEAREST_MIPMAP_LINEAR = 0x4,
971
972 #if NN_GD_DOCUMENT_TYPE == ENGLISH
973 /* Please see man pages for details */
974 #else
975 /* Please see man pages for details */
976 #endif
977 MIN_FILTER_LINEAR_MIPMAP_LINEAR = 0x5,
978
979 MIN_FILTER_RESERVED_MAX_U32 = 0xffffffffu
980 };
981
982 #if NN_GD_DOCUMENT_TYPE == ENGLISH
983 /* Please see man pages for details */
984 #else
985 /* Please see man pages for details */
986 #endif
987 typedef MinFilter ProceduralTextureMinFilter;
988
989 #if NN_GD_DOCUMENT_TYPE == ENGLISH
990 /* Please see man pages for details
991
992
993 */
994 #else
995 /* Please see man pages for details
996
997
998 */
999 #endif
1000 static void SetClampUV(Clamp u, Clamp v);
1001
1002 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1003 /* Please see man pages for details
1004
1005 */
1006 #else
1007 /* Please see man pages for details
1008
1009 */
1010 #endif
1011 static void SetRgbMap(UvMap rgbMap);
1012
1013 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1014 /* Please see man pages for details
1015
1016 */
1017 #else
1018 /* Please see man pages for details
1019
1020 */
1021 #endif
1022 static void SetAlphaMap(UvMap alphaMap);
1023
1024 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1025 /* Please see man pages for details
1026
1027 */
1028 #else
1029 /* Please see man pages for details
1030
1031 */
1032 #endif
1033 static void SetAlphaSeparate(gdBool alphaSeparate);
1034
1035 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1036 /* Please see man pages for details
1037
1038 */
1039 #else
1040 /* Please see man pages for details
1041
1042 */
1043 #endif
1044 static void SetNoiseEnable(gdBool noiseEnable);
1045
1046 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1047 /* Please see man pages for details
1048
1049
1050 */
1051 #else
1052 /* Please see man pages for details
1053
1054
1055 */
1056 #endif
1057 static void SetShiftUV(Shift u, Shift v);
1058
1059 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1060 /* Please see man pages for details
1061
1062 */
1063 #else
1064 /* Please see man pages for details
1065
1066 */
1067 #endif
1068 static void SetTexBias(f32 texBias);
1069
1070 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1071 /* Please see man pages for details
1072
1073 */
1074 #else
1075 /* Please see man pages for details
1076
1077 */
1078 #endif
1079 static void SetMinFilter(MinFilter minFilter);
1080
1081 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1082 /* Please see man pages for details
1083
1084 */
1085 #else
1086 /* Please see man pages for details
1087
1088 */
1089 #endif
1090 static void SetTexWidth(u8 texWidth);
1091
1092 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1093 /* Please see man pages for details
1094
1095 */
1096 #else
1097 /* Please see man pages for details
1098
1099 */
1100 #endif
1101 static void SetTexOffset(u8 texOffset);
1102
1103 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1104 /* Please see man pages for details
1105
1106
1107 */
1108 #else
1109 /* Please see man pages for details
1110
1111
1112 */
1113 #endif
1114 static void SetNoiseUV(f32 noiseU[3], f32 noiseV[3]);
1115
1116 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1117 /* Please see man pages for details
1118
1119
1120
1121
1122 */
1123 #else
1124 /* Please see man pages for details
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134 */
1135 #endif
1136 static nnResult UploadLookUpTableRgbMapFloat(u32 index, f32 *Map, f32 *MapDelta, u32 lutSize);
1137
1138 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1139 /* Please see man pages for details
1140
1141
1142
1143 */
1144 #else
1145 /* Please see man pages for details
1146
1147
1148
1149
1150
1151
1152
1153
1154 */
1155 #endif
1156 static nnResult UploadLookUpTableRgbMapNative(u32 index, u32 *Map, u32 lutSize);
1157
1158 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1159 /* Please see man pages for details
1160
1161
1162
1163
1164 */
1165 #else
1166 /* Please see man pages for details
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176 */
1177 #endif
1178 static nnResult UploadLookUpTableAlphaMapFloat(u32 index, f32 *Map, f32 *MapDelta, u32 lutSize);
1179
1180 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1181 /* Please see man pages for details
1182
1183
1184
1185 */
1186 #else
1187 /* Please see man pages for details
1188
1189
1190
1191
1192
1193
1194
1195
1196 */
1197 #endif
1198 static nnResult UploadLookUpTableAlphaMapNative(u32 index, u32 *Map, u32 lutSize);
1199
1200 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1201 /* Please see man pages for details
1202
1203
1204
1205
1206 */
1207 #else
1208 /* Please see man pages for details
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218 */
1219 #endif
1220 static nnResult UploadLookUpTableNoiseMapFloat(u32 index, f32 *Map, f32 *MapDelta, u32 lutSize);
1221
1222 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1223 /* Please see man pages for details
1224
1225
1226
1227 */
1228 #else
1229 /* Please see man pages for details
1230
1231
1232
1233
1234
1235
1236
1237
1238 */
1239 #endif
1240 static nnResult UploadLookUpTableNoiseMapNative(u32 index, u32 *Map, u32 lutSize);
1241
1242 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1243 /* Please see man pages for details
1244
1245
1246
1247
1248
1249
1250 */
1251 #else
1252 /* Please see man pages for details
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262 */
1263 #endif
1264 static nnResult UploadLookUpTableColorMapFloat(u32 index, f32 **Map, f32 **MapDelta, u32 lutSize);
1265
1266 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1267 /* Please see man pages for details
1268
1269
1270
1271
1272 */
1273 #else
1274 /* Please see man pages for details
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287 */
1288 #endif
1289 static nnResult UploadLookUpTableColorMapNative(u32 index, u32 *Map, u32 *MapDelta, u32 lutSize);
1290
1291 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1292 /* Please see man pages for details
1293
1294 */
1295 #else
1296 /* Please see man pages for details
1297
1298 */
1299 #endif
1300 class Helper
1301 {
1302 public:
1303 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1304 /* Please see man pages for details
1305
1306
1307
1308
1309 */
1310 #else
1311 /* Please see man pages for details
1312
1313
1314
1315
1316
1317
1318
1319
1320 */
1321 #endif
1322 static nnResult ConvertLookUpTableDataFloatToNative(f32 *valueData, f32 *deltaData, u32 lutSize, u32* destination);
1323
1324 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1325 /* Please see man pages for details
1326
1327
1328
1329
1330
1331
1332
1333 */
1334 #else
1335 /* Please see man pages for details
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345 */
1346 #endif
1347 static nnResult ConvertColorLookUpTableDataFloatToNative(f32 **refArray, f32 **deltaArray, u32 lutSize, u32* destRef, u32* destDelta);
1348 };
1349
1350 }; // ProceduralTextureStage
1351
1352 /*****************************************************************************************************************************/
1353 /********************************************* Descriptor/Properties class definition ****************************************/
1354 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1355 /* Please see man pages for details
1356
1357
1358 */
1359 #else
1360 /* Please see man pages for details
1361
1362
1363 */
1364 #endif
1365 class Texture2DDescription
1366 {
1367 public:
1368 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1369 /* Please see man pages for details */
1370 #else
1371 /* Please see man pages for details */
1372 #endif
1373 s32 m_MinMipLevelIndex;
1374
1375 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1376 /* Please see man pages for details */
1377 #else
1378 /* Please see man pages for details */
1379 #endif
1380 s32 m_MaxMipLevelIndex;
1381 };
1382
1383
1384 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1385 /* Please see man pages for details
1386
1387
1388 */
1389 #else
1390 /* Please see man pages for details
1391
1392
1393 */
1394 #endif
1395 class Texture2DProperties
1396 {
1397 public:
1398 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1399 /* Please see man pages for details */
1400 #else
1401 /* Please see man pages for details */
1402 #endif
1403 u32 m_Width;
1404
1405 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1406 /* Please see man pages for details */
1407 #else
1408 /* Please see man pages for details */
1409 #endif
1410 u32 m_Height;
1411
1412 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1413 /* Please see man pages for details */
1414 #else
1415 /* Please see man pages for details */
1416 #endif
1417 u32 m_CountMipLevels;
1418
1419 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1420 /* Please see man pages for details */
1421 #else
1422 /* Please see man pages for details */
1423 #endif
1424 u32 m_PixelSize;
1425
1426 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1427 /* Please see man pages for details */
1428 #else
1429 /* Please see man pages for details */
1430 #endif
1431 Resource::NativeFormat m_Format;
1432
1433 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1434 /* Please see man pages for details */
1435 #else
1436 /* Please see man pages for details */
1437 #endif
1438 Memory::MemoryLayout m_MemLayout;
1439
1440 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1441 /* Please see man pages for details */
1442 #else
1443 /* Please see man pages for details */
1444 #endif
1445 Memory::MemoryLocation m_MemLocation;
1446
1447 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1448 /* Please see man pages for details */
1449 #else
1450 /* Please see man pages for details */
1451 #endif
1452 u8* m_MemAddr;
1453
1454 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1455 /* Please see man pages for details
1456
1457 */
1458 #else
1459 /* Please see man pages for details
1460
1461
1462
1463
1464 */
1465 #endif
GetMipmapAddress(u32 mipmapLevel)1466 MipmapResourceInfo GetMipmapAddress(u32 mipmapLevel)
1467 {
1468 MipmapResourceInfo mipmapInfo;
1469 mipmapInfo.m_Width = m_Width;
1470 mipmapInfo.m_Height = m_Height;
1471 mipmapInfo.m_MemAddr = m_MemAddr;
1472 for (u32 i=0; i<mipmapLevel; ++i)
1473 {
1474 mipmapInfo.m_MemAddr += (mipmapInfo.m_Width * mipmapInfo.m_Height * m_PixelSize) >> 3;
1475 mipmapInfo.m_Width >>= 1;
1476 mipmapInfo.m_Height >>= 1;
1477 }
1478 return mipmapInfo;
1479 }
1480 }; // Texture2DProperties
1481
1482
1483 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1484 /* Please see man pages for details
1485
1486
1487 */
1488 #else
1489 /* Please see man pages for details
1490
1491
1492 */
1493 #endif
1494 class TextureCubeDescription
1495 {
1496 public:
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 s32 m_MinMipLevelIndex[6];
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 s32 m_MaxMipLevelIndex[6];
1510
1511 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1512 /* Please see man pages for details */
1513 #else
1514 /* Please see man pages for details */
1515 #endif
TextureCubeDescription()1516 TextureCubeDescription(){
1517 for (int i=0; i<6; ++i){
1518 m_MinMipLevelIndex[i] = 0;
1519 m_MaxMipLevelIndex[i] = -1;
1520 }
1521 }
1522
1523 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1524 /* Please see man pages for details
1525
1526
1527 */
1528 #else
1529 /* Please see man pages for details
1530
1531
1532 */
1533 #endif
TextureCubeDescription(int minMipLevelIndex,int maxMipLevelIndex)1534 TextureCubeDescription(int minMipLevelIndex, int maxMipLevelIndex){
1535 for (int i=0; i<6; ++i){
1536 m_MinMipLevelIndex[i] = minMipLevelIndex;
1537 m_MaxMipLevelIndex[i] = maxMipLevelIndex;
1538 }
1539 }
1540 }; // TextureCubeDescription
1541
1542
1543 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1544 /* Please see man pages for details
1545
1546
1547 */
1548 #else
1549 /* Please see man pages for details
1550
1551
1552 */
1553 #endif
1554 class TextureCubeProperties
1555 {
1556 public:
1557 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1558 /* Please see man pages for details */
1559 #else
1560 /* Please see man pages for details */
1561 #endif
1562 u32 m_Width;
1563
1564 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1565 /* Please see man pages for details */
1566 #else
1567 /* Please see man pages for details */
1568 #endif
1569 u32 m_Height;
1570
1571 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1572 /* Please see man pages for details */
1573 #else
1574 /* Please see man pages for details */
1575 #endif
1576 u32 m_CountMipLevels;
1577
1578 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1579 /* Please see man pages for details */
1580 #else
1581 /* Please see man pages for details */
1582 #endif
1583 u32 m_PixelSize;
1584
1585 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1586 /* Please see man pages for details */
1587 #else
1588 /* Please see man pages for details */
1589 #endif
1590 Resource::NativeFormat m_Format;
1591
1592 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1593 /* Please see man pages for details */
1594 #else
1595 /* Please see man pages for details */
1596 #endif
1597 Memory::MemoryLayout m_MemLayout;
1598
1599 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1600 /* Please see man pages for details */
1601 #else
1602 /* Please see man pages for details */
1603 #endif
1604 Memory::MemoryLocation m_MemLocation;
1605
1606 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1607 /* Please see man pages for details */
1608 #else
1609 /* Please see man pages for details */
1610 #endif
1611 u8* m_MemAddr[6];
1612
1613 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1614 /* Please see man pages for details
1615
1616
1617 */
1618 #else
1619 /* Please see man pages for details
1620
1621
1622
1623
1624
1625 */
1626 #endif
GetMipmapAddress(u32 faceIndex,u32 mipmapLevel)1627 MipmapResourceInfo GetMipmapAddress(u32 faceIndex, u32 mipmapLevel)
1628 {
1629 MipmapResourceInfo mipmapInfo;
1630 mipmapInfo.m_Width = m_Width;
1631 mipmapInfo.m_Height = m_Height;
1632 mipmapInfo.m_MemAddr = m_MemAddr[faceIndex];
1633 for (u32 i=0; i<mipmapLevel; ++i)
1634 {
1635 mipmapInfo.m_MemAddr += (mipmapInfo.m_Width * mipmapInfo.m_Height * m_PixelSize) >> 3;
1636 mipmapInfo.m_Width >>= 1;
1637 mipmapInfo.m_Height >>= 1;
1638 }
1639 return mipmapInfo;
1640 }
1641 }; // TextureCubeProperties
1642
1643
1644 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1645 /* Please see man pages for details
1646
1647
1648 */
1649 #else
1650 /* Please see man pages for details
1651
1652
1653 */
1654 #endif
1655 class SamplerStateDescription
1656 {
1657 public:
1658
1659 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1660 /* Please see man pages for details
1661
1662 */
1663 #else
1664 /* Please see man pages for details
1665
1666 */
1667 #endif
1668 TextureStage::SamplerMinFilter m_MinFilter;
1669
1670 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1671 /* Please see man pages for details
1672
1673 */
1674 #else
1675 /* Please see man pages for details
1676
1677 */
1678 #endif
1679 TextureStage::SamplerMagFilter m_MagFilter;
1680
1681 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1682 /* Please see man pages for details
1683
1684 */
1685 #else
1686 /* Please see man pages for details
1687
1688 */
1689 #endif
1690 TextureStage::SamplerWrapMode m_WrapS;
1691
1692 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1693 /* Please see man pages for details
1694
1695 */
1696 #else
1697 /* Please see man pages for details
1698
1699 */
1700 #endif
1701 TextureStage::SamplerWrapMode m_WrapT;
1702
1703 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1704 /* Please see man pages for details
1705
1706 */
1707 #else
1708 /* Please see man pages for details
1709
1710 */
1711 #endif
1712 u8 m_BorderColor[4];
1713
1714 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1715 /* Please see man pages for details
1716
1717 */
1718 #else
1719 /* Please see man pages for details
1720
1721 */
1722 #endif
1723 u32 m_LodBias;
1724
1725 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1726 /* Please see man pages for details
1727
1728 */
1729 #else
1730 /* Please see man pages for details
1731
1732 */
1733 #endif
1734 u32 m_MinLod;
1735
1736 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1737 /* Please see man pages for details
1738
1739 */
1740 #else
1741 /* Please see man pages for details
1742
1743 */
1744 #endif
1745 u32 m_MaxLod;
1746
1747 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1748 /* Please see man pages for details
1749
1750 */
1751 #else
1752 /* Please see man pages for details
1753
1754 */
1755 #endif
SetMinFilter(TextureStage::SamplerMinFilter filter)1756 void SetMinFilter(TextureStage::SamplerMinFilter filter) { m_MinFilter = filter; }
1757
1758 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1759 /* Please see man pages for details
1760
1761 */
1762 #else
1763 /* Please see man pages for details
1764
1765 */
1766 #endif
SetMagFilter(TextureStage::SamplerMagFilter filter)1767 void SetMagFilter(TextureStage::SamplerMagFilter filter) { m_MagFilter = filter; }
1768
1769 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1770 /* Please see man pages for details
1771
1772 */
1773 #else
1774 /* Please see man pages for details
1775
1776 */
1777 #endif
SetWrapS(TextureStage::SamplerWrapMode wrap)1778 void SetWrapS(TextureStage::SamplerWrapMode wrap) { m_WrapS = wrap; }
1779
1780 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1781 /* Please see man pages for details
1782
1783 */
1784 #else
1785 /* Please see man pages for details
1786
1787 */
1788 #endif
SetWrapT(TextureStage::SamplerWrapMode wrap)1789 void SetWrapT(TextureStage::SamplerWrapMode wrap) { m_WrapT = wrap; }
1790
1791 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1792 /* Please see man pages for details
1793
1794
1795
1796
1797 */
1798 #else
1799 /* Please see man pages for details
1800
1801
1802
1803
1804 */
1805 #endif
SetBorderColor(u8 colorR,u8 colorG,u8 colorB,u8 colorA)1806 void SetBorderColor(u8 colorR, u8 colorG, u8 colorB, u8 colorA)
1807 {
1808 m_BorderColor[0] = colorR;
1809 m_BorderColor[1] = colorG;
1810 m_BorderColor[2] = colorB;
1811 m_BorderColor[3] = colorA;
1812 }
1813
1814 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1815 /* Please see man pages for details
1816
1817
1818
1819
1820 */
1821 #else
1822 /* Please see man pages for details
1823
1824
1825
1826
1827 */
1828 #endif
SetBorderColor(f32 colorR,f32 colorG,f32 colorB,f32 colorA)1829 void SetBorderColor(f32 colorR, f32 colorG, f32 colorB, f32 colorA)
1830 {
1831 m_BorderColor[0] = Utils::FloatToUnsignedByte(colorR);
1832 m_BorderColor[1] = Utils::FloatToUnsignedByte(colorG);
1833 m_BorderColor[2] = Utils::FloatToUnsignedByte(colorB);
1834 m_BorderColor[3] = Utils::FloatToUnsignedByte(colorA);
1835 }
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
SetLodBias(f32 biasValue)1846 void SetLodBias(f32 biasValue) { m_LodBias = Utils::Float32ToFix13Fraction8(biasValue); }
1847
1848 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1849 /* Please see man pages for details
1850
1851 */
1852 #else
1853 /* Please see man pages for details
1854
1855 */
1856 #endif
SetMinLod(u32 lodValue)1857 void SetMinLod(u32 lodValue) { m_MinLod = lodValue; }
1858
1859 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1860 /* Please see man pages for details
1861
1862 */
1863 #else
1864 /* Please see man pages for details
1865
1866 */
1867 #endif
SetMaxLod(u32 lodValue)1868 void SetMaxLod(u32 lodValue) { m_MaxLod = lodValue; }
1869
SamplerStateDescription()1870 SamplerStateDescription() { ToDefault(); }
1871
1872 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1873 /* Please see man pages for details
1874 */
1875 #else
1876 /* Please see man pages for details
1877 */
1878 #endif
ToDefault()1879 void ToDefault()
1880 {
1881 m_MinFilter = TextureStage::SAMPLER_MIN_FILTER_NEAREST;
1882 m_MagFilter = TextureStage::SAMPLER_MAG_FILTER_NEAREST;
1883 m_WrapS = TextureStage::SAMPLER_WRAP_REPEAT;
1884 m_WrapT = TextureStage::SAMPLER_WRAP_REPEAT;
1885 m_BorderColor[0] = m_BorderColor[1] = m_BorderColor[2] = m_BorderColor[3] = 0;
1886 m_LodBias = 0;
1887 m_MinLod = 0;
1888 m_MaxLod = UINT_MAX;
1889 }
1890
1891 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1892 /* Please see man pages for details
1893 */
1894 #else
1895 /* Please see man pages for details
1896 */
1897 #endif
SetShadow()1898 void SetShadow()
1899 {
1900 m_MinFilter = TextureStage::SAMPLER_MIN_FILTER_LINEAR;
1901 m_MagFilter = TextureStage::SAMPLER_MAG_FILTER_LINEAR;
1902 m_WrapS = TextureStage::SAMPLER_WRAP_CLAMP_TO_BORDER;
1903 m_WrapT = TextureStage::SAMPLER_WRAP_CLAMP_TO_BORDER;
1904 m_BorderColor[0] = m_BorderColor[1] = m_BorderColor[2] = m_BorderColor[3] = 0;
1905 m_LodBias = 0;
1906 m_MinLod = 0;
1907 m_MaxLod = UINT_MAX;
1908 }
1909
1910 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1911 /* Please see man pages for details
1912 */
1913 #else
1914 /* Please see man pages for details
1915 */
1916 #endif
SetShadowCube()1917 void SetShadowCube()
1918 {
1919 m_MinFilter = TextureStage::SAMPLER_MIN_FILTER_LINEAR;
1920 m_MagFilter = TextureStage::SAMPLER_MAG_FILTER_LINEAR;
1921 m_WrapS = TextureStage::SAMPLER_WRAP_CLAMP_TO_EDGE;
1922 m_WrapT = TextureStage::SAMPLER_WRAP_CLAMP_TO_EDGE;
1923 m_BorderColor[0] = m_BorderColor[1] = m_BorderColor[2] = m_BorderColor[3] = 0;
1924 m_LodBias = 0;
1925 m_MinLod = 0;
1926 m_MaxLod = UINT_MAX;
1927 }
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
SetGas()1936 void SetGas()
1937 {
1938 m_MinFilter = TextureStage::SAMPLER_MIN_FILTER_NEAREST;
1939 m_MagFilter = TextureStage::SAMPLER_MAG_FILTER_NEAREST;
1940 m_WrapS = TextureStage::SAMPLER_WRAP_CLAMP_TO_EDGE;
1941 m_WrapT = TextureStage::SAMPLER_WRAP_CLAMP_TO_EDGE;
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 }; // SamplerStateDescription
1948
1949
1950 /**************************************************************************************************************************/
1951 /******************************************* TextureStage inline functions *************************************************/
SetPerspectiveShadow(gdBool v)1952 NN_FORCE_INLINE void TextureStage::SetPerspectiveShadow(gdBool v)
1953 {
1954 // 0x8b[0:0]
1955 internal::g_texture.m_ShadowTextureSetting &= ~(0x1);
1956 if (!v) internal::g_texture.m_ShadowTextureSetting |= 0x1;
1957 internal::g_texture.m_DirtyFieldMask |= internal::TextureSettings::TXMASK_UPDATE_TEXTURE_SHADOW_SETTINGS;
1958 }
1959
SetShadowZScaleBias(f32 zScale,f32 zBias)1960 NN_FORCE_INLINE void TextureStage::SetShadowZScaleBias(f32 zScale, f32 zBias)
1961 {
1962 u32 scale = ((((*(u32*)&zScale) >> 23) & 0xff) - 127);
1963 u32 bias;
1964 bias = Utils::Float32ToUnsignedFix24(zBias);
1965
1966 // Bias: 0x8b[23:1]
1967 internal::g_texture.m_ShadowTextureSetting &= ~(0x7fffff << 1);
1968 internal::g_texture.m_ShadowTextureSetting |= bias & 0xfffffe;
1969
1970 // Scale: 0x8b[31:24]
1971 internal::g_texture.m_ShadowTextureSetting &= ~(0xff000000);
1972 internal::g_texture.m_ShadowTextureSetting |= scale << 24;
1973 internal::g_texture.m_DirtyFieldMask |= internal::TextureSettings::TXMASK_UPDATE_TEXTURE_SHADOW_SETTINGS;
1974 }
1975
SetTextureCoordinateSourceForUnit2(TextureCoordinateSourceUnit2 u)1976 NN_FORCE_INLINE void TextureStage::SetTextureCoordinateSourceForUnit2(TextureCoordinateSourceUnit2 u)
1977 {
1978 internal::g_texture.m_TextureUnitControl &= ~(0x1 << 13);
1979 internal::g_texture.m_TextureUnitControl |= (u & 0x1) << 13;
1980 internal::g_texture.m_DirtyFieldMask |= internal::TextureSettings::TXMASK_SEND_TEXTURE_UNIT_CONTROL;
1981 }
1982
1983 /**************************************************************************************************************************/
1984 /**************************************** ProceduralTextureStage inline functions **********************************************/
1985
SetTextureCoordinateSourceForUnit3Procedural(TextureCoordinateSourceUnit3Procedural u)1986 NN_FORCE_INLINE void TextureStage::SetTextureCoordinateSourceForUnit3Procedural(TextureCoordinateSourceUnit3Procedural u)
1987 {
1988 internal::g_texture.m_TextureUnitControl &= ~(0x3 << 8);
1989 internal::g_texture.m_TextureUnitControl |= (u & 0x3) << 8;
1990 internal::g_texture.m_DirtyFieldMask |= internal::TextureSettings::TXMASK_SEND_TEXTURE_UNIT_CONTROL;
1991 }
1992
1993
SetClampUV(Clamp u,Clamp v)1994 NN_FORCE_INLINE void ProceduralTextureStage::SetClampUV(Clamp u, Clamp v)
1995 {
1996 internal::g_proceduralTexture.m_Proctex0 &= ~(0x3f);
1997 internal::g_proceduralTexture.m_Proctex0 |= (u & 0x7) | ((v & 0x7) << 3);
1998 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
1999 }
2000
SetRgbMap(UvMap rgbMap)2001 NN_FORCE_INLINE void ProceduralTextureStage::SetRgbMap(UvMap rgbMap)
2002 {
2003 internal::g_proceduralTexture.m_Proctex0 &= ~(0xf << 6);
2004 internal::g_proceduralTexture.m_Proctex0 |= (rgbMap & 0xf) << 6;
2005 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2006 }
2007
SetAlphaMap(UvMap alphaMap)2008 NN_FORCE_INLINE void ProceduralTextureStage::SetAlphaMap(UvMap alphaMap)
2009 {
2010 internal::g_proceduralTexture.m_Proctex0 &= ~(0xf << 10);
2011 internal::g_proceduralTexture.m_Proctex0 |= (alphaMap & 0xf) << 10;
2012 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2013 }
2014
SetAlphaSeparate(gdBool alphaSeparate)2015 NN_FORCE_INLINE void ProceduralTextureStage::SetAlphaSeparate(gdBool alphaSeparate)
2016 {
2017 internal::g_proceduralTexture.m_Proctex0 &= ~(1 << 14);
2018 if (alphaSeparate) internal::g_proceduralTexture.m_Proctex0 |= 1 << 14;
2019 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2020 }
2021
SetNoiseEnable(gdBool noiseEnable)2022 NN_FORCE_INLINE void ProceduralTextureStage::SetNoiseEnable(gdBool noiseEnable)
2023 {
2024 internal::g_proceduralTexture.m_Proctex0 &= ~(1 << 15);
2025 if (noiseEnable) internal::g_proceduralTexture.m_Proctex0 |= 1 << 15;
2026 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2027 }
2028
SetShiftUV(Shift u,Shift v)2029 NN_FORCE_INLINE void ProceduralTextureStage::SetShiftUV(Shift u, Shift v)
2030 {
2031 internal::g_proceduralTexture.m_Proctex0 &= ~(0xf << 16);
2032 internal::g_proceduralTexture.m_Proctex0 |= ((u & 0x3) << 16) | ((v & 0x3) << 18);
2033 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0;
2034 }
2035
SetTexBias(f32 texBias)2036 NN_FORCE_INLINE void ProceduralTextureStage::SetTexBias(f32 texBias)
2037 {
2038 u32 v = Utils::Float32ToFloat16(texBias);
2039
2040 internal::g_proceduralTexture.m_Proctex0 &= ~(0xff << 20);
2041 internal::g_proceduralTexture.m_Proctex0 |= (v & 0xff) << 20 ;
2042 internal::g_proceduralTexture.m_Proctex4 &= ~(0xff << 19);
2043 internal::g_proceduralTexture.m_Proctex4 |= ((v>>8) & 0xff) << 19 ;
2044
2045 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX0 |
2046 internal::ProceduralTextureSettings::PTMASK_PROCTEX4;
2047 }
2048
SetMinFilter(MinFilter minFilter)2049 NN_FORCE_INLINE void ProceduralTextureStage::SetMinFilter(MinFilter minFilter)
2050 {
2051 internal::g_proceduralTexture.m_Proctex4 &= ~0x7;
2052 internal::g_proceduralTexture.m_Proctex4 |= minFilter & 0x7;
2053 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX4;
2054 }
2055
SetTexWidth(u8 texWidth)2056 NN_FORCE_INLINE void ProceduralTextureStage::SetTexWidth(u8 texWidth)
2057 {
2058 internal::g_proceduralTexture.m_Proctex4 &= ~(0xff << 11);
2059 internal::g_proceduralTexture.m_Proctex4 |= texWidth << 11;
2060 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX4;
2061 }
2062
SetTexOffset(u8 texOffset)2063 NN_FORCE_INLINE void ProceduralTextureStage::SetTexOffset(u8 texOffset)
2064 {
2065 internal::g_proceduralTexture.m_Proctex5 = texOffset | 0xe0c08000;
2066 internal::g_proceduralTexture.m_DirtyFieldMask |= internal::ProceduralTextureSettings::PTMASK_PROCTEX5;
2067 }
2068
2069 } // namespace CTR
2070 } // gd
2071 } // nn
2072
2073
2074 #endif // NN_GD_CTR_GD_TEXTURE_H_
2075