GeeXLab
Current version: 0.45.1
>GeeXLab homepage

FurMark
Current version: 1.30.0
>FurMark homepage

GPU Caps Viewer
Current version: 1.55.0.0
>GPU Caps Viewer homepage

GPU Shark
Current version: 0.26.0.0
>GPU Shark homepage


Blogs
>JeGX's HackLab

Geeks3D's Articles
>GPU Memory Speed Demystified

>Multi-Threading Programming Resources

>GeForce and Radeon OpenCL Overview

>How to Get your Multi-core CPU Busy at 100%

>How To Make a VGA Dummy Plug

>Night Vision Post Processing Filter

PhysX FluidMark
Current version: 1.5.4
>FluidMark homepage

TessMark
Current version: 0.3.0
>TessMark homepage

ShaderToyMark
Current version: 0.3.0
>ShaderToyMark homepage
>ShaderToyMark Scores

Demoniak3D
Current Version: 1.23.0
>Demoniak3D
>Download
>Libraries and Plugins
>Demos
>Online Help - Reference Guide
>Codes Samples
 


NVIDIA nZone.com NVIDIA Developer Blog
NVIDIA G80: OpenGL Programming

By: Christophe [Groove] Riccio - www.g-truc.net
Initial Version: November 12, 2006
Edited and Translated by the oZone3D Team
Last Update: March 25, 2007


[ Index ]

Introduction | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

�Next Page



4 - Variables

4.1 - Data category

NV_parameter_buffer_object and EXT_bindable_uniform offer the same functionality but not for the same language. In terms of GLSL, there are four data sources that a shader can process: attributes, like for example the vertex position, its normal, its texture coordinates, the textures with all the diversity that it means (especially with the GeForce 8800), the varying variables that make it possible to pass data from a shader to another, and finally the uniform variables which are data that are valid for all the vertex, all the triangles and all the fragments of a GPU program.

Among these data, we usually find samplers and other material properties, as well as lights. The idea behind these extensions is to store the value of the uniform variables into the memory of the graphic card and then be able to exchange these variables for a same program. In order to benefit from this behavior, it is not possible to use the fixed pipeline functions, which drops a little bit more this old method.



4.2 - Evolution of the method

Practically, a scene can contain a certain number of different lights with very different properties. But if an object is moving inside the scene, it will be exposed to different lights according to its position; we will then just have to change the "bindable uniform buffer objects" used by the program.

In an even more practical manner, let's consider a scene featuring few static objects that have each one their own material but with a same applicable program for each. In the same way, we just need to change the "bindable uniform buffer object" instead of changing the value of each object one after one, which leads to a CPU charge decrease.

Finally, one single "bindable uniform buffer object" can be applied to several different programs. For a single multi pass light rendering, we can assume that several passes will need to access the lights' parameters. Another very interesting contribution that will change the shader programming approach is that binding a buffer does not mean "assigning a value". Values may be assigned at the initialization and then selected when it comes really necessary. EXT_bindable_uniform uses the excellent buffer object API proposed by OpenGL 1.5 for the vertex buffer objects [1].



4.3 - Benefits

This extension makes me particularly happy cause I think it brings some flexibility to the GPU programming, which may result in a decrease of the number of shaders used in a project while reducing the CPU charge and memory consumption as well. This functionality will certainly be officially present in the next OpenGL version, even more since the ARBis actually working on it.



Note d'Edition




[ Index ]

Introduction | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

�Next Page





GeeXLab demos


GLSL - Mesh exploder


PhysX 3 cloth demo


Normal visualizer with GS


Compute Shaders test on Radeon


Raymarching in GLSL



Misc
>Texture DataPack #1
>Asus Silent Knight CPU Cooler
Page generated in 0.0021781921386719 seconds.