Skip to content

papaboo/pipeline

 
 

Repository files navigation

=== nvpro-pipeline ===

Requirements:
- Visual C++ 2012 x64. Further platforms need to be added to the 3rdparty build scripts.
- CMake 2.8.12
- The pipeline should also build on Linux. This feature is less tested.

Building:
- Set DPHOME to the folder with the nvpro-pipeline sources
- Set DP_3RDPARTY_PATH to nvpro-pipeline/3rdparty
- Install Qt 5.2.1 MSVC 2012 OpenGL through the installer from http://qt.io
- Start a 'VS2012 x64 Native Tools Command Prompt'. Ensure that cmake can be launched from the command line.
- Call 3rdPartyBuild.cmd. This will download and build all required dependencies.
- Start the CMake GUI, specify the source code location and choose a subfolder, i.e. build/vc11-amd64, to build the binaries. Use 'Visual Studio 11 Win64' as generator.
- Open build/vc11-amd64/Pipeline.sln in Visual Studio and hit build.

The binaries can be found in the folder build\vc11-amd64\bin\(Debug|Release). You'll have to copy the required 3rd party dlls from the 3rdparty folders to the binary directory. This will be done automatically soon.

Small overview over the pipeline:

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 Scenegraph
- 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.


About

nvpro-pipeline is a research rendering pipeline

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published