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 typedef Shader VertexShader;
52 #if NN_GD_DOCUMENT_TYPE == ENGLISH
53 /* Please see man pages for details
54 */
55 #else
56 /* Please see man pages for details
57 */
58 #endif
59 typedef Shader GeometryShader;
60 
61 #if NN_GD_DOCUMENT_TYPE == ENGLISH
62 /* Please see man pages for details
63 */
64 #else
65 /* Please see man pages for details
66 */
67 #endif
68 class ShaderPipeline;
69 
70 #if NN_GD_DOCUMENT_TYPE == ENGLISH
71 /* Please see man pages for details
72 */
73 #else
74 /* Please see man pages for details
75 */
76 #endif
77 class ShaderBinary;
78 
79 #if NN_GD_DOCUMENT_TYPE == ENGLISH
80 /* Please see man pages for details
81 */
82 #else
83 /* Please see man pages for details
84 */
85 #endif
86 class ShaderPipelineUnmanagedRegisters;
87 
88 #if NN_GD_DOCUMENT_TYPE == ENGLISH
89 /* Please see man pages for details
90 */
91 #else
92 /* Please see man pages for details
93 */
94 #endif
95 class ShaderStage;
96 
97 #if NN_GD_DOCUMENT_TYPE == ENGLISH
98 /* Please see man pages for details
99 
100 
101 
102 */
103 #else
104 /* Please see man pages for details
105 
106 
107 
108 */
109 #endif
110 class UniformLocation
111 {
112 private:
113     u32 m_Data;
114 
115 public:
116     #if NN_GD_DOCUMENT_TYPE == ENGLISH
117     /* Please see man pages for details
118     */
119     #else
120     /* Please see man pages for details
121     */
122     #endif
123     enum UniformType
124     {
125         Undefined = 0,
126         Boolean = 1,
127         Integer3 = 2,
128         Float = 8,
129         Float2 = 9,
130         Float3 = 10,
131         Float4 = 11,
132         FloatMatrix2 = 12,
133         FloatMatrix3 = 13,
134         FloatMatrix4 = 14,
135         UniformType_RESERVED_MAX_U32 = 0xffffffff
136     };
137 
138     #if NN_GD_DOCUMENT_TYPE == ENGLISH
139     /* Please see man pages for details
140 
141     */
142     #else
143     /* Please see man pages for details
144 
145     */
146     #endif
UniformLocation()147     UniformLocation()
148     {
149         m_Data = 0xFFFFFFFF;
150     }
151 
152     #if NN_GD_DOCUMENT_TYPE == ENGLISH
153     /* Please see man pages for details
154 
155 
156 
157 
158 
159     */
160     #else
161     /* Please see man pages for details
162 
163 
164 
165 
166 
167     */
168     #endif
UniformLocation(u8 shaderType,u16 managedLocation,u8 registerLocation,u8 size,UniformType type)169     UniformLocation(u8 shaderType, u16 managedLocation, u8 registerLocation, u8 size, UniformType type)
170     {
171         m_Data = registerLocation | (size << 8) | ((managedLocation & 0x1FF) << 16) | ((type & 0xF) << 26) | (shaderType << 31);
172     }
173 
174     #if NN_GD_DOCUMENT_TYPE == ENGLISH
175     /* Please see man pages for details
176 
177     */
178     #else
179     /* Please see man pages for details
180 
181     */
182     #endif
UniformLocation(u32 data)183     UniformLocation(u32 data)
184     {
185         this->m_Data = data;
186     }
187 
188     #if NN_GD_DOCUMENT_TYPE == ENGLISH
189     /* Please see man pages for details */
190     #else
191     /* Please see man pages for details */
192     #endif
193     static UniformLocation invalidValue;
194 
195     #if NN_GD_DOCUMENT_TYPE == ENGLISH
196     /* Please see man pages for details
197 
198 
199     */
200     #else
201     /* Please see man pages for details
202 
203 
204     */
205     #endif
GetRegister()206     u32 GetRegister() { return m_Data & 0xFF; }
207 
208     #if NN_GD_DOCUMENT_TYPE == ENGLISH
209     /* Please see man pages for details
210 
211 
212     */
213     #else
214     /* Please see man pages for details
215 
216 
217     */
218     #endif
GetSize()219     u32 GetSize() { return (m_Data >> 8) & 0xFF; }
220 
221     #if NN_GD_DOCUMENT_TYPE == ENGLISH
222     /* Please see man pages for details
223 
224     */
225     #else
226     /* Please see man pages for details
227 
228     */
229     #endif
GetShaderType()230     u32 GetShaderType() { return (m_Data >> 31); }
231 
232     #if NN_GD_DOCUMENT_TYPE == ENGLISH
233     /* Please see man pages for details
234 
235     */
236     #else
237     /* Please see man pages for details
238 
239     */
240     #endif
IsValid()241     u32 IsValid() { return m_Data != 0xFFFFFFFF; }
242 
243     #if NN_GD_DOCUMENT_TYPE == ENGLISH
244     /* Please see man pages for details
245 
246     */
247     #else
248     /* Please see man pages for details
249 
250     */
251     #endif
GetUniformType()252     u32 GetUniformType() { return (m_Data >> 26) & 0xF; }
253 
254 friend class ShaderStage;
255 };  // UniformLocation
256 
257 #if NN_GD_DOCUMENT_TYPE == ENGLISH
258 /* Please see man pages for details
259 
260 
261 
262 
263 */
264 #else
265 /* Please see man pages for details
266 
267 
268 
269 
270 */
271 #endif
272 class ShaderStage
273 {
274 public:
275 
276     #if NN_GD_DOCUMENT_TYPE == ENGLISH
277     /* Please see man pages for details */
278     #else
279     /* Please see man pages for details */
280     #endif
281     enum ShaderType
282     {
283         SHADER_TYPE_VERTEX = 0,
284         SHADER_TYPE_GEOMETRY = 1,
285 
286         SHADER_RESERVED_MAX_U32 = 0xffffffff
287     };
288 
289     #if NN_GD_DOCUMENT_TYPE == ENGLISH
290     /* Please see man pages for details
291 
292 
293 
294     */
295     #else
296     /* Please see man pages for details
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308     */
309     #endif
310     static nnResult CreateShaderBinary(const void* shaderBytecode, u32 bytecodeLength, ShaderBinary** shaderBinary);
311 
312     #if NN_GD_DOCUMENT_TYPE == ENGLISH
313     /* Please see man pages for details
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     #else
346     /* Please see man pages for details
347 
348 
349 
350 
351 
352 
353 
354 
355 
356 
357 
358 
359 
360 
361 
362     */
363     #endif
364     static nnResult CreateShaderPipeline(Shader* vertexShader, Shader* geometryShader, ShaderPipeline** shaderPipeline, ShaderPipelineUnmanagedRegisters* unmanagedRegister = NULL);
365 
366     #if NN_GD_DOCUMENT_TYPE == ENGLISH
367     /* Please see man pages for details
368 
369     */
370     #else
371     /* Please see man pages for details
372 
373 
374 
375 
376 
377     */
378     #endif
379     static nnResult SetShaderPipeline(ShaderPipeline* shaderPipeline);
380 
381     #if NN_GD_DOCUMENT_TYPE == ENGLISH
382     /* Please see man pages for details
383 
384 
385 
386     */
387     #else
388     /* Please see man pages for details
389 
390 
391 
392     */
393     #endif
394     static nnResult GetShader(ShaderPipeline* shaderPipeline, ShaderType shaderType, Shader** shader);
395 
396     #if NN_GD_DOCUMENT_TYPE == ENGLISH
397     /* Please see man pages for details
398 
399     */
400     #else
401     /* Please see man pages for details
402 
403 
404 
405 
406 
407     */
408     #endif
409     static nnResult ReleaseShaderBinary(ShaderBinary* shaderBinary);
410 
411      #if NN_GD_DOCUMENT_TYPE == ENGLISH
412     /* Please see man pages for details
413 
414     */
415     #else
416     /* Please see man pages for details
417 
418 
419 
420 
421 
422     */
423     #endif
424     static nnResult ReleaseShader(Shader* shader);
425 
426     #if NN_GD_DOCUMENT_TYPE == ENGLISH
427     /* Please see man pages for details
428 
429     */
430     #else
431     /* Please see man pages for details
432 
433 
434 
435 
436 
437     */
438     #endif
439     static nnResult ReleaseShaderPipeline(ShaderPipeline* shaderPipeline);
440 
441     #if NN_GD_DOCUMENT_TYPE == ENGLISH
442     /* Please see man pages for details */
443     #else
444     /* Please see man pages for details */
445     #endif
SetShaderPipelineConstantF(ShaderPipeline * shaderPipeline,UniformLocation uniformLocation,f32 * v)446     static nnResult SetShaderPipelineConstantF(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, f32* v){
447         return SetShaderPipelineConstantFloat(shaderPipeline, uniformLocation, v);
448     }
449 
450     #if NN_GD_DOCUMENT_TYPE == ENGLISH
451     /* Please see man pages for details
452 
453 
454 
455     */
456     #else
457     /* Please see man pages for details
458 
459 
460 
461 
462 
463 
464 
465 
466     */
467     #endif
468     static nnResult SetShaderPipelineConstantFloat(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, f32* v);
469 
470     #if NN_GD_DOCUMENT_TYPE == ENGLISH
471     /* Please see man pages for details */
472     #else
473     /* Please see man pages for details */
474     #endif
SetShaderPipelineConstantB(ShaderPipeline * shaderPipeline,UniformLocation uniformLocation,u16 v,u32 count)475     static nnResult SetShaderPipelineConstantB(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, u16 v, u32 count){
476         return SetShaderPipelineConstantBoolean(shaderPipeline, uniformLocation, v, count);
477     }
478 
479     #if NN_GD_DOCUMENT_TYPE == ENGLISH
480     /* Please see man pages for details
481 
482 
483 
484 
485     */
486     #else
487     /* Please see man pages for details
488 
489 
490 
491 
492 
493 
494 
495 
496 
497     */
498     #endif
499     static nnResult SetShaderPipelineConstantBoolean(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, u16 v, u32 count);
500 
501     #if NN_GD_DOCUMENT_TYPE == ENGLISH
502     /* Please see man pages for details */
503     #else
504     /* Please see man pages for details */
505     #endif
SetShaderPipelineConstantI(ShaderPipeline * shaderPipeline,UniformLocation uniformLocation,u8 * v)506     static nnResult SetShaderPipelineConstantI(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, u8* v){
507         return SetShaderPipelineConstantInteger(shaderPipeline, uniformLocation, v);
508     }
509 
510     #if NN_GD_DOCUMENT_TYPE == ENGLISH
511     /* Please see man pages for details
512 
513 
514 
515     */
516     #else
517     /* Please see man pages for details
518 
519 
520 
521 
522 
523 
524 
525 
526     */
527     #endif
528     static nnResult SetShaderPipelineConstantInteger(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, u8* v);
529 
530     #if NN_GD_DOCUMENT_TYPE == ENGLISH
531     /* Please see man pages for details
532 
533 
534 
535 
536 
537 
538 
539 
540 
541 
542 
543 
544 
545 
546 
547 
548 
549 
550 
551 
552 
553 
554 
555 
556 
557 
558 
559 
560 
561     */
562     #else
563     /* Please see man pages for details
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 
590 
591 
592 
593 
594 
595 
596 
597 
598 
599     */
600     #endif
601     static nnResult SetFloatConstantBuffer(ShaderType shaderType, u32 firstRegisterIndex, u32 registerCount, f32* constantBufferSrc);
602 
603     #if NN_GD_DOCUMENT_TYPE == ENGLISH
604     /* Please see man pages for details
605 
606 
607     */
608     #else
609     /* Please see man pages for details
610 
611 
612 
613 
614 
615 
616     */
617     #endif
618     static UniformLocation GetShaderUniformLocation(ShaderPipeline* shaderPipeline, const char* name);
619 
620 }; // ShaderStage
621 
622 
623 #if NN_GD_DOCUMENT_TYPE == ENGLISH
624 /* Please see man pages for details
625 
626 
627 */
628 #else
629 /* Please see man pages for details
630 
631 
632 */
633 #endif
634 class UnmanagedRegistersInterval
635 {
636 public:
637     #if NN_GD_DOCUMENT_TYPE == ENGLISH
638     /* Please see man pages for details */
639     #else
640     /* Please see man pages for details */
641     #endif
642     ShaderStage::ShaderType m_ShaderType;
643 
644     #if NN_GD_DOCUMENT_TYPE == ENGLISH
645     /* Please see man pages for details */
646     #else
647     /* Please see man pages for details */
648     #endif
649     u32 m_FirstUnmanagedRegister;
650 
651     #if NN_GD_DOCUMENT_TYPE == ENGLISH
652     /* Please see man pages for details */
653     #else
654     /* Please see man pages for details */
655     #endif
656     u32 m_RegisterCount;
657 };
658 
659 
660 #if NN_GD_DOCUMENT_TYPE == ENGLISH
661 /* Please see man pages for details
662 
663 
664 */
665 #else
666 /* Please see man pages for details
667 
668 
669 */
670 #endif
671 class ShaderPipelineUnmanagedRegisters
672 {
673 public:
674      #if NN_GD_DOCUMENT_TYPE == ENGLISH
675     /* Please see man pages for details */
676     #else
677     /* Please see man pages for details */
678     #endif
679     UnmanagedRegistersInterval* m_ArrayUnmanagedRegistersInterval;
680 
681     #if NN_GD_DOCUMENT_TYPE == ENGLISH
682     /* Please see man pages for details */
683     #else
684     /* Please see man pages for details */
685     #endif
686     u32 m_CountUnmanagedRegistersInterval;
687 };
688 
689 }  // namespace CTR
690 }  // namespace gd
691 }  // namespace nn
692 
693 #endif // NN_GD_CTR_GD_SHADER_H_
694