1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     gd_Resource.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_RESOURCE_H_
15 #define NN_GD_CTR_GD_RESOURCE_H_
16 
17 #include <nn/gd/CTR/gd_Types.h>
18 #include <nn/gd/CTR/gd_Result.h>
19 
20 #include <nn/gd/CTR/gd_Memory.h>
21 
22 #if NN_GD_DOCUMENT_TYPE == ENGLISH
23 /* Please see man pages for details
24 
25 */
26 #else
27 /* Please see man pages for details
28 
29 */
30 #endif
31 
32 namespace nn {
33 namespace gd {
34 namespace CTR {
35 
36 #if NN_GD_DOCUMENT_TYPE == ENGLISH
37 /* Please see man pages for details
38 */
39 #else
40 /* Please see man pages for details
41 */
42 #endif
43 class VertexBufferResourceDescription;
44 
45 #if NN_GD_DOCUMENT_TYPE == ENGLISH
46 /* Please see man pages for details
47 */
48 #else
49 /* Please see man pages for details
50 */
51 #endif
52 class VertexBufferResourceProperties;
53 
54 #if NN_GD_DOCUMENT_TYPE == ENGLISH
55 /* Please see man pages for details
56 */
57 #else
58 /* Please see man pages for details
59 */
60 #endif
61 class VertexBufferResource;
62 
63 #if NN_GD_DOCUMENT_TYPE == ENGLISH
64 /* Please see man pages for details
65 */
66 #else
67 /* Please see man pages for details
68 */
69 #endif
70 class Texture2DResourceDescription;
71 
72 #if NN_GD_DOCUMENT_TYPE == ENGLISH
73 /* Please see man pages for details
74 */
75 #else
76 /* Please see man pages for details
77 */
78 #endif
79 class Texture2DResourceProperties;
80 
81 #if NN_GD_DOCUMENT_TYPE == ENGLISH
82 /* Please see man pages for details
83 */
84 #else
85 /* Please see man pages for details
86 */
87 #endif
88 class Texture2DResource;
89 
90 
91 #if NN_GD_DOCUMENT_TYPE == ENGLISH
92 /* Please see man pages for details
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143 
144 
145 
146  */
147 #else
148 /* Please see man pages for details
149 
150 
151 
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166 
167 
168 
169 
170 
171 
172 
173 
174 
175 
176 
177 
178 
179 
180 
181 
182 
183 
184 
185 
186 
187 
188 
189 
190 
191 
192 
193 
194 
195 
196 
197 
198 
199 
200 
201 
202 
203 
204 
205  */
206 #endif
207 class Resource
208 {
209 public:
210 
211     #if NN_GD_DOCUMENT_TYPE == ENGLISH
212     /* Please see man pages for details
213 
214 
215     */
216     #else
217     /* Please see man pages for details
218 
219 
220     */
221     #endif
222     enum NativeFormat
223     {
224        NATIVE_FORMAT_RGBA_8888            = 0,
225        NATIVE_FORMAT_RGB_888              = 1,
226        NATIVE_FORMAT_RGBA_5551            = 2,
227        NATIVE_FORMAT_RGB_565              = 3,
228        NATIVE_FORMAT_RGBA_4444            = 4,
229        NATIVE_FORMAT_LUMINANCE_ALPHA_88   = 5,
230        NATIVE_FORMAT_HILO_88              = 6,
231        NATIVE_FORMAT_LUMINANCE_8          = 7,
232        NATIVE_FORMAT_ALPHA_8              = 8,
233        NATIVE_FORMAT_LUMINANCE_ALPHA_44   = 9,
234        NATIVE_FORMAT_LUMINANCE_4          = 10,
235        NATIVE_FORMAT_ALPHA_4              = 11,
236        NATIVE_FORMAT_ETC1_RGB8            = 12,
237        NATIVE_FORMAT_ETC1_A4              = 13,
238        NATIVE_FORMAT_GAS                  = 14,
239        NATIVE_FORMAT_SHADOW               = 15,
240        NATIVE_FORMAT_DEPTH_16             = 16,
241        NATIVE_FORMAT_DEPTH_24             = 17,
242        NATIVE_FORMAT_DEPTH_24_STENCIL_8   = 18,
243 
244        NATIVE_FORMAT_RESERVED_MAX_U32 = 0xffffffffu
245     };
246 
247     #if NN_GD_DOCUMENT_TYPE == ENGLISH
248     /* Please see man pages for details
249 
250 
251 
252 
253     */
254     #else
255     /* Please see man pages for details
256 
257 
258 
259 
260     */
261     #endif
262     enum Format
263     {
264         FORMAT_RGBA_8888             = 100,
265         FORMAT_RGB_888               = 101,
266         FORMAT_RGBA_5551             = 102,
267         FORMAT_RGB_565               = 103,
268         FORMAT_RGBA_4444             = 104,
269         FORMAT_LUMINANCE_ALPHA_88    = 105,
270         FORMAT_LUMINANCE_8           = 106,
271         FORMAT_ALPHA_8               = 107,
272         FORMAT_LUMINANCE_ALPHA_44    = 108,
273         FORMAT_LUMINANCE_4           = 109,
274         FORMAT_ALPHA_4               = 110,
275         FORMAT_HILO_88               = 111,
276 
277         FORMAT_RESERVED_MAX_U32 = 0xffffffffu
278     };
279 
280     #if NN_GD_DOCUMENT_TYPE == ENGLISH
281     /* Please see man pages for details */
282     #else
283     /* Please see man pages for details */
284     #endif
285     enum CompressedFormat
286     {
287         FORMAT_ETC1_RGB8        = 111,
288         FORMAT_ETC1_A4          = 112,
289 
290         FORMAT_ETC1_RESERVED_MAX_U32 = 0xffffffffu
291     };
292 
293     #if NN_GD_DOCUMENT_TYPE == ENGLISH
294     /* Please see man pages for details */
295     #else
296     /* Please see man pages for details */
297     #endif
298     enum MapUsage
299     {
300         MAP_READ_ONLY = 0,
301         MAP_WRITE_ONLY = 1,
302         MAP_READ_WRITE = 2,
303 
304         MAP_RESERVED_MAX_U32 = 0xffffffffu
305     };
306 
307     /* Please see man pages for details
308 
309     */
310     #if NN_GD_DOCUMENT_TYPE == ENGLISH
311     /* Please see man pages for details
312 
313     */
314     #else
315     /* Please see man pages for details
316 
317     */
318     #endif
319     class Helper
320     {
321     public:
322         #if NN_GD_DOCUMENT_TYPE == ENGLISH
323         /* Please see man pages for details
324 
325 
326 
327 
328 
329 
330 
331 
332 
333 
334 
335 
336 
337 
338 
339 
340         */
341         #else
342         /* Please see man pages for details
343 
344 
345 
346 
347 
348 
349 
350 
351 
352 
353 
354 
355 
356 
357 
358 
359 
360 
361 
362 
363 
364 
365 
366 
367 
368 
369 
370 
371 
372 
373         */
374         #endif
375         static nnResult ConvertTextureResourceToNativeFormat(Format format, u32 width, u32 height, const u8* dataSrc, u8* dataDst, NativeFormat* pnativeFormat = NULL);
376 
377         #if NN_GD_DOCUMENT_TYPE == ENGLISH
378         /* Please see man pages for details
379 
380 
381 
382 
383 
384 
385 
386 
387 
388 
389 
390 
391 
392 
393 
394 
395 
396 
397 
398 
399 
400 
401 
402 
403 
404 
405 
406 
407 
408 
409 
410 
411 
412 
413 
414 
415 
416 
417 
418 
419         */
420         #else
421         /* Please see man pages for details
422 
423 
424 
425 
426 
427 
428 
429 
430 
431 
432 
433 
434 
435 
436 
437 
438 
439 
440 
441 
442 
443 
444 
445 
446 
447 
448 
449 
450 
451 
452 
453 
454 
455 
456 
457 
458 
459 
460 
461 
462         */
463         #endif
464         static nnResult GenerateMipMapsCPU(NativeFormat format, u32 width, u32 height, const u8* dataSrc, u8* dataDst, u32 countMipLevelToGenerate);
465 
466         #if NN_GD_DOCUMENT_TYPE == ENGLISH
467         /* Please see man pages for details
468 
469 
470 
471 
472 
473 
474 
475 
476 
477 
478 
479 
480 
481 
482 
483 
484         */
485         #else
486         /* Please see man pages for details
487 
488 
489 
490 
491 
492 
493 
494 
495 
496 
497 
498 
499 
500 
501 
502 
503         */
504         #endif
505         static nnResult ConvertCompressedTextureResourceToNativeFormat(CompressedFormat format, u32 width, u32 height, u8* dataSrc, u8* dataDst, NativeFormat* pnativeFormat = NULL);
506     };
507 
508     #if NN_GD_DOCUMENT_TYPE == ENGLISH
509     /* Please see man pages for details
510 
511 
512 
513 
514 
515 
516 
517 
518 
519 
520 
521 
522 
523 
524 
525 
526 
527 
528 
529 
530 
531 
532 
533 
534 
535 
536 
537 
538 
539 
540 
541 
542 
543 
544 
545 
546 
547 
548 
549     */
550     #else
551     /* Please see man pages for details
552 
553 
554 
555 
556 
557 
558 
559 
560 
561 
562 
563 
564 
565 
566 
567 
568 
569 
570 
571 
572 
573 
574 
575 
576 
577 
578 
579 
580 
581 
582 
583 
584 
585 
586 
587 
588     */
589     #endif
590     static nnResult CreateTexture2DResource(const Texture2DResourceDescription* description, const void* initialData, gdBool autoGenerateMipMapsFromData, Texture2DResource** texture2DResource, gdBool copyInitialData = GD_TRUE);
591 
592     #if NN_GD_DOCUMENT_TYPE == ENGLISH
593     /* Please see man pages for details
594 
595 
596 
597 
598 
599 
600 
601 
602 
603 
604 
605 
606 
607 
608 
609 
610     */
611     #else
612     /* Please see man pages for details
613 
614 
615 
616 
617 
618 
619 
620 
621 
622 
623 
624 
625 
626 
627 
628     */
629     #endif
630     static nnResult CreateTexture2DResourceCastFrom(const Texture2DResource* initialTexture2DResource, Resource::NativeFormat format, Memory::MemoryLayout layout, Texture2DResource** texture2DResource);
631 
632     #if NN_GD_DOCUMENT_TYPE == ENGLISH
633     /* Please see man pages for details
634 
635 
636 
637 
638 
639 
640     */
641     #else
642     /* Please see man pages for details
643 
644 
645 
646 
647 
648 
649     */
650     #endif
651     static nnResult GetTexture2DResourceProperties(const Texture2DResource* texture2DResource, Texture2DResourceProperties* properties);
652 
653     #if NN_GD_DOCUMENT_TYPE == ENGLISH
654     /* Please see man pages for details
655 
656 
657 
658 
659 
660 
661     */
662     #else
663     /* Please see man pages for details
664 
665 
666 
667 
668 
669 
670     */
671     #endif
672     static nnResult ReleaseTexture2DResource(Texture2DResource* texture2DResource);
673 
674     #if NN_GD_DOCUMENT_TYPE == ENGLISH
675     /* Please see man pages for details
676 
677 
678 
679 
680 
681 
682 
683 
684 
685 
686 
687 
688 
689 
690     */
691     #else
692     /* Please see man pages for details
693 
694 
695 
696 
697 
698 
699 
700 
701 
702 
703 
704 
705 
706 
707 
708     */
709     #endif
710     static nnResult MapTexture2DResource(Texture2DResource* texture2DResource, s32 mipLevelIndex, MapUsage usage, void** data);
711 
712     #if NN_GD_DOCUMENT_TYPE == ENGLISH
713     /* Please see man pages for details
714 
715 
716 
717 
718 
719 
720 
721 
722     */
723     #else
724     /* Please see man pages for details
725 
726 
727 
728 
729 
730 
731 
732 
733     */
734     #endif
735     static nnResult UnmapTexture2DResource(Texture2DResource* texture2DResource);
736     /*  */ // name
737 
738 
739     /* Please see man pages for details
740 
741     */
742     #if NN_GD_DOCUMENT_TYPE == ENGLISH
743     /* Please see man pages for details
744 
745 
746 
747 
748 
749 
750 
751 
752 
753 
754 
755 
756 
757 
758 
759 
760 
761 
762 
763 
764 
765     */
766     #else
767     /* Please see man pages for details
768 
769 
770 
771 
772 
773 
774 
775 
776 
777 
778 
779 
780 
781 
782 
783 
784 
785 
786 
787 
788 
789 
790     */
791     #endif
792     static nnResult CreateVertexBufferResource(const VertexBufferResourceDescription* description, const void* initialData, VertexBufferResource** buffer, gdBool copyInitialData = GD_TRUE);
793 
794     #if NN_GD_DOCUMENT_TYPE == ENGLISH
795     /* Please see man pages for details
796 
797 
798 
799 
800 
801 
802     */
803     #else
804     /* Please see man pages for details
805 
806 
807 
808 
809 
810 
811     */
812     #endif
813     static nnResult GetVertexBufferResourceProperties(const VertexBufferResource* buffer, VertexBufferResourceProperties* properties);
814 
815     #if NN_GD_DOCUMENT_TYPE == ENGLISH
816     /* Please see man pages for details
817 
818 
819 
820 
821 
822 
823 
824 
825 
826 
827 
828 
829     */
830     #else
831     /* Please see man pages for details
832 
833 
834 
835 
836 
837 
838 
839 
840 
841 
842 
843 
844 
845     */
846     #endif
847     static nnResult MapVertexBufferResource(VertexBufferResource* buffer, MapUsage usage, void** data);
848 
849     #if NN_GD_DOCUMENT_TYPE == ENGLISH
850     /* Please see man pages for details
851 
852 
853 
854 
855 
856 
857 
858 
859     */
860     #else
861     /* Please see man pages for details
862 
863 
864 
865 
866 
867 
868 
869 
870     */
871     #endif
872     static nnResult UnmapVertexBufferResource(VertexBufferResource* buffer);
873 
874     #if NN_GD_DOCUMENT_TYPE == ENGLISH
875     /* Please see man pages for details
876 
877 
878 
879 
880 
881     */
882     #else
883     /* Please see man pages for details
884 
885 
886 
887 
888 
889     */
890     #endif
891     static nnResult ReleaseVertexBufferResource(VertexBufferResource* buffer);
892     /*  */ // name
893 
894 };  // Resource
895 
896 
897 /*****************************************************************************************************************************/
898 /********************************************* Descriptor/Properties class definition ****************************************/
899 #if NN_GD_DOCUMENT_TYPE == ENGLISH
900 /* Please see man pages for details
901 
902 
903 */
904 #else
905 /* Please see man pages for details
906 
907 
908 */
909 #endif
910 class Texture2DResourceDescription
911 {
912 public:
913     #if NN_GD_DOCUMENT_TYPE == ENGLISH
914     /* Please see man pages for details */
915     #else
916     /* Please see man pages for details */
917     #endif
918     u32 m_Width;
919 
920     #if NN_GD_DOCUMENT_TYPE == ENGLISH
921     /* Please see man pages for details */
922     #else
923     /* Please see man pages for details */
924     #endif
925     u32 m_Height;
926 
927     #if NN_GD_DOCUMENT_TYPE == ENGLISH
928     /* Please see man pages for details */
929     #else
930     /* Please see man pages for details */
931     #endif
932     u32 m_CountMipLevels;
933 
934     #if NN_GD_DOCUMENT_TYPE == ENGLISH
935     /* Please see man pages for details */
936     #else
937     /* Please see man pages for details */
938     #endif
939     Resource::NativeFormat m_Format;
940 
941     #if NN_GD_DOCUMENT_TYPE == ENGLISH
942     /* Please see man pages for details */
943     #else
944     /* Please see man pages for details */
945     #endif
946     Memory::MemoryLayout m_MemLayout;
947     #if NN_GD_DOCUMENT_TYPE == ENGLISH
948     /* Please see man pages for details */
949     #else
950     /* Please see man pages for details */
951     #endif
952     Memory::MemoryLocation m_MemLocation;
953 };  // Texture2DResourceDescription
954 
955 
956 #if NN_GD_DOCUMENT_TYPE == ENGLISH
957 /* Please see man pages for details
958 
959 
960 */
961 #else
962 /* Please see man pages for details
963 
964 
965 */
966 #endif
967 class MipmapResourceInfo
968 {
969 public:
970     #if NN_GD_DOCUMENT_TYPE == ENGLISH
971     /* Please see man pages for details */
972     #else
973     /* Please see man pages for details */
974     #endif
975     u32 m_Width;
976 
977     #if NN_GD_DOCUMENT_TYPE == ENGLISH
978     /* Please see man pages for details */
979     #else
980     /* Please see man pages for details */
981     #endif
982     u32 m_Height;
983 
984     #if NN_GD_DOCUMENT_TYPE == ENGLISH
985     /* Please see man pages for details */
986     #else
987     /* Please see man pages for details */
988     #endif
989     u8* m_MemAddr;
990 };
991 
992 
993 #if NN_GD_DOCUMENT_TYPE == ENGLISH
994 /* Please see man pages for details
995 
996 
997 */
998 #else
999 /* Please see man pages for details
1000 
1001 
1002 */
1003 #endif
1004 class Texture2DResourceProperties
1005 {
1006 public:
1007     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1008     /* Please see man pages for details */
1009     #else
1010     /* Please see man pages for details */
1011     #endif
1012     u32 m_Width;
1013 
1014     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1015     /* Please see man pages for details */
1016     #else
1017     /* Please see man pages for details */
1018     #endif
1019     u32 m_Height;
1020 
1021     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1022     /* Please see man pages for details */
1023     #else
1024     /* Please see man pages for details */
1025     #endif
1026     u32 m_CountMipLevels;
1027 
1028     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1029     /* Please see man pages for details */
1030     #else
1031     /* Please see man pages for details */
1032     #endif
1033     u32 m_PixelSize;
1034 
1035     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1036     /* Please see man pages for details */
1037     #else
1038     /* Please see man pages for details */
1039     #endif
1040     Resource::NativeFormat m_Format;
1041 
1042     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1043     /* Please see man pages for details */
1044     #else
1045     /* Please see man pages for details */
1046     #endif
1047     Memory::MemoryLayout m_MemLayout;
1048 
1049     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1050     /* Please see man pages for details */
1051     #else
1052     /* Please see man pages for details */
1053     #endif
1054     Memory::MemoryLocation m_MemLocation;
1055 
1056     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1057     /* Please see man pages for details */
1058     #else
1059     /* Please see man pages for details */
1060     #endif
1061     u8* m_MemAddr;
1062 
1063     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1064     /* Please see man pages for details
1065 
1066     */
1067     #else
1068     /* Please see man pages for details
1069 
1070     */
1071     #endif
GetMipmapAddress(u32 mipmapLevel)1072     MipmapResourceInfo GetMipmapAddress(u32 mipmapLevel)
1073     {
1074         MipmapResourceInfo mipmapInfo;
1075         mipmapInfo.m_Width = m_Width;
1076         mipmapInfo.m_Height = m_Height;
1077         mipmapInfo.m_MemAddr = m_MemAddr;
1078         for (u32 i=0; i<mipmapLevel; ++i)
1079         {
1080             mipmapInfo.m_MemAddr += (mipmapInfo.m_Width * mipmapInfo.m_Height * m_PixelSize) >> 3;
1081             mipmapInfo.m_Width >>= 1;
1082             mipmapInfo.m_Height >>= 1;
1083         }
1084         return mipmapInfo;
1085     }
1086 };
1087 
1088 
1089 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1090 /* Please see man pages for details
1091 
1092 
1093 */
1094 #else
1095 /* Please see man pages for details
1096 
1097 
1098 */
1099 #endif
1100 class VertexBufferResourceDescription
1101 {
1102 public:
1103 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1104     /* Please see man pages for details */
1105 #else
1106     /* Please see man pages for details */
1107 #endif
1108     u32 m_ByteSize;
1109 
1110 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1111     /* Please see man pages for details */
1112 #else
1113     /* Please see man pages for details */
1114 #endif
1115     Memory::MemoryLocation m_MemLocation;
1116 };
1117 
1118 
1119 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1120 /* Please see man pages for details
1121 
1122 
1123 */
1124 #else
1125 /* Please see man pages for details
1126 
1127 
1128 */
1129 #endif
1130 class VertexBufferResourceProperties
1131 {
1132 public:
1133 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1134     /* Please see man pages for details */
1135 #else
1136     /* Please see man pages for details */
1137 #endif
1138     u32 m_ByteSize;
1139 
1140 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1141     /* Please see man pages for details */
1142 #else
1143     /* Please see man pages for details */
1144 #endif
1145     Memory::MemoryLocation m_MemLocation;
1146 
1147 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1148     /* Please see man pages for details */
1149 #else
1150     /* Please see man pages for details */
1151 #endif
1152     u8* m_MemAddr;
1153 };
1154 
1155 
1156 }  // namespace CTR
1157 }  // namespace gd
1158 }  // namespace nn
1159 
1160 #endif // NN_GD_CTR_GD_RESOURCE_H_
1161