Tiled Resources

With Tiled Resources, Direct3D supports hardware virtual resources, allowing the creation of massive textures using minimal memory, which can also improve performance.

The majority of data of any modern game is usually textures, perhaps 10 to 20 Gigabytes of textures. However, only a small number of textures might be needed at any one time, depending on a players local context, and a typical solution is to enable texture streaming. Texture streaming though can lead to artificially long transition areas, in order to separate one set of textures from another.

Another solution is to use tiling, with a page table of samples used to locate the actual textures. Software tiling works, but with slower performance. Hardware tiling maintains page tables of tiles in hardware, and is more efficient. This is the tiling resource system introduced in DirectX 11.2 for Windows, and is part of the Xbox One XDK.

A tile pool is maintained, by default with 64KB of physical tiles, though this pool can be resized if necessary. After being created Tiled Resources can be sampled by any shaders, without any change to the shader code.

To use Tiled Resources

  1. Use ID3D11Device::CreateBuffer(D3D11_BUFFER_MISC_TILE_POOL) to create the tile pool.
  2. Resize the tile pool if necessary.
  3. Create the textures by calling ID3D11Device::CreateTexture2D, to allocate virtual address space for the page table and tiled resource. By default, tiles have no physical memory associated with them.
  4. To allocate physical memory, call ID3D11DeviceContext2::UpdateTileMappings.
  5. Next, to copy from the app memory to the tiled resource, call ID3D11DeviceContext2::UpdateTiles.

See also

DirectX

ID3D11DeviceContext2::CopyTileMappings

ID3D11DeviceContext2::CopyTiles