Skip to content

Raspberry Pi Sample Graphics Driver Planned Features

Bart House edited this page Apr 5, 2016 · 1 revision

This page outlines the planned features for the raspberry pi 2 sample graphics driver.

There will be multiple planned releases of the driver. The initial release will be release R0. Release one will be release R1 and so on. When planned features are expected to come in later releases, they will be documented.

Functionality can be broken down into three primary areas which are covered below: graphics, display and power management.

Graphics

The driver will be a DX11 graphic driver that supports a subset of feature level 9.3 functionality. Any use of the driver must take into account the limitations of this driver.

Shader Model

Significant research is needed into what we can reasonably accomplish with the VC4. When this research is done, we will be able to determine the shader model that we will implement and the limitations of its use. The shader model will likely be 4_0_level_9_3)[vs_2_a/ps_2_x] with some set of limitations.

(What limitations are there in floating point support?) (What float formats can we support?)

Vertex Buffer

The following formats are supported as vertex buffers.

  • R32G32B32A32_FLOAT
  • R32G32B32_FLOAT
  • R32G32_FLOAT
  • R32_FLOAT

The following formats are not supported as vertex buffers. We may support some of these formats but they will require conversion of data into 32bit float data. Hardware has a limitation that vertex data must all be 32bit float and at most 8 data elements.

  • R16G16B16A16_FLOAT
  • R16G16B16A16_SNORM
  • R16G16B16A16_SINT
  • R8G8B8A8_UNORM
  • R8G8B8A8_UINT
  • R16G16_FLOAT
  • R16G16_SNORM
  • R16G16_SINT

Index Buffer

The following formats are supported as index buffers.

  • R16_UINT

The following formats are not supported as index buffers.

  • R32_UINT (hardware limitation of only 8bit and 16bit index buffers)

Texturing

Research is needed in supporting nonpowers-of-2 texture sizes. We will likely impose the same conditions imposed by FL9.3, that only one level of mip-map is supported and wrap sampler modes can not be used.

We need to research what sample methods we can support. Point sampling will be supported for all supported texture formats. We need to research what other shader sampling methods will be supported for the various formats.

Mip-mapping will be supported for all texture formats. (_Can we?)

(What is auto mip-map and what formats can we support?)

Texturing Formats

The following surface formats will be supported for 2D, 3D and cube texturing.

  • R16G16B16A16_FLOAT (RGBA64 Table 18 Num 15)
  • R8G8B8A8_UNORM (RGBA8888 Table 18 Num 0)
  • R16_UNORM (S16F Table 18 Num 9)
  • R8_UNORM (S8 Table 18 Num 10)
  • A8_UNORM (S8 Table 18 Num 10)
  • B5G6R5_UNORM (RGB565 Table 18 Num 4)
  • B5G5R5A1_UNORM (RGB5551 Table 18 Num 3)
  • B8G8R8A8_UNORM (RGBA888 shader will need to swizzle)
  • B8G8R8X8_UNORM (RGBA888 shader will need to swizzle)
  • B4G4R4A4_UNORM (RGBA4444 Table 18 Num 2)

The following surface formats may be supported but will require conversion to use.

  • R8G8B8A8_UNORM_SRGB
  • R8G8B8A8_SNORM
  • B8G8R8A8_UNORM_SRGB
  • B8G8R8X8_UNORM_SRGB

The following surface formats will be supported for 2D texturing

  • R8G8_UNORM (LUMALPHA with shader performing swizzle)
  • R8G8_SNORM (LUMALPHA with shader performing conversion)
  • D16_UNORM (S16F Table 18 Num 9)

The following compressed texture formats will be supported but will require decompressing and conversion as appropriate. This support will not be available in initial release.

  • BC1_UNORM
  • BC1_UNORM_SRGB
  • BC2_UNORM
  • BC2_UNORM_SRGB
  • BC3_UNORM
  • BC3_UNORM_SRGB

The following surface formats will not be supported.

  • R32G32B32A32_FLOAT
  • R16G16B16A16_UNORM
  • R32G32_FLOAT
  • R16G16_FLOAT
  • R16G16_UNORM
  • R16G16_SNORM
  • R32_FLOAT
  • D24_UNORM_S8_UINT

The following video formats will be supported for 2D texturing.

  • YUY2

The following video formats will not be supported.

  • 420_OPAQUE (should we support with conversion?)
  • AYUV
  • Y410
  • Y416
  • NV12
  • P010
  • P010
  • P016
  • Y210
  • Y216
  • NV11
  • AI44
  • IA44
  • P8
  • A8P8

Texturing Limits

  • Max Texture Dimension: 2048 (does not meet FL 9.3 limit of 4096)
  • Max Cubemap Dimension: 2048 (does not meet FL 9.3 limit of 4096)
  • Max Volume Extent: ? (need to determine limit of hardware; FL9.3 limit is 256)
  • Max Texture Repeat: ? (need to determine limit of hardware; FL9.3 limit is 8192)
  • Max Anisotropy: ? (need to determine limit of hardware; FL9.3 limit is 16)
  • Nonpowers-of-2 conditionally: yes

Rendering

We will initially only support one render target. In theory, we should be able to support an arbitrary number of render targets via the replaying of rendering commands against the multiple targets.

We will not initially support occlusion queries. In theory, we should be able to support occlusion queries through complexity added to the shader complier. This work needs to be researched.

Render Target Formats

The initial RO release will only support the following blend-able render targets.

  • R8G8B8A8_UNORM

The R1 release will add support for the following blend-ale render targets.

  • B5G6R5_UNORM
  • R16G16B16A16_FLOAT

Subsequent releases may support the following blend-able render target formats. These formats are not supported natively by the hardware and will require shader support. Additional research will be needed to determine if they can be supported.

  • R8G8_UNORM (this would require that we pack/unpack data in shader with no mulit-sample support)
  • B8G8R8A8_UNORM (should be able to swizzle data appropriately in shader)
  • B8G8R8X8_UNORM (should be able to swizzle data appropriately in shader)
  • R8G8B8A8_UNORM_SRGB (research will be required into how reasonable it would be to apply SRGB curve in shader)
  • B8G8R8A8_UNORM_SRGB (research will be required into how reasonable it would be to apply SRGB curve in shader)
  • B8G8R8X8_UNORM_SRGB (research will be required into how reasonable it would be to apply SRGB curve in shader)

The following blend-able render target formats cannot be supported.

  • R8_UNORM
  • A8_UNORM

The following non-blend-able render target formats cannot be supported.

  • R16G16_FLOAT
  • R16G16_UNORM
  • R32_FLOAT
  • R32G32_FLOAT
  • R32G32B32A32_FLOAT

Depth Stencil Targets

The following formats will be supported for depth/stencil targets.

  • D24_UNORM_S8_UINT
  • D16_UNORM

Rendering Limits

The following limits are defined as part of FL 9.3. Research is needed to determine whether these limits can be supported. In some cases, we may be able to raise the limits.

  • Max Primitive Count: 1048575
  • Max Vertex Index: 1048575
  • Max Input Slots: 16
  • Simultaneous Render Targets: 4 (only one render target supported in initial release)
  • Occlusion Queries: yes (not to be supported in the initial release)
  • Separate Alpha Blend: yes (what is this?)
  • Mirror Once: yes (what is this?)
  • Overlapping Vertes Elements: yes (what is this?)
  • Independent Write Masks: yes (what is this?)
  • Instancing: yes (what is this?)

Features Not Supported

The following features will not be supported:

  • tiled resources
  • conservative rasterization
  • rasterizer order views
  • min/max filters
  • map default buffer
  • shader specified stencil reference
  • typed unordered access view loads
  • geometry shader
  • stream out
  • compute shader
  • hull and domain shaders
  • texture resource arrays
  • cubemap resource arrays
  • BC4/BC5 compression
  • BC6h/BC7 compression
  • alpha-to-coverage
  • 10 bit XR high color format
  • logic operations in output merger
  • target independent rasterization
  • multiple render target with forced sample count of 1
  • UAV slots
  • unconditional nonpowers-of-2

Display

Displayable Formats

The initial release will support the following displayable surface formats.

  • R8G8B8A8_UNORM

Subsequent releases will support the following displayable surface formats. (Can we support these formats?)(Would some of these formats require an in memory conversion?)

  • R8G8B8A8_UNORM_SRGB (can this be supported?)
  • B8G8R8A8_UNORM (can this be supported?)
  • B8G8R8A8_UNORM_SRGB (can this be supported?)

Power Management