1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     gd_Shader.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_SHADER_H_
15 #define NN_GD_CTR_GD_SHADER_H_
16 
17 #include <nn/gd/CTR/gd_Types.h>
18 #include <nn/gd/CTR/gd_Result.h>
19 #include <nn/gd/CTR/gd_Texture.h>
20 
21 #if NN_GD_DOCUMENT_TYPE == ENGLISH
22 /* Please see man pages for details
23 
24 */
25 #else
26 /* Please see man pages for details
27 
28   */
29 #endif
30 
31 namespace nn {
32 namespace gd {
33 namespace CTR {
34 
35 #if NN_GD_DOCUMENT_TYPE == ENGLISH
36 /* Please see man pages for details
37 */
38 #else
39 /* Please see man pages for details
40 */
41 #endif
42 class Shader;
43 
44 #if NN_GD_DOCUMENT_TYPE == ENGLISH
45 /* Please see man pages for details
46 */
47 #else
48 /* Please see man pages for details
49 */
50 #endif
51 class ShaderPipeline;
52 
53 #if NN_GD_DOCUMENT_TYPE == ENGLISH
54 /* Please see man pages for details
55 */
56 #else
57 /* Please see man pages for details
58 */
59 #endif
60 class ShaderBinary;
61 
62 #if NN_GD_DOCUMENT_TYPE == ENGLISH
63 /* Please see man pages for details
64 */
65 #else
66 /* Please see man pages for details
67 */
68 #endif
69 class ShaderPipelineUnmanagedRegisters;
70 
71 #if NN_GD_DOCUMENT_TYPE == ENGLISH
72 /* Please see man pages for details
73 */
74 #else
75 /* Please see man pages for details
76 */
77 #endif
78 class ShaderStage;
79 
80 #if NN_GD_DOCUMENT_TYPE == ENGLISH
81 /* Please see man pages for details
82 
83 
84 
85 */
86 #else
87 /* Please see man pages for details
88 
89 
90 
91 */
92 #endif
93 class UniformLocation
94 {
95 private:
96     u32 m_Data;
97 
98 public:
99     #if NN_GD_DOCUMENT_TYPE == ENGLISH
100     /* Please see man pages for details
101     */
102     #else
103     /* Please see man pages for details
104     */
105     #endif
106     enum UniformType
107     {
108         Undefined = 0,
109         Boolean = 1,
110         Integer3 = 2,
111         Float = 8,
112         Float2 = 9,
113         Float3 = 10,
114         Float4 = 11,
115         FloatMatrix2 = 12,
116         FloatMatrix3 = 13,
117         FloatMatrix4 = 14,
118         UniformType_RESERVED_MAX_U32 = 0xffffffff
119     };
120 
121     #if NN_GD_DOCUMENT_TYPE == ENGLISH
122     /* Please see man pages for details
123 
124     */
125     #else
126     /* Please see man pages for details
127 
128     */
129     #endif
UniformLocation()130     UniformLocation()
131     {
132         m_Data = 0xFFFFFFFF;
133     }
134 
135     #if NN_GD_DOCUMENT_TYPE == ENGLISH
136     /* Please see man pages for details
137 
138 
139 
140 
141 
142     */
143     #else
144     /* Please see man pages for details
145 
146 
147 
148 
149 
150     */
151     #endif
UniformLocation(u8 shaderType,u16 managedLocation,u8 registerLocation,u8 size,UniformType type)152     UniformLocation(u8 shaderType, u16 managedLocation, u8 registerLocation, u8 size, UniformType type)
153     {
154         m_Data = registerLocation | (size << 8) | ((managedLocation & 0x1FF) << 16) | ((type & 0xF) << 26) | (shaderType << 31);
155     }
156 
157     #if NN_GD_DOCUMENT_TYPE == ENGLISH
158     /* Please see man pages for details
159 
160     */
161     #else
162     /* Please see man pages for details
163 
164     */
165     #endif
UniformLocation(u32 data)166     UniformLocation(u32 data)
167     {
168         this->m_Data = data;
169     }
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     static UniformLocation invalidValue;
177 
178     #if NN_GD_DOCUMENT_TYPE == ENGLISH
179     /* Please see man pages for details
180 
181 
182 
183     */
184     #else
185     /* Please see man pages for details
186 
187 
188 
189     */
190     #endif
GetRegister()191     u32 GetRegister() { return m_Data & 0xFF; }
192 
193     #if NN_GD_DOCUMENT_TYPE == ENGLISH
194     /* Please see man pages for details
195 
196 
197 
198     */
199     #else
200     /* Please see man pages for details
201 
202 
203 
204     */
205     #endif
GetSize()206     u32 GetSize() { return (m_Data >> 8) & 0xFF; }
207 
208     #if NN_GD_DOCUMENT_TYPE == ENGLISH
209     /* Please see man pages for details
210 
211     */
212     #else
213     /* Please see man pages for details
214 
215     */
216     #endif
GetShaderType()217     u32 GetShaderType() { return (m_Data >> 31); }
218 
219     #if NN_GD_DOCUMENT_TYPE == ENGLISH
220     /* Please see man pages for details
221 
222     */
223     #else
224     /* Please see man pages for details
225 
226     */
227     #endif
IsValid()228     u32 IsValid() { return m_Data != 0xFFFFFFFF; }
229 
230     #if NN_GD_DOCUMENT_TYPE == ENGLISH
231     /* Please see man pages for details
232 
233     */
234     #else
235     /* Please see man pages for details
236 
237     */
238     #endif
GetUniformType()239     u32 GetUniformType() { return (m_Data >> 26) & 0xF; }
240 
241 friend class ShaderStage;
242 };  // UniformLocation
243 
244 #if NN_GD_DOCUMENT_TYPE == ENGLISH
245 /* Please see man pages for details
246 
247 
248 
249 
250 */
251 #else
252 /* Please see man pages for details
253 
254 
255 
256 
257 */
258 #endif
259 class ShaderStage
260 {
261 public:
262 
263     #if NN_GD_DOCUMENT_TYPE == ENGLISH
264     /* Please see man pages for details */
265     #else
266     /* Please see man pages for details */
267     #endif
268     enum ShaderType
269     {
270         SHADER_TYPE_VERTEX = 0,
271         SHADER_TYPE_GEOMETRY = 1,
272 
273         SHADER_RESERVED_MAX_U32 = 0xffffffff
274     };
275 
276     #if NN_GD_DOCUMENT_TYPE == ENGLISH
277     /* Please see man pages for details
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289     */
290     #else
291     /* Please see man pages for details
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303     */
304     #endif
305     static nnResult CreateShaderBinary(const void* shaderBytecode, u32 bytecodeLength, ShaderBinary** shaderBinary);
306 
307     #if NN_GD_DOCUMENT_TYPE == ENGLISH
308     /* Please see man pages for details
309 
310 
311 
312 
313 
314 
315 
316 
317     */
318     #else
319     /* Please see man pages for details
320 
321 
322 
323 
324 
325 
326 
327 
328 
329     */
330     #endif
331     static nnResult CreateShader(ShaderBinary* shaderBinary, u32 shaderBinaryIndex, Shader** shader);
332 
333     #if NN_GD_DOCUMENT_TYPE == ENGLISH
334     /* Please see man pages for details
335 
336 
337 
338 
339 
340 
341 
342 
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     #endif
372     static nnResult CreateShaderPipeline(Shader* vertexShader, Shader* geometryShader, ShaderPipeline** shaderPipeline, ShaderPipelineUnmanagedRegisters* unmanagedRegister = NULL);
373 
374     #if NN_GD_DOCUMENT_TYPE == ENGLISH
375     /* Please see man pages for details
376 
377 
378 
379 
380 
381     */
382     #else
383     /* Please see man pages for details
384 
385 
386 
387 
388 
389     */
390     #endif
391     static nnResult SetShaderPipeline(ShaderPipeline* shaderPipeline);
392 
393     #if NN_GD_DOCUMENT_TYPE == ENGLISH
394     /* Please see man pages for details
395 
396 
397 
398 
399 
400 
401 
402     */
403     #else
404     /* Please see man pages for details
405 
406 
407 
408 
409 
410 
411 
412     */
413     #endif
414     static nnResult GetShader(ShaderPipeline* shaderPipeline, ShaderType shaderType, Shader** shader);
415 
416     #if NN_GD_DOCUMENT_TYPE == ENGLISH
417     /* Please see man pages for details
418 
419 
420 
421 
422 
423     */
424     #else
425     /* Please see man pages for details
426 
427 
428 
429 
430 
431     */
432     #endif
433     static nnResult ReleaseShaderBinary(ShaderBinary* shaderBinary);
434 
435      #if NN_GD_DOCUMENT_TYPE == ENGLISH
436     /* Please see man pages for details
437 
438 
439 
440 
441 
442     */
443     #else
444     /* Please see man pages for details
445 
446 
447 
448 
449 
450     */
451     #endif
452     static nnResult ReleaseShader(Shader* shader);
453 
454     #if NN_GD_DOCUMENT_TYPE == ENGLISH
455     /* Please see man pages for details
456 
457 
458 
459 
460 
461     */
462     #else
463     /* Please see man pages for details
464 
465 
466 
467 
468 
469     */
470     #endif
471     static nnResult ReleaseShaderPipeline(ShaderPipeline* shaderPipeline);
472 
473     #if NN_GD_DOCUMENT_TYPE == ENGLISH
474     /* Please see man pages for details
475 
476 
477 
478 
479 
480 
481 
482 
483     */
484     #else
485     /* Please see man pages for details
486 
487 
488 
489 
490 
491 
492 
493 
494     */
495     #endif
496     static nnResult SetShaderPipelineConstantFloat(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, f32* v);
497 
498     #if NN_GD_DOCUMENT_TYPE == ENGLISH
499     /* Please see man pages for details
500 
501 
502 
503 
504 
505 
506 
507 
508 
509     */
510     #else
511     /* Please see man pages for details
512 
513 
514 
515 
516 
517 
518 
519 
520 
521     */
522     #endif
523     static nnResult SetShaderPipelineConstantBoolean(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, u16 v, u32 count);
524 
525     #if NN_GD_DOCUMENT_TYPE == ENGLISH
526     /* Please see man pages for details
527 
528 
529 
530 
531 
532 
533 
534 
535     */
536     #else
537     /* Please see man pages for details
538 
539 
540 
541 
542 
543 
544 
545 
546     */
547     #endif
548     static nnResult SetShaderPipelineConstantInteger(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, u8* v);
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 
567 
568 
569 
570 
571 
572 
573 
574 
575 
576 
577 
578 
579 
580 
581 
582 
583 
584 
585 
586     */
587     #else
588     /* Please see man pages for details
589 
590 
591 
592 
593 
594 
595 
596 
597 
598 
599 
600 
601 
602 
603 
604 
605 
606 
607 
608 
609 
610 
611 
612 
613 
614 
615 
616 
617 
618 
619 
620 
621 
622 
623 
624     */
625     #endif
626     static nnResult SetFloatConstantBuffer(ShaderType shaderType, u32 firstRegisterIndex, u32 registerCount, f32* constantBufferSrc);
627 
628     #if NN_GD_DOCUMENT_TYPE == ENGLISH
629     /* Please see man pages for details
630 
631 
632 
633 
634 
635 
636     */
637     #else
638     /* Please see man pages for details
639 
640 
641 
642 
643 
644 
645     */
646     #endif
647     static UniformLocation GetShaderUniformLocation(ShaderPipeline* shaderPipeline, const char* name);
648 
649 }; // ShaderStage
650 
651 
652 #if NN_GD_DOCUMENT_TYPE == ENGLISH
653 /* Please see man pages for details
654 
655 
656 */
657 #else
658 /* Please see man pages for details
659 
660 
661 */
662 #endif
663 class UnmanagedRegistersInterval
664 {
665 public:
666     #if NN_GD_DOCUMENT_TYPE == ENGLISH
667     /* Please see man pages for details */
668     #else
669     /* Please see man pages for details */
670     #endif
671     ShaderStage::ShaderType m_ShaderType;
672 
673     #if NN_GD_DOCUMENT_TYPE == ENGLISH
674     /* Please see man pages for details */
675     #else
676     /* Please see man pages for details */
677     #endif
678     u32 m_FirstUnmanagedRegister;
679 
680     #if NN_GD_DOCUMENT_TYPE == ENGLISH
681     /* Please see man pages for details */
682     #else
683     /* Please see man pages for details */
684     #endif
685     u32 m_RegisterCount;
686 };
687 
688 
689 #if NN_GD_DOCUMENT_TYPE == ENGLISH
690 /* Please see man pages for details
691 
692 
693 */
694 #else
695 /* Please see man pages for details
696 
697 
698 */
699 #endif
700 class ShaderPipelineUnmanagedRegisters
701 {
702 public:
703      #if NN_GD_DOCUMENT_TYPE == ENGLISH
704     /* Please see man pages for details */
705     #else
706     /* Please see man pages for details */
707     #endif
708     UnmanagedRegistersInterval* m_ArrayUnmanagedRegistersInterval;
709 
710     #if NN_GD_DOCUMENT_TYPE == ENGLISH
711     /* Please see man pages for details */
712     #else
713     /* Please see man pages for details */
714     #endif
715     u32 m_CountUnmanagedRegistersInterval;
716 };
717 
718 }  // namespace CTR
719 }  // namespace gd
720 }  // namespace nn
721 
722 #endif // NN_GD_CTR_GD_SHADER_H_
723