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