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     #else
250     /* Please see man pages for details */
251     #endif
252     typedef NativeFormat NativeResourceFormat;
253 
254     #if NN_GD_DOCUMENT_TYPE == ENGLISH
255     /* Please see man pages for details
256 
257 
258 
259     */
260     #else
261     /* Please see man pages for details
262 
263 
264 
265     */
266     #endif
267     enum Format
268     {
269         FORMAT_RGBA_8888             = 100,
270         FORMAT_RGB_888               = 101,
271         FORMAT_RGBA_5551             = 102,
272         FORMAT_RGB_565               = 103,
273         FORMAT_RGBA_4444             = 104,
274         FORMAT_LUMINANCE_ALPHA_88    = 105,
275         FORMAT_LUMINANCE_8           = 106,
276         FORMAT_ALPHA_8               = 107,
277         FORMAT_LUMINANCE_ALPHA_44    = 108,
278         FORMAT_LUMINANCE_4           = 109,
279         FORMAT_ALPHA_4               = 110,
280         FORMAT_HILO_88               = 111,
281 
282         FORMAT_RESERVED_MAX_U32 = 0xffffffffu
283     };
284 
285     #if NN_GD_DOCUMENT_TYPE == ENGLISH
286     /* Please see man pages for details */
287     #else
288     /* Please see man pages for details */
289     #endif
290     typedef Format ResourceFormat;
291 
292     #if NN_GD_DOCUMENT_TYPE == ENGLISH
293     /* Please see man pages for details */
294     #else
295     /* Please see man pages for details */
296     #endif
297     enum CompressedFormat
298     {
299         FORMAT_ETC1_RGB8        = 111,
300         FORMAT_ETC1_A4          = 112,
301 
302         FORMAT_ETC1_RESERVED_MAX_U32 = 0xffffffffu
303     };
304 
305     #if NN_GD_DOCUMENT_TYPE == ENGLISH
306     /* Please see man pages for details */
307     #else
308     /* Please see man pages for details */
309     #endif
310     typedef CompressedFormat CompressedResourceFormat;
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 MapUsage
318     {
319         MAP_READ_ONLY = 0,
320         MAP_WRITE_ONLY = 1,
321         MAP_READ_WRITE = 2,
322 
323         MAP_RESERVED_MAX_U32 = 0xffffffffu
324     };
325 
326     /* Please see man pages for details
327 
328     */
329     #if NN_GD_DOCUMENT_TYPE == ENGLISH
330     /* Please see man pages for details
331 
332     */
333     #else
334     /* Please see man pages for details
335 
336     */
337     #endif
338     class Helper
339     {
340     public:
341         #if NN_GD_DOCUMENT_TYPE == ENGLISH
342         /* Please see man pages for details
343 
344 
345 
346 
347 
348 
349 
350 
351         */
352         #else
353         /* Please see man pages for details
354 
355 
356 
357 
358 
359 
360 
361 
362 
363 
364 
365 
366 
367 
368 
369 
370 
371 
372 
373 
374 
375 
376 
377 
378 
379 
380 
381 
382 
383 
384         */
385         #endif
386         static nnResult ConvertTextureResourceToNativeFormat(Format format, u32 width, u32 height, const u8* dataSrc, u8* dataDst, NativeFormat* pnativeFormat = NULL);
387 
388         #if NN_GD_DOCUMENT_TYPE == ENGLISH
389         /* Please see man pages for details
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 
421 
422 
423         */
424         #else
425         /* Please see man pages for details
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         #endif
461         static nnResult GenerateMipMapsCPU(NativeFormat format, u32 width, u32 height, const u8* dataSrc, u8* dataDst, u32 countMipLevelToGenerate);
462 
463         #if NN_GD_DOCUMENT_TYPE == ENGLISH
464         /* Please see man pages for details
465 
466 
467 
468 
469 
470 
471 
472 
473         */
474         #else
475         /* Please see man pages for details
476 
477 
478 
479 
480 
481 
482 
483 
484 
485 
486 
487 
488 
489 
490 
491         */
492         #endif
493         static nnResult ConvertCompressedTextureResourceToNativeFormat(CompressedFormat format, u32 width, u32 height, u8* dataSrc, u8* dataDst, NativeFormat* pnativeFormat = NULL);
494     };
495 
496     #if NN_GD_DOCUMENT_TYPE == ENGLISH
497     /* Please see man pages for details
498 
499 
500 
501 
502 
503 
504 
505 
506 
507 
508 
509 
510 
511 
512 
513 
514 
515 
516 
517 
518     */
519     #else
520     /* Please see man pages for details
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 
551 
552 
553     */
554     #endif
555     static nnResult CreateTexture2DResource(const Texture2DResourceDescription* description, const void* initialData, gdBool autoGenerateMipMapsFromData, Texture2DResource** texture2DResource, gdBool copyInitialData = GD_TRUE);
556 
557     #if NN_GD_DOCUMENT_TYPE == ENGLISH
558     /* Please see man pages for details
559 
560 
561 
562 
563 
564 
565 
566 
567 
568     */
569     #else
570     /* Please see man pages for details
571 
572 
573 
574 
575 
576 
577 
578 
579     */
580     #endif
581     static nnResult CreateTexture2DResourceCastFrom(const Texture2DResource* initialTexture2DResource, Resource::NativeFormat format, Memory::MemoryLayout layout, Texture2DResource** texture2DResource);
582 
583     #if NN_GD_DOCUMENT_TYPE == ENGLISH
584     /* Please see man pages for details
585 
586 
587     */
588     #else
589     /* Please see man pages for details
590 
591 
592 
593 
594 
595 
596     */
597     #endif
598     static nnResult GetTexture2DResourceProperties(const Texture2DResource* texture2DResource, Texture2DResourceProperties* properties);
599 
600     #if NN_GD_DOCUMENT_TYPE == ENGLISH
601     /* Please see man pages for details
602 
603     */
604     #else
605     /* Please see man pages for details
606 
607 
608 
609 
610 
611 
612     */
613     #endif
614     static nnResult ReleaseTexture2DResource(Texture2DResource* texture2DResource);
615 
616     #if NN_GD_DOCUMENT_TYPE == ENGLISH
617     /* Please see man pages for details
618 
619 
620 
621 
622 
623 
624 
625     */
626     #else
627     /* Please see man pages for details
628 
629 
630 
631 
632 
633 
634 
635 
636 
637 
638 
639 
640 
641     */
642     #endif
643     static nnResult MapTexture2DResource(Texture2DResource* texture2DResource, s32 mipLevelIndex, MapUsage usage, void** data);
644 
645     #if NN_GD_DOCUMENT_TYPE == ENGLISH
646     /* Please see man pages for details
647 
648 
649     */
650     #else
651     /* Please see man pages for details
652 
653 
654 
655 
656 
657 
658     */
659     #endif
660     static nnResult UnmapTexture2DResource(Texture2DResource* texture2DResource);
661     /*  */ // name
662 
663 
664     /* Please see man pages for details
665 
666     */
667     #if NN_GD_DOCUMENT_TYPE == ENGLISH
668     /* Please see man pages for details
669 
670 
671 
672 
673 
674 
675 
676 
677 
678 
679 
680 
681     */
682     #else
683     /* Please see man pages for details
684 
685 
686 
687 
688 
689 
690 
691 
692 
693 
694 
695 
696 
697 
698 
699 
700 
701 
702 
703 
704 
705     */
706     #endif
707     static nnResult CreateVertexBufferResource(const VertexBufferResourceDescription* description, const void* initialData, VertexBufferResource** buffer, gdBool copyInitialData = GD_TRUE);
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 
720 
721 
722     */
723     #endif
724     static nnResult GetVertexBufferResourceProperties(const VertexBufferResource* buffer, VertexBufferResourceProperties* properties);
725 
726     #if NN_GD_DOCUMENT_TYPE == ENGLISH
727     /* Please see man pages for details
728 
729 
730 
731 
732 
733     */
734     #else
735     /* Please see man pages for details
736 
737 
738 
739 
740 
741 
742 
743 
744 
745 
746 
747     */
748     #endif
749     static nnResult MapVertexBufferResource(VertexBufferResource* buffer, MapUsage usage, void** data);
750 
751     #if NN_GD_DOCUMENT_TYPE == ENGLISH
752     /* Please see man pages for details
753 
754 
755     */
756     #else
757     /* Please see man pages for details
758 
759 
760 
761 
762 
763 
764     */
765     #endif
766     static nnResult UnmapVertexBufferResource(VertexBufferResource* buffer);
767 
768     #if NN_GD_DOCUMENT_TYPE == ENGLISH
769     /* Please see man pages for details
770 
771     */
772     #else
773     /* Please see man pages for details
774 
775 
776 
777 
778 
779     */
780     #endif
781     static nnResult ReleaseVertexBufferResource(VertexBufferResource* buffer);
782     /*  */ // name
783 
784 };  // Resource
785 
786 
787 /*****************************************************************************************************************************/
788 /********************************************* Descriptor/Properties class definition ****************************************/
789 #if NN_GD_DOCUMENT_TYPE == ENGLISH
790 /* Please see man pages for details
791 
792 
793 */
794 #else
795 /* Please see man pages for details
796 
797 
798 */
799 #endif
800 class Texture2DResourceDescription
801 {
802 public:
803     #if NN_GD_DOCUMENT_TYPE == ENGLISH
804     /* Please see man pages for details */
805     #else
806     /* Please see man pages for details */
807     #endif
808     u32 m_Width;
809 
810     #if NN_GD_DOCUMENT_TYPE == ENGLISH
811     /* Please see man pages for details */
812     #else
813     /* Please see man pages for details */
814     #endif
815     u32 m_Height;
816 
817     #if NN_GD_DOCUMENT_TYPE == ENGLISH
818     /* Please see man pages for details */
819     #else
820     /* Please see man pages for details */
821     #endif
822     u32 m_CountMipLevels;
823 
824     #if NN_GD_DOCUMENT_TYPE == ENGLISH
825     /* Please see man pages for details */
826     #else
827     /* Please see man pages for details */
828     #endif
829     Resource::NativeFormat m_Format;
830 
831     #if NN_GD_DOCUMENT_TYPE == ENGLISH
832     /* Please see man pages for details */
833     #else
834     /* Please see man pages for details */
835     #endif
836     Memory::MemoryLayout m_MemLayout;
837     #if NN_GD_DOCUMENT_TYPE == ENGLISH
838     /* Please see man pages for details */
839     #else
840     /* Please see man pages for details */
841     #endif
842     Memory::MemoryLocation m_MemLocation;
843 };  // Texture2DResourceDescription
844 
845 
846 #if NN_GD_DOCUMENT_TYPE == ENGLISH
847 /* Please see man pages for details
848 
849 
850 */
851 #else
852 /* Please see man pages for details
853 
854 
855 */
856 #endif
857 class MipmapResourceInfo
858 {
859 public:
860     #if NN_GD_DOCUMENT_TYPE == ENGLISH
861     /* Please see man pages for details */
862     #else
863     /* Please see man pages for details */
864     #endif
865     u32 m_Width;
866 
867     #if NN_GD_DOCUMENT_TYPE == ENGLISH
868     /* Please see man pages for details */
869     #else
870     /* Please see man pages for details */
871     #endif
872     u32 m_Height;
873 
874     #if NN_GD_DOCUMENT_TYPE == ENGLISH
875     /* Please see man pages for details */
876     #else
877     /* Please see man pages for details */
878     #endif
879     u8* m_MemAddr;
880 };
881 
882 
883 #if NN_GD_DOCUMENT_TYPE == ENGLISH
884 /* Please see man pages for details
885 
886 
887 */
888 #else
889 /* Please see man pages for details
890 
891 
892 */
893 #endif
894 class Texture2DResourceProperties
895 {
896 public:
897     #if NN_GD_DOCUMENT_TYPE == ENGLISH
898     /* Please see man pages for details */
899     #else
900     /* Please see man pages for details */
901     #endif
902     u32 m_Width;
903 
904     #if NN_GD_DOCUMENT_TYPE == ENGLISH
905     /* Please see man pages for details */
906     #else
907     /* Please see man pages for details */
908     #endif
909     u32 m_Height;
910 
911     #if NN_GD_DOCUMENT_TYPE == ENGLISH
912     /* Please see man pages for details */
913     #else
914     /* Please see man pages for details */
915     #endif
916     u32 m_CountMipLevels;
917 
918     #if NN_GD_DOCUMENT_TYPE == ENGLISH
919     /* Please see man pages for details */
920     #else
921     /* Please see man pages for details */
922     #endif
923     u32 m_PixelSize;
924 
925     #if NN_GD_DOCUMENT_TYPE == ENGLISH
926     /* Please see man pages for details */
927     #else
928     /* Please see man pages for details */
929     #endif
930     Resource::NativeFormat m_Format;
931 
932     #if NN_GD_DOCUMENT_TYPE == ENGLISH
933     /* Please see man pages for details */
934     #else
935     /* Please see man pages for details */
936     #endif
937     Memory::MemoryLayout m_MemLayout;
938 
939     #if NN_GD_DOCUMENT_TYPE == ENGLISH
940     /* Please see man pages for details */
941     #else
942     /* Please see man pages for details */
943     #endif
944     Memory::MemoryLocation m_MemLocation;
945 
946     #if NN_GD_DOCUMENT_TYPE == ENGLISH
947     /* Please see man pages for details */
948     #else
949     /* Please see man pages for details */
950     #endif
951     u8* m_MemAddr;
952 
953     #if NN_GD_DOCUMENT_TYPE == ENGLISH
954     /* Please see man pages for details
955 
956     */
957     #else
958     /* Please see man pages for details
959 
960     */
961     #endif
GetMipmapAddress(u32 mipmapLevel)962     MipmapResourceInfo GetMipmapAddress(u32 mipmapLevel)
963     {
964         MipmapResourceInfo mipmapInfo;
965         mipmapInfo.m_Width = m_Width;
966         mipmapInfo.m_Height = m_Height;
967         mipmapInfo.m_MemAddr = m_MemAddr;
968         for (u32 i=0; i<mipmapLevel; ++i)
969         {
970             mipmapInfo.m_MemAddr += (mipmapInfo.m_Width * mipmapInfo.m_Height * m_PixelSize) >> 3;
971             mipmapInfo.m_Width >>= 1;
972             mipmapInfo.m_Height >>= 1;
973         }
974         return mipmapInfo;
975     }
976 };
977 
978 
979 #if NN_GD_DOCUMENT_TYPE == ENGLISH
980 /* Please see man pages for details
981 
982 
983 */
984 #else
985 /* Please see man pages for details
986 
987 
988 */
989 #endif
990 class VertexBufferResourceDescription
991 {
992 public:
993 #if NN_GD_DOCUMENT_TYPE == ENGLISH
994     /* Please see man pages for details */
995 #else
996     /* Please see man pages for details */
997 #endif
998     u32 m_ByteSize;
999 
1000 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1001     /* Please see man pages for details */
1002 #else
1003     /* Please see man pages for details */
1004 #endif
1005     Memory::MemoryLocation m_MemLocation;
1006 };
1007 
1008 
1009 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1010 /* Please see man pages for details
1011 
1012 
1013 */
1014 #else
1015 /* Please see man pages for details
1016 
1017 
1018 */
1019 #endif
1020 class VertexBufferResourceProperties
1021 {
1022 public:
1023 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1024     /* Please see man pages for details */
1025 #else
1026     /* Please see man pages for details */
1027 #endif
1028     u32 m_ByteSize;
1029 
1030 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1031     /* Please see man pages for details */
1032 #else
1033     /* Please see man pages for details */
1034 #endif
1035     Memory::MemoryLocation m_MemLocation;
1036 
1037 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1038     /* Please see man pages for details */
1039 #else
1040     /* Please see man pages for details */
1041 #endif
1042     u8* m_MemAddr;
1043 };
1044 
1045 
1046 }  // namespace CTR
1047 }  // namespace gd
1048 }  // namespace nn
1049 
1050 #endif // NN_GD_CTR_GD_RESOURCE_H_
1051