1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: gd_System.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_SYSTEM_H_ 15 #define NN_GD_CTR_GD_SYSTEM_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_VertexInput.h> 21 #include <nn/gd/CTR/gd_Memory.h> 22 23 #if NN_GD_DOCUMENT_TYPE == ENGLISH 24 /* Please see man pages for details 25 26 */ 27 #else 28 /* Please see man pages for details 29 30 */ 31 #endif 32 33 #ifndef NN_UNUSED_VAR 34 #if NN_GD_DOCUMENT_TYPE == ENGLISH 35 /* Please see man pages for details */ 36 #else 37 /* Please see man pages for details */ 38 #endif 39 #define NN_UNUSED_VAR(var) ((void)&var); 40 #endif 41 42 #if NN_GD_DOCUMENT_TYPE == ENGLISH 43 /* Please see man pages for details 44 45 46 */ 47 #else 48 /* Please see man pages for details 49 50 51 */ 52 #endif 53 typedef void (*gdCallbackfunctionErrorPtr)(nnResult result, const char* functionName); 54 55 namespace nn { 56 namespace gd { 57 namespace CTR { 58 59 #if NN_GD_DOCUMENT_TYPE == ENGLISH 60 /* Please see man pages for details 61 */ 62 #else 63 /* Please see man pages for details 64 */ 65 #endif 66 class RecordedPacketId; 67 68 #if NN_GD_DOCUMENT_TYPE == ENGLISH 69 /* Please see man pages for details 70 71 72 */ 73 /* */ // defgroup systemFunction 74 #else 75 /* Please see man pages for details 76 77 78 */ 79 /* */ // defgroup systemFunction 80 #endif 81 82 #if NN_GD_DOCUMENT_TYPE == ENGLISH 83 /* Please see man pages for details 84 85 86 87 88 */ 89 #else 90 /* Please see man pages for details 91 92 93 94 95 */ 96 #endif 97 class System 98 { 99 public: 100 101 #if NN_GD_DOCUMENT_TYPE == ENGLISH 102 /* Please see man pages for details */ 103 #else 104 /* Please see man pages for details */ 105 #endif 106 enum Module 107 { 108 #if NN_GD_DOCUMENT_TYPE == ENGLISH 109 /* Please see man pages for details */ 110 #else 111 /* Please see man pages for details */ 112 #endif 113 MODULE_RASTERIZER = 1 << 0, 114 115 #if NN_GD_DOCUMENT_TYPE == ENGLISH 116 /* Please see man pages for details */ 117 #else 118 /* Please see man pages for details */ 119 #endif 120 MODULE_LIGHTING = 1 << 1, 121 122 #if NN_GD_DOCUMENT_TYPE == ENGLISH 123 /* Please see man pages for details */ 124 #else 125 /* Please see man pages for details */ 126 #endif 127 MODULE_OUTPUT = 1 << 2, 128 129 #if NN_GD_DOCUMENT_TYPE == ENGLISH 130 /* Please see man pages for details */ 131 #else 132 /* Please see man pages for details */ 133 #endif 134 MODULE_TEXTURE_COMBINER = 1 << 3, 135 136 #if NN_GD_DOCUMENT_TYPE == ENGLISH 137 /* Please see man pages for details */ 138 #else 139 /* Please see man pages for details */ 140 #endif 141 MODULE_GAS_FOG = 1 << 4, 142 143 #if NN_GD_DOCUMENT_TYPE == ENGLISH 144 /* Please see man pages for details */ 145 #else 146 /* Please see man pages for details */ 147 #endif 148 MODULE_TEXTURE = 1 << 6, 149 150 #if NN_GD_DOCUMENT_TYPE == ENGLISH 151 /* Please see man pages for details */ 152 #else 153 /* Please see man pages for details */ 154 #endif 155 MODULE_TEXTURE_PROCEDURAL = 1 << 7, 156 157 #if NN_GD_DOCUMENT_TYPE == ENGLISH 158 /* Please see man pages for details */ 159 #else 160 /* Please see man pages for details */ 161 #endif 162 MODULE_VERTEX_INPUT = 1 << 8, 163 164 #if NN_GD_DOCUMENT_TYPE == ENGLISH 165 /* Please see man pages for details */ 166 #else 167 /* Please see man pages for details */ 168 #endif 169 MODULE_SHADER = 1 << 9, 170 171 #if NN_GD_DOCUMENT_TYPE == ENGLISH 172 /* Please see man pages for details */ 173 #else 174 /* Please see man pages for details */ 175 #endif 176 MODULE_ALL = 0xffffffffu 177 }; 178 179 #if NN_GD_DOCUMENT_TYPE == ENGLISH 180 /* Please see man pages for details */ 181 #else 182 /* Please see man pages for details */ 183 #endif 184 enum RecordingPacketUsage 185 { 186 #if NN_GD_DOCUMENT_TYPE == ENGLISH 187 /* Please see man pages for details */ 188 #else 189 /* Please see man pages for details */ 190 #endif 191 RECORD_COMMAND_LIST_COPY = 1 << 8, 192 193 #if NN_GD_DOCUMENT_TYPE == ENGLISH 194 /* Please see man pages for details */ 195 #else 196 /* Please see man pages for details */ 197 #endif 198 RECORD_COMMAND_LIST_NO_COPY = 1 << 9, 199 200 #if NN_GD_DOCUMENT_TYPE == ENGLISH 201 /* Please see man pages for details */ 202 #else 203 /* Please see man pages for details */ 204 #endif 205 RECORD_3D_COMMAND_BUFFER_FOR_JUMP = 1 << 10, 206 207 RECORD_PACKET_RESERVED_MAX_U32 = 0xffffffffu 208 }; 209 210 #if NN_GD_DOCUMENT_TYPE == ENGLISH 211 /* Please see man pages for details 212 213 */ 214 #else 215 /* Please see man pages for details 216 217 */ 218 #endif 219 static void SetCallbackFunctionError(gdCallbackfunctionErrorPtr callbackFunctionError); 220 221 #if NN_GD_DOCUMENT_TYPE == ENGLISH 222 /* Please see man pages for details 223 224 225 226 227 228 229 230 */ 231 #else 232 /* Please see man pages for details 233 234 235 236 237 238 */ 239 #endif 240 static char* GetErrorStringFromResult(nnResult result); 241 242 #if NN_GD_DOCUMENT_TYPE == ENGLISH 243 /* Please see man pages for details 244 245 246 247 248 249 250 251 */ 252 #else 253 /* Please see man pages for details 254 255 256 257 258 259 260 261 */ 262 #endif 263 static nnResult Initialize(); 264 265 #if NN_GD_DOCUMENT_TYPE == ENGLISH 266 /* Please see man pages for details 267 268 269 270 */ 271 #else 272 /* Please see man pages for details 273 274 275 276 */ 277 #endif 278 static void Finalize(); 279 280 #if NN_GD_DOCUMENT_TYPE == ENGLISH 281 /* Please see man pages for details 282 283 284 285 286 */ 287 #else 288 /* Please see man pages for details 289 290 291 292 293 */ 294 #endif 295 static void ForceDirty(u32 flag); 296 297 #if NN_GD_DOCUMENT_TYPE == ENGLISH 298 /* Please see man pages for details 299 300 301 302 */ 303 #else 304 /* Please see man pages for details 305 306 307 308 */ 309 #endif 310 static void SetDefault(u32 flag); 311 312 #if NN_GD_DOCUMENT_TYPE == ENGLISH 313 /* Please see man pages for details 314 315 316 317 318 319 */ 320 #else 321 /* Please see man pages for details 322 323 324 325 326 327 */ 328 #endif 329 static void FlushDirtyModule(u32 flag); 330 331 #if NN_GD_DOCUMENT_TYPE == ENGLISH 332 /* Please see man pages for details 333 334 335 */ 336 #else 337 /* Please see man pages for details 338 339 340 */ 341 #endif 342 static void Draw(u32 vertexCount, u32 startVertexLocation); 343 344 #if NN_GD_DOCUMENT_TYPE == ENGLISH 345 /* Please see man pages for details 346 347 348 */ 349 #else 350 /* Please see man pages for details 351 352 353 */ 354 #endif 355 static void DrawIndexed(u32 indexCount, u32 startIndexLocation); 356 357 #if NN_GD_DOCUMENT_TYPE == ENGLISH 358 /* Please see man pages for details 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 */ 374 #else 375 /* Please see man pages for details 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 */ 391 #endif 392 static void DrawImmediate(u32 vertexCount, u32 startVertexLocation, void** vertexBuffers, u32* offsets); 393 394 #if NN_GD_DOCUMENT_TYPE == ENGLISH 395 /* Please see man pages for details 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 #endif 447 static void DrawImmediateIndexed(u32 indexCount, u32 startIndexLocation, void** vertexBuffers, u32* offsets, void* indexBuffer, nn::gd::CTR::VertexInputStage::IndexFormat format, u32 indexOffset); 448 449 #if NN_GD_DOCUMENT_TYPE == ENGLISH 450 /* Please see man pages for details 451 */ 452 #else 453 /* Please see man pages for details 454 */ 455 #endif 456 static void Execute3DCommandList(); 457 458 #if NN_GD_DOCUMENT_TYPE == ENGLISH 459 /* Please see man pages for details 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 */ 501 #else 502 /* Please see man pages for details 503 504 505 506 507 508 509 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 #endif 548 static nnResult StartRecordingPackets(u32* forceDirtyModuleFlag, RecordingPacketUsage usage = RECORD_COMMAND_LIST_COPY); 549 550 #if NN_GD_DOCUMENT_TYPE == ENGLISH 551 /* Please see man pages for details 552 553 554 555 556 557 558 559 560 561 562 563 564 565 */ 566 #else 567 /* Please see man pages for details 568 569 570 571 572 573 574 575 576 577 578 579 580 581 */ 582 #endif 583 static nnResult GetCommandBufferOffset(u32* offset); 584 585 #if NN_GD_DOCUMENT_TYPE == ENGLISH 586 /* Please see man pages for details 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 */ 603 #else 604 /* Please see man pages for details 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 */ 622 #endif 623 static nnResult GetCommandBufferBaseAddress(RecordedPacketId* packetId, u32** commandBufferAddr); 624 625 #if NN_GD_DOCUMENT_TYPE == ENGLISH 626 /* Please see man pages for details 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 */ 648 #else 649 /* Please see man pages for details 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 */ 671 #endif 672 static nnResult StopRecordingPackets(RecordedPacketId** packetId); 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 692 693 694 695 696 697 698 */ 699 #else 700 /* Please see man pages for details 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 */ 726 #endif 727 static nnResult ReplayPackets(RecordedPacketId* packetId, u32* forceDirtyModuleFlag); 728 729 #if NN_GD_DOCUMENT_TYPE == ENGLISH 730 /* Please see man pages for details 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 */ 749 #else 750 /* Please see man pages for details 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 */ 768 #endif 769 static nnResult CopyPacket(RecordedPacketId* source, RecordedPacketId** packetId, Memory::MemoryLocation memory); 770 771 772 #if NN_GD_DOCUMENT_TYPE == ENGLISH 773 /* Please see man pages for details 774 775 776 777 778 779 */ 780 #else 781 /* Please see man pages for details 782 783 784 785 786 787 */ 788 #endif 789 static nnResult ReleasePackets(RecordedPacketId* packetId); 790 791 #if NN_GD_DOCUMENT_TYPE == ENGLISH 792 /* Please see man pages for details 793 794 795 796 797 */ 798 #else 799 /* Please see man pages for details 800 801 802 803 804 */ 805 #endif 806 static void AddDummyCommands(u32 countDummyCommands); 807 808 809 /* Please see man pages for details 810 811 */ 812 #if NN_GD_DOCUMENT_TYPE == ENGLISH 813 /* Please see man pages for details 814 815 */ 816 #else 817 /* Please see man pages for details 818 819 */ 820 #endif 821 class Debug 822 { 823 public: 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 enum Filter 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 FILTER_NONE = 0, 837 838 #if NN_GD_DOCUMENT_TYPE == ENGLISH 839 /* Please see man pages for details 840 841 */ 842 #else 843 /* Please see man pages for details 844 845 */ 846 #endif 847 FILTER_TEXTURE_8X8 = 1 << 0, 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 FILTER_TEXTURE_CUSTOM = 1 << 1, 861 862 #if NN_GD_DOCUMENT_TYPE == ENGLISH 863 /* Please see man pages for details 864 */ 865 #else 866 /* Please see man pages for details 867 */ 868 #endif 869 FILTER_SAMPLER_STATE_FILTER_NEAREST_MIPMAP_NEAREST = 1 << 2, 870 871 #if NN_GD_DOCUMENT_TYPE == ENGLISH 872 /* Please see man pages for details 873 */ 874 #else 875 /* Please see man pages for details 876 */ 877 #endif 878 FILTER_SAMPLER_STATE_FILTER_LINEAR_MIPMAP_NEAREST = 1 << 3, 879 880 #if NN_GD_DOCUMENT_TYPE == ENGLISH 881 /* Please see man pages for details */ 882 #else 883 /* Please see man pages for details */ 884 #endif 885 FILTER_VIEWPORT_1X1 = 1 << 4, 886 887 #if NN_GD_DOCUMENT_TYPE == ENGLISH 888 /* Please see man pages for details */ 889 #else 890 /* Please see man pages for details 891 */ 892 #endif 893 FILTER_SIMPLE_COMBINER = 1 << 5, 894 895 #if NN_GD_DOCUMENT_TYPE == ENGLISH 896 /* Please see man pages for details */ 897 #else 898 /* Please see man pages for details */ 899 #endif 900 FILTER_DISABLE_BLENDING = 1 << 6, 901 902 #if NN_GD_DOCUMENT_TYPE == ENGLISH 903 /* Please see man pages for details */ 904 #else 905 /* Please see man pages for details */ 906 #endif 907 FILTER_DISABLE_DEPTH_STENCIL_TEST = 1 << 7, 908 909 #if NN_GD_DOCUMENT_TYPE == ENGLISH 910 /* Please see man pages for details */ 911 #else 912 /* Please see man pages for details */ 913 #endif 914 FILTER_DISABLE_ALPHA_TEST = 1 << 8, 915 916 #if NN_GD_DOCUMENT_TYPE == ENGLISH 917 /* Please see man pages for details */ 918 #else 919 /* Please see man pages for details */ 920 #endif 921 FILTER_LIGHTING_STAGE_1_LIGHT_MAX = 1 << 9, 922 923 #if NN_GD_DOCUMENT_TYPE == ENGLISH 924 /* Please see man pages for details 925 926 */ 927 #else 928 /* Please see man pages for details */ 929 #endif 930 FILTER_LIGHTING_STAGE_SIMPLE_LAYER_CONFIGURATION = 1 << 10, 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 FILTER_DISABLE_DRAW = 1 << 11, 938 939 #if NN_GD_DOCUMENT_TYPE == ENGLISH 940 /* Please see man pages for details 941 942 943 */ 944 #else 945 /* Please see man pages for details 946 947 948 */ 949 #endif 950 FILTER_VISUALIZE_OVERDRAW = 1 << 12, 951 952 #if NN_GD_DOCUMENT_TYPE == ENGLISH 953 /* Please see man pages for details */ 954 #else 955 /* Please see man pages for details */ 956 #endif 957 FILTER_DISABLE_CULLING = 1 << 13, 958 959 #if NN_GD_DOCUMENT_TYPE == ENGLISH 960 /* Please see man pages for details */ 961 #else 962 /* Please see man pages for details */ 963 #endif 964 FILTER_ENABLE_CULLING_CLOCKWISE = 1 << 14, 965 966 #if NN_GD_DOCUMENT_TYPE == ENGLISH 967 /* Please see man pages for details */ 968 #else 969 /* Please see man pages for details */ 970 #endif 971 FILTER_ENABLE_CULLING_COUNTERCLOCKWISE = 1 << 15, 972 973 FILTER_RESERVED_MAX_U32 = 0xffffffffu 974 }; 975 976 #if NN_GD_DOCUMENT_TYPE == ENGLISH 977 /* Please see man pages for details 978 979 980 981 982 983 984 985 986 987 988 989 */ 990 #else 991 /* Please see man pages for details 992 993 994 995 996 997 998 999 1000 1001 1002 1003 */ 1004 #endif 1005 static nnResult SetFilter(u32 filterFlag, u32 drawStartIndex, s32 drawCount); 1006 1007 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1008 /* Please see man pages for details 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 */ 1024 #else 1025 /* Please see man pages for details 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 */ 1043 #endif 1044 static nnResult ColorizeMipmaps(Texture2DResource* texture2DResource, s32 minMipLevelIndex, s32 maxMipLevelIndex, u8 colors[][4]); 1045 1046 #if NN_GD_DOCUMENT_TYPE == ENGLISH 1047 /* Please see man pages for details 1048 1049 1050 1051 */ 1052 #else 1053 /* Please see man pages for details 1054 1055 1056 1057 */ 1058 #endif 1059 static void SetCustomTexture(Texture2D* customTexture); 1060 }; 1061 /* */ // name 1062 1063 }; // System 1064 1065 /* */ // addtogroup systemFunction 1066 1067 } // namespace CTR 1068 } // namespace gd 1069 } // namespace nn 1070 1071 1072 #endif // NN_GD_CTR_GD_SYSTEM_H_ 1073