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 VertexShader;
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 
75 */
76 #else
77 /* Please see man pages for details
78 
79 
80 */
81 #endif
82 class UniformLocation
83 {
84 private:
85     u32 m_Data;
86 
87 public:
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     enum UniformType
96     {
97         Undefined = 0,
98         Boolean = 1,
99         Integer3 = 2,
100         Float = 8,
101         Float2 = 9,
102         Float3 = 10,
103         Float4 = 11,
104         FloatMatrix2 = 12,
105         FloatMatrix3 = 13,
106         FloatMatrix4 = 14,
107         UniformType_RESERVED_MAX_U32 = 0xffffffff
108     };
109 
110     #if NN_GD_DOCUMENT_TYPE == ENGLISH
111     /* Please see man pages for details
112 
113 
114     */
115     #else
116     /* Please see man pages for details
117 
118 
119     */
120     #endif
UniformLocation()121     UniformLocation()
122     {
123         m_Data = 0xFFFFFFFF;
124     }
125 
126     #if NN_GD_DOCUMENT_TYPE == ENGLISH
127     /* Please see man pages for details
128 
129 
130 
131 
132 
133     */
134     #else
135     /* Please see man pages for details
136 
137 
138 
139 
140 
141     */
142     #endif
UniformLocation(u8 shaderType,u16 managedLocation,u8 registerLocation,u8 size,UniformType type)143     UniformLocation(u8 shaderType, u16 managedLocation, u8 registerLocation, u8 size, UniformType type)
144     {
145         m_Data = registerLocation | (size << 8) | ((managedLocation & 0x1FF) << 16) | ((type & 0xF) << 26) | (shaderType << 31);
146     }
147 
148     #if NN_GD_DOCUMENT_TYPE == ENGLISH
149     /* Please see man pages for details
150 
151     */
152     #else
153     /* Please see man pages for details
154 
155     */
156     #endif
UniformLocation(u32 data)157     UniformLocation(u32 data)
158     {
159         this->m_Data = data;
160     }
161 
162     #if NN_GD_DOCUMENT_TYPE == ENGLISH
163     /* Please see man pages for details */
164     #else
165     /* Please see man pages for details */
166     #endif
167     static UniformLocation invalidValue;
168 
169     #if NN_GD_DOCUMENT_TYPE == ENGLISH
170     /* Please see man pages for details
171 
172     */
173     #else
174     /* Please see man pages for details
175 
176     */
177     #endif
GetRegister()178     u32 GetRegister() { return m_Data & 0xFF; }
179 
180     #if NN_GD_DOCUMENT_TYPE == ENGLISH
181     /* Please see man pages for details
182 
183     */
184     #else
185     /* Please see man pages for details
186 
187     */
188     #endif
GetManagedLocation()189     u32 GetManagedLocation() { return (m_Data >> 16) & 0x1FF; }
190 
191     #if NN_GD_DOCUMENT_TYPE == ENGLISH
192     /* Please see man pages for details
193 
194     */
195     #else
196     /* Please see man pages for details
197 
198     */
199     #endif
GetSize()200     u32 GetSize() { return (m_Data >> 8) & 0xFF; }
201 
202     #if NN_GD_DOCUMENT_TYPE == ENGLISH
203     /* Please see man pages for details
204 
205     */
206     #else
207     /* Please see man pages for details
208 
209     */
210     #endif
GetRegisterCount()211     u32 GetRegisterCount() { return GetSize() >> 2; }
212 
213     #if NN_GD_DOCUMENT_TYPE == ENGLISH
214     /* Please see man pages for details
215 
216     */
217     #else
218     /* Please see man pages for details
219 
220     */
221     #endif
GetShaderType()222     u32 GetShaderType() { return (m_Data >> 31); }
223 
224     #if NN_GD_DOCUMENT_TYPE == ENGLISH
225     /* Please see man pages for details
226 
227     */
228     #else
229     /* Please see man pages for details
230 
231     */
232     #endif
IsValid()233     u32 IsValid() { return m_Data != 0xFFFFFFFF; }
234 
235     #if NN_GD_DOCUMENT_TYPE == ENGLISH
236     /* Please see man pages for details
237 
238     */
239     #else
240     /* Please see man pages for details
241 
242     */
243     #endif
GetUniformType()244     u32 GetUniformType() { return (m_Data >> 26) & 0xF; }
245 };  // UniformLocation
246 
247 
248 #if NN_GD_DOCUMENT_TYPE == ENGLISH
249 /* Please see man pages for details
250 
251 
252 
253 
254 */
255 #else
256 /* Please see man pages for details
257 
258 
259 
260 
261 */
262 #endif
263 class ShaderStage
264 {
265 public:
266 
267     #if NN_GD_DOCUMENT_TYPE == ENGLISH
268     /* Please see man pages for details */
269     #else
270     /* Please see man pages for details */
271     #endif
272     enum ShaderType
273     {
274         SHADER_TYPE_VERTEX = 0,
275         SHADER_TYPE_GEOMETRY = 1,
276 
277         SHADER_RESERVED_MAX_U32 = 0xffffffff
278     };
279 
280     #if NN_GD_DOCUMENT_TYPE == ENGLISH
281     /* Please see man pages for details
282 
283 
284 
285     */
286     #else
287     /* Please see man pages for details
288 
289 
290 
291 
292 
293 
294 
295 
296 
297 
298 
299     */
300     #endif
301     static nnResult CreateShaderBinary(const void* shaderBytecode, u32 bytecodeLength, ShaderBinary** shaderBinary);
302 
303     #if NN_GD_DOCUMENT_TYPE == ENGLISH
304     /* Please see man pages for details
305 
306 
307 
308     */
309     #else
310     /* Please see man pages for details
311 
312 
313 
314 
315 
316 
317 
318 
319 
320     */
321     #endif
322     static nnResult CreateShader(ShaderBinary* shaderBinary, u32 shaderBinaryIndex, VertexShader** vertexShader);
323 
324     #if NN_GD_DOCUMENT_TYPE == ENGLISH
325     /* Please see man pages for details
326 
327 
328 
329 
330 
331 
332 
333 
334 
335     */
336     #else
337     /* Please see man pages for details
338 
339 
340 
341 
342 
343 
344 
345 
346 
347 
348 
349 
350 
351 
352 
353     */
354     #endif
355     static nnResult CreateShaderPipeline(VertexShader* vertexShader, VertexShader* geometryShader, ShaderPipeline** shaderPipeline, ShaderPipelineUnmanagedRegisters* unmanagedRegister = NULL);
356 
357     #if NN_GD_DOCUMENT_TYPE == ENGLISH
358     /* Please see man pages for details
359 
360     */
361     #else
362     /* Please see man pages for details
363 
364 
365 
366 
367 
368     */
369     #endif
370     static nnResult SetShaderPipeline(ShaderPipeline* shaderPipeline);
371 
372     #if NN_GD_DOCUMENT_TYPE == ENGLISH
373     /* Please see man pages for details
374 
375     */
376     #else
377     /* Please see man pages for details
378 
379 
380 
381 
382 
383     */
384     #endif
385     static nnResult ReleaseShaderBinary(ShaderBinary* shaderBinary);
386 
387      #if NN_GD_DOCUMENT_TYPE == ENGLISH
388     /* Please see man pages for details
389 
390     */
391     #else
392     /* Please see man pages for details
393 
394 
395 
396 
397 
398     */
399     #endif
400     static nnResult ReleaseShader(VertexShader* vertexShader);
401 
402     #if NN_GD_DOCUMENT_TYPE == ENGLISH
403     /* Please see man pages for details
404 
405     */
406     #else
407     /* Please see man pages for details
408 
409 
410 
411 
412 
413     */
414     #endif
415     static nnResult ReleaseShaderPipeline(ShaderPipeline* shaderPipeline);
416 
417 
418     #if NN_GD_DOCUMENT_TYPE == ENGLISH
419     /* Please see man pages for details
420 
421 
422 
423     */
424     #else
425     /* Please see man pages for details
426 
427 
428 
429 
430 
431 
432 
433 
434     */
435     #endif
436     static nnResult SetShaderPipelineConstantF(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, f32* v);
437 
438     #if NN_GD_DOCUMENT_TYPE == ENGLISH
439     /* Please see man pages for details
440 
441 
442 
443 
444     */
445     #else
446     /* Please see man pages for details
447 
448 
449 
450 
451 
452 
453 
454 
455 
456     */
457     #endif
458     static nnResult SetShaderPipelineConstantB(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, u16 v, u32 count);
459 
460     #if NN_GD_DOCUMENT_TYPE == ENGLISH
461     /* Please see man pages for details
462 
463 
464 
465     */
466     #else
467     /* Please see man pages for details
468 
469 
470 
471 
472 
473 
474 
475 
476     */
477     #endif
478     static nnResult SetShaderPipelineConstantI(ShaderPipeline* shaderPipeline, UniformLocation uniformLocation, u8* v);
479 
480     #if NN_GD_DOCUMENT_TYPE == ENGLISH
481     /* Please see man pages for details
482 
483 
484 
485 
486 
487 
488 
489 
490 
491 
492 
493 
494 
495 
496 
497 
498 
499 
500 
501 
502 
503 
504 
505 
506 
507 
508 
509 
510 
511     */
512     #else
513     /* Please see man pages for details
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     #endif
551     static nnResult SetFloatConstantBuffer(ShaderType shaderType, u32 firstRegisterIndex, u32 registerCount, f32* constantBufferSrc);
552 
553     #if NN_GD_DOCUMENT_TYPE == ENGLISH
554     /* Please see man pages for details
555 
556 
557     */
558     #else
559     /* Please see man pages for details
560 
561 
562 
563 
564 
565 
566     */
567     #endif
568     static UniformLocation GetShaderUniformLocation(ShaderPipeline* shaderPipeline, const char* name);
569 
570 }; // ShaderStage
571 
572 
573 #if NN_GD_DOCUMENT_TYPE == ENGLISH
574 /* Please see man pages for details
575 
576 
577 */
578 #else
579 /* Please see man pages for details
580 
581 
582 */
583 #endif
584 class UnmanagedRegistersInterval
585 {
586 public:
587     #if NN_GD_DOCUMENT_TYPE == ENGLISH
588     /* Please see man pages for details */
589     #else
590     /* Please see man pages for details */
591     #endif
592     ShaderStage::ShaderType m_ShaderType;
593 
594     #if NN_GD_DOCUMENT_TYPE == ENGLISH
595     /* Please see man pages for details */
596     #else
597     /* Please see man pages for details */
598     #endif
599     u32 m_FirstUnmanagedRegister;
600 
601     #if NN_GD_DOCUMENT_TYPE == ENGLISH
602     /* Please see man pages for details */
603     #else
604     /* Please see man pages for details */
605     #endif
606     u32 m_RegisterCount;
607 };
608 
609 
610 #if NN_GD_DOCUMENT_TYPE == ENGLISH
611 /* Please see man pages for details
612 
613 
614 */
615 #else
616 /* Please see man pages for details
617 
618 
619 */
620 #endif
621 class ShaderPipelineUnmanagedRegisters
622 {
623 public:
624      #if NN_GD_DOCUMENT_TYPE == ENGLISH
625     /* Please see man pages for details */
626     #else
627     /* Please see man pages for details */
628     #endif
629     UnmanagedRegistersInterval* m_ArrayUnmanagedRegistersInterval;
630 
631     #if NN_GD_DOCUMENT_TYPE == ENGLISH
632     /* Please see man pages for details */
633     #else
634     /* Please see man pages for details */
635     #endif
636     u32 m_CountUnmanagedRegistersInterval;
637 };
638 
639 }  // namespace CTR
640 }  // namespace gd
641 }  // namespace nn
642 
643 #endif //NN_GD_CTR_GD_SHADER_H_
644