forked from nvpro-pipeline/pipeline
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.txt
60 lines (43 loc) · 4.01 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
How to build the RiX Pipeline
Requirements:
- Visual C++ 2008 or Visual C++ 2010
- A recent CMake from http://cmake.org/cmake/resources/software.html
Building:
- Uncompress 3rdparty.zip to an empty folder and create an environment variable DP_3RDPARTY_PATH pointing to this folder.
- Uncompress dphome.zip to an empty folder and create an environment variable DPHOME pointing to this folder.
- Launch the CMake GUI and choose DPHOME as source folder. Create a new subfolder within DPHOME for each configuration you want to build.
- Enable BUILD/BUILD_OPENGL_APPS to build our samples. This will build QtMinimalXBAR, the Viewer, and some other examples. Using QtMinimalXBAR you can configure the pipeline when loading a scene.
- Press first Configure and then Generate to generate a Visual C++ Solution.
- Build the solution.
The binaries can be found in bin/(your arch)/win/(your visual studio version)/(debug|release).
QtMinimalXBAR is the viewer for this pipeline. It can configure the glsl code generation of dp::fx and the way how the vertex buffers are passed to GL.
Small overview over the pipleine:
ShaderGenerators:
The RiX-Pipeline has dp::fx as module to generate shaders based on a simple XML description. Shaders are being separated into the main block and the different parts of the header, especially
the parameters. The GLSL code for the main block has to be specified by the shader writer while the GLSL code for the headers is being fully generated by dp::fx. This separation makes
parameter passing by the pipeline extremly flexible. Currently we support the following paramter generation backends:
- rixfx:uniform Each parameter is being passed to OpenGL with a glUniform call
- rixfx:ubo140 One OpenGL buffer is being created for each ParameterGroupData and passed as UBO to GL.
- rixfx:shaderbufferload One OpenGL buffer is being created for each ParameterGroupData and passed as bindless pointer to GL. (fastest on CPU side)
- rixfx:ssbo140 One OpenGL buffer is being created for 256 ParameterGroupDatas and passed as ShaderStorageBufferObject to OpenGL.
In addition to this RiX get's another ParameterGroupData with an index into this buffer as uniform. This configuration requires OpenGL 4.3.
If there's buffer/texture within a ParameterGroupData the pipeline will always use rixfx:uniform
RenderEngines:
OpenGL supports different ways to specify vertices/indices depending on the OpenGL version and supported extensions by the driver. RiX has implemented support for the following methods
- VBO All buffers are being passed to OpenGL by glBindBuffer/glVertexAttrib* functions. This is supported on (nearly) all GPUs.
- VAB Required GL 4.3 or GL_ARB_vertex_attrib_binding. The vertex format is being separated from the buffer bindings. Gives up to 10% speedup over VBO.
- VBOVAO Generates one Vertex Array Object (VAO) with VBOs per geometry. This is usually slower than VBOs due to cache inefficiency.
- Bindless Uses GL_NV_vertex_buffer_unified memory. This extension separates format and buffers. Vertex pointer are being passed as 64-bit pointers.
This is the fastest engine when using only a single OpenGL context.
- BindlessVAO Generates one Vertex Array Object (VAO) with Bindless pointers per geometry. This is usually slower than Bindless due to cache inefficiency.
- DisplayList Only for testing. Currently slow due to some limitations in the implementation.
Important modules in the dphome folder:
- dp::fx Shader Managment/Generation
- dp::rix Base directory for all rendering based module
- dp::rix:gl RiX based OpenGL renderer
- dp::rix::fx Connection between dp::fx and dp::rix::gl
- dp::math our math functions
- dp::util misc utility functions
- dp::sg Will contain our scenegraph in the future. Currently content is in SCENIXHOME
- dp::sg::xbar crossbar interface which converts a scenegraph to a flat list. SceniXXBAR is the rix-gl interface for this
- dp::culling Culling interface we're going to use in the xbar in the future.