| Resources and derived objects |
| ============================= |
| |
| 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. |
| |
| 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 |
| |
| 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? |
| |
| 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 |
| |
| PIPE_TEXTURE_RECT |
| ^^^^^^^^^^^^^^^^^ |
| 2D surface with OpenGL GL_TEXTURE_RECTANGLE semantics. |
| |
| - depth0 must be 1 |
| - last_level must be 0 |
| - Must use unnormalized coordinates |
| - Must use a clamp wrap mode |
| |
| 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) |
| |
| PIPE_TEXTURE_2D |
| ^^^^^^^^^^^^^^^ |
| 2D surface accessed with normalized coordinates. |
| |
| UNIMPLEMENTED: 2D texture arrays not supported |
| |
| - If PIPE_CAP_NPOT_TEXTURES is not supported, |
| width and height must be powers of two |
| - depth0 must be 1 |
| - Mipmaps can be used |
| - Must use normalized coordinates |
| - No special restrictions on wrap modes |
| |
| 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 |