1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     gd_OutputStage.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_OUTPUTSTAGE_H_
15 #define NN_GD_CTR_GD_OUTPUTSTAGE_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 #include <nn/gd/CTR/gd_Resource.h>
22 
23 #if NN_GD_DOCUMENT_TYPE == ENGLISH
24 /* Please see man pages for details
25 
26 
27 
28 */
29 #else
30 /* Please see man pages for details
31 
32 
33 
34 */
35 #endif
36 
37 namespace nn {
38 namespace gd {
39 namespace CTR {
40 
41 #if NN_GD_DOCUMENT_TYPE == ENGLISH
42 /* Please see man pages for details
43 */
44 #else
45 /* Please see man pages for details
46 */
47 #endif
48 class BlendState;
49 
50 #if NN_GD_DOCUMENT_TYPE == ENGLISH
51 /* Please see man pages for details
52 */
53 #else
54 /* Please see man pages for details
55 */
56 #endif
57 class DepthStencilState;
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 RenderTarget;
67 
68 #if NN_GD_DOCUMENT_TYPE == ENGLISH
69 /* Please see man pages for details
70 */
71 #else
72 /* Please see man pages for details
73 */
74 #endif
75 class DepthStencilTarget;
76 
77 #if NN_GD_DOCUMENT_TYPE == ENGLISH
78 /* Please see man pages for details
79 */
80 #else
81 /* Please see man pages for details
82 */
83 #endif
84 class DepthStencilStateDescription;
85 
86 #if NN_GD_DOCUMENT_TYPE == ENGLISH
87 /* Please see man pages for details
88 */
89 #else
90 /* Please see man pages for details
91 */
92 #endif
93 class BlendStateDescription;
94 
95 #if NN_GD_DOCUMENT_TYPE == ENGLISH
96 /* Please see man pages for details
97 */
98 #else
99 /* Please see man pages for details
100 */
101 #endif
102 class RenderTargetDescription;
103 
104 #if NN_GD_DOCUMENT_TYPE == ENGLISH
105 /* Please see man pages for details
106 */
107 #else
108 /* Please see man pages for details
109 */
110 #endif
111 class DepthStencilTargetDescription;
112 
113 #if NN_GD_DOCUMENT_TYPE == ENGLISH
114 /* Please see man pages for details
115 */
116 #else
117 /* Please see man pages for details
118 */
119 #endif
120 class TargetProperties;
121 
122 #if NN_GD_DOCUMENT_TYPE == ENGLISH
123 /* Please see man pages for details
124 
125 
126 
127 
128 
129 
130 */
131 #else
132 /* Please see man pages for details
133 
134 
135 
136 
137 
138 
139 */
140 #endif
141 class OutputStage
142 {
143 public:
144 
145     #if NN_GD_DOCUMENT_TYPE == ENGLISH
146     /* Please see man pages for details */
147     #else
148     /* Please see man pages for details */
149     #endif
150     enum DepthBufferType
151     {
152         #if NN_GD_DOCUMENT_TYPE == ENGLISH
153         /* Please see man pages for details */
154         #else
155         /* Please see man pages for details */
156         #endif
157         DEPTHBUFFER_LINEAR = 0,
158 
159         #if NN_GD_DOCUMENT_TYPE == ENGLISH
160         /* Please see man pages for details */
161         #else
162         /* Please see man pages for details */
163         #endif
164         DEPTHBUFFER_RECIPROCAL_FUNCTION = 1,
165 
166         DEPTHBUFFER_RESERVED_MAX_U32 = 0xffffffffu
167     };
168 
169     #if NN_GD_DOCUMENT_TYPE == ENGLISH
170     /* Please see man pages for details */
171     #else
172     /* Please see man pages for details */
173     #endif
174     enum FragmentOperationMode
175     {
176         #if NN_GD_DOCUMENT_TYPE == ENGLISH
177         /* Please see man pages for details */
178         #else
179         /* Please see man pages for details */
180         #endif
181         FRAGMENT_OPERATION_MODE_FRAGMENT_COLOR = 0,
182 
183         #if NN_GD_DOCUMENT_TYPE == ENGLISH
184         /* Please see man pages for details */
185         #else
186         /* Please see man pages for details */
187         #endif
188         FRAGMENT_OPERATION_MODE_GAS_ACCUMULATION = 1,
189 
190         #if NN_GD_DOCUMENT_TYPE == ENGLISH
191         /* Please see man pages for details */
192         #else
193         /* Please see man pages for details */
194         #endif
195         FRAGMENT_OPERATION_MODE_SHADOW_MAP = 3,
196 
197         FRAGMENT_OPERATION_MAPRESERVED_MAX_U32 = 0xffffffffu
198     };
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     enum BlendType
206     {
207         BLEND_TYPE_LOGICOP = 0,
208         BLEND_TYPE_BLENDING = 1,
209 
210         BLEND_RESERVED_MAX_U32 = 0xffffffffu
211     };
212 
213     #if NN_GD_DOCUMENT_TYPE == ENGLISH
214     /* Please see man pages for details */
215     #else
216     /* Please see man pages for details */
217     #endif
218     enum BlendFunction
219     {
220         BLEND_FUNCTION_ZERO                      = 0,
221         BLEND_FUNCTION_ONE                       = 1,
222         BLEND_FUNCTION_SRC_COLOR                 = 2,
223         BLEND_FUNCTION_ONE_MINUS_SRC_COLOR       = 3,
224         BLEND_FUNCTION_DST_COLOR                 = 4,
225         BLEND_FUNCTION_ONE_MINUS_DST_COLOR       = 5,
226         BLEND_FUNCTION_SRC_ALPHA                 = 6,
227         BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA       = 7,
228         BLEND_FUNCTION_DST_ALPHA                 = 8,
229         BLEND_FUNCTION_ONE_MINUS_DST_ALPHA       = 9,
230         BLEND_FUNCTION_CONSTANT_COLOR            = 10,
231         BLEND_FUNCTION_ONE_MINUS_CONSTANT_COLOR  = 11,
232         BLEND_FUNCTION_CONSTANT_ALPHA            = 12,
233         BLEND_FUNCTION_ONE_MINUS_CONSTANT_ALPHA  = 13,
234         BLEND_FUNCTION_SRC_ALPHA_SATURATE        = 14,
235 
236         BLEND_FUNCTION_RESERVED_MAX_U32 = 0xffffffffu
237     };
238 
239     #if NN_GD_DOCUMENT_TYPE == ENGLISH
240     /* Please see man pages for details */
241     #else
242     /* Please see man pages for details */
243     #endif
244     enum BlendEquation
245     {
246         BLEND_OPERATION_ADD              = 0,
247         BLEND_OPERATION_SUBTRACT         = 1,
248         BLEND_OPERATION_REV_SUBTRACT     = 2,
249         BLEND_OPERATION_MIN              = 3,
250         BLEND_OPERATION_MAX              = 4,
251 
252         BLEND_OPERATION_RESERVED_MAX_U32 = 0xffffffffu
253     };
254 
255     #if NN_GD_DOCUMENT_TYPE == ENGLISH
256     /* Please see man pages for details */
257     #else
258     /* Please see man pages for details */
259     #endif
260     enum LogicOperator
261     {
262         LOGIC_OPERATOR_CLEAR             = 0,
263         LOGIC_OPERATOR_AND               = 1,
264         LOGIC_OPERATOR_AND_REVERSE       = 2,
265         LOGIC_OPERATOR_COPY              = 3,
266         LOGIC_OPERATOR_SET               = 4,
267         LOGIC_OPERATOR_COPY_INVERTED     = 5,
268         LOGIC_OPERATOR_NOOP              = 6,
269         LOGIC_OPERATOR_INVERT            = 7,
270         LOGIC_OPERATOR_NAND              = 8,
271         LOGIC_OPERATOR_OR                = 9,
272         LOGIC_OPERATOR_NOR               = 10,
273         LOGIC_OPERATOR_XOR               = 11,
274         LOGIC_OPERATOR_EQUIV             = 12,
275         LOGIC_OPERATOR_AND_INVERTED      = 13,
276         LOGIC_OPERATOR_OR_REVERSE        = 14,
277         LOGIC_OPERATOR_OR_INVERTED       = 15,
278 
279         LOGIC_OPERATOR_RESERVED_MAX_U32 = 0xffffffffu
280     };
281 
282     #if NN_GD_DOCUMENT_TYPE == ENGLISH
283     /* Please see man pages for details */
284     #else
285     /* Please see man pages for details */
286     #endif
287     enum ColorWriteMask
288     {
289         COLOR_WRITE_MASK_ENABLE_RED      = 0x1,
290         COLOR_WRITE_MASK_ENABLE_GREEN    = 0x2,
291         COLOR_WRITE_MASK_ENABLE_BLUE     = 0x4,
292         COLOR_WRITE_MASK_ENABLE_ALPHA    = 0x8,
293         COLOR_WRITE_MASK_ENABLE_ALL      = ( COLOR_WRITE_MASK_ENABLE_RED | COLOR_WRITE_MASK_ENABLE_GREEN |
294                                                 COLOR_WRITE_MASK_ENABLE_BLUE | COLOR_WRITE_MASK_ENABLE_ALPHA ),
295         COLOR_WRITE_MASK_RESERVED_MAX_U32 = 0xffffffffu
296     };
297 
298     #if NN_GD_DOCUMENT_TYPE == ENGLISH
299     /* Please see man pages for details */
300     #else
301     /* Please see man pages for details */
302     #endif
303     enum DepthFunction
304     {
305         DEPTH_FUNCTION_NEVER     = 0,
306         DEPTH_FUNCTION_ALWAYS    = 1,
307         DEPTH_FUNCTION_EQUAL     = 2,
308         DEPTH_FUNCTION_NOTEQUAL  = 3,
309         DEPTH_FUNCTION_LESS      = 4,
310         DEPTH_FUNCTION_LEQUAL    = 5,
311         DEPTH_FUNCTION_GREATER   = 6,
312         DEPTH_FUNCTION_GEQUAL    = 7,
313 
314         DEPTH_FUNCTION_RESERVED_MAX_U32 = 0xffffffffu
315     };
316 
317     #if NN_GD_DOCUMENT_TYPE == ENGLISH
318     /* Please see man pages for details */
319     #else
320     /* Please see man pages for details */
321     #endif
322     enum DepthWriteMask
323     {
324         DEPTH_WRITE_MASK_ZERO    = 0,
325         DEPTH_WRITE_MASK_ALL     = 1,
326 
327         DEPTH_WRITE_MASK_RESERVED_MAX_U32 = 0xffffffffu
328     };
329 
330     #if NN_GD_DOCUMENT_TYPE == ENGLISH
331     /* Please see man pages for details */
332     #else
333     /* Please see man pages for details */
334     #endif
335     enum StencilFunction
336     {
337         STENCIL_FUNCTION_NEVER       = 0,
338         STENCIL_FUNCTION_ALWAYS      = 1,
339         STENCIL_FUNCTION_EQUAL       = 2,
340         STENCIL_FUNCTION_NOTEQUAL    = 3,
341         STENCIL_FUNCTION_LESS        = 4,
342         STENCIL_FUNCTION_LEQUAL      = 5,
343         STENCIL_FUNCTION_GREATER     = 6,
344         STENCIL_FUNCTION_GEQUAL      = 7,
345 
346         STENCIL_FUNCTION_RESERVED_MAX_U32 = 0xffffffffu
347     };
348 
349     #if NN_GD_DOCUMENT_TYPE == ENGLISH
350     /* Please see man pages for details */
351     #else
352     /* Please see man pages for details */
353     #endif
354     enum StencilFailOperation
355     {
356         STENCIL_OPERATION_KEEP       = 0,
357         STENCIL_OPERATION_ZERO       = 1,
358         STENCIL_OPERATION_REPLACE    = 2,
359         STENCIL_OPERATION_INCR       = 3,
360         STENCIL_OPERATION_DECR       = 4,
361         STENCIL_OPERATION_INVERT     = 5,
362         STENCIL_OPERATION_INCR_WRAP  = 6,
363         STENCIL_OPERATION_DECR_WRAP  = 7,
364 
365         STENCIL_OPERATION_RESERVED_MAX_U32 = 0xffffffffu
366     };
367 
368     #if NN_GD_DOCUMENT_TYPE == ENGLISH
369     /* Please see man pages for details */
370     #else
371     /* Please see man pages for details */
372     #endif
373     enum AlphaFunction
374     {
375         ALPHA_FUNCTION_NEVER     = 0,
376         ALPHA_FUNCTION_ALWAYS    = 1,
377         ALPHA_FUNCTION_EQUAL     = 2,
378         ALPHA_FUNCTION_NOTEQUAL  = 3,
379         ALPHA_FUNCTION_LESS      = 4,
380         ALPHA_FUNCTION_LEQUAL    = 5,
381         ALPHA_FUNCTION_GREATER   = 6,
382         ALPHA_FUNCTION_GEQUAL    = 7,
383 
384         ALPHA_FUNCTION_RESERVED_MAX_U32 = 0xffffffffu
385     };
386 
387     #if NN_GD_DOCUMENT_TYPE == ENGLISH
388     /* Please see man pages for details
389 
390 
391 
392 
393 
394 
395 
396 
397 
398 
399 
400 
401     */
402     #else
403     /* Please see man pages for details
404 
405 
406 
407 
408 
409 
410 
411 
412 
413 
414 
415 
416 
417 
418 
419 
420 
421 
422 
423 
424 
425 
426 
427 
428     */
429     #endif
430     static nnResult CreateRenderTarget(const Texture2DResource *texture2DResource, const RenderTargetDescription *desc, RenderTarget **renderTarget);
431 
432     #if NN_GD_DOCUMENT_TYPE == ENGLISH
433     /* Please see man pages for details
434 
435 
436     */
437     #else
438     /* Please see man pages for details
439 
440 
441 
442 
443 
444 
445     */
446     #endif
447     static nnResult GetRenderTargetProperties(const RenderTarget* renderTarget, TargetProperties* properties);
448 
449     #if NN_GD_DOCUMENT_TYPE == ENGLISH
450     /* Please see man pages for details
451 
452     */
453     #else
454     /* Please see man pages for details
455 
456 
457 
458 
459 
460     */
461     #endif
462     static nnResult ReleaseRenderTarget(RenderTarget *renderTarget);
463 
464 
465     #if NN_GD_DOCUMENT_TYPE == ENGLISH
466     /* Please see man pages for details
467 
468 
469 
470 
471 
472 
473 
474 
475 
476     */
477     #else
478     /* Please see man pages for details
479 
480 
481 
482 
483 
484 
485 
486 
487 
488 
489 
490 
491 
492 
493 
494 
495 
496 
497 
498 
499 
500     */
501     #endif
502     static nnResult CreateDepthStencilTarget(const Texture2DResource *texture2DResource, const DepthStencilTargetDescription *desc, DepthStencilTarget **depthStencil);
503 
504     #if NN_GD_DOCUMENT_TYPE == ENGLISH
505     /* Please see man pages for details
506 
507 
508     */
509     #else
510     /* Please see man pages for details
511 
512 
513 
514 
515 
516 
517     */
518     #endif
519     static nnResult GetDepthStencilTargetProperties(const DepthStencilTarget* depthStencil, TargetProperties* properties);
520 
521     #if NN_GD_DOCUMENT_TYPE == ENGLISH
522     /* Please see man pages for details
523 
524     */
525     #else
526     /* Please see man pages for details
527 
528 
529 
530 
531 
532     */
533     #endif
534     static nnResult ReleaseDepthStencilTarget(DepthStencilTarget *depthStencil);
535 
536     #if NN_GD_DOCUMENT_TYPE == ENGLISH
537     /* Please see man pages for details
538 
539     */
540     #else
541     /* Please see man pages for details
542 
543 
544 
545 
546 
547     */
548     #endif
549     static nnResult SetRenderTarget(const RenderTarget *renderTarget);
550 
551     #if NN_GD_DOCUMENT_TYPE == ENGLISH
552     /* Please see man pages for details
553 
554     */
555     #else
556     /* Please see man pages for details
557 
558 
559 
560 
561 
562     */
563     #endif
564     static nnResult SetDepthStencilTarget(const DepthStencilTarget *depthStencil);
565 
566     #if NN_GD_DOCUMENT_TYPE == ENGLISH
567     /* Please see man pages for details
568 
569     */
570     #else
571     /* Please see man pages for details
572 
573     */
574     #endif
575     static void SetFragOpMode(FragmentOperationMode fragOpMode);
576 
577     #if NN_GD_DOCUMENT_TYPE == ENGLISH
578     /* Please see man pages for details
579 
580 
581     */
582     #else
583     /* Please see man pages for details
584 
585 
586 
587 
588 
589 
590 
591 
592     */
593     #endif
594     static nnResult CreateBlendState(const BlendStateDescription *desc, BlendState **blendState);
595 
596     #if NN_GD_DOCUMENT_TYPE == ENGLISH
597     /* Please see man pages for details
598 
599     */
600     #else
601     /* Please see man pages for details
602 
603 
604 
605 
606 
607 
608     */
609     #endif
610     static nnResult ReleaseBlendState(BlendState *blendState);
611 
612     #if NN_GD_DOCUMENT_TYPE == ENGLISH
613     /* Please see man pages for details
614 
615     */
616     #else
617     /* Please see man pages for details
618 
619 
620 
621 
622 
623         */
624     #endif
625     static nnResult SetBlendState(const BlendState *blendState);
626 
627     #if NN_GD_DOCUMENT_TYPE == ENGLISH
628     /* Please see man pages for details
629 
630 
631 
632 
633     */
634     #else
635     /* Please see man pages for details
636 
637 
638 
639 
640     */
641     #endif
642     static void SetBlendColor(u8 R, u8 G, u8 B, u8 A);
643 
644     #if NN_GD_DOCUMENT_TYPE == ENGLISH
645     /* Please see man pages for details
646 
647 
648 
649     */
650     #else
651     /* Please see man pages for details
652 
653 
654 
655     */
656     #endif
657     static void SetAlphaTest(gdBool enable, AlphaFunction func, u8 alphaRef);
658 
659     #if NN_GD_DOCUMENT_TYPE == ENGLISH
660     /* Please see man pages for details
661 
662 
663     */
664     #else
665     /* Please see man pages for details
666 
667 
668 
669 
670 
671 
672 
673     */
674     #endif
675     static nnResult CreateDepthStencilState(const DepthStencilStateDescription *desc, DepthStencilState **DepthStencilState);
676 
677     #if NN_GD_DOCUMENT_TYPE == ENGLISH
678     /* Please see man pages for details
679 
680     */
681     #else
682     /* Please see man pages for details
683 
684 
685 
686 
687 
688 
689     */
690     #endif
691     static nnResult ReleaseDepthStencilState(DepthStencilState *DepthStencilState);
692 
693     #if NN_GD_DOCUMENT_TYPE == ENGLISH
694     /* Please see man pages for details
695 
696 
697     */
698     #else
699     /* Please see man pages for details
700 
701 
702 
703 
704 
705     */
706     #endif
707     static nnResult SetDepthStencilState(const DepthStencilState* state, u8 stencilRef);
708 
709     #if NN_GD_DOCUMENT_TYPE == ENGLISH
710     /* Please see man pages for details
711 
712     */
713     #else
714     /* Please see man pages for details
715 
716     */
717     #endif
718     static void SetColorWriteMask(u32 mask);
719 
720     #if NN_GD_DOCUMENT_TYPE == ENGLISH
721     /* Please see man pages for details
722 
723 
724     */
725     #else
726     /* Please see man pages for details
727 
728 
729     */
730     #endif
731     static void SetPenumbraScaleBias(f32 Scale, f32 Bias);
732 
733     #if NN_GD_DOCUMENT_TYPE == ENGLISH
734     /* Please see man pages for details
735 
736 
737 
738 
739     */
740     #else
741     /* Please see man pages for details
742 
743 
744 
745 
746     */
747     #endif
748     static void SetDepthRangeMode(DepthBufferType type, f32 depthRangeNear, f32 depthRangeFar, s32 offset);
749 
750 };  // class OutputStage
751 
752 
753 #if NN_GD_DOCUMENT_TYPE == ENGLISH
754 /* Please see man pages for details
755 
756 
757 */
758 #else
759 /* Please see man pages for details
760 
761 
762 */
763 #endif
764 class RenderTargetDescription
765 {
766 public:
767     #if NN_GD_DOCUMENT_TYPE == ENGLISH
768     /* Please see man pages for details */
769     #else
770     /* Please see man pages for details */
771     #endif
772     u32 m_MipLevelIndex;
773 };
774 
775 
776 #if NN_GD_DOCUMENT_TYPE == ENGLISH
777 /* Please see man pages for details
778 
779 
780 */
781 #else
782 /* Please see man pages for details
783 
784 
785 */
786 #endif
787 class DepthStencilTargetDescription
788 {
789 public:
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     u32 m_MipLevelIndex;
796 };
797 
798 
799 #if NN_GD_DOCUMENT_TYPE == ENGLISH
800 /* Please see man pages for details
801 
802 
803 */
804 #else
805 /* Please see man pages for details
806 
807 
808 */
809 #endif
810 class TargetProperties
811 {
812 public:
813     #if NN_GD_DOCUMENT_TYPE == ENGLISH
814     /* Please see man pages for details */
815     #else
816     /* Please see man pages for details */
817     #endif
818     u32 m_Width;
819 
820     #if NN_GD_DOCUMENT_TYPE == ENGLISH
821     /* Please see man pages for details */
822     #else
823     /* Please see man pages for details */
824     #endif
825     u32 m_Height;
826 
827     #if NN_GD_DOCUMENT_TYPE == ENGLISH
828     /* Please see man pages for details */
829     #else
830     /* Please see man pages for details */
831     #endif
832     u32 m_PixelSize;
833 
834     #if NN_GD_DOCUMENT_TYPE == ENGLISH
835     /* Please see man pages for details */
836     #else
837     /* Please see man pages for details */
838     #endif
839     Resource::NativeResourceFormat m_Format;
840 
841     #if NN_GD_DOCUMENT_TYPE == ENGLISH
842     /* Please see man pages for details */
843     #else
844     /* Please see man pages for details */
845     #endif
846     Memory::MemoryLayout m_MemLayout;
847 
848     #if NN_GD_DOCUMENT_TYPE == ENGLISH
849     /* Please see man pages for details */
850     #else
851     /* Please see man pages for details */
852     #endif
853     Memory::MemoryLocation m_MemLocation;
854 
855     #if NN_GD_DOCUMENT_TYPE == ENGLISH
856     /* Please see man pages for details */
857     #else
858     /* Please see man pages for details */
859     #endif
860     u8* m_MemAddr;
861 };  // TargetProperties
862 
863 
864 #if NN_GD_DOCUMENT_TYPE == ENGLISH
865 /* Please see man pages for details
866 
867 
868 */
869 #else
870 /* Please see man pages for details
871 
872 
873 */
874 #endif
875 
876 /*
877 Default = SetBlendMode_NoBlend
878     m_BlendType  BLEND_TYPE_BLENDING
879     m_LogicOp    LOGIC_OPERATOR_CLEAR
880     m_SrcRgb;    BLEND_FUNCTION_ZERO
881     m_DstRgb;    BLEND_FUNCTION_ONE
882     m_SrcAlpha;  BLEND_FUNCTION_ZERO
883     m_DstAlpha;  BLEND_FUNCTION_ONE
884     m_EqRgb;     BLEND_OPERATION_ADD
885     m_EqAlpha;   BLEND_OPERATION_ADD
886 
887 SetBlendMode_DefaultBlending
888     m_BlendType  BLEND_TYPE_BLENDING
889     m_LogicOp    LOGIC_OPERATOR_CLEAR
890     m_SrcRgb;    BLEND_FUNCTION_SRC_ALPHA
891     m_DstRgb;    BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA
892     m_SrcAlpha;  BLEND_FUNCTION_SRC_ALPHA
893     m_DstAlpha;  BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA
894     m_EqRgb;     BLEND_OPERATION_ADD
895     m_EqAlpha;   BLEND_OPERATION_ADD
896 
897 SetBlendMode_NoBlend
898     m_BlendType  BLEND_TYPE_BLENDING
899     m_LogicOp    LOGIC_OPERATOR_CLEAR
900     m_SrcRgb;    BLEND_FUNCTION_ZERO
901     m_DstRgb;    BLEND_FUNCTION_ONE
902     m_SrcAlpha;  BLEND_FUNCTION_ZERO
903     m_DstAlpha;  BLEND_FUNCTION_ONE
904     m_EqRgb;     BLEND_OPERATION_ADD
905     m_EqAlpha;   BLEND_OPERATION_ADD
906 
907 SetLogicOperatorMode_Default
908     m_BlendType  BLEND_TYPE_LOGICOP
909     m_LogicOp    LOGIC_OPERATOR_CLEAR
910     m_SrcRgb;    BLEND_FUNCTION_ZERO
911     m_DstRgb;    BLEND_FUNCTION_ONE
912     m_SrcAlpha;  BLEND_FUNCTION_ZERO
913     m_DstAlpha;  BLEND_FUNCTION_ONE
914     m_EqRgb;     BLEND_OPERATION_ADD
915     m_EqAlpha;   BLEND_OPERATION_ADD
916 */
917 class BlendStateDescription
918 {
919 public:
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     OutputStage::BlendType m_BlendType;
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     OutputStage::LogicOperator m_LogicOp;
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     OutputStage::BlendFunction m_SrcRgb;
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     OutputStage::BlendFunction m_DstRgb;
947 
948     #if NN_GD_DOCUMENT_TYPE == ENGLISH
949     /* Please see man pages for details */
950     #else
951     /* Please see man pages for details */
952     #endif
953     OutputStage::BlendFunction m_SrcAlpha;
954 
955     #if NN_GD_DOCUMENT_TYPE == ENGLISH
956     /* Please see man pages for details */
957     #else
958     /* Please see man pages for details */
959     #endif
960     OutputStage::BlendFunction m_DstAlpha;
961 
962     #if NN_GD_DOCUMENT_TYPE == ENGLISH
963     /* Please see man pages for details */
964     #else
965     /* Please see man pages for details */
966     #endif
967     OutputStage::BlendEquation m_EqRgb;
968 
969     #if NN_GD_DOCUMENT_TYPE == ENGLISH
970     /* Please see man pages for details */
971     #else
972     /* Please see man pages for details */
973     #endif
974     OutputStage::BlendEquation m_EqAlpha;
975 
976 public:
977 
978     #if NN_GD_DOCUMENT_TYPE == ENGLISH
979     /* Please see man pages for details
980 
981 
982 
983 
984 
985     */
986     #else
987    /* Please see man pages for details
988 
989 
990 
991 
992 
993     */
994     #endif
SetBlendFunc(OutputStage::BlendFunction src,OutputStage::BlendFunction dst,OutputStage::BlendEquation eq)995     void SetBlendFunc(OutputStage::BlendFunction src, OutputStage::BlendFunction dst, OutputStage::BlendEquation eq)
996     {
997         m_SrcRgb = m_SrcAlpha = src;
998         m_DstRgb = m_DstAlpha = dst;
999         m_EqRgb = m_EqAlpha = eq;
1000     }
1001 
1002     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1003     /* Please see man pages for details
1004 
1005 
1006 
1007 
1008 
1009 
1010 
1011 
1012     */
1013     #else
1014     /* Please see man pages for details
1015 
1016 
1017 
1018 
1019 
1020 
1021 
1022 
1023     */
1024     #endif
SetBlendFunc(OutputStage::BlendFunction srcRgb,OutputStage::BlendFunction dstRgb,OutputStage::BlendFunction srcAlpha,OutputStage::BlendFunction dstAlpha,OutputStage::BlendEquation eqRgb,OutputStage::BlendEquation eqAlpha)1025     void SetBlendFunc(OutputStage::BlendFunction srcRgb, OutputStage::BlendFunction dstRgb, OutputStage::BlendFunction srcAlpha,
1026         OutputStage::BlendFunction dstAlpha, OutputStage::BlendEquation eqRgb, OutputStage::BlendEquation eqAlpha)
1027     {
1028         m_SrcRgb = srcRgb;
1029         m_DstRgb = dstRgb;
1030         m_SrcAlpha = srcAlpha;
1031         m_DstAlpha = dstAlpha;
1032         m_EqRgb = eqRgb;
1033         m_EqAlpha = eqAlpha;
1034     }
1035 
1036     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1037     /* Please see man pages for details
1038 
1039 
1040     */
1041     #else
1042     /* Please see man pages for details
1043 
1044 
1045 
1046 
1047 
1048 
1049 
1050     */
1051     #endif
SetBlendMode_DefaultBlending()1052     void SetBlendMode_DefaultBlending()
1053     {
1054         m_BlendType = OutputStage::BLEND_TYPE_BLENDING;
1055         m_LogicOp   = OutputStage::LOGIC_OPERATOR_COPY;
1056         SetBlendFunc(OutputStage::BLEND_FUNCTION_SRC_ALPHA, OutputStage::BLEND_FUNCTION_ONE_MINUS_SRC_ALPHA, OutputStage::BLEND_OPERATION_ADD);
1057     }
1058 
1059     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1060     /* Please see man pages for details
1061 
1062 
1063     */
1064     #else
1065     /* Please see man pages for details
1066 
1067 
1068 
1069 
1070 
1071 
1072 
1073     */
1074     #endif
SetBlendMode_NoBlend()1075     void SetBlendMode_NoBlend()
1076     {
1077         m_BlendType = OutputStage::BLEND_TYPE_BLENDING;
1078         m_LogicOp   = OutputStage::LOGIC_OPERATOR_COPY;
1079         SetBlendFunc(OutputStage::BLEND_FUNCTION_ONE, OutputStage::BLEND_FUNCTION_ZERO, OutputStage::BLEND_OPERATION_ADD);
1080     }
1081 
1082     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1083     /* Please see man pages for details
1084 
1085 
1086     */
1087     #else
1088    /* Please see man pages for details
1089 
1090 
1091 
1092 
1093 
1094 
1095 
1096     */
1097     #endif
SetLogicOperatorMode_Default()1098     void SetLogicOperatorMode_Default()
1099     {
1100         m_BlendType = OutputStage::BLEND_TYPE_LOGICOP;
1101         m_LogicOp   = OutputStage::LOGIC_OPERATOR_COPY;
1102         SetBlendFunc(OutputStage::BLEND_FUNCTION_ONE, OutputStage::BLEND_FUNCTION_ZERO, OutputStage::BLEND_OPERATION_ADD);
1103     }
1104 
1105     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1106     /* Please see man pages for details
1107 
1108 
1109 
1110     */
1111     #else
1112     /* Please see man pages for details
1113 
1114 
1115 
1116 
1117 
1118 
1119 
1120 
1121 
1122     */
1123     #endif
SetLogicOperatorMode(OutputStage::LogicOperator logicOp)1124     void SetLogicOperatorMode(OutputStage::LogicOperator logicOp)
1125     {
1126         m_BlendType = OutputStage::BLEND_TYPE_LOGICOP;
1127         m_LogicOp   = logicOp;
1128         SetBlendFunc(OutputStage::BLEND_FUNCTION_ONE, OutputStage::BLEND_FUNCTION_ZERO, OutputStage::BLEND_OPERATION_ADD);
1129     }
1130 
1131     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1132     /* Please see man pages for details */
1133     #else
1134     /* Please see man pages for details */
1135     #endif
ToDefault()1136     void ToDefault()
1137     {
1138         SetBlendMode_NoBlend();
1139     }
1140 };  // BlendStateDescription
1141 
1142 
1143 #if NN_GD_DOCUMENT_TYPE == ENGLISH
1144 /* Please see man pages for details
1145 
1146 
1147 */
1148 #else
1149 /* Please see man pages for details
1150 
1151 
1152 */
1153 #endif
1154 
1155 /*
1156 Default value
1157 m_DepthEnable       GD_FALSE (0x0)
1158 m_DepthMask         DEPTH_WRITE_MASK_ALL (0x1)
1159 m_DepthFunc         DEPTH_FUNCTION_LESS (0x4)
1160 m_StencilEnable     GD_FALSE (0x0)
1161 m_StencilWriteMask  (0xff)
1162 m_StencilReadMask   (0xff)
1163 m_StencilFunc       STENCIL_FUNCTION_NEVER (0x0)
1164 m_StencilFail       STENCIL_OPERATION_KEEP (0x0)
1165 m_StencilZFail      STENCIL_OPERATION_KEEP (0x0)
1166 m_StencilZPass      STENCIL_OPERATION_KEEP (0x0)
1167 */
1168 class DepthStencilStateDescription
1169 {
1170 public:
1171 
1172     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1173     /* Please see man pages for details */
1174     #else
1175     /* Please see man pages for details */
1176     #endif
1177     gdBool                             m_DepthEnable;
1178 
1179     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1180     /* Please see man pages for details */
1181     #else
1182     /* Please see man pages for details */
1183     #endif
1184     gdBool                             m_StencilEnable;
1185 
1186     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1187     /* Please see man pages for details */
1188     #else
1189     /* Please see man pages for details */
1190     #endif
1191     u8                                 m_StencilWriteMask;
1192 
1193     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1194     /* Please see man pages for details */
1195     #else
1196     /* Please see man pages for details */
1197     #endif
1198     u8                                 m_StencilReadMask;
1199 
1200     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1201     /* Please see man pages for details */
1202     #else
1203     /* Please see man pages for details */
1204     #endif
1205     OutputStage::DepthWriteMask        m_DepthMask;
1206 
1207     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1208     /* Please see man pages for details */
1209     #else
1210     /* Please see man pages for details */
1211     #endif
1212     OutputStage::DepthFunction         m_DepthFunc;
1213 
1214     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1215     /* Please see man pages for details */
1216     #else
1217     /* Please see man pages for details */
1218     #endif
1219     OutputStage::StencilFunction       m_StencilFunc;
1220 
1221     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1222     /* Please see man pages for details */
1223     #else
1224     /* Please see man pages for details */
1225     #endif
1226     OutputStage::StencilFailOperation  m_StencilFail;
1227 
1228     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1229     /* Please see man pages for details */
1230     #else
1231     /* Please see man pages for details */
1232     #endif
1233     OutputStage::StencilFailOperation  m_StencilZFail;
1234 
1235     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1236     /* Please see man pages for details */
1237     #else
1238     /* Please see man pages for details */
1239     #endif
1240     OutputStage::StencilFailOperation  m_StencilZPass;
1241 
1242 public:
1243 
1244     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1245     /* Please see man pages for details
1246     */
1247     #else
1248     /* Please see man pages for details
1249     */
1250     #endif
DepthStencilStateDescription()1251     DepthStencilStateDescription()
1252     {
1253         ToDefault();
1254     }
1255 
1256     #if NN_GD_DOCUMENT_TYPE == ENGLISH
1257     /* Please see man pages for details */
1258     #else
1259     /* Please see man pages for details */
1260     #endif
ToDefault()1261     void ToDefault()
1262     {
1263         m_StencilWriteMask = m_StencilReadMask = 0xff;
1264         m_DepthMask = OutputStage::DEPTH_WRITE_MASK_ALL;
1265         m_DepthFunc = OutputStage::DEPTH_FUNCTION_LESS;
1266 
1267         m_DepthEnable = m_StencilEnable = GD_FALSE;
1268         m_StencilFunc = OutputStage::STENCIL_FUNCTION_NEVER;
1269         m_StencilFail = m_StencilZFail = m_StencilZPass = OutputStage::STENCIL_OPERATION_KEEP;
1270     }
1271 };  // DepthStencilStateDescription
1272 
1273 
1274 }  // namespace CTR
1275 }  // namespace gd
1276 }  // namespace nn
1277 
1278 #endif // NN_GD_CTR_GD_OUTPUTSTAGE_H_
1279