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