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