Title: Questions about GPUs
1Questions about GPUs
Philippe Decaudin Fabrice Neyret
Stéphane GuySylvain Lefebvre
2Overview
- Suspicious behaviors of GPUs.
- What could be improved quickly.
- Our wishes.
31. Suspicious behaviors
- 3D Textures, MIP-mapping and anisotropy
- Clamp to border and MIP-mapping
- Deferred shading for conditions
43D textures and MIP-mapping
- Filtering of 3D textures is isotropic (same
MIP-map level for u, v and w) - When texturing a slice of volume with a 3D
texture, the slope of the slice controls the
blur sloppy gt blurry - With 2D textures, this problem is solved by
anisotropic filtering, but - - it is not available for 3D textures
- - no dsdw
5Clamp_to_border and MIP-mapping
- Using non-square textures (2a ? 2b, a ? b)
- CLAMP_TO_BORDER_ARB enabled
- MIP-map enabled
- at MIP-map levels gt log2(a) (with a lt b), the
texture becomes 1D - clamp doesnt seem to work correctly
6Clamp_to_border and MIP-mapping
- a quad mapped with a white texture 256?64
- (u,v) (0,0) to (6,6)
- mapping clamped to 0,1?0,1
- border color is black
- MIP-map level forced with GL_TECTURE_MIN_LOD
(6,6)
Square texture (64?64)? correct
Clamp problem? bug?
MIP-map level 1 (256?64)
MIP-map level 8 (1?1)
(0,0)
Texture 256?64
7Clamp_to_border and MIP-mapping
? all MIP-map levels
128x32 64x16 32x8 16x4 8x2 4x1 2x1
1x1
8Deferred shading for conditions
Theory
- Custom shader
- costly particular case for some pixels
- general case fast.
1
fast, but a few pixels are wrong
9Deferred shading for conditions
Theory
1
2
flag wrong pixels in stencil
fast, but a few pixels are wrong
10Deferred shading for conditions
Theory
1
2
flag wrong pixels in stencil
fast, but a few pixels are wrong
3
use slow correction shader only where needed
11Deferred shading for conditions
1
2
flag wrong pixels in stencil
fast, but a few pixels are wrong
3
- Practice
- Does not work !?
- cost the same as full rendering
- stencil after fragment program ?
use slow correction shader only where needed
122. What could be improved quickly
- Front to back rendering with alpha
- Fog and pre-multiplied alpha
- Scale / Bias not limited to 0,1
- Tiled textures storage
13Front to back rendering with alpha
- Theory front to back (to benefit Z-test
culling) - Practice with alpha must disable depth_test
! ? landscapes, billboards, volumes even more
costly - Suggested solution glEnable(ALPHA_DEPTH_TEST)do
ing regular blending, then if (AscreengtAthreshold
) ZscreenZfrag
14Fog and pre-multiplied alpha
- Premultiplied alpha textures (aR,aG,aB,a) to
avoid interpolation artefacts. - Blend mode is then set to glBlendFunc(GL_ONE,GL_O
NE_MINUS_SRC_ALPHA)
15Fog and pre-multiplied alpha
- Problem not compatible with standard Fog
equation (glEnable(GL_FOG))Fog equation
Cfrag (1-f) Cfrag f Cfog In our case,
Cfrag aC (premultiplied
alpha) Blend equation CdestCfrag
(1-a)Cdest? Cdest (1-f)
aC f Cfog (1-a)Cdest
missing a
- Suggestion
- if SRC_ALPHA GL_ONE then
- fog equation (1-f) C f a Cfog
16Scale / Bias not limited to 0,1
- Theoryscale, bias to tune transparency, light,
color - Practicecoef must lies in 0,1 !
- ? applications which need coef gt 1 must
multipass (volume rendering, light maps) - Suggested SolutionFloat operation in texture
units for scaling.
17Tiled textures storage
- Principle
- Use a set of tiles to create a larger texture
fragment program
18Tiled textures storage
- Numerous new advanced usage of tiles
- Antialiased Parameterized Solid Texturing
- Hart et al ACM Transactions on Graphics 2002
- Adaptive Texture Maps
- Kraus and Ertl Graphics Hardware 2002
- Pattern Based Procedural Textures
- Lefebvre and Neyret I3D 2003
- and more !
19Tiled textures storage
- Storage requirements
- Efficient selection from FP
- No waste of memory
- Ease filtering / interpolation of tiles
- per-tile border color
- per-tile MIP-mapping
20Tiled textures storage
- Current solutions
- Store as separate textures
- limited bindings
- no real selection in FP
- Store in an atlas
- false neighborhood and no border color
- waste space if filtering on tiles
- limited to 4096x4096
- Store as a stack in a 3D Texture
- waste a lot of space (2n)
- ill-defined filtering
21Tiled textures storage
- Our proposal Texture stack
- 3D Texture with no filtering on R
- per-tile border colors
- per-tile filtering
- easy selection from fragment program
223. Our wishes
- Having features more coherent
- programable blending
- feedback buffer
- read access to all state variables (ex
MIP-mapping) - r/w stencil from FP
- Native support of tiled textures
- Fragment culling order (stencil, A, depth)
- Tools for procedural textures
23Having features more coherent
- Programable blending
- multi-pass algorithms with intermediate results
- needs complex blending
- current blending very limited compared to
programable pipeline
24Having features more coherent
- Feedback buffer
- lot of vertex attributes
- few can be read back
25Having features more coherent
- Perspective correction
- rasterization in object space not always desired
- ?
- need control on variables interpolated by
rasterizer - glEnable/Disable(param,GL_PERSPECTIVE_CORRECTION)
26Native support of tiled textures
- Difficulties
- Storage (borders, repeat, )
- MIP-mapping
- Linear interpolation
27Fragment culling order
- Early culling essential for performance
- Would let the user specify test order between
- alpha test
- stencil
- depth
- discard (from FP)
28Tools for procedural textures
- New texture types (envmap, indir., N, shaders, )
- custom filtering
- MIP-mapping levels
- have to be infered from ddx ddy
- while computed for standard textures
- needs to be accessible (read)
- resolution specifiable by user
29Questions about GPUs
Philippe Decaudin Fabrice Neyret
Stéphane GuySylvain Lefebvre