2010-08-20 12:11:58 +01:00
|
|
|
Resources and derived objects
|
|
|
|
=============================
|
2010-04-15 08:02:29 +01:00
|
|
|
|
|
|
|
Resources represent objects that hold data: textures and buffers.
|
|
|
|
|
|
|
|
They are mostly modelled after the resources in Direct3D 10/11, but with a
|
|
|
|
different transfer/update mechanism, and more features for OpenGL support.
|
|
|
|
|
2010-08-20 12:11:58 +01:00
|
|
|
Resources can be used in several ways, and it is required to specify all planned uses through an appropriate set of bind flags.
|
|
|
|
|
|
|
|
TODO: write much more on resources
|
|
|
|
|
|
|
|
Transfers
|
|
|
|
---------
|
|
|
|
|
|
|
|
Transfers are the mechanism used to access resources with the CPU.
|
|
|
|
|
|
|
|
OpenGL: OpenGL supports mapping buffers and has inline transfer functions for both buffers and textures
|
|
|
|
|
|
|
|
D3D11: D3D11 lacks transfers, but has special resource types that are mappable to the CPU address space
|
|
|
|
|
|
|
|
TODO: write much more on transfers
|
|
|
|
|
2010-04-15 08:02:29 +01:00
|
|
|
Resource targets
|
|
|
|
----------------
|
|
|
|
|
|
|
|
Resource targets determine the type of a resource.
|
|
|
|
|
|
|
|
Note that drivers may not actually have the restrictions listed regarding
|
|
|
|
coordinate normalization and wrap modes, and in fact efficient OpenCL
|
|
|
|
support will probably require drivers that don't have any of them, which
|
|
|
|
will probably be advertised with an appropriate cap.
|
|
|
|
|
|
|
|
TODO: document all targets. Note that both 3D and cube have restrictions
|
|
|
|
that depend on the hardware generation.
|
|
|
|
|
|
|
|
TODO: can buffers have a non-R8 format?
|
|
|
|
|
2010-08-20 12:11:58 +01:00
|
|
|
PIPE_BUFFER
|
|
|
|
^^^^^^^^^^^
|
|
|
|
|
|
|
|
Buffer resource: can be used as a vertex, index, constant buffer (appropriate bind flags must be requested).
|
|
|
|
|
|
|
|
They can be bound to stream output if supported.
|
|
|
|
TODO: what about the restrictions lifted by the several later GL transform feedback extensions? How does one advertise that in Gallium?
|
|
|
|
|
|
|
|
They can be also be bound to a shader stage as usual.
|
|
|
|
TODO: are all drivers supposed to support this? how does this work exactly? are there size limits?
|
|
|
|
|
|
|
|
They can be also be bound to the framebuffer as usual.
|
|
|
|
TODO: are all drivers supposed to support this? how does this work exactly? are there size limits?
|
|
|
|
TODO: is there any chance of supporting GL pixel buffer object acceleration with this?
|
|
|
|
|
|
|
|
- depth0 must be 1
|
|
|
|
- last_level must be 0
|
|
|
|
- TODO: what about normalization?
|
|
|
|
- TODO: wrap modes/other sampling state?
|
|
|
|
- TODO: are arbitrary formats supported? in which cases?
|
|
|
|
|
|
|
|
OpenGL: vertex buffers in GL 1.5 or GL_ARB_vertex_buffer_object
|
|
|
|
|
|
|
|
- Binding to stream out requires GL 3.0 or GL_NV_transform_feedback
|
|
|
|
- Binding as constant buffers requires GL 3.1 or GL_ARB_uniform_buffer_object
|
|
|
|
- Binding to a sampling stage requires GL 3.1 or GL_ARB_texture_buffer_object
|
|
|
|
- TODO: can they be bound to an FBO?
|
|
|
|
|
|
|
|
D3D11: buffer resources
|
|
|
|
- Binding to a render target requires D3D_FEATURE_LEVEL_10_0
|
|
|
|
|
|
|
|
PIPE_TEXTURE_1D
|
|
|
|
^^^^^^^^^^^^^^^
|
|
|
|
1D surface accessed with normalized coordinates.
|
|
|
|
|
|
|
|
UNIMPLEMENTED: 1D texture arrays not supported
|
|
|
|
|
|
|
|
- If PIPE_CAP_NPOT_TEXTURES is not supported,
|
|
|
|
width must be a power of two
|
|
|
|
- height0 must be 1
|
|
|
|
- depth0 must be 1
|
|
|
|
- Mipmaps can be used
|
|
|
|
- Must use normalized coordinates
|
|
|
|
|
|
|
|
OpenGL: GL_TEXTURE_1D in GL 1.0
|
|
|
|
|
|
|
|
- PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or GL_ARB_texture_non_power_of_two
|
|
|
|
|
|
|
|
D3D11: 1D textures in D3D_FEATURE_LEVEL_10_0
|
|
|
|
|
2010-04-15 08:02:29 +01:00
|
|
|
PIPE_TEXTURE_RECT
|
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
2D surface with OpenGL GL_TEXTURE_RECTANGLE semantics.
|
|
|
|
|
2010-08-20 12:11:58 +01:00
|
|
|
- depth0 must be 1
|
2010-04-15 08:02:29 +01:00
|
|
|
- last_level must be 0
|
|
|
|
- Must use unnormalized coordinates
|
|
|
|
- Must use a clamp wrap mode
|
|
|
|
|
2010-08-20 12:11:58 +01:00
|
|
|
OpenGL: GL_TEXTURE_RECTANGLE in GL 3.1 or GL_ARB_texture_rectangle or GL_NV_texture_rectangle
|
|
|
|
|
|
|
|
OpenCL: can create OpenCL images based on this, that can then be sampled arbitrarily
|
|
|
|
|
|
|
|
D3D11: not supported (only PIPE_TEXTURE_2D with normalized coordinates is supported)
|
|
|
|
|
2010-04-15 08:02:29 +01:00
|
|
|
PIPE_TEXTURE_2D
|
|
|
|
^^^^^^^^^^^^^^^
|
|
|
|
2D surface accessed with normalized coordinates.
|
|
|
|
|
2010-08-20 12:11:58 +01:00
|
|
|
UNIMPLEMENTED: 2D texture arrays not supported
|
|
|
|
|
2010-04-15 08:02:29 +01:00
|
|
|
- If PIPE_CAP_NPOT_TEXTURES is not supported,
|
|
|
|
width and height must be powers of two
|
2010-08-20 12:11:58 +01:00
|
|
|
- depth0 must be 1
|
2010-04-15 08:02:29 +01:00
|
|
|
- Mipmaps can be used
|
|
|
|
- Must use normalized coordinates
|
|
|
|
- No special restrictions on wrap modes
|
2010-08-20 12:11:58 +01:00
|
|
|
|
|
|
|
OpenGL: GL_TEXTURE_2D in GL 1.0
|
|
|
|
|
|
|
|
- PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or GL_ARB_texture_non_power_of_two
|
|
|
|
|
|
|
|
OpenCL: can create OpenCL images based on this, that can then be sampled arbitrarily
|
|
|
|
|
|
|
|
D3D11: 2D textures
|
|
|
|
|
|
|
|
- PIPE_CAP_NPOT_TEXTURES is equivalent to D3D_FEATURE_LEVEL_9_3
|
|
|
|
|
|
|
|
PIPE_TEXTURE_3D
|
|
|
|
^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
3-dimensional array of texels.
|
|
|
|
Mipmap dimensions are reduced in all 3 coordinates.
|
|
|
|
|
|
|
|
- If PIPE_CAP_NPOT_TEXTURES is not supported,
|
|
|
|
width, height and depth must be powers of two
|
|
|
|
- Must use normalized coordinates
|
|
|
|
|
|
|
|
OpenGL: GL_TEXTURE_3D in GL 1.2 or GL_EXT_texture3D
|
|
|
|
|
|
|
|
- PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or GL_ARB_texture_non_power_of_two
|
|
|
|
|
|
|
|
D3D11: 3D textures
|
|
|
|
|
|
|
|
- PIPE_CAP_NPOT_TEXTURES is equivalent to D3D_FEATURE_LEVEL_10_0
|
|
|
|
|
|
|
|
PIPE_TEXTURE_CUBE
|
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Cube maps consist of 6 2D faces.
|
|
|
|
The 6 surfaces form an imaginary cube, and sampling happens by mapping an
|
|
|
|
input 3-vector to the point of the cube surface in that direction.
|
|
|
|
|
|
|
|
Sampling may be optionally seamless, resulting in filtering taking samples
|
|
|
|
from multiple surfaces near to the edge.
|
|
|
|
UNIMPLEMENTED: seamless cube map sampling not supported
|
|
|
|
|
|
|
|
UNIMPLEMENTED: cube map arrays not supported
|
|
|
|
|
|
|
|
- Width and height must be equal
|
|
|
|
- If PIPE_CAP_NPOT_TEXTURES is not supported,
|
|
|
|
width and height must be powers of two
|
|
|
|
- Must use normalized coordinates
|
|
|
|
|
|
|
|
OpenGL: GL_TEXTURE_CUBE_MAP in GL 1.3 or EXT_texture_cube_map
|
|
|
|
|
|
|
|
- PIPE_CAP_NPOT_TEXTURES is equivalent to GL 2.0 or GL_ARB_texture_non_power_of_two
|
|
|
|
- Seamless cube maps require GL 3.2 or GL_ARB_seamless_cube_map or GL_AMD_seamless_cubemap_per_texture
|
|
|
|
- Cube map arrays require GL 4.0 or GL_ARB_texture_cube_map_array
|
|
|
|
|
|
|
|
D3D11: 2D array textures with the D3D11_RESOURCE_MISC_TEXTURECUBE flag
|
|
|
|
|
|
|
|
- PIPE_CAP_NPOT_TEXTURES is equivalent to D3D_FEATURE_LEVEL_10_0
|
|
|
|
- Cube map arrays require D3D_FEATURE_LEVEL_10_1
|
|
|
|
- TODO: are (non)seamless cube maps supported in D3D11? how?
|
|
|
|
|
|
|
|
Surfaces
|
|
|
|
--------
|
|
|
|
|
|
|
|
Surfaces are views of a resource that can be bound as a framebuffer to serve as the render target or depth buffer.
|
|
|
|
|
|
|
|
TODO: write much more on surfaces
|
|
|
|
|
|
|
|
OpenGL: FBOs are collections of surfaces in GL 3.0 or GL_ARB_framebuffer_object
|
|
|
|
|
|
|
|
D3D11: render target views and depth/stencil views
|
|
|
|
|
|
|
|
Sampler views
|
|
|
|
-------------
|
|
|
|
|
|
|
|
Sampler views are views of a resource that can be bound to a pipeline stage to be sampled from shaders.
|
|
|
|
|
|
|
|
TODO: write much more on sampler views
|
|
|
|
|
|
|
|
OpenGL: texture objects are actually sampler view and resource in a single unit
|
|
|
|
|
|
|
|
D3D11: shader resource views
|