git.s-ol.nu ~forks/DiligentCore / 349de94
Updated readme & documentation Egor Yusov 3 years ago
704 changed file(s) with 1148 addition(s) and 1188 deletion(s). Raw diff Collapse all Expand all
+0
-24
Common/readme.md less more
0
1 # Common
2
3 Implementation of common utilities
4
5 # Release Notes
6
7 ## 2.1
8
9 * Reworked reference counting implementation. See [this article](http://diligentgraphics.com/diligent-engine/architecture/cross-platform/reference-counting/) for details.
10
11 ## 2.0
12
13 Reworked the API to follow D3D12 style
14
15 ## 1.0
16
17 Initial release
18
19
20
21 **Copyright 2015-2017 Egor Yusov**
22
23 [Diligent Graphics](http://diligentgraphics.com)
8383
8484 # References
8585
86 [Diligent Engine](http://diligentgraphics.com/diligent-engine)
86 [Diligent Engine on the Web](http://diligentgraphics.com/diligent-engine)
8787
8888 [Interoperability with Direct3D11](http://diligentgraphics.com/diligent-engine/native-api-interoperability/direct3d11-interoperability/)
8989
122122
123123
124124
125 **Copyright 2015-2017 Egor Yusov**
125 **Copyright 2015-2018 Egor Yusov**
126126
127 [Diligent Graphics](http://diligentgraphics.com)
127 [diligentgraphics.com](http://diligentgraphics.com)
100100
101101 # References
102102
103 [Diligent Engine](http://diligentgraphics.com/diligent-engine)
103 [Diligent Engine on the Web](http://diligentgraphics.com/diligent-engine)
104104
105105 [Interoperability with Direct3D12](http://diligentgraphics.com/diligent-engine/native-api-interoperability/direct3d12-interoperability/)
106106
150150
151151
152152
153 **Copyright 2015-2017 Egor Yusov**
153 **Copyright 2015-2018 Egor Yusov**
154154
155 [Diligent Graphics](http://diligentgraphics.com)
155 [diligentgraphics.com](http://diligentgraphics.com)
106106
107107
108108
109 **Copyright 2015-2017 Egor Yusov**
109 **Copyright 2015-2018 Egor Yusov**
110110
111 [Diligent Graphics](http://diligentgraphics.com)
111 [diligentgraphics.com](http://diligentgraphics.com)
293293
294294
295295
296 **Copyright 2015-2017 Egor Yusov**
297
298 [Diligent Graphics](http://diligentgraphics.com)
296 **Copyright 2015-2018 Egor Yusov**
297
298 [diligentgraphics.com](http://diligentgraphics.com)
1616
1717 | Project | Description |
1818 |------------------------------------------------------------------|-------------------|
19 | [Primitives](/Primitives) | Definitions of basic types (Int32, Int16, Uint32, etc.) and interfaces (IObject, IReferenceCounters, etc.) |
20 | [Common](/Common) | Common functionality such as file wrapper, logging, debug utilities, etc. |
21 | [Graphics/GraphicsAccessories](Graphics/GraphicsAccessories) | Basic graphics accessories used by all implementations |
22 | [Graphics/GraphicsEngine](Graphics/GraphicsEngine) | Platform-independent base functionality |
23 | [Graphics/GraphicsEngineD3DBase](Graphics/GraphicsEngineD3DBase) | Base functionality for D3D11/D3D12 implementations |
24 | [Graphics/GraphicsEngineD3D11](Graphics/GraphicsEngineD3D11) | Engine implementation with Direct3D11 |
25 | [Graphics/GraphicsEngineD3D12](Graphics/GraphicsEngineD3D12) | Engine implementation with Direct3D12 |
26 | [Graphics/GraphicsEngineOpenGL](Graphics/GraphicsEngineOpenGL) | Engine implementation with OpenGL/GLES |
27 | [Graphics/GraphicsTools](Graphics/GraphicsTools) | Graphics utilities build on top of core interfaces (definitions of commonly used states, texture uploaders, etc.) |
28 | [Graphics/HLSL2GLSLConverterLib](Graphics/HLSL2GLSLConverterLib) | HLSL to GLSL source code converter library |
29 | [Platforms/Basic](Platforms/Basic) | Interface for platform-specific routines and implementation of some common functionality |
30 | [Platforms/Android](Platforms/Android) | Implementation of platform-specific routines on Android |
31 | [Platforms/UWP](Platforms/UWP) | Implementation of platform-specific routines on Universal Windows platform |
32 | [Platforms/Win32](Platforms/Win32) | Implementation of platform-specific routines on Win32 platform |
33 | [Platforms/Linux](Platforms/Linux) | Implementation of platform-specific routines on Linux platform |
19 | [Primitives](https://github.com/DiligentGraphics/DiligentCore/tree/master/Primitives) | Definitions of basic types (Int32, Int16, Uint32, etc.) and interfaces (IObject, IReferenceCounters, etc.) |
20 | [Common](https://github.com/DiligentGraphics/DiligentCore/tree/master/Common) | Common functionality such as file wrapper, logging, debug utilities, etc. |
21 | [Graphics/GraphicsAccessories](https://github.com/DiligentGraphics/DiligentCore/tree/master/Graphics/GraphicsAccessories) | Basic graphics accessories used by all implementations |
22 | [Graphics/GraphicsEngine](https://github.com/DiligentGraphics/DiligentCore/tree/master/Graphics/GraphicsEngine) | Platform-independent base functionality |
23 | [Graphics/GraphicsEngineD3DBase](https://github.com/DiligentGraphics/DiligentCore/tree/master/Graphics/GraphicsEngineD3DBase)| Base functionality for D3D11/D3D12 implementations |
24 | [Graphics/GraphicsEngineD3D11](https://github.com/DiligentGraphics/DiligentCore/tree/master/Graphics/GraphicsEngineD3D11) | Engine implementation with Direct3D11 |
25 | [Graphics/GraphicsEngineD3D12](https://github.com/DiligentGraphics/DiligentCore/tree/master/Graphics/GraphicsEngineD3D12) | Engine implementation with Direct3D12 |
26 | [Graphics/GraphicsEngineOpenGL](https://github.com/DiligentGraphics/DiligentCore/tree/master/Graphics/GraphicsEngineOpenGL) | Engine implementation with OpenGL/GLES |
27 | [Graphics/GraphicsTools](https://github.com/DiligentGraphics/DiligentCore/tree/master/Graphics/GraphicsTools) | Graphics utilities build on top of core interfaces (definitions of commonly used states, texture uploaders, etc.) |
28 | [Graphics/HLSL2GLSLConverterLib](https://github.com/DiligentGraphics/DiligentCore/tree/master/Graphics/HLSL2GLSLConverterLib) | HLSL to GLSL source code converter library |
29 | [Platforms/Basic](https://github.com/DiligentGraphics/DiligentCore/tree/master/Platforms/Basic) | Interface for platform-specific routines and implementation of some common functionality |
30 | [Platforms/Android](https://github.com/DiligentGraphics/DiligentCore/tree/master/Platforms/Android) | Implementation of platform-specific routines on Android |
31 | [Platforms/UWP](https://github.com/DiligentGraphics/DiligentCore/tree/master/Platforms/UWP) | Implementation of platform-specific routines on Universal Windows platform |
32 | [Platforms/Win32](https://github.com/DiligentGraphics/DiligentCore/tree/master/Platforms/Win32) | Implementation of platform-specific routines on Win32 platform |
33 | [Platforms/Linux](https://github.com/DiligentGraphics/DiligentCore/tree/master/Platforms/Linux) | Implementation of platform-specific routines on Linux platform |
3434 | External/glew | Cross-platform library for loading OpenGL extensions |
3535
3636
141141 Deferred contexts can only be created during the initialization of the engine. The function populates an array of pointers
142142 to the contexts, where the immediate context goes at position 0, followed by all deferred contexts.
143143
144 For more details, take a look at [WinMain.cpp](https://github.com/DiligentGraphics/DiligentSamples/blob/master/Samples/SampleBase/Src/Win32/WinMain.cpp) file.
144 For more details, take a look at [WinMain.cpp](https://github.com/DiligentGraphics/DiligentSamples/blob/master/Samples/SampleBase/src/Win32/WinMain.cpp) file.
145145
146146 ### Universal Windows Platform
147147
150150 way as on Win32 Platform. The difference is that you first create the render device and device contexts by
151151 calling `IEngineFactoryD3D11::CreateDeviceAndContextsD3D11()` or `IEngineFactoryD3D12::CreateDeviceAndContextsD3D12()`.
152152 The swap chain is created later by a call to `IEngineFactoryD3D11::CreateSwapChainD3D11()` or `IEngineFactoryD3D12::CreateSwapChainD3D12()`.
153 Please look at the [DeviceResources.cpp](https://github.com/DiligentGraphics/DiligentSamples/blob/master/Samples/SampleBase/Src/UWP/Common/DeviceResources.cpp) file for more details.
153 Please look at the [DeviceResources.cpp](https://github.com/DiligentGraphics/DiligentSamples/blob/master/Samples/SampleBase/src/UWP/Common/DeviceResources.cpp) file for more details.
154154
155155 ### Linux
156156
565565
566566 [Diligent Engine on Facebook](https://www.facebook.com/DiligentGraphics/)
567567
568 [Diligent Engine Architecture](http://diligentgraphics.com/diligent-engine/architecture/).
569
570 [API Basics](http://diligentgraphics.com/diligent-engine/api-basics/).
568 [Diligent Engine Architecture](http://diligentgraphics.com/diligent-engine/architecture/)
569
570 [API Basics](http://diligentgraphics.com/diligent-engine/api-basics/)
571571
572572 [API Reference][1]
573573
633633
634634 **Copyright 2015-2018 Egor Yusov**
635635
636 [1]: https://cdn.rawgit.com/DiligentGraphics/DiligentCore/f0c41bba/doc/html/index.html
636 [diligentgraphics.com](http://diligentgraphics.com)
637
638 [1]: https://cdn.rawgit.com/DiligentGraphics/DiligentCore/f0c41bba/doc/html/index.html
794794 ..\Common \
795795 ..\Graphics\GraphicsEngineD3D12 \
796796 ..\Graphics\GraphicsEngine \
797 ..\README.md
797 ..\README.md \
798 ..\Graphics\HLSL2GLSLConverterLib
798799
799800 # This tag can be used to specify the character encoding of the source files
800801 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7878 <!-- start footer part -->
7979 <!--
8080 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
81 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8282 <img class="footer" src="doxygen.png" alt="doxygen"/>
8383 </a> 1.8.14
8484 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
146146 <!-- start footer part -->
147147 <!--
148148 <hr class="footer"/><address class="footer"><small>
149 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
149 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
150150 <img class="footer" src="doxygen.png" alt="doxygen"/>
151151 </a> 1.8.14
152152 </small></address>
120120 <!-- start footer part -->
121121 <!--
122122 <hr class="footer"/><address class="footer"><small>
123 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
123 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
124124 <img class="footer" src="doxygen.png" alt="doxygen"/>
125125 </a> 1.8.14
126126 </small></address>
129129 <!-- start footer part -->
130130 <!--
131131 <hr class="footer"/><address class="footer"><small>
132 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
132 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
133133 <img class="footer" src="doxygen.png" alt="doxygen"/>
134134 </a> 1.8.14
135135 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
9090 <!-- start footer part -->
9191 <!--
9292 <hr class="footer"/><address class="footer"><small>
93 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
93 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9494 <img class="footer" src="doxygen.png" alt="doxygen"/>
9595 </a> 1.8.14
9696 </small></address>
7878 <!-- start footer part -->
7979 <!--
8080 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
81 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8282 <img class="footer" src="doxygen.png" alt="doxygen"/>
8383 </a> 1.8.14
8484 </small></address>
9898 <!-- start footer part -->
9999 <!--
100100 <hr class="footer"/><address class="footer"><small>
101 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
101 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
102102 <img class="footer" src="doxygen.png" alt="doxygen"/>
103103 </a> 1.8.14
104104 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
9393 <!-- start footer part -->
9494 <!--
9595 <hr class="footer"/><address class="footer"><small>
96 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
96 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9797 <img class="footer" src="doxygen.png" alt="doxygen"/>
9898 </a> 1.8.14
9999 </small></address>
8989 <!-- start footer part -->
9090 <!--
9191 <hr class="footer"/><address class="footer"><small>
92 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
92 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9393 <img class="footer" src="doxygen.png" alt="doxygen"/>
9494 </a> 1.8.14
9595 </small></address>
8484 <!-- start footer part -->
8585 <!--
8686 <hr class="footer"/><address class="footer"><small>
87 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
87 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8888 <img class="footer" src="doxygen.png" alt="doxygen"/>
8989 </a> 1.8.14
9090 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
8282 <!-- start footer part -->
8383 <!--
8484 <hr class="footer"/><address class="footer"><small>
85 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
85 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8686 <img class="footer" src="doxygen.png" alt="doxygen"/>
8787 </a> 1.8.14
8888 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
8181 <!-- start footer part -->
8282 <!--
8383 <hr class="footer"/><address class="footer"><small>
84 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
84 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8585 <img class="footer" src="doxygen.png" alt="doxygen"/>
8686 </a> 1.8.14
8787 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
8181 <!-- start footer part -->
8282 <!--
8383 <hr class="footer"/><address class="footer"><small>
84 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
84 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8585 <img class="footer" src="doxygen.png" alt="doxygen"/>
8686 </a> 1.8.14
8787 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
7878 <!-- start footer part -->
7979 <!--
8080 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
81 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8282 <img class="footer" src="doxygen.png" alt="doxygen"/>
8383 </a> 1.8.14
8484 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
8080 <!-- start footer part -->
8181 <!--
8282 <hr class="footer"/><address class="footer"><small>
83 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
83 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8484 <img class="footer" src="doxygen.png" alt="doxygen"/>
8585 </a> 1.8.14
8686 </small></address>
8181 <!-- start footer part -->
8282 <!--
8383 <hr class="footer"/><address class="footer"><small>
84 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
84 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8585 <img class="footer" src="doxygen.png" alt="doxygen"/>
8686 </a> 1.8.14
8787 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
101101 <!-- start footer part -->
102102 <!--
103103 <hr class="footer"/><address class="footer"><small>
104 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
104 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
105105 <img class="footer" src="doxygen.png" alt="doxygen"/>
106106 </a> 1.8.14
107107 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
7878 <!-- start footer part -->
7979 <!--
8080 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
81 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8282 <img class="footer" src="doxygen.png" alt="doxygen"/>
8383 </a> 1.8.14
8484 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7979 <!-- start footer part -->
8080 <!--
8181 <hr class="footer"/><address class="footer"><small>
82 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
82 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8383 <img class="footer" src="doxygen.png" alt="doxygen"/>
8484 </a> 1.8.14
8585 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
106106 <!-- start footer part -->
107107 <!--
108108 <hr class="footer"/><address class="footer"><small>
109 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
109 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
110110 <img class="footer" src="doxygen.png" alt="doxygen"/>
111111 </a> 1.8.14
112112 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
6868 <div class="title">DeviceCaps.h</div> </div>
6969 </div><!--header-->
7070 <div class="contents">
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;GraphicsTypes.h&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18"> 34</a></span>&#160; <span class="keyword">enum class</span> <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18">DeviceType</a> : Int32</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; Undefined = 0, </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18ad51c33ce106109ecd1596d83a11632a5">D3D11</a>, </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18afac777d230cd7175697748a8c5260df6">D3D12</a>, </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18a760716b590ee7c0adc25f434f577d8be">OpenGL</a>, </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18af4b7db07e13ba92157b1b7d961abfaae">OpenGLES</a> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; };</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html"> 44</a></span>&#160; <span class="keyword">struct </span><a class="code" href="struct_diligent_1_1_sampler_caps.html">SamplerCaps</a></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html#ae7e0572d6cf6ccb8404693cc76934125"> 47</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_sampler_caps.html#ae7e0572d6cf6ccb8404693cc76934125">bBorderSamplingModeSupported</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html#af72690e36ea28653de40fb24c69cc128"> 50</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_sampler_caps.html#af72690e36ea28653de40fb24c69cc128">bAnisotropicFilteringSupported</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html#a8c006d5540e11b89fd8cb8668758469d"> 53</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_sampler_caps.html#a8c006d5540e11b89fd8cb8668758469d">bLODBiasSupported</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html#abc1a0c3e9cccb15573e1cdf1ac99a18a"> 56</a></span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html#abc1a0c3e9cccb15573e1cdf1ac99a18a">SamplerCaps</a>() :</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html#ae7e0572d6cf6ccb8404693cc76934125">bBorderSamplingModeSupported</a>( True ),</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html#af72690e36ea28653de40fb24c69cc128">bAnisotropicFilteringSupported</a>( True ),</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html#a8c006d5540e11b89fd8cb8668758469d">bLODBiasSupported</a>( True )</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {}</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; };</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html"> 64</a></span>&#160; <span class="keyword">struct </span><a class="code" href="struct_diligent_1_1_texture_caps.html">TextureCaps</a></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#abc44c7348aaa30d2e046b5ccc3ab08d1"> 67</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_texture_caps.html#abc44c7348aaa30d2e046b5ccc3ab08d1">bTexture1DSupported</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#aa4e3aeb3b8a7ae275d4b43a1a67bfe6e"> 70</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_texture_caps.html#aa4e3aeb3b8a7ae275d4b43a1a67bfe6e">bTexture1DArraySupported</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#a5bdc97b634fffa3f7e9505845dd67c06"> 73</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_texture_caps.html#a5bdc97b634fffa3f7e9505845dd67c06">bTexture2DMSSupported</a>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#ab56a36e4792921cef9ebdba1402904af"> 76</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_texture_caps.html#ab56a36e4792921cef9ebdba1402904af">bTexture2DMSArraySupported</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#aecfd0691323563f4af543d3d02cdb07c"> 79</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="struct_diligent_1_1_texture_caps.html#aecfd0691323563f4af543d3d02cdb07c">bTextureViewSupported</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#a81cb7047b115144874298d7554207dc1"> 82</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="struct_diligent_1_1_texture_caps.html#a81cb7047b115144874298d7554207dc1">bCubemapArraysSupported</a>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#a325029c491ac552b745fe03bcf63e0e0"> 85</a></span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#a325029c491ac552b745fe03bcf63e0e0">TextureCaps</a>():</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#abc44c7348aaa30d2e046b5ccc3ab08d1">bTexture1DSupported</a>( True ),</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#aa4e3aeb3b8a7ae275d4b43a1a67bfe6e">bTexture1DArraySupported</a>( True ),</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#a5bdc97b634fffa3f7e9505845dd67c06">bTexture2DMSSupported</a>( True ),</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#ab56a36e4792921cef9ebdba1402904af">bTexture2DMSArraySupported</a>( True ),</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#aecfd0691323563f4af543d3d02cdb07c">bTextureViewSupported</a>( True ),</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#a81cb7047b115144874298d7554207dc1">bCubemapArraysSupported</a>( True )</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {}</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; };</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html"> 96</a></span>&#160; <span class="keyword">struct </span><a class="code" href="struct_diligent_1_1_device_caps.html">DeviceCaps</a></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#abccee23ca3ca2340126ffa78e5800196"> 99</a></span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18">DeviceType</a> <a class="code" href="struct_diligent_1_1_device_caps.html#abccee23ca3ca2340126ffa78e5800196">DevType</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#aa6930d494e233ea0b46d0ec7d260a870"> 103</a></span>&#160; Int32 <a class="code" href="struct_diligent_1_1_device_caps.html#aa6930d494e233ea0b46d0ec7d260a870">MajorVersion</a>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#abdc1be2715af7e39f54454b26395ac73"> 107</a></span>&#160; Int32 <a class="code" href="struct_diligent_1_1_device_caps.html#abdc1be2715af7e39f54454b26395ac73">MinorVersion</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a0972c2a042cd7266a5450a9f51452517"> 110</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_device_caps.html#a0972c2a042cd7266a5450a9f51452517">bSeparableProgramSupported</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a2a17664a40e5eb90a20c68a520a487e8"> 113</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_device_caps.html#a2a17664a40e5eb90a20c68a520a487e8">bIndirectRenderingSupported</a>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a04d752cb6bcb7fc56ff2533cdf48e796"> 116</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_device_caps.html#a04d752cb6bcb7fc56ff2533cdf48e796">bWireframeFillSupported</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a5e5213f80ddd3160766ec51c5ed2ab4b"> 119</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_device_caps.html#a5e5213f80ddd3160766ec51c5ed2ab4b">bMultithreadedResourceCreationSupported</a>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a408a266a56d81c953cdd0813617838af"> 122</a></span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html">SamplerCaps</a> <a class="code" href="struct_diligent_1_1_device_caps.html#a408a266a56d81c953cdd0813617838af">SamCaps</a>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#ac95e490fb96d7bd0b4d1d91eb8d0c3bc"> 125</a></span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html">TextureCaps</a> <a class="code" href="struct_diligent_1_1_device_caps.html#ac95e490fb96d7bd0b4d1d91eb8d0c3bc">TexCaps</a>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a391b39a34d996b7a368a6255ae8923d2"> 128</a></span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a391b39a34d996b7a368a6255ae8923d2">DeviceCaps</a>() :</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#abccee23ca3ca2340126ffa78e5800196">DevType</a>( <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18">DeviceType</a>::Undefined ),</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#aa6930d494e233ea0b46d0ec7d260a870">MajorVersion</a>( 0 ),</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#abdc1be2715af7e39f54454b26395ac73">MinorVersion</a>( 0 ),</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a0972c2a042cd7266a5450a9f51452517">bSeparableProgramSupported</a>( True ),</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a2a17664a40e5eb90a20c68a520a487e8">bIndirectRenderingSupported</a>( True ),</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a04d752cb6bcb7fc56ff2533cdf48e796">bWireframeFillSupported</a>( True ),</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a5e5213f80ddd3160766ec51c5ed2ab4b">bMultithreadedResourceCreationSupported</a>( False )</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {}</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; };</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div><div class="ttc" id="struct_diligent_1_1_device_caps_html_a0972c2a042cd7266a5450a9f51452517"><div class="ttname"><a href="struct_diligent_1_1_device_caps.html#a0972c2a042cd7266a5450a9f51452517">Diligent::DeviceCaps::bSeparableProgramSupported</a></div><div class="ttdeci">Bool bSeparableProgramSupported</div><div class="ttdoc">Indicates if device supports separable programs. </div><div class="ttdef"><b>Definition:</b> DeviceCaps.h:110</div></div>
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;GraphicsTypes.h&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18"> 34</a></span>&#160; <span class="keyword">enum class</span> <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18">DeviceType</a> : Int32</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0, </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18ad51c33ce106109ecd1596d83a11632a5">D3D11</a>, </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18afac777d230cd7175697748a8c5260df6">D3D12</a>, </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18a760716b590ee7c0adc25f434f577d8be">OpenGL</a>, </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18af4b7db07e13ba92157b1b7d961abfaae">OpenGLES</a> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; };</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html"> 44</a></span>&#160; <span class="keyword">struct </span><a class="code" href="struct_diligent_1_1_sampler_caps.html">SamplerCaps</a></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html#ae7e0572d6cf6ccb8404693cc76934125"> 47</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_sampler_caps.html#ae7e0572d6cf6ccb8404693cc76934125">bBorderSamplingModeSupported</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html#af72690e36ea28653de40fb24c69cc128"> 50</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_sampler_caps.html#af72690e36ea28653de40fb24c69cc128">bAnisotropicFilteringSupported</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html#a8c006d5540e11b89fd8cb8668758469d"> 53</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_sampler_caps.html#a8c006d5540e11b89fd8cb8668758469d">bLODBiasSupported</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_sampler_caps.html#abc1a0c3e9cccb15573e1cdf1ac99a18a"> 56</a></span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html#abc1a0c3e9cccb15573e1cdf1ac99a18a">SamplerCaps</a>() :</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html#ae7e0572d6cf6ccb8404693cc76934125">bBorderSamplingModeSupported</a>( True ),</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html#af72690e36ea28653de40fb24c69cc128">bAnisotropicFilteringSupported</a>( True ),</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html#a8c006d5540e11b89fd8cb8668758469d">bLODBiasSupported</a>( True )</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {}</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; };</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html"> 64</a></span>&#160; <span class="keyword">struct </span><a class="code" href="struct_diligent_1_1_texture_caps.html">TextureCaps</a></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#abc44c7348aaa30d2e046b5ccc3ab08d1"> 67</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_texture_caps.html#abc44c7348aaa30d2e046b5ccc3ab08d1">bTexture1DSupported</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#aa4e3aeb3b8a7ae275d4b43a1a67bfe6e"> 70</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_texture_caps.html#aa4e3aeb3b8a7ae275d4b43a1a67bfe6e">bTexture1DArraySupported</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#a5bdc97b634fffa3f7e9505845dd67c06"> 73</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_texture_caps.html#a5bdc97b634fffa3f7e9505845dd67c06">bTexture2DMSSupported</a>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#ab56a36e4792921cef9ebdba1402904af"> 76</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_texture_caps.html#ab56a36e4792921cef9ebdba1402904af">bTexture2DMSArraySupported</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#aecfd0691323563f4af543d3d02cdb07c"> 79</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="struct_diligent_1_1_texture_caps.html#aecfd0691323563f4af543d3d02cdb07c">bTextureViewSupported</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#a81cb7047b115144874298d7554207dc1"> 82</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="struct_diligent_1_1_texture_caps.html#a81cb7047b115144874298d7554207dc1">bCubemapArraysSupported</a>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_texture_caps.html#a325029c491ac552b745fe03bcf63e0e0"> 85</a></span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#a325029c491ac552b745fe03bcf63e0e0">TextureCaps</a>():</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#abc44c7348aaa30d2e046b5ccc3ab08d1">bTexture1DSupported</a>( True ),</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#aa4e3aeb3b8a7ae275d4b43a1a67bfe6e">bTexture1DArraySupported</a>( True ),</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#a5bdc97b634fffa3f7e9505845dd67c06">bTexture2DMSSupported</a>( True ),</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#ab56a36e4792921cef9ebdba1402904af">bTexture2DMSArraySupported</a>( True ),</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#aecfd0691323563f4af543d3d02cdb07c">bTextureViewSupported</a>( True ),</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html#a81cb7047b115144874298d7554207dc1">bCubemapArraysSupported</a>( True )</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {}</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; };</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html"> 96</a></span>&#160; <span class="keyword">struct </span><a class="code" href="struct_diligent_1_1_device_caps.html">DeviceCaps</a></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#abccee23ca3ca2340126ffa78e5800196"> 99</a></span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18">DeviceType</a> <a class="code" href="struct_diligent_1_1_device_caps.html#abccee23ca3ca2340126ffa78e5800196">DevType</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#aa6930d494e233ea0b46d0ec7d260a870"> 103</a></span>&#160; Int32 <a class="code" href="struct_diligent_1_1_device_caps.html#aa6930d494e233ea0b46d0ec7d260a870">MajorVersion</a>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#abdc1be2715af7e39f54454b26395ac73"> 107</a></span>&#160; Int32 <a class="code" href="struct_diligent_1_1_device_caps.html#abdc1be2715af7e39f54454b26395ac73">MinorVersion</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a0972c2a042cd7266a5450a9f51452517"> 110</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_device_caps.html#a0972c2a042cd7266a5450a9f51452517">bSeparableProgramSupported</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a2a17664a40e5eb90a20c68a520a487e8"> 113</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_device_caps.html#a2a17664a40e5eb90a20c68a520a487e8">bIndirectRenderingSupported</a>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a04d752cb6bcb7fc56ff2533cdf48e796"> 116</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_device_caps.html#a04d752cb6bcb7fc56ff2533cdf48e796">bWireframeFillSupported</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a5e5213f80ddd3160766ec51c5ed2ab4b"> 119</a></span>&#160; Bool <a class="code" href="struct_diligent_1_1_device_caps.html#a5e5213f80ddd3160766ec51c5ed2ab4b">bMultithreadedResourceCreationSupported</a>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a408a266a56d81c953cdd0813617838af"> 122</a></span>&#160; <a class="code" href="struct_diligent_1_1_sampler_caps.html">SamplerCaps</a> <a class="code" href="struct_diligent_1_1_device_caps.html#a408a266a56d81c953cdd0813617838af">SamCaps</a>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#ac95e490fb96d7bd0b4d1d91eb8d0c3bc"> 125</a></span>&#160; <a class="code" href="struct_diligent_1_1_texture_caps.html">TextureCaps</a> <a class="code" href="struct_diligent_1_1_device_caps.html#ac95e490fb96d7bd0b4d1d91eb8d0c3bc">TexCaps</a>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="struct_diligent_1_1_device_caps.html#a391b39a34d996b7a368a6255ae8923d2"> 128</a></span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a391b39a34d996b7a368a6255ae8923d2">DeviceCaps</a>() :</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#abccee23ca3ca2340126ffa78e5800196">DevType</a>( <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18">DeviceType</a>::Undefined ),</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#aa6930d494e233ea0b46d0ec7d260a870">MajorVersion</a>( 0 ),</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#abdc1be2715af7e39f54454b26395ac73">MinorVersion</a>( 0 ),</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a0972c2a042cd7266a5450a9f51452517">bSeparableProgramSupported</a>( True ),</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a2a17664a40e5eb90a20c68a520a487e8">bIndirectRenderingSupported</a>( True ),</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a04d752cb6bcb7fc56ff2533cdf48e796">bWireframeFillSupported</a>( True ),</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="struct_diligent_1_1_device_caps.html#a5e5213f80ddd3160766ec51c5ed2ab4b">bMultithreadedResourceCreationSupported</a>( False )</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {}</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; };</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;}</div><div class="ttc" id="struct_diligent_1_1_device_caps_html_a0972c2a042cd7266a5450a9f51452517"><div class="ttname"><a href="struct_diligent_1_1_device_caps.html#a0972c2a042cd7266a5450a9f51452517">Diligent::DeviceCaps::bSeparableProgramSupported</a></div><div class="ttdeci">Bool bSeparableProgramSupported</div><div class="ttdoc">Indicates if device supports separable programs. </div><div class="ttdef"><b>Definition:</b> DeviceCaps.h:110</div></div>
7272 <div class="ttc" id="struct_diligent_1_1_texture_caps_html_a5bdc97b634fffa3f7e9505845dd67c06"><div class="ttname"><a href="struct_diligent_1_1_texture_caps.html#a5bdc97b634fffa3f7e9505845dd67c06">Diligent::TextureCaps::bTexture2DMSSupported</a></div><div class="ttdeci">Bool bTexture2DMSSupported</div><div class="ttdoc">Indicates if device supports 2D multisampled textures. </div><div class="ttdef"><b>Definition:</b> DeviceCaps.h:73</div></div>
7373 <div class="ttc" id="struct_diligent_1_1_device_caps_html_a5e5213f80ddd3160766ec51c5ed2ab4b"><div class="ttname"><a href="struct_diligent_1_1_device_caps.html#a5e5213f80ddd3160766ec51c5ed2ab4b">Diligent::DeviceCaps::bMultithreadedResourceCreationSupported</a></div><div class="ttdeci">Bool bMultithreadedResourceCreationSupported</div><div class="ttdoc">Indicates if device supports multithreaded resource creation. </div><div class="ttdef"><b>Definition:</b> DeviceCaps.h:119</div></div>
7474 <div class="ttc" id="namespace_diligent_html_a905d9d44892311167e9b28962bbf7e18afac777d230cd7175697748a8c5260df6"><div class="ttname"><a href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18afac777d230cd7175697748a8c5260df6">Diligent::DeviceType::D3D12</a></div><div class="ttdoc">D3D12 device. </div></div>
7575 <div class="ttc" id="struct_diligent_1_1_device_caps_html_abdc1be2715af7e39f54454b26395ac73"><div class="ttname"><a href="struct_diligent_1_1_device_caps.html#abdc1be2715af7e39f54454b26395ac73">Diligent::DeviceCaps::MinorVersion</a></div><div class="ttdeci">Int32 MinorVersion</div><div class="ttdoc">Major API revision. For instance, for D3D11.2 this value would be 2, and for OpenGL4.3 this value would be 3. </div><div class="ttdef"><b>Definition:</b> DeviceCaps.h:107</div></div>
7676 <div class="ttc" id="struct_diligent_1_1_sampler_caps_html_af72690e36ea28653de40fb24c69cc128"><div class="ttname"><a href="struct_diligent_1_1_sampler_caps.html#af72690e36ea28653de40fb24c69cc128">Diligent::SamplerCaps::bAnisotropicFilteringSupported</a></div><div class="ttdeci">Bool bAnisotropicFilteringSupported</div><div class="ttdoc">Indicates if device supports anisotrpoic filtering. </div><div class="ttdef"><b>Definition:</b> DeviceCaps.h:50</div></div>
7777 <div class="ttc" id="namespace_diligent_html_a905d9d44892311167e9b28962bbf7e18a760716b590ee7c0adc25f434f577d8be"><div class="ttname"><a href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18a760716b590ee7c0adc25f434f577d8be">Diligent::DeviceType::OpenGL</a></div><div class="ttdoc">OpenGL device. </div></div>
78 <div class="ttc" id="namespace_diligent_html_a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Diligent::DeviceType::Undefined</a></div><div class="ttdoc">Undefined device. </div></div>
7879 <div class="ttc" id="struct_diligent_1_1_device_caps_html_a04d752cb6bcb7fc56ff2533cdf48e796"><div class="ttname"><a href="struct_diligent_1_1_device_caps.html#a04d752cb6bcb7fc56ff2533cdf48e796">Diligent::DeviceCaps::bWireframeFillSupported</a></div><div class="ttdeci">Bool bWireframeFillSupported</div><div class="ttdoc">Indicates if device supports wireframe fill mode. </div><div class="ttdef"><b>Definition:</b> DeviceCaps.h:116</div></div>
7980 <div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Namespace for the OpenGL implementation of the graphics engine. </div><div class="ttdef"><b>Definition:</b> BufferD3D11Impl.h:34</div></div>
8081 <div class="ttc" id="struct_diligent_1_1_sampler_caps_html_a8c006d5540e11b89fd8cb8668758469d"><div class="ttname"><a href="struct_diligent_1_1_sampler_caps.html#a8c006d5540e11b89fd8cb8668758469d">Diligent::SamplerCaps::bLODBiasSupported</a></div><div class="ttdeci">Bool bLODBiasSupported</div><div class="ttdoc">Indicates if device supports MIP load bias. </div><div class="ttdef"><b>Definition:</b> DeviceCaps.h:53</div></div>
103104 <!-- start footer part -->
104105 <!--
105106 <hr class="footer"/><address class="footer"><small>
106 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
107 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
107108 <img class="footer" src="doxygen.png" alt="doxygen"/>
108109 </a> 1.8.14
109110 </small></address>
186186 <!-- start footer part -->
187187 <!--
188188 <hr class="footer"/><address class="footer"><small>
189 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
189 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
190190 <img class="footer" src="doxygen.png" alt="doxygen"/>
191191 </a> 1.8.14
192192 </small></address>
136136 <!-- start footer part -->
137137 <!--
138138 <hr class="footer"/><address class="footer"><small>
139 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
139 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
140140 <img class="footer" src="doxygen.png" alt="doxygen"/>
141141 </a> 1.8.14
142142 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
119119 <!-- start footer part -->
120120 <!--
121121 <hr class="footer"/><address class="footer"><small>
122 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
122 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
123123 <img class="footer" src="doxygen.png" alt="doxygen"/>
124124 </a> 1.8.14
125125 </small></address>
8080 <!-- start footer part -->
8181 <!--
8282 <hr class="footer"/><address class="footer"><small>
83 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
83 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8484 <img class="footer" src="doxygen.png" alt="doxygen"/>
8585 </a> 1.8.14
8686 </small></address>
117117 <!-- start footer part -->
118118 <!--
119119 <hr class="footer"/><address class="footer"><small>
120 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
120 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
121121 <img class="footer" src="doxygen.png" alt="doxygen"/>
122122 </a> 1.8.14
123123 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
109109 <!-- start footer part -->
110110 <!--
111111 <hr class="footer"/><address class="footer"><small>
112 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
112 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
113113 <img class="footer" src="doxygen.png" alt="doxygen"/>
114114 </a> 1.8.14
115115 </small></address>
7878 <!-- start footer part -->
7979 <!--
8080 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
81 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8282 <img class="footer" src="doxygen.png" alt="doxygen"/>
8383 </a> 1.8.14
8484 </small></address>
8282 <!-- start footer part -->
8383 <!--
8484 <hr class="footer"/><address class="footer"><small>
85 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
85 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8686 <img class="footer" src="doxygen.png" alt="doxygen"/>
8787 </a> 1.8.14
8888 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
8080 <!-- start footer part -->
8181 <!--
8282 <hr class="footer"/><address class="footer"><small>
83 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
83 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8484 <img class="footer" src="doxygen.png" alt="doxygen"/>
8585 </a> 1.8.14
8686 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7979 <!-- start footer part -->
8080 <!--
8181 <hr class="footer"/><address class="footer"><small>
82 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
82 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8383 <img class="footer" src="doxygen.png" alt="doxygen"/>
8484 </a> 1.8.14
8585 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
8383 <!-- start footer part -->
8484 <!--
8585 <hr class="footer"/><address class="footer"><small>
86 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
86 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8787 <img class="footer" src="doxygen.png" alt="doxygen"/>
8888 </a> 1.8.14
8989 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:02:31 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:02:31 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
122122 <!-- start footer part -->
123123 <!--
124124 <hr class="footer"/><address class="footer"><small>
125 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
125 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
126126 <img class="footer" src="doxygen.png" alt="doxygen"/>
127127 </a> 1.8.14
128128 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
6868 <div class="title">pch.h</div> </div>
6969 </div><!--header-->
7070 <div class="contents">
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// stdafx.h : include file for standard system include files,</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// or project specific include files that are used frequently, but</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">// are changed infrequently</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &lt;unordered_set&gt;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;Errors.h&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;PlatformDefinitions.h&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &quot;RefCntAutoPtr.h&quot;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &quot;DebugUtilities.h&quot;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;ValidatedCast.h&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;RenderDevice.h&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespace_diligent.html">Diligent</a>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Graphics engine namespace. </div><div class="ttdef"><b>Definition:</b> AdaptiveFixedBlockAllocator.h:30</div></div>
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// stdafx.h : include file for standard system include files,</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// or project specific include files that are used frequently, but</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">// are changed infrequently</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &lt;unordered_set&gt;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &quot;Errors.h&quot;</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &quot;PlatformDefinitions.h&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &quot;RefCntAutoPtr.h&quot;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &quot;DebugUtilities.h&quot;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &quot;ValidatedCast.h&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &quot;RenderDevice.h&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespace_diligent.html">Diligent</a>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Namespace for the OpenGL implementation of the graphics engine. </div><div class="ttdef"><b>Definition:</b> BufferD3D11Impl.h:34</div></div>
7272 <div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdef"><b>Definition:</b> AdvancedMath.h:316</div></div>
7373 </div><!-- fragment --></div><!-- contents -->
7474 <!-- HTML footer for doxygen 1.8.10-->
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:02:27 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
334334 <!-- start footer part -->
335335 <!--
336336 <hr class="footer"/><address class="footer"><small>
337 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
337 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
338338 <img class="footer" src="doxygen.png" alt="doxygen"/>
339339 </a> 1.8.14
340340 </small></address>
6868 <div class="title">HLSL2GLSLConverter.h</div> </div>
6969 </div><!--header-->
7070 <div class="contents">
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;Shader.h&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;DataBlob.h&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// {1FDE020A-9C73-4A76-8AEF-C2C6C2CF0EA5}</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">static</span> constexpr INTERFACE_ID IID_HLSL2GLSLConversionStream =</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{ 0x1fde020a, 0x9c73, 0x4a76, { 0x8a, 0xef, 0xc2, 0xc6, 0xc2, 0xcf, 0xe, 0xa5 } };</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">class </span>IHLSL2GLSLConversionStream : <span class="keyword">public</span> IObject</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Convert(<span class="keyword">const</span> Char* EntryPoint, <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType, <span class="keywordtype">bool</span> IncludeDefintions, IDataBlob **ppGLSLSource) = 0;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;};</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// {44A21160-77E0-4DDC-A57E-B8B8B65B5342}</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">static</span> constexpr INTERFACE_ID IID_HLSL2GLSLConverter =</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{ 0x44a21160, 0x77e0, 0x4ddc, { 0xa5, 0x7e, 0xb8, 0xb8, 0xb6, 0x5b, 0x53, 0x42 } };</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="class_diligent_1_1_i_h_l_s_l2_g_l_s_l_converter.html"> 51</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_diligent_1_1_i_h_l_s_l2_g_l_s_l_converter.html">IHLSL2GLSLConverter</a> : <span class="keyword">public</span> <a class="code" href="class_diligent_1_1_i_object.html">IObject</a></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> CreateStream(<span class="keyword">const</span> Char* InputFileName, </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="class_diligent_1_1_i_shader_source_input_stream_factory.html">IShaderSourceInputStreamFactory</a> *pSourceStreamFactory, </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> Char* HLSLSource, </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">size_t</span> NumSymbols, </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; IHLSL2GLSLConversionStream **ppStream)<span class="keyword">const</span> = 0;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;};</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div><div class="ttc" id="class_diligent_1_1_i_shader_source_input_stream_factory_html"><div class="ttname"><a href="class_diligent_1_1_i_shader_source_input_stream_factory.html">Diligent::IShaderSourceInputStreamFactory</a></div><div class="ttdoc">Shader source stream factory interface. </div><div class="ttdef"><b>Definition:</b> Shader.h:190</div></div>
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;Shader.h&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;DataBlob.h&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment">// {1FDE020A-9C73-4A76-8AEF-C2C6C2CF0EA5}</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">static</span> constexpr INTERFACE_ID IID_HLSL2GLSLConversionStream =</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{ 0x1fde020a, 0x9c73, 0x4a76, { 0x8a, 0xef, 0xc2, 0xc6, 0xc2, 0xcf, 0xe, 0xa5 } };</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">class </span>IHLSL2GLSLConversionStream : <span class="keyword">public</span> IObject</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Convert(<span class="keyword">const</span> Char* EntryPoint, <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType, <span class="keywordtype">bool</span> IncludeDefintions, IDataBlob **ppGLSLSource) = 0;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;};</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">// {44A21160-77E0-4DDC-A57E-B8B8B65B5342}</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">static</span> constexpr INTERFACE_ID IID_HLSL2GLSLConverter =</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{ 0x44a21160, 0x77e0, 0x4ddc, { 0xa5, 0x7e, 0xb8, 0xb8, 0xb6, 0x5b, 0x53, 0x42 } };</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="class_diligent_1_1_i_h_l_s_l2_g_l_s_l_converter.html"> 51</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_diligent_1_1_i_h_l_s_l2_g_l_s_l_converter.html">IHLSL2GLSLConverter</a> : <span class="keyword">public</span> IObject</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> CreateStream(<span class="keyword">const</span> Char* InputFileName, </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="class_diligent_1_1_i_shader_source_input_stream_factory.html">IShaderSourceInputStreamFactory</a> *pSourceStreamFactory, </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">const</span> Char* HLSLSource, </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">size_t</span> NumSymbols, </div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; IHLSL2GLSLConversionStream **ppStream)<span class="keyword">const</span> = 0;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;};</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;}</div><div class="ttc" id="class_diligent_1_1_i_shader_source_input_stream_factory_html"><div class="ttname"><a href="class_diligent_1_1_i_shader_source_input_stream_factory.html">Diligent::IShaderSourceInputStreamFactory</a></div><div class="ttdoc">Shader source stream factory interface. </div><div class="ttdef"><b>Definition:</b> Shader.h:190</div></div>
7272 <div class="ttc" id="class_diligent_1_1_i_h_l_s_l2_g_l_s_l_converter_html"><div class="ttname"><a href="class_diligent_1_1_i_h_l_s_l2_g_l_s_l_converter.html">Diligent::IHLSL2GLSLConverter</a></div><div class="ttdoc">Interface to the buffer object implemented in OpenGL. </div><div class="ttdef"><b>Definition:</b> HLSL2GLSLConverter.h:51</div></div>
7373 <div class="ttc" id="namespace_diligent_html_a8294eb0a10dafa18441e78a80d231fd2"><div class="ttname"><a href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">Diligent::SHADER_TYPE</a></div><div class="ttdeci">SHADER_TYPE</div><div class="ttdoc">Describes the shader type. </div><div class="ttdef"><b>Definition:</b> Shader.h:46</div></div>
74 <div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Graphics engine namespace. </div><div class="ttdef"><b>Definition:</b> AdaptiveFixedBlockAllocator.h:30</div></div>
75 <div class="ttc" id="class_diligent_1_1_i_object_html"><div class="ttname"><a href="class_diligent_1_1_i_object.html">Diligent::IObject</a></div><div class="ttdoc">Base interface for all dynamic objects in the engine. </div><div class="ttdef"><b>Definition:</b> Object.h:36</div></div>
74 <div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Namespace for the OpenGL implementation of the graphics engine. </div><div class="ttdef"><b>Definition:</b> BufferD3D11Impl.h:34</div></div>
7675 </div><!-- fragment --></div><!-- contents -->
7776 <!-- HTML footer for doxygen 1.8.10-->
7877 <!-- start footer part -->
7978 <!--
8079 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:02:31 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8281 <img class="footer" src="doxygen.png" alt="doxygen"/>
8382 </a> 1.8.14
8483 </small></address>
6868 <div class="title">HLSL2GLSLConverterImpl.h</div> </div>
6969 </div><!--header-->
7070 <div class="contents">
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;list&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;unordered_set&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;HLSL2GLSLConverter.h&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;ObjectBase.h&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;HLSLKeywords.h&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;Shader.h&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;HashUtils.h&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;HLSLKeywords.h&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">struct </span>FunctionStubHashKey</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; FunctionStubHashKey(<span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a>&amp; _Obj, <span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a>&amp; _Func, <a class="code" href="namespace_diligent.html#a9e27ac38f8dccaa4b4f8e967cd1e868e">Uint32</a> _NumArgs) : </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; Object(_Obj),</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; Function(_Func),</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; NumArguments(_NumArgs)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; FunctionStubHashKey(<span class="keyword">const</span> Char* _Obj, <span class="keyword">const</span> Char* _Func, <a class="code" href="namespace_diligent.html#a9e27ac38f8dccaa4b4f8e967cd1e868e">Uint32</a> _NumArgs) : </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; Object(_Obj),</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; Function(_Func),</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; NumArguments(_NumArgs)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; FunctionStubHashKey( FunctionStubHashKey &amp;&amp; Key ) : </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; Object(<a class="code" href="namespacestd.html">std</a>::move(Key.Object)),</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; Function(<a class="code" href="namespacestd.html">std</a>::move(Key.Function)),</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; NumArguments(Key.NumArguments)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> FunctionStubHashKey&amp; rhs)<span class="keyword">const</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> Object == rhs.Object &amp;&amp;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; Function == rhs.Function &amp;&amp;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; NumArguments == rhs.NumArguments;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; HashMapStringKey Object;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; HashMapStringKey Function;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="namespace_diligent.html#a9e27ac38f8dccaa4b4f8e967cd1e868e">Uint32</a> NumArguments;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; };</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacestd.html">std</a></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">template</span>&lt;&gt;<span class="keyword">struct </span>hash &lt; <a class="code" href="namespace_diligent.html">Diligent</a>::FunctionStubHashKey &gt;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">size_t</span> operator()( <span class="keyword">const</span> Diligent::FunctionStubHashKey &amp;Key )<span class="keyword"> const</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> ComputeHash(Key.Object, Key.Function, Key.NumArguments);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; };</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">class </span>HLSL2GLSLConverterImpl</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> HLSL2GLSLConverterImpl&amp; GetInstance();</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">struct </span>ConversionAttribs</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; IShaderSourceInputStreamFactory *pSourceStreamFactory = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; IHLSL2GLSLConversionStream **ppConversionStream = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">const</span> Char* HLSLSource = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">size_t</span> NumSymbols = 0;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">const</span> Char* EntryPoint = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType = <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2a6799c4292a2b6e6087a4f0ab3e6efc5a">SHADER_TYPE_UNKNOWN</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">bool</span> IncludeDefinitions = <span class="keyword">false</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> Char* InputFileName = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; };</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Convert(ConversionAttribs &amp;Attribs)<span class="keyword">const</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">void</span> CreateStream(<span class="keyword">const</span> Char* InputFileName,</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; IShaderSourceInputStreamFactory *pSourceStreamFactory, </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> Char* HLSLSource, </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordtype">size_t</span> NumSymbols, </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; IHLSL2GLSLConversionStream **ppStream)<span class="keyword">const</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; HLSL2GLSLConverterImpl();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">struct </span>HLSLObjectInfo</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> GLSLType; <span class="comment">// sampler2D, sampler2DShadow, image2D, etc.</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="namespace_diligent.html#a9e27ac38f8dccaa4b4f8e967cd1e868e">Uint32</a> NumComponents; <span class="comment">// 0,1,2,3 or 4</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">// Texture2D&lt;float4&gt; -&gt; 4</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// Texture2D&lt;uint&gt; -&gt; 1</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// Texture2D -&gt; 0</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; HLSLObjectInfo( <span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a>&amp; Type, <a class="code" href="namespace_diligent.html#a9e27ac38f8dccaa4b4f8e967cd1e868e">Uint32</a> NComp ) :</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; GLSLType( Type ),</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; NumComponents( NComp )</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {}</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; };</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">struct </span>ObjectsTypeHashType</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// This is only required to make the code compile on paranoid MSVC 2017 compiler (19.10.25017):</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// https://stackoverflow.com/questions/47604029/move-constructors-of-stl-containers-in-msvc-2017-are-not-marked-as-noexcept</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; ObjectsTypeHashType()noexcept {}</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; ObjectsTypeHashType(ObjectsTypeHashType&amp;&amp; rhs)noexcept : </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; m(std::move(rhs.m))</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {}</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; ObjectsTypeHashType&amp; operator = (ObjectsTypeHashType&amp;&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; ObjectsTypeHashType(ObjectsTypeHashType&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; ObjectsTypeHashType&amp; operator = (ObjectsTypeHashType&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; std::unordered_map&lt;HashMapStringKey, HLSLObjectInfo&gt; m;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">struct </span>GLSLStubInfo</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Name;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Swizzle;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; GLSLStubInfo( <span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a>&amp; _Name, <span class="keyword">const</span> <span class="keywordtype">char</span>* _Swizzle ) :</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; Name( _Name ),</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; Swizzle( _Swizzle )</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {}</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; };</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// Hash map that maps GLSL object, method and number of arguments</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// passed to the original function, to the GLSL stub function</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Example: {&quot;sampler2D&quot;, &quot;Sample&quot;, 2} -&gt; {&quot;Sample_2&quot;, &quot;_SWIZZLE&quot;}</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; std::unordered_map&lt;FunctionStubHashKey, GLSLStubInfo&gt; m_GLSLStubs;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">enum class</span> TokenType</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="preprocessor">#define ADD_KEYWORD(keyword)kw_##keyword,</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; ITERATE_KEYWORDS(ADD_KEYWORD)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#undef ADD_KEYWORD</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; PreprocessorDirective,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; Operator,</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; OpenBrace,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; ClosingBrace,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; OpenBracket,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; ClosingBracket,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; OpenStaple,</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; ClosingStaple,</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; OpenAngleBracket,</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; ClosingAngleBracket,</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; Identifier,</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; NumericConstant,</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; SrtingConstant,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; Semicolon,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; Comma,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; TextBlock,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; Assignment,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; ComparisonOp,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; BooleanOp,</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; BitwiseOp,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; IncDecOp,</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; MathOp</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; };</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">struct </span>TokenInfo</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; TokenType Type;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Literal;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Delimiter;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordtype">bool</span> IsBuiltInType()<span class="keyword">const</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; static_assert( static_cast&lt;int&gt;(TokenType::kw_bool) == 1 &amp;&amp; static_cast&lt;int&gt;(TokenType::kw_void) == 191, </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="stringliteral">&quot;If you updated built-in types, double check that all types are defined between bool and void&quot;</span>);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> Type &gt;= TokenType::kw_bool &amp;&amp; Type &lt;= TokenType::kw_void;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">bool</span> IsFlowControl()<span class="keyword">const</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; static_assert( static_cast&lt;int&gt;(TokenType::kw_break) == 192 &amp;&amp; static_cast&lt;int&gt;(TokenType::kw_while) == 202, </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="stringliteral">&quot;If you updated control flow keywords, double check that all keywords are defined between break and while&quot;</span>);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> Type &gt;= TokenType::kw_break &amp;&amp; Type &lt;= TokenType::kw_while;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; TokenInfo( TokenType _Type = TokenType :: Undefined,</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keyword">const</span> Char* _Literal = <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">const</span> Char* _Delimiter = <span class="stringliteral">&quot;&quot;</span> ) : </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; Type( _Type ),</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; Literal( _Literal ),</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; Delimiter(_Delimiter)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {}</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; };</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">typedef</span> std::list&lt;TokenInfo&gt; TokenListType;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">class </span>ConversionStream : <span class="keyword">public</span> ObjectBase&lt;IHLSL2GLSLConversionStream&gt;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">typedef</span> ObjectBase&lt;IHLSL2GLSLConversionStream&gt; TBase;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; ConversionStream(IReferenceCounters *pRefCounters, </div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">const</span> HLSL2GLSLConverterImpl &amp;Converter, </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* InputFileName,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; IShaderSourceInputStreamFactory* pInputStreamFactory, </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">const</span> Char* HLSLSource, </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">size_t</span> NumSymbols,</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordtype">bool</span> bPreserveTokens);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Convert(<span class="keyword">const</span> Char* EntryPoint, <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType, <span class="keywordtype">bool</span> IncludeDefintions);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Convert(<span class="keyword">const</span> Char* EntryPoint, <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType, <span class="keywordtype">bool</span> IncludeDefintions, IDataBlob **ppGLSLSource)<span class="keyword">override</span>;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; IMPLEMENT_QUERY_INTERFACE_IN_PLACE( IID_HLSL2GLSLConversionStream, TBase )</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a>&amp; GetInputFileName()<span class="keyword">const</span>{ <span class="keywordflow">return</span> m_InputFileName; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordtype">void</span> InsertIncludes(<a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;GLSLSource, IShaderSourceInputStreamFactory* pSourceStreamFactory);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordtype">void</span> Tokenize(<span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Source);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">typedef</span> std::unordered_map&lt;String, bool&gt; SamplerHashType;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">const</span> HLSLObjectInfo *FindHLSLObject(<span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Name );</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">void</span> ProcessShaderDeclaration(TokenListType::iterator EntryPointToken, <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">void</span> ProcessObjectMethods(<span class="keyword">const</span> TokenListType::iterator &amp;ScopeStart, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordtype">void</span> ProcessRWTextures(<span class="keyword">const</span> TokenListType::iterator &amp;ScopeStart, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">void</span> ProcessAtomics(<span class="keyword">const</span> TokenListType::iterator &amp;ScopeStart, </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">void</span> RegisterStruct(TokenListType::iterator &amp;Token);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordtype">void</span> ProcessConstantBuffer(TokenListType::iterator &amp;Token);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">void</span> ProcessStructuredBuffer(TokenListType::iterator &amp;Token);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordtype">void</span> ParseSamplers(TokenListType::iterator &amp;ScopeStart, SamplerHashType &amp;SamplersHash);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">void</span> ProcessTextureDeclaration(TokenListType::iterator &amp;Token, <span class="keyword">const</span> std::vector&lt;SamplerHashType&gt; &amp;SamplersHash, ObjectsTypeHashType &amp;Objects);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordtype">bool</span> ProcessObjectMethod(TokenListType::iterator &amp;Token, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeStart, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="namespace_diligent.html#a9e27ac38f8dccaa4b4f8e967cd1e868e">Uint32</a> CountFunctionArguments(TokenListType::iterator &amp;Token, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordtype">bool</span> ProcessRWTextureStore(TokenListType::iterator &amp;Token, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">void</span> RemoveFlowControlAttribute(TokenListType::iterator &amp;Token);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">void</span> RemoveSemantics();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">void</span> RemoveSpecialShaderAttributes();</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordtype">void</span> RemoveSemanticsFromBlock(TokenListType::iterator &amp;Token, TokenType OpenBracketType, TokenType ClosingBracketType);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// IteratorType may be String::iterator or String::const_iterator.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// While iterator is convertible to const_iterator, </span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// iterator&amp; cannot be converted to const_iterator&amp; (Microsoft compiler allows</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// such conversion, while gcc does not)</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> IteratorType&gt;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> PrintTokenContext(IteratorType &amp;TargetToken, <a class="code" href="namespace_diligent.html#a645a22e6073f4b6d0c46d95b9bc11fdb">Int32</a> NumAdjacentLines);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">struct </span>ShaderParameterInfo</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">enum class</span> StorageQualifier : <a class="code" href="namespace_diligent.html#a70b89ad84f51b1f35d7156dca7596361">Int8</a></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; Unknown = 0,</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; In = 1,</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; Out = 2,</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; InOut = 3,</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; Ret = 4</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }storageQualifier;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">struct </span>GSAttributes</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">enum class</span> PrimitiveType : <a class="code" href="namespace_diligent.html#a70b89ad84f51b1f35d7156dca7596361">Int8</a></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; Point = 1,</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; Line = 2,</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; Triangle = 3,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; LineAdj = 4,</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; TriangleAdj = 5</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; };</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">enum class</span> StreamType : <a class="code" href="namespace_diligent.html#a70b89ad84f51b1f35d7156dca7596361">Int8</a></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; Point = 1,</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; Line = 2,</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; Triangle = 3</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; };</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; PrimitiveType PrimType;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; StreamType Stream;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; GSAttributes() : </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; PrimType(PrimitiveType::<a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>),</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; Stream(StreamType::<a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {}</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }GSAttribs;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">struct </span>HSAttributes</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">enum class</span> InOutPatchType : <a class="code" href="namespace_diligent.html#a70b89ad84f51b1f35d7156dca7596361">Int8</a></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a> = 0,</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; InputPatch = 1,</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; OutputPatch = 2</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }PatchType;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; HSAttributes() : </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; PatchType(InOutPatchType::<a class="code" href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Undefined</a>)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {}</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }HSAttribs;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> ArraySize;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Type;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Name;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> Semantic;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; std::vector&lt;ShaderParameterInfo&gt; members;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; ShaderParameterInfo() :</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; storageQualifier(StorageQualifier::Unknown)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {}</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; };</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordtype">void</span> ParseShaderParameter(TokenListType::iterator &amp;Token, ShaderParameterInfo &amp;ParamInfo);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordtype">void</span> ProcessFunctionParameters( TokenListType::iterator &amp;Token, std::vector&lt;ShaderParameterInfo&gt;&amp; Params, <span class="keywordtype">bool</span> &amp;bIsVoid );</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> AddFlatQualifier(<span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a>&amp; Type);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordtype">void</span> ProcessFragmentShaderArguments( std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;GlobalVariables,</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; std::stringstream &amp;ReturnHandlerSS,</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Prologue );</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> BuildParameterName(<span class="keyword">const</span> std::vector&lt;const ShaderParameterInfo*&gt;&amp; MemberStack, Char Separator, <span class="keyword">const</span> Char* Prefix = <span class="stringliteral">&quot;&quot;</span>, <span class="keyword">const</span> Char *SubstituteInstName = <span class="stringliteral">&quot;&quot;</span>, <span class="keyword">const</span> Char *Index = <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> THandler&gt;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordtype">void</span> ProcessScope(TokenListType::iterator &amp;Token, TokenListType::iterator ScopeEnd, TokenType OpenParenType, TokenType ClosingParenType, THandler Handler);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> TArgHandler&gt;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordtype">void</span> ProcessShaderArgument( <span class="keyword">const</span> ShaderParameterInfo &amp;Param,</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordtype">int</span> ShaderInd,</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordtype">int</span> IsOutVar,</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; std::stringstream &amp;PrologueSS,</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; TArgHandler ArgHandler);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordtype">void</span> ProcessVertexShaderArguments( std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Globals,</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; std::stringstream &amp;ReturnHandlerSS,</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Prologue );</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">void</span> ProcessGeometryShaderArguments( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Globals,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Prologue );</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">void</span> ProcessHullShaderConstantFunction( <span class="keyword">const</span> Char *FuncName, <span class="keywordtype">bool</span> &amp;bTakesInputPatch );</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordtype">void</span> ProcessShaderAttributes( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; std::unordered_map&lt;HashMapStringKey, String&gt;&amp; Attributes);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordtype">void</span> ProcessHullShaderArguments( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Globals,</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; std::stringstream &amp;ReturnHandlerSS,</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Prologue );</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">void</span> ProcessDomainShaderArguments( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Globals,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; std::stringstream &amp;ReturnHandlerSS,</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Prologue );</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordtype">void</span> ProcessComputeShaderArguments( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Globals,</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;Prologue );</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordtype">void</span> FindClosingBracket( TokenListType::iterator &amp;Token, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd, TokenType OpenBracketType, TokenType ClosingBracketType );</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordtype">void</span> ProcessReturnStatements( TokenListType::iterator &amp;Token, <span class="keywordtype">bool</span> IsVoid, <span class="keyword">const</span> Char *EntryPoint, <span class="keyword">const</span> Char *MacroName );</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordtype">void</span> ProcessGSOutStreamOperations( TokenListType::iterator &amp;Token, <span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> &amp;OutStreamName, <span class="keyword">const</span> <span class="keywordtype">char</span> *EntryPoint );</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> BuildGLSLSource();</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// Tokenized source code</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; TokenListType m_Tokens;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// List of tokens defining structs</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; std::unordered_map&lt;HashMapStringKey, TokenListType::iterator&gt; m_StructDefinitions;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// Stack of parsed objects, for every scope level.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// There are currently only two levels: </span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// level 0 - global scope, contains all global objects</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">// (textures, buffers)</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// level 1 - function body, contains all objects</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">// defined as function arguments</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; std::vector&lt; ObjectsTypeHashType &gt; m_Objects;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> m_bPreserveTokens;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">const</span> HLSL2GLSLConverterImpl &amp;m_Converter;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="comment">// This member is only used to compare input name</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="comment">// when subsequent shaders are converted from already tokenized source</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keyword">const</span> <a class="code" href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">String</a> m_InputFileName;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; };</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="comment">// HLSL keyword-&gt;token info hash map</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// Example: &quot;Texture2D&quot; -&gt; TokenInfo(TokenType::Texture2D, &quot;Texture2D&quot;)</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; std::unordered_map&lt;HashMapStringKey, TokenInfo&gt; m_HLSLKeywords;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// Set of all GLSL image types (image1D, uimage1D, iimage1D, image2D, ... )</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; std::unordered_set&lt;HashMapStringKey&gt; m_ImageTypes;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// Set of all HLSL atomic operations (InterlockedAdd, InterlockedOr, ...)</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; std::unordered_set&lt;HashMapStringKey&gt; m_AtomicOperations;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// HLSL semantic -&gt; glsl variable, for every shader stage and input/output type (in == 0, out == 1)</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// Example: [vertex, output] SV_Position -&gt; gl_Position</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// [fragment, input] SV_Position -&gt; gl_FragCoord</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> InVar = 0;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> OutVar = 1;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; std::unordered_map&lt;HashMapStringKey, String&gt; m_HLSLSemanticToGLSLVar[6][2];</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; };</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;}</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="comment">// Intro</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;<span class="comment">// DirectX and OpenGL use different shading languages. While mostly being very similar,</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;<span class="comment">// the language syntax differs substantially sometimes. Having two versions of each </span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="comment">// shader is clearly not an option for real projects. Maintaining intermediate representation</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;<span class="comment">// that translates to both languages is one solution, but it might complicate shader development</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="comment">// and debugging.</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="comment">// HLSL converter allows HLSL shader files to be converted into GLSL source.</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="comment">// The entire shader development can thus be performed using HLSL tools. Since no intermediate</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="comment">// representation is used, shader files can be directly compiled by the HLSL compiler.</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="comment">// All tools available for HLSL shader devlopment, analysis and optimization can be </span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;<span class="comment">// used. The source can then be transaprently converted to GLSL.</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="comment">// Using HLSL Converter</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="comment">// * The following rules are used to convert HLSL texture declaration into GLSL sampler:</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment">// - HLSL texture dimension defines GLSL sampler dimension:</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="comment">// - Texture2D -&gt; sampler2D</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="comment">// - TextureCube -&gt; samplerCube</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="comment">// - HLSL texture component type defines GLSL sampler type. If no type is specified, float4 is assumed:</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="comment">// - Texture2D&lt;float&gt; -&gt; sampler2D</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="comment">// - Texture3D&lt;uint4&gt; -&gt; usampler3D</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="comment">// - Texture2DArray&lt;int2&gt; -&gt; isampler2DArray</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="comment">// - Texture2D -&gt; sampler2D</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="comment">// - To distinguish if sampler should be shadow or not, the converter tries to find &lt;Texture Name&gt;_sampler</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="comment">// among samplers (global variables and function arguments). If the sampler type is comparison, </span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment">// the texture is converted to shadow sampler. If sampler state is either not comparison or not found, </span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment">// regular sampler is used.</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment">// Examples:</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="comment">// - Texture2D g_ShadowMap; -&gt; sampler2DShadow g_ShadowMap;</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="comment">// SamplerComparisonState g_ShadowMap_sampler;</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="comment">// - Texture2D g_Tex2D; -&gt; sampler2D g_Tex2D;</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="comment">// SamplerState g_Tex2D_sampler;</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="comment">// Texture3D g_Tex3D; -&gt; sampler3D g_Tex3D;</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="comment">// * GLSL requires format to be specified for all images allowing writes. HLSL converter allows GLSL image </span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="comment">// format specification inside the special comment block:</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="comment">// Example:</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="comment">// RWTexture2D&lt;float /* format=r32f */ &gt; Tex2D;</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="comment">// * In OpenGL tessellation, domain, partitioning, and topology are properties of tessellation evaluation </span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="comment">// shader rather than tessellation control shader. The following specially formatted comment should be placed</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="comment">// on top of domain shader declararion to specify the attributes</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="comment">// /* partitioning = {integer|fractional_even|fractional_odd}, outputtopology = {triangle_cw|triangle_ccw} */</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="comment">// Example:</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="comment">// /* partitioning = fractional_even, outputtopology = triangle_cw */</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="comment">// Requirements:</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="comment">// * GLSL allows samplers to be declared as global variables or function arguments only.</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="comment">// It does not allow local variables of sampler type.</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment">// Important notes/known issues:</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment">// * GLSL compiler does not handle float3 structure members correctly. It is </span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment">// strongly suggested not to use this type in structure definitions</span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment">// * At least NVidia GLSL compiler does not apply layout(row_major) to</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment">// structure members. By default, all matrices in both HLSL and GLSL</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment">// are column major</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment">// * GLSL compiler does not properly handle structs passed as function arguments!!!!</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment">// struct MyStruct</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment">// {</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment">// matrix Matr;</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment">// void Func(in MyStruct S)</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment">// {</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="comment">// mul(f4PosWS, S.Matr); &lt;--- This will not work!!!</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="comment">// DO NOT pass structs to functions, use only built-in types!!!</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="comment">// * GLSL does not support most of the implicit type conversions. The following are some</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="comment">// examples of required modifications to HLSL code:</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="comment">// ** float4 vec = 0; -&gt; float4 vec = float4(0.0, 0.0, 0.0, 0.0);</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="comment">// ** float x = 0; -&gt; float x = 0.0;</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="comment">// ** uint x = 0; -&gt; uint x = 0u;</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="comment">// ** GLES is immensely strict about type conversions. For instance,</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="comment">// this code will produce compiler error: float4(0, 0, 0, 0)</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;<span class="comment">// It must be written as float4(0.0, 0.0, 0.0, 0.0)</span></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="comment">// * GLSL does not support relational and boolean operations on vector types:</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;<span class="comment">// ** float2 p = float2(1.0,2.0), q = float2(3.0,4.0);</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;<span class="comment">// bool2 b = x &lt; y; -&gt; Error</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="comment">// all(p&lt;q) -&gt; Error</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="comment">// ** To facilitate relational and boolean operations on vector types, the following</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="comment">// functions are predefined:</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="comment">// - Less</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="comment">// - LessEqual</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;<span class="comment">// - Greater</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;<span class="comment">// - GreaterEqual</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="comment">// - Equal</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;<span class="comment">// - NotEqual</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="comment">// - Not</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="comment">// - And</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="comment">// - Or</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="comment">// - BoolToFloat</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="comment">// ** Examples:</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="comment">// bool2 b = x &lt; y; -&gt; bool2 b = Less(x, y);</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;<span class="comment">// all(p&gt;=q) -&gt; all( GreaterEqual(p,q) )</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;<span class="comment">// * When accessing elements of an HLSL matrix, the first index is always row:</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="comment">// mat[row][column]</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="comment">// In GLSL, the first index is always column:</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="comment">// mat[column][row]</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="comment">// MATRIX_ELEMENT(mat, row, col) macros is provided to facilitate matrix element retrieval</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment">// * The following functions do not have counterparts in GLSL and should be avoided:</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;<span class="comment">// ** Texture2DArray.SampleCmpLevelZero()</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment">// ** TextureCube.SampleCmpLevelZero()</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="comment">// ** TextureCubeArray.SampleCmpLevelZero()</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="comment">// * Input variables to a shader stage must be listed in exact same order as outputs from</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="comment">// the previous stage. Function return value counts as the first output argument.</span></div><div class="ttc" id="namespace_diligent_html_a70b89ad84f51b1f35d7156dca7596361"><div class="ttname"><a href="namespace_diligent.html#a70b89ad84f51b1f35d7156dca7596361">Diligent::Int8</a></div><div class="ttdeci">int8_t Int8</div><div class="ttdoc">8-bit signed integer </div><div class="ttdef"><b>Definition:</b> BasicTypes.h:36</div></div>
72 <div class="ttc" id="namespace_diligent_html_a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360"><div class="ttname"><a href="namespace_diligent.html#a905d9d44892311167e9b28962bbf7e18aec0fc0100c4fc1ce4eea230c3dc10360">Diligent::DeviceType::Undefined</a></div><div class="ttdoc">Undefined device. </div></div>
73 <div class="ttc" id="namespace_diligent_html_a8294eb0a10dafa18441e78a80d231fd2"><div class="ttname"><a href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">Diligent::SHADER_TYPE</a></div><div class="ttdeci">SHADER_TYPE</div><div class="ttdoc">Describes the shader type. </div><div class="ttdef"><b>Definition:</b> Shader.h:46</div></div>
74 <div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Graphics engine namespace. </div><div class="ttdef"><b>Definition:</b> AdaptiveFixedBlockAllocator.h:30</div></div>
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;list&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;unordered_set&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;HLSL2GLSLConverter.h&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;ObjectBase.h&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;HLSLKeywords.h&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;Shader.h&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;HashUtils.h&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;HLSLKeywords.h&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;{</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">struct </span>FunctionStubHashKey</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; FunctionStubHashKey(<span class="keyword">const</span> String&amp; _Obj, <span class="keyword">const</span> String&amp; _Func, Uint32 _NumArgs) : </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; Object(_Obj),</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; Function(_Func),</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; NumArguments(_NumArgs)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; FunctionStubHashKey(<span class="keyword">const</span> Char* _Obj, <span class="keyword">const</span> Char* _Func, Uint32 _NumArgs) : </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; Object(_Obj),</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; Function(_Func),</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; NumArguments(_NumArgs)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; FunctionStubHashKey( FunctionStubHashKey &amp;&amp; Key ) : </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; Object(<a class="code" href="namespacestd.html">std</a>::move(Key.Object)),</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; Function(<a class="code" href="namespacestd.html">std</a>::move(Key.Function)),</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; NumArguments(Key.NumArguments)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> FunctionStubHashKey&amp; rhs)<span class="keyword">const</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> Object == rhs.Object &amp;&amp;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; Function == rhs.Function &amp;&amp;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; NumArguments == rhs.NumArguments;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; HashMapStringKey Object;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; HashMapStringKey Function;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; Uint32 NumArguments;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; };</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacestd.html">std</a></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">template</span>&lt;&gt;<span class="keyword">struct </span>hash &lt; <a class="code" href="namespace_diligent.html">Diligent</a>::FunctionStubHashKey &gt;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">size_t</span> operator()( <span class="keyword">const</span> Diligent::FunctionStubHashKey &amp;Key )<span class="keyword"> const</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> ComputeHash(Key.Object, Key.Function, Key.NumArguments);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; };</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;}</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">class </span>HLSL2GLSLConverterImpl</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> HLSL2GLSLConverterImpl&amp; GetInstance();</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">struct </span>ConversionAttribs</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; IShaderSourceInputStreamFactory *pSourceStreamFactory = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; IHLSL2GLSLConversionStream **ppConversionStream = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">const</span> Char* HLSLSource = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">size_t</span> NumSymbols = 0;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">const</span> Char* EntryPoint = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType = <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2a6799c4292a2b6e6087a4f0ab3e6efc5a">SHADER_TYPE_UNKNOWN</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">bool</span> IncludeDefinitions = <span class="keyword">false</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> Char* InputFileName = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; };</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; String Convert(ConversionAttribs &amp;Attribs)<span class="keyword">const</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">void</span> CreateStream(<span class="keyword">const</span> Char* InputFileName,</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; IShaderSourceInputStreamFactory *pSourceStreamFactory, </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> Char* HLSLSource, </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordtype">size_t</span> NumSymbols, </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; IHLSL2GLSLConversionStream **ppStream)<span class="keyword">const</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; HLSL2GLSLConverterImpl();</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">struct </span>HLSLObjectInfo</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; String GLSLType; <span class="comment">// sampler2D, sampler2DShadow, image2D, etc.</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; Uint32 NumComponents; <span class="comment">// 0,1,2,3 or 4</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="comment">// Texture2D&lt;float4&gt; -&gt; 4</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="comment">// Texture2D&lt;uint&gt; -&gt; 1</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="comment">// Texture2D -&gt; 0</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; HLSLObjectInfo( <span class="keyword">const</span> String&amp; Type, Uint32 NComp ) :</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; GLSLType( Type ),</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; NumComponents( NComp )</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {}</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; };</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">struct </span>ObjectsTypeHashType</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// This is only required to make the code compile on paranoid MSVC 2017 compiler (19.10.25017):</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// https://stackoverflow.com/questions/47604029/move-constructors-of-stl-containers-in-msvc-2017-are-not-marked-as-noexcept</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; ObjectsTypeHashType()noexcept {}</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; ObjectsTypeHashType(ObjectsTypeHashType&amp;&amp; rhs)noexcept : </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; m(std::move(rhs.m))</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {}</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; ObjectsTypeHashType&amp; operator = (ObjectsTypeHashType&amp;&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; ObjectsTypeHashType(ObjectsTypeHashType&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; ObjectsTypeHashType&amp; operator = (ObjectsTypeHashType&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; std::unordered_map&lt;HashMapStringKey, HLSLObjectInfo&gt; m;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">struct </span>GLSLStubInfo</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; String Name;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; String Swizzle;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; GLSLStubInfo( <span class="keyword">const</span> String&amp; _Name, <span class="keyword">const</span> <span class="keywordtype">char</span>* _Swizzle ) :</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; Name( _Name ),</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; Swizzle( _Swizzle )</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {}</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; };</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">// Hash map that maps GLSL object, method and number of arguments</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">// passed to the original function, to the GLSL stub function</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">// Example: {&quot;sampler2D&quot;, &quot;Sample&quot;, 2} -&gt; {&quot;Sample_2&quot;, &quot;_SWIZZLE&quot;}</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; std::unordered_map&lt;FunctionStubHashKey, GLSLStubInfo&gt; m_GLSLStubs;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keyword">enum class</span> TokenType</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; Undefined,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="preprocessor">#define ADD_KEYWORD(keyword)kw_##keyword,</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; ITERATE_KEYWORDS(ADD_KEYWORD)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="preprocessor">#undef ADD_KEYWORD</span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; PreprocessorDirective,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; Operator,</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; OpenBrace,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; ClosingBrace,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; OpenBracket,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; ClosingBracket,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; OpenStaple,</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; ClosingStaple,</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; OpenAngleBracket,</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; ClosingAngleBracket,</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; Identifier,</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; NumericConstant,</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; SrtingConstant,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; Semicolon,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; Comma,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; TextBlock,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; Assignment,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; ComparisonOp,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; BooleanOp,</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; BitwiseOp,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; IncDecOp,</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; MathOp</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; };</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">struct </span>TokenInfo</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; TokenType Type;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; String Literal;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; String Delimiter;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordtype">bool</span> IsBuiltInType()<span class="keyword">const</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; static_assert( static_cast&lt;int&gt;(TokenType::kw_bool) == 1 &amp;&amp; static_cast&lt;int&gt;(TokenType::kw_void) == 191, </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="stringliteral">&quot;If you updated built-in types, double check that all types are defined between bool and void&quot;</span>);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> Type &gt;= TokenType::kw_bool &amp;&amp; Type &lt;= TokenType::kw_void;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">bool</span> IsFlowControl()<span class="keyword">const</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; static_assert( static_cast&lt;int&gt;(TokenType::kw_break) == 192 &amp;&amp; static_cast&lt;int&gt;(TokenType::kw_while) == 202, </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="stringliteral">&quot;If you updated control flow keywords, double check that all keywords are defined between break and while&quot;</span>);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span> Type &gt;= TokenType::kw_break &amp;&amp; Type &lt;= TokenType::kw_while;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; TokenInfo( TokenType _Type = TokenType :: Undefined,</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keyword">const</span> Char* _Literal = <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">const</span> Char* _Delimiter = <span class="stringliteral">&quot;&quot;</span> ) : </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; Type( _Type ),</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; Literal( _Literal ),</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; Delimiter(_Delimiter)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {}</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; };</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">typedef</span> std::list&lt;TokenInfo&gt; TokenListType;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keyword">class </span>ConversionStream : <span class="keyword">public</span> ObjectBase&lt;IHLSL2GLSLConversionStream&gt;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keyword">typedef</span> ObjectBase&lt;IHLSL2GLSLConversionStream&gt; TBase;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; ConversionStream(IReferenceCounters *pRefCounters, </div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">const</span> HLSL2GLSLConverterImpl &amp;Converter, </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* InputFileName,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; IShaderSourceInputStreamFactory* pInputStreamFactory, </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">const</span> Char* HLSLSource, </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">size_t</span> NumSymbols,</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordtype">bool</span> bPreserveTokens);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; String Convert(<span class="keyword">const</span> Char* EntryPoint, <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType, <span class="keywordtype">bool</span> IncludeDefintions);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Convert(<span class="keyword">const</span> Char* EntryPoint, <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType, <span class="keywordtype">bool</span> IncludeDefintions, IDataBlob **ppGLSLSource)<span class="keyword">override</span>;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; IMPLEMENT_QUERY_INTERFACE_IN_PLACE( IID_HLSL2GLSLConversionStream, TBase )</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keyword">const</span> String&amp; GetInputFileName()<span class="keyword">const</span>{ <span class="keywordflow">return</span> m_InputFileName; }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordtype">void</span> InsertIncludes(String &amp;GLSLSource, IShaderSourceInputStreamFactory* pSourceStreamFactory);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordtype">void</span> Tokenize(<span class="keyword">const</span> String &amp;Source);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keyword">typedef</span> std::unordered_map&lt;String, bool&gt; SamplerHashType;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">const</span> HLSLObjectInfo *FindHLSLObject(<span class="keyword">const</span> String &amp;Name );</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">void</span> ProcessShaderDeclaration(TokenListType::iterator EntryPointToken, <a class="code" href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">SHADER_TYPE</a> ShaderType);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">void</span> ProcessObjectMethods(<span class="keyword">const</span> TokenListType::iterator &amp;ScopeStart, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordtype">void</span> ProcessRWTextures(<span class="keyword">const</span> TokenListType::iterator &amp;ScopeStart, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">void</span> ProcessAtomics(<span class="keyword">const</span> TokenListType::iterator &amp;ScopeStart, </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">void</span> RegisterStruct(TokenListType::iterator &amp;Token);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordtype">void</span> ProcessConstantBuffer(TokenListType::iterator &amp;Token);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">void</span> ProcessStructuredBuffer(TokenListType::iterator &amp;Token);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordtype">void</span> ParseSamplers(TokenListType::iterator &amp;ScopeStart, SamplerHashType &amp;SamplersHash);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">void</span> ProcessTextureDeclaration(TokenListType::iterator &amp;Token, <span class="keyword">const</span> std::vector&lt;SamplerHashType&gt; &amp;SamplersHash, ObjectsTypeHashType &amp;Objects);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordtype">bool</span> ProcessObjectMethod(TokenListType::iterator &amp;Token, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeStart, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; Uint32 CountFunctionArguments(TokenListType::iterator &amp;Token, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordtype">bool</span> ProcessRWTextureStore(TokenListType::iterator &amp;Token, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">void</span> RemoveFlowControlAttribute(TokenListType::iterator &amp;Token);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">void</span> RemoveSemantics();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">void</span> RemoveSpecialShaderAttributes();</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordtype">void</span> RemoveSemanticsFromBlock(TokenListType::iterator &amp;Token, TokenType OpenBracketType, TokenType ClosingBracketType);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// IteratorType may be String::iterator or String::const_iterator.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// While iterator is convertible to const_iterator, </span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// iterator&amp; cannot be converted to const_iterator&amp; (Microsoft compiler allows</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// such conversion, while gcc does not)</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> IteratorType&gt;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; String PrintTokenContext(IteratorType &amp;TargetToken, Int32 NumAdjacentLines);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">struct </span>ShaderParameterInfo</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="keyword">enum class</span> StorageQualifier : Int8</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; Unknown = 0,</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; In = 1,</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; Out = 2,</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; InOut = 3,</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; Ret = 4</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }storageQualifier;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">struct </span>GSAttributes</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keyword">enum class</span> PrimitiveType : Int8</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; Undefined = 0,</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; Point = 1,</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; Line = 2,</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; Triangle = 3,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; LineAdj = 4,</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; TriangleAdj = 5</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; };</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">enum class</span> StreamType : Int8</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; Undefined = 0,</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; Point = 1,</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; Line = 2,</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; Triangle = 3</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; };</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; PrimitiveType PrimType;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; StreamType Stream;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; GSAttributes() : </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; PrimType(PrimitiveType::Undefined),</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; Stream(StreamType::Undefined)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {}</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }GSAttribs;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">struct </span>HSAttributes</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keyword">enum class</span> InOutPatchType : Int8</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; Undefined = 0,</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; InputPatch = 1,</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; OutputPatch = 2</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; }PatchType;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; HSAttributes() : </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; PatchType(InOutPatchType::Undefined)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; {}</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }HSAttribs;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; String ArraySize;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; String Type;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; String Name;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; String Semantic;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; std::vector&lt;ShaderParameterInfo&gt; members;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; ShaderParameterInfo() :</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; storageQualifier(StorageQualifier::Unknown)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {}</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; };</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordtype">void</span> ParseShaderParameter(TokenListType::iterator &amp;Token, ShaderParameterInfo &amp;ParamInfo);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keywordtype">void</span> ProcessFunctionParameters( TokenListType::iterator &amp;Token, std::vector&lt;ShaderParameterInfo&gt;&amp; Params, <span class="keywordtype">bool</span> &amp;bIsVoid );</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; String AddFlatQualifier(<span class="keyword">const</span> String&amp; Type);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordtype">void</span> ProcessFragmentShaderArguments( std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; String &amp;GlobalVariables,</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; std::stringstream &amp;ReturnHandlerSS,</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; String &amp;Prologue );</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; String BuildParameterName(<span class="keyword">const</span> std::vector&lt;const ShaderParameterInfo*&gt;&amp; MemberStack, Char Separator, <span class="keyword">const</span> Char* Prefix = <span class="stringliteral">&quot;&quot;</span>, <span class="keyword">const</span> Char *SubstituteInstName = <span class="stringliteral">&quot;&quot;</span>, <span class="keyword">const</span> Char *Index = <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> THandler&gt;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordtype">void</span> ProcessScope(TokenListType::iterator &amp;Token, TokenListType::iterator ScopeEnd, TokenType OpenParenType, TokenType ClosingParenType, THandler Handler);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> TArgHandler&gt;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordtype">void</span> ProcessShaderArgument( <span class="keyword">const</span> ShaderParameterInfo &amp;Param,</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordtype">int</span> ShaderInd,</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keywordtype">int</span> IsOutVar,</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; std::stringstream &amp;PrologueSS,</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; TArgHandler ArgHandler);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordtype">void</span> ProcessVertexShaderArguments( std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; String &amp;Globals,</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; std::stringstream &amp;ReturnHandlerSS,</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; String &amp;Prologue );</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">void</span> ProcessGeometryShaderArguments( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; String &amp;Globals,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; String &amp;Prologue );</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">void</span> ProcessHullShaderConstantFunction( <span class="keyword">const</span> Char *FuncName, <span class="keywordtype">bool</span> &amp;bTakesInputPatch );</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordtype">void</span> ProcessShaderAttributes( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; std::unordered_map&lt;HashMapStringKey, String&gt;&amp; Attributes);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordtype">void</span> ProcessHullShaderArguments( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; String &amp;Globals,</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; std::stringstream &amp;ReturnHandlerSS,</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; String &amp;Prologue );</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">void</span> ProcessDomainShaderArguments( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; String &amp;Globals,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; std::stringstream &amp;ReturnHandlerSS,</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; String &amp;Prologue );</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordtype">void</span> ProcessComputeShaderArguments( TokenListType::iterator &amp;TypeToken,</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; std::vector&lt;ShaderParameterInfo&gt;&amp; Params,</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; String &amp;Globals,</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; String &amp;Prologue );</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordtype">void</span> FindClosingBracket( TokenListType::iterator &amp;Token, <span class="keyword">const</span> TokenListType::iterator &amp;ScopeEnd, TokenType OpenBracketType, TokenType ClosingBracketType );</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordtype">void</span> ProcessReturnStatements( TokenListType::iterator &amp;Token, <span class="keywordtype">bool</span> IsVoid, <span class="keyword">const</span> Char *EntryPoint, <span class="keyword">const</span> Char *MacroName );</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordtype">void</span> ProcessGSOutStreamOperations( TokenListType::iterator &amp;Token, <span class="keyword">const</span> String &amp;OutStreamName, <span class="keyword">const</span> <span class="keywordtype">char</span> *EntryPoint );</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; String BuildGLSLSource();</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="comment">// Tokenized source code</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; TokenListType m_Tokens;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="comment">// List of tokens defining structs</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; std::unordered_map&lt;HashMapStringKey, TokenListType::iterator&gt; m_StructDefinitions;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// Stack of parsed objects, for every scope level.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// There are currently only two levels: </span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="comment">// level 0 - global scope, contains all global objects</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">// (textures, buffers)</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// level 1 - function body, contains all objects</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">// defined as function arguments</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; std::vector&lt; ObjectsTypeHashType &gt; m_Objects;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> m_bPreserveTokens;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">const</span> HLSL2GLSLConverterImpl &amp;m_Converter;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="comment">// This member is only used to compare input name</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="comment">// when subsequent shaders are converted from already tokenized source</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keyword">const</span> String m_InputFileName;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; };</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="comment">// HLSL keyword-&gt;token info hash map</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// Example: &quot;Texture2D&quot; -&gt; TokenInfo(TokenType::Texture2D, &quot;Texture2D&quot;)</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; std::unordered_map&lt;HashMapStringKey, TokenInfo&gt; m_HLSLKeywords;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">// Set of all GLSL image types (image1D, uimage1D, iimage1D, image2D, ... )</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; std::unordered_set&lt;HashMapStringKey&gt; m_ImageTypes;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="comment">// Set of all HLSL atomic operations (InterlockedAdd, InterlockedOr, ...)</span></div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; std::unordered_set&lt;HashMapStringKey&gt; m_AtomicOperations;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="comment">// HLSL semantic -&gt; glsl variable, for every shader stage and input/output type (in == 0, out == 1)</span></div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// Example: [vertex, output] SV_Position -&gt; gl_Position</span></div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// [fragment, input] SV_Position -&gt; gl_FragCoord</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> InVar = 0;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> OutVar = 1;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; std::unordered_map&lt;HashMapStringKey, String&gt; m_HLSLSemanticToGLSLVar[6][2];</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; };</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;}</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="comment">// Intro</span></div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160;<span class="comment">// DirectX and OpenGL use different shading languages. While mostly being very similar,</span></div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;<span class="comment">// the language syntax differs substantially sometimes. Having two versions of each </span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="comment">// shader is clearly not an option for real projects. Maintaining intermediate representation</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160;<span class="comment">// that translates to both languages is one solution, but it might complicate shader development</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;<span class="comment">// and debugging.</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;<span class="comment">// HLSL converter allows HLSL shader files to be converted into GLSL source.</span></div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="comment">// The entire shader development can thus be performed using HLSL tools. Since no intermediate</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="comment">// representation is used, shader files can be directly compiled by the HLSL compiler.</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<span class="comment">// All tools available for HLSL shader devlopment, analysis and optimization can be </span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;<span class="comment">// used. The source can then be transaprently converted to GLSL.</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;<span class="comment">// Using HLSL Converter</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="comment">// * The following rules are used to convert HLSL texture declaration into GLSL sampler:</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="comment">// - HLSL texture dimension defines GLSL sampler dimension:</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="comment">// - Texture2D -&gt; sampler2D</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;<span class="comment">// - TextureCube -&gt; samplerCube</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="comment">// - HLSL texture component type defines GLSL sampler type. If no type is specified, float4 is assumed:</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="comment">// - Texture2D&lt;float&gt; -&gt; sampler2D</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="comment">// - Texture3D&lt;uint4&gt; -&gt; usampler3D</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="comment">// - Texture2DArray&lt;int2&gt; -&gt; isampler2DArray</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;<span class="comment">// - Texture2D -&gt; sampler2D</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="comment">// - To distinguish if sampler should be shadow or not, the converter tries to find &lt;Texture Name&gt;_sampler</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="comment">// among samplers (global variables and function arguments). If the sampler type is comparison, </span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;<span class="comment">// the texture is converted to shadow sampler. If sampler state is either not comparison or not found, </span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="comment">// regular sampler is used.</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="comment">// Examples:</span></div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;<span class="comment">// - Texture2D g_ShadowMap; -&gt; sampler2DShadow g_ShadowMap;</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;<span class="comment">// SamplerComparisonState g_ShadowMap_sampler;</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="comment">// - Texture2D g_Tex2D; -&gt; sampler2D g_Tex2D;</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="comment">// SamplerState g_Tex2D_sampler;</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160;<span class="comment">// Texture3D g_Tex3D; -&gt; sampler3D g_Tex3D;</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;<span class="comment">// </span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="comment">// * GLSL requires format to be specified for all images allowing writes. HLSL converter allows GLSL image </span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;<span class="comment">// format specification inside the special comment block:</span></div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="comment">// Example:</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;<span class="comment">// RWTexture2D&lt;float /* format=r32f */ &gt; Tex2D;</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="comment">// * In OpenGL tessellation, domain, partitioning, and topology are properties of tessellation evaluation </span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;<span class="comment">// shader rather than tessellation control shader. The following specially formatted comment should be placed</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;<span class="comment">// on top of domain shader declararion to specify the attributes</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="comment">// /* partitioning = {integer|fractional_even|fractional_odd}, outputtopology = {triangle_cw|triangle_ccw} */</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160;<span class="comment">// Example:</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;<span class="comment">// /* partitioning = fractional_even, outputtopology = triangle_cw */</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;<span class="comment">// Requirements:</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;<span class="comment">// * GLSL allows samplers to be declared as global variables or function arguments only.</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;<span class="comment">// It does not allow local variables of sampler type.</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment">// Important notes/known issues:</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment">// * GLSL compiler does not handle float3 structure members correctly. It is </span></div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment">// strongly suggested not to use this type in structure definitions</span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment">// * At least NVidia GLSL compiler does not apply layout(row_major) to</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment">// structure members. By default, all matrices in both HLSL and GLSL</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment">// are column major</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment">// * GLSL compiler does not properly handle structs passed as function arguments!!!!</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment">// struct MyStruct</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment">// {</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment">// matrix Matr;</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="comment">// void Func(in MyStruct S)</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="comment">// {</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;<span class="comment">// ...</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;<span class="comment">// mul(f4PosWS, S.Matr); &lt;--- This will not work!!!</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;<span class="comment">// DO NOT pass structs to functions, use only built-in types!!!</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;<span class="comment">// * GLSL does not support most of the implicit type conversions. The following are some</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;<span class="comment">// examples of required modifications to HLSL code:</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;<span class="comment">// ** float4 vec = 0; -&gt; float4 vec = float4(0.0, 0.0, 0.0, 0.0);</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;<span class="comment">// ** float x = 0; -&gt; float x = 0.0;</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;<span class="comment">// ** uint x = 0; -&gt; uint x = 0u;</span></div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;<span class="comment">// ** GLES is immensely strict about type conversions. For instance,</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160;<span class="comment">// this code will produce compiler error: float4(0, 0, 0, 0)</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;<span class="comment">// It must be written as float4(0.0, 0.0, 0.0, 0.0)</span></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160;<span class="comment">// * GLSL does not support relational and boolean operations on vector types:</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;<span class="comment">// ** float2 p = float2(1.0,2.0), q = float2(3.0,4.0);</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;<span class="comment">// bool2 b = x &lt; y; -&gt; Error</span></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="comment">// all(p&lt;q) -&gt; Error</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;<span class="comment">// ** To facilitate relational and boolean operations on vector types, the following</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;<span class="comment">// functions are predefined:</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="comment">// - Less</span></div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;<span class="comment">// - LessEqual</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;<span class="comment">// - Greater</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;<span class="comment">// - GreaterEqual</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="comment">// - Equal</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160;<span class="comment">// - NotEqual</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160;<span class="comment">// - Not</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;<span class="comment">// - And</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;<span class="comment">// - Or</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="comment">// - BoolToFloat</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160;<span class="comment">// ** Examples:</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;<span class="comment">// bool2 b = x &lt; y; -&gt; bool2 b = Less(x, y);</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160;<span class="comment">// all(p&gt;=q) -&gt; all( GreaterEqual(p,q) )</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;<span class="comment">// * When accessing elements of an HLSL matrix, the first index is always row:</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160;<span class="comment">// mat[row][column]</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;<span class="comment">// In GLSL, the first index is always column:</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;<span class="comment">// mat[column][row]</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160;<span class="comment">// MATRIX_ELEMENT(mat, row, col) macros is provided to facilitate matrix element retrieval</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;<span class="comment">// * The following functions do not have counterparts in GLSL and should be avoided:</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160;<span class="comment">// ** Texture2DArray.SampleCmpLevelZero()</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="comment">// ** TextureCube.SampleCmpLevelZero()</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160;<span class="comment">// ** TextureCubeArray.SampleCmpLevelZero()</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="comment">// * Input variables to a shader stage must be listed in exact same order as outputs from</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;<span class="comment">// the previous stage. Function return value counts as the first output argument.</span></div><div class="ttc" id="namespace_diligent_html_a8294eb0a10dafa18441e78a80d231fd2"><div class="ttname"><a href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2">Diligent::SHADER_TYPE</a></div><div class="ttdeci">SHADER_TYPE</div><div class="ttdoc">Describes the shader type. </div><div class="ttdef"><b>Definition:</b> Shader.h:46</div></div>
72 <div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Namespace for the OpenGL implementation of the graphics engine. </div><div class="ttdef"><b>Definition:</b> BufferD3D11Impl.h:34</div></div>
7573 <div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdef"><b>Definition:</b> AdvancedMath.h:316</div></div>
76 <div class="ttc" id="namespace_diligent_html_a3d23c2ee2a78504778603d8ef49ae314"><div class="ttname"><a href="namespace_diligent.html#a3d23c2ee2a78504778603d8ef49ae314">Diligent::String</a></div><div class="ttdeci">std::basic_string&lt; Char &gt; String</div><div class="ttdoc">String variable. </div><div class="ttdef"><b>Definition:</b> BasicTypes.h:51</div></div>
7774 <div class="ttc" id="namespace_diligent_html_a8294eb0a10dafa18441e78a80d231fd2a6799c4292a2b6e6087a4f0ab3e6efc5a"><div class="ttname"><a href="namespace_diligent.html#a8294eb0a10dafa18441e78a80d231fd2a6799c4292a2b6e6087a4f0ab3e6efc5a">Diligent::SHADER_TYPE_UNKNOWN</a></div><div class="ttdoc">Unknown shader type. </div><div class="ttdef"><b>Definition:</b> Shader.h:48</div></div>
78 <div class="ttc" id="namespace_diligent_html_a9e27ac38f8dccaa4b4f8e967cd1e868e"><div class="ttname"><a href="namespace_diligent.html#a9e27ac38f8dccaa4b4f8e967cd1e868e">Diligent::Uint32</a></div><div class="ttdeci">uint32_t Uint32</div><div class="ttdoc">32-bit unsigned integer </div><div class="ttdef"><b>Definition:</b> BasicTypes.h:39</div></div>
79 <div class="ttc" id="namespace_diligent_html_a645a22e6073f4b6d0c46d95b9bc11fdb"><div class="ttname"><a href="namespace_diligent.html#a645a22e6073f4b6d0c46d95b9bc11fdb">Diligent::Int32</a></div><div class="ttdeci">int32_t Int32</div><div class="ttdoc">32-bit signed integer </div><div class="ttdef"><b>Definition:</b> BasicTypes.h:34</div></div>
8075 </div><!-- fragment --></div><!-- contents -->
8176 <!-- HTML footer for doxygen 1.8.10-->
8277 <!-- start footer part -->
8378 <!--
8479 <hr class="footer"/><address class="footer"><small>
85 Generated on Wed Jan 3 2018 20:02:31 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8681 <img class="footer" src="doxygen.png" alt="doxygen"/>
8782 </a> 1.8.14
8883 </small></address>
6868 <div class="title">HLSL2GLSLConverterObject.h</div> </div>
6969 </div><!--header-->
7070 <div class="contents">
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;ObjectBase.h&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;HLSL2GLSLConverter.h&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="class_diligent_1_1_h_l_s_l2_g_l_s_l_converter_object.html"> 33</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_diligent_1_1_h_l_s_l2_g_l_s_l_converter_object.html">HLSL2GLSLConverterObject</a> : <span class="keyword">public</span> <a class="code" href="class_diligent_1_1_object_base.html">ObjectBase</a>&lt;IHLSL2GLSLConverter&gt;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">typedef</span> <a class="code" href="class_diligent_1_1_object_base.html">ObjectBase&lt;IHLSL2GLSLConverter&gt;</a> <a class="code" href="class_diligent_1_1_object_base.html">TBase</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="class_diligent_1_1_h_l_s_l2_g_l_s_l_converter_object.html">HLSL2GLSLConverterObject</a>(<a class="code" href="class_diligent_1_1_i_reference_counters.html">IReferenceCounters</a> *pRefCounters) :</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="class_diligent_1_1_object_base.html">TBase</a>(pRefCounters)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {}</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; IMPLEMENT_QUERY_INTERFACE_IN_PLACE( IID_HLSL2GLSLConverter, <a class="code" href="class_diligent_1_1_object_base.html">TBase</a> )</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> CreateStream(<span class="keyword">const</span> Char* InputFileName,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="class_diligent_1_1_i_shader_source_input_stream_factory.html">IShaderSourceInputStreamFactory</a> *pSourceStreamFactory, </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> Char* HLSLSource, </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">size_t</span> NumSymbols, </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; IHLSL2GLSLConversionStream **ppStream)<span class="keyword">const override</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;};</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div><div class="ttc" id="class_diligent_1_1_i_shader_source_input_stream_factory_html"><div class="ttname"><a href="class_diligent_1_1_i_shader_source_input_stream_factory.html">Diligent::IShaderSourceInputStreamFactory</a></div><div class="ttdoc">Shader source stream factory interface. </div><div class="ttdef"><b>Definition:</b> Shader.h:190</div></div>
71 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/* Copyright 2015-2017 Egor Yusov</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * </span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * In no event and under no legal theory, whether in tort (including negligence), </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * contract, or otherwise, unless required by applicable law (such as deliberate </span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * and grossly negligent acts) or agreed to in writing, shall any Contributor be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * liable for any damages, including any direct, indirect, special, incidental, </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * or consequential damages of any character arising as a result of this License or </span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * out of the use or inability to use the software (including but not limited to damages </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * for loss of goodwill, work stoppage, computer failure or malfunction, or any and </span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * all other commercial damages or losses), even if such Contributor has been advised </span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * of the possibility of such damages.</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;ObjectBase.h&quot;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;HLSL2GLSLConverter.h&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespace_diligent.html">Diligent</a></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="class_diligent_1_1_h_l_s_l2_g_l_s_l_converter_object.html"> 33</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_diligent_1_1_h_l_s_l2_g_l_s_l_converter_object.html">HLSL2GLSLConverterObject</a> : <span class="keyword">public</span> <a class="code" href="class_diligent_1_1_object_base.html">ObjectBase</a>&lt;IHLSL2GLSLConverter&gt;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">typedef</span> <a class="code" href="class_diligent_1_1_object_base.html">ObjectBase&lt;IHLSL2GLSLConverter&gt;</a> <a class="code" href="class_diligent_1_1_object_base.html">TBase</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="class_diligent_1_1_h_l_s_l2_g_l_s_l_converter_object.html">HLSL2GLSLConverterObject</a>(IReferenceCounters *pRefCounters) :</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="class_diligent_1_1_object_base.html">TBase</a>(pRefCounters)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {}</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; IMPLEMENT_QUERY_INTERFACE_IN_PLACE( IID_HLSL2GLSLConverter, <a class="code" href="class_diligent_1_1_object_base.html">TBase</a> )</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> CreateStream(<span class="keyword">const</span> Char* InputFileName,</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="class_diligent_1_1_i_shader_source_input_stream_factory.html">IShaderSourceInputStreamFactory</a> *pSourceStreamFactory, </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> Char* HLSLSource, </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">size_t</span> NumSymbols, </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; IHLSL2GLSLConversionStream **ppStream)<span class="keyword">const override</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;};</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;}</div><div class="ttc" id="class_diligent_1_1_i_shader_source_input_stream_factory_html"><div class="ttname"><a href="class_diligent_1_1_i_shader_source_input_stream_factory.html">Diligent::IShaderSourceInputStreamFactory</a></div><div class="ttdoc">Shader source stream factory interface. </div><div class="ttdef"><b>Definition:</b> Shader.h:190</div></div>
7272 <div class="ttc" id="class_diligent_1_1_object_base_html"><div class="ttname"><a href="class_diligent_1_1_object_base.html">Diligent::ObjectBase</a></div><div class="ttdoc">Template class implementing base functionality for an object. </div><div class="ttdef"><b>Definition:</b> ObjectBase.h:62</div></div>
73 <div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Graphics engine namespace. </div><div class="ttdef"><b>Definition:</b> AdaptiveFixedBlockAllocator.h:30</div></div>
74 <div class="ttc" id="class_diligent_1_1_i_reference_counters_html"><div class="ttname"><a href="class_diligent_1_1_i_reference_counters.html">Diligent::IReferenceCounters</a></div><div class="ttdoc">Base interface for a reference counter object that stores the number of strong and weak references an...</div><div class="ttdef"><b>Definition:</b> ReferenceCounters.h:37</div></div>
73 <div class="ttc" id="namespace_diligent_html"><div class="ttname"><a href="namespace_diligent.html">Diligent</a></div><div class="ttdoc">Namespace for the OpenGL implementation of the graphics engine. </div><div class="ttdef"><b>Definition:</b> BufferD3D11Impl.h:34</div></div>
7574 <div class="ttc" id="class_diligent_1_1_h_l_s_l2_g_l_s_l_converter_object_html"><div class="ttname"><a href="class_diligent_1_1_h_l_s_l2_g_l_s_l_converter_object.html">Diligent::HLSL2GLSLConverterObject</a></div><div class="ttdoc">Implementation of the Diligent::IHLSL2GLSLConverter interface. </div><div class="ttdef"><b>Definition:</b> HLSL2GLSLConverterObject.h:33</div></div>
7675 </div><!-- fragment --></div><!-- contents -->
7776 <!-- HTML footer for doxygen 1.8.10-->
7877 <!-- start footer part -->
7978 <!--
8079 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:02:31 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8281 <img class="footer" src="doxygen.png" alt="doxygen"/>
8382 </a> 1.8.14
8483 </small></address>
7373 <!-- start footer part -->
7474 <!--
7575 <hr class="footer"/><address class="footer"><small>
76 Generated on Wed Jan 3 2018 20:02:31 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
76 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7777 <img class="footer" src="doxygen.png" alt="doxygen"/>
7878 </a> 1.8.14
7979 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
9393 <!-- start footer part -->
9494 <!--
9595 <hr class="footer"/><address class="footer"><small>
96 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
96 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9797 <img class="footer" src="doxygen.png" alt="doxygen"/>
9898 </a> 1.8.14
9999 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
8989 <!-- start footer part -->
9090 <!--
9191 <hr class="footer"/><address class="footer"><small>
92 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
92 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9393 <img class="footer" src="doxygen.png" alt="doxygen"/>
9494 </a> 1.8.14
9595 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
124124 <!-- start footer part -->
125125 <!--
126126 <hr class="footer"/><address class="footer"><small>
127 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
127 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
128128 <img class="footer" src="doxygen.png" alt="doxygen"/>
129129 </a> 1.8.14
130130 </small></address>
106106 <!-- start footer part -->
107107 <!--
108108 <hr class="footer"/><address class="footer"><small>
109 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
109 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
110110 <img class="footer" src="doxygen.png" alt="doxygen"/>
111111 </a> 1.8.14
112112 </small></address>
8686 <!-- start footer part -->
8787 <!--
8888 <hr class="footer"/><address class="footer"><small>
89 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
89 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9090 <img class="footer" src="doxygen.png" alt="doxygen"/>
9191 </a> 1.8.14
9292 </small></address>
9797 <!-- start footer part -->
9898 <!--
9999 <hr class="footer"/><address class="footer"><small>
100 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
100 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
101101 <img class="footer" src="doxygen.png" alt="doxygen"/>
102102 </a> 1.8.14
103103 </small></address>
7878 <!-- start footer part -->
7979 <!--
8080 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
81 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8282 <img class="footer" src="doxygen.png" alt="doxygen"/>
8383 </a> 1.8.14
8484 </small></address>
8888 <!-- start footer part -->
8989 <!--
9090 <hr class="footer"/><address class="footer"><small>
91 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
91 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9292 <img class="footer" src="doxygen.png" alt="doxygen"/>
9393 </a> 1.8.14
9494 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
8383 <!-- start footer part -->
8484 <!--
8585 <hr class="footer"/><address class="footer"><small>
86 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
86 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8787 <img class="footer" src="doxygen.png" alt="doxygen"/>
8888 </a> 1.8.14
8989 </small></address>
9797 <!-- start footer part -->
9898 <!--
9999 <hr class="footer"/><address class="footer"><small>
100 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
100 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
101101 <img class="footer" src="doxygen.png" alt="doxygen"/>
102102 </a> 1.8.14
103103 </small></address>
7979 <!-- start footer part -->
8080 <!--
8181 <hr class="footer"/><address class="footer"><small>
82 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
82 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8383 <img class="footer" src="doxygen.png" alt="doxygen"/>
8484 </a> 1.8.14
8585 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
103103 <!-- start footer part -->
104104 <!--
105105 <hr class="footer"/><address class="footer"><small>
106 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
106 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
107107 <img class="footer" src="doxygen.png" alt="doxygen"/>
108108 </a> 1.8.14
109109 </small></address>
204204 <!-- start footer part -->
205205 <!--
206206 <hr class="footer"/><address class="footer"><small>
207 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
207 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
208208 <img class="footer" src="doxygen.png" alt="doxygen"/>
209209 </a> 1.8.14
210210 </small></address>
8282 <!-- start footer part -->
8383 <!--
8484 <hr class="footer"/><address class="footer"><small>
85 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
85 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8686 <img class="footer" src="doxygen.png" alt="doxygen"/>
8787 </a> 1.8.14
8888 </small></address>
8989 <!-- start footer part -->
9090 <!--
9191 <hr class="footer"/><address class="footer"><small>
92 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
92 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9393 <img class="footer" src="doxygen.png" alt="doxygen"/>
9494 </a> 1.8.14
9595 </small></address>
8585 <!-- start footer part -->
8686 <!--
8787 <hr class="footer"/><address class="footer"><small>
88 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
88 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8989 <img class="footer" src="doxygen.png" alt="doxygen"/>
9090 </a> 1.8.14
9191 </small></address>
9292 <!-- start footer part -->
9393 <!--
9494 <hr class="footer"/><address class="footer"><small>
95 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
95 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9696 <img class="footer" src="doxygen.png" alt="doxygen"/>
9797 </a> 1.8.14
9898 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
7575 <!-- start footer part -->
7676 <!--
7777 <hr class="footer"/><address class="footer"><small>
78 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
78 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7979 <img class="footer" src="doxygen.png" alt="doxygen"/>
8080 </a> 1.8.14
8181 </small></address>
8282 <!-- start footer part -->
8383 <!--
8484 <hr class="footer"/><address class="footer"><small>
85 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
85 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8686 <img class="footer" src="doxygen.png" alt="doxygen"/>
8787 </a> 1.8.14
8888 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
9696 <!-- start footer part -->
9797 <!--
9898 <hr class="footer"/><address class="footer"><small>
99 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
99 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
100100 <img class="footer" src="doxygen.png" alt="doxygen"/>
101101 </a> 1.8.14
102102 </small></address>
8989 <!-- start footer part -->
9090 <!--
9191 <hr class="footer"/><address class="footer"><small>
92 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
92 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9393 <img class="footer" src="doxygen.png" alt="doxygen"/>
9494 </a> 1.8.14
9595 </small></address>
8787 <!-- start footer part -->
8888 <!--
8989 <hr class="footer"/><address class="footer"><small>
90 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
90 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9191 <img class="footer" src="doxygen.png" alt="doxygen"/>
9292 </a> 1.8.14
9393 </small></address>
8282 <!-- start footer part -->
8383 <!--
8484 <hr class="footer"/><address class="footer"><small>
85 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
85 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8686 <img class="footer" src="doxygen.png" alt="doxygen"/>
8787 </a> 1.8.14
8888 </small></address>
7474 <!-- start footer part -->
7575 <!--
7676 <hr class="footer"/><address class="footer"><small>
77 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
77 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
7878 <img class="footer" src="doxygen.png" alt="doxygen"/>
7979 </a> 1.8.14
8080 </small></address>
100100 <!-- start footer part -->
101101 <!--
102102 <hr class="footer"/><address class="footer"><small>
103 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
103 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
104104 <img class="footer" src="doxygen.png" alt="doxygen"/>
105105 </a> 1.8.14
106106 </small></address>
8181 <!-- start footer part -->
8282 <!--
8383 <hr class="footer"/><address class="footer"><small>
84 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
84 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8585 <img class="footer" src="doxygen.png" alt="doxygen"/>
8686 </a> 1.8.14
8787 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
8080 <!-- start footer part -->
8181 <!--
8282 <hr class="footer"/><address class="footer"><small>
83 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
83 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8484 <img class="footer" src="doxygen.png" alt="doxygen"/>
8585 </a> 1.8.14
8686 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
8181 <!-- start footer part -->
8282 <!--
8383 <hr class="footer"/><address class="footer"><small>
84 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
84 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8585 <img class="footer" src="doxygen.png" alt="doxygen"/>
8686 </a> 1.8.14
8787 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
7979 <!-- start footer part -->
8080 <!--
8181 <hr class="footer"/><address class="footer"><small>
82 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
82 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8383 <img class="footer" src="doxygen.png" alt="doxygen"/>
8484 </a> 1.8.14
8585 </small></address>
132132 <!-- start footer part -->
133133 <!--
134134 <hr class="footer"/><address class="footer"><small>
135 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
135 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
136136 <img class="footer" src="doxygen.png" alt="doxygen"/>
137137 </a> 1.8.14
138138 </small></address>
106106 <!-- start footer part -->
107107 <!--
108108 <hr class="footer"/><address class="footer"><small>
109 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
109 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
110110 <img class="footer" src="doxygen.png" alt="doxygen"/>
111111 </a> 1.8.14
112112 </small></address>
7777 <!-- start footer part -->
7878 <!--
7979 <hr class="footer"/><address class="footer"><small>
80 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
80 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8181 <img class="footer" src="doxygen.png" alt="doxygen"/>
8282 </a> 1.8.14
8383 </small></address>
8484 <!-- start footer part -->
8585 <!--
8686 <hr class="footer"/><address class="footer"><small>
87 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
87 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8888 <img class="footer" src="doxygen.png" alt="doxygen"/>
8989 </a> 1.8.14
9090 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
8484 <!-- start footer part -->
8585 <!--
8686 <hr class="footer"/><address class="footer"><small>
87 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
87 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8888 <img class="footer" src="doxygen.png" alt="doxygen"/>
8989 </a> 1.8.14
9090 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
9292 <!-- start footer part -->
9393 <!--
9494 <hr class="footer"/><address class="footer"><small>
95 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
95 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
9696 <img class="footer" src="doxygen.png" alt="doxygen"/>
9797 </a> 1.8.14
9898 </small></address>
8383 <!-- start footer part -->
8484 <!--
8585 <hr class="footer"/><address class="footer"><small>
86 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
86 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8787 <img class="footer" src="doxygen.png" alt="doxygen"/>
8888 </a> 1.8.14
8989 </small></address>
8181 <!-- start footer part -->
8282 <!--
8383 <hr class="footer"/><address class="footer"><small>
84 Generated on Wed Jan 3 2018 20:17:23 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
84 Generated on Wed Jan 3 2018 21:39:00 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8585 <img class="footer" src="doxygen.png" alt="doxygen"/>
8686 </a> 1.8.14
8787 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
8484 <!-- start footer part -->
8585 <!--
8686 <hr class="footer"/><address class="footer"><small>
87 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
87 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8888 <img class="footer" src="doxygen.png" alt="doxygen"/>
8989 </a> 1.8.14
9090 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
8383 <!-- start footer part -->
8484 <!--
8585 <hr class="footer"/><address class="footer"><small>
86 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
86 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8787 <img class="footer" src="doxygen.png" alt="doxygen"/>
8888 </a> 1.8.14
8989 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
8484 <!-- start footer part -->
8585 <!--
8686 <hr class="footer"/><address class="footer"><small>
87 Generated on Wed Jan 3 2018 20:17:25 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
87 Generated on Wed Jan 3 2018 21:39:02 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8888 <img class="footer" src="doxygen.png" alt="doxygen"/>
8989 </a> 1.8.14
9090 </small></address>
8585 <!-- start footer part -->
8686 <!--
8787 <hr class="footer"/><address class="footer"><small>
88 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
88 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8989 <img class="footer" src="doxygen.png" alt="doxygen"/>
9090 </a> 1.8.14
9191 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>
8181 </a> 1.8.14
8282 </small></address>
8181 <!-- start footer part -->
8282 <!--
8383 <hr class="footer"/><address class="footer"><small>
84 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
84 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8585 <img class="footer" src="doxygen.png" alt="doxygen"/>
8686 </a> 1.8.14
8787 </small></address>
8585 <!-- start footer part -->
8686 <!--
8787 <hr class="footer"/><address class="footer"><small>
88 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
88 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8989 <img class="footer" src="doxygen.png" alt="doxygen"/>
9090 </a> 1.8.14
9191 </small></address>
7878 <!-- start footer part -->
7979 <!--
8080 <hr class="footer"/><address class="footer"><small>
81 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
81 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8282 <img class="footer" src="doxygen.png" alt="doxygen"/>
8383 </a> 1.8.14
8484 </small></address>
7676 <!-- start footer part -->
7777 <!--
7878 <hr class="footer"/><address class="footer"><small>
79 Generated on Wed Jan 3 2018 20:17:24 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
79 Generated on Wed Jan 3 2018 21:39:01 for Diligent Engine API Reference by &#160;<a href="http://www.doxygen.org/index.html">
8080 <img class="footer" src="doxygen.png" alt="doxygen"/>