d3d/archive/D3D11_3_FunctionalSpec.htm [3428:3643]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

As of the D3D11.1 API/DDI, Video Resources can have SRV/RTV/UAVs created so that D3D shaders can process them. The way the underlying Video Resource shows up in D3D as an ID3D11Resource* is described in separate D3D11 Video specs. This section covers how given an ID3D11Resource* to a Video Resource, SRV/RTV/UAVs can be created in D3D.

These Video Resources will be either Texture2D or Texture2DArray, so the ViewDimension in the VIEW_DESC structure must match. Additionally, the format of the underlying Video Resource restricts the formats that the View can use.

The following table describes all the combinations of Video Resource and View(s) that can be made from them. Note that multiple views of different parts of the same surface can be created, and depending on the format they may have different sizes from each other. A few video formats do not support D3D SRV/UAV/RTVs at all: DXGI_FORMAT_420_OPAQUE, _AI44, _IA44, _P8 and _A8P8. Further details on all the video formats is provided in the D3D11 Video DDI spec.

Runtime read+write conflict prevention logic (which stops a resource from being bound as an SRV and RTV/UAV at the same time) treats Views of different parts of the same Video surface as conflicting for simplicity. It doesn’t seem interesting to allow the case of reading from luma while simultaneously rendering to chroma in the same surface, for example, even though it may be possible in hardware.

Video Resource
Format
(DXGI_FORMAT_*)
Valid View Format
(DXGI_FORMAT_*)
Meaning Mapping to
View Channel
View Types
Supported
AYUV
(This is the most
common YUV
4:4:4 format)
R8G8B8A8_{UNORM|UINT},
or for UAVs, an
additional choice: R32_UINT
Straightforward mapping of the entire
surface in one view.

Using R32_UINT for UAVs allows both
read and write (as opposed
to just write for the other format)
V->R8,
U->G8,
Y->B8,
A->A8
SRV,
RTV,
UAV
YUY2
(This is the most
common YUV
4:2:2 format)
R8G8B8A8_{UNORM|UINT},
or for UAVs, an
additional choice: R32_UINT
Straightforward mapping of the entire
surface in one view.

Using R32_UINT for UAVs allows both read
and write (as opposed to just write for the
other format)
Y0->R8,
U0->G8,
Y1->B8,
V0->A8
SRV,
UAV
R8G8_B8G8_UNORM In this case the width of the view will
appear to be twice the R8G8B8A8 view would
be, with hardware reconstruction of RGBA done
automatically on read (and before filtering).
This has been in D3D hardware for a long time
(legacy) though it likely is not interesting any more.
Y0->R8,
U0->G8[0],
Y1->B8,
V0->G8[1]
SRV
NV12
(This is the most
common YUV
4:2:0 format)
R8_{UNORM|UINT} Luminance Data View Y->R8 SRV,
RTV,
UAV
R8G8_{UNORM|UINT} Chrominance Data View
(width and height are each 1/2
of luminance view)
U->R8,
V->G8
SRV,
RTV,
UAV
NV11
(This is the most
common YUV
4:1:1 format)
R8_{UNORM|UINT} Luminance Data View Y->R8 SRV,
RTV,
UAV
R8G8_{UNORM|UINT} Chrominance Data View
(width and height are each 1/4
of luminance view)
U->R8,
V->G8
SRV,
RTV,
UAV
P016
(This is a 16 bit per
channel planar
4:2:0 format)
R16_{UNORM|UINT} Luminance Data View Y->R16 SRV,
RTV,
UAV
R16G16_{UNORM|UINT},
or for UAVs, an
additional choice: R32_UINT
Chrominance Data View
(width and height are each 1/2
of luminance view)

Using R32_UINT for UAVs allows both read and
write (as opposed to just write for the other format)
U->R16,
V->G16
SRV,
RTV,
UAV
P010
(This is a 10 bit per
channel planar
4:2:0 format)
R16_{UNORM|UINT} Luminance Data View

D3D does not enforce or care whether or not the
lowest 6 bits are 0 (given this is a 10 bit format
using 16 bits) – application shader code would have
to enforce this manually if desired. From the D3D
point of view, this is format is no different than P016.
Y->R16 SRV,
RTV,
UAV
R16G16_{UNORM|UINT,
or for UAVs, an
additional choice: R32_UINT
Chrominance Data View
(width and height are each 1/2 of luminance view)

Using R32_UINT for UAVs allows both read and write
(as opposed to just write for the other format)

Same comment as above about this 10 bit format using
16 bits.
U->R16,
V->G16
SRV,
RTV,
UAV
Y216
(This is a 16 bit per
channel packed
4:2:2 format)
R16G16B16A16_{UNORM|UINT} Straightforward mapping of the entire surface
in one view.
Y0->R16,
U->G16,
Y1->B16,
V->A16
SRV,
UAV
Y210
(This is a 10 bit per
channel packed
4:2:2 format)
R16G16B16A16_{UNORM|UINT} Straightforward mapping of the entire surface
in one view.

D3D does not enforce or care whether or not the
lowest 6 bits are 0 (given this is a 10 bit format
using 16 bits) – application shader code would have
to enforce this manually if desired. From the D3D
point of view, this is format is no different than Y216.
Y0->R16,
U->G16,
Y1->B16,
V->A16
SRV,
UAV
Y416
(This is a 16 bit per
channel packed
4:4:4 format)
R16G16B16A16_{UNORM|UINT} Straightforward mapping of the entire surface
in one view.
U->R16,
Y->G16,
V->B16,
A->A16
SRV,
UAV
Y410
(This is a 10 bit per
channel packed
4:4:4 format)
R10G10B10A2_{UNORM|UINT},
or for UAVs, an
additional choice: R32_UINT
Straightforward mapping of the entire surface
in one view. Using R32_UINT for UAVs allows both
read and write (as opposed to just write for the
other format).
U->R10,
Y->G10,
V->B10,
A->A2
SRV,
UAV


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - d3d/archive/images/d3d11/D3D11_3_FunctionalSpec.htm [3016:3231]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

As of the D3D11.1 API/DDI, Video Resources can have SRV/RTV/UAVs created so that D3D shaders can process them. The way the underlying Video Resource shows up in D3D as an ID3D11Resource* is described in separate D3D11 Video specs. This section covers how given an ID3D11Resource* to a Video Resource, SRV/RTV/UAVs can be created in D3D.

These Video Resources will be either Texture2D or Texture2DArray, so the ViewDimension in the VIEW_DESC structure must match. Additionally, the format of the underlying Video Resource restricts the formats that the View can use.

The following table describes all the combinations of Video Resource and View(s) that can be made from them. Note that multiple views of different parts of the same surface can be created, and depending on the format they may have different sizes from each other. A few video formats do not support D3D SRV/UAV/RTVs at all: DXGI_FORMAT_420_OPAQUE, _AI44, _IA44, _P8 and _A8P8. Further details on all the video formats is provided in the D3D11 Video DDI spec.

Runtime read+write conflict prevention logic (which stops a resource from being bound as an SRV and RTV/UAV at the same time) treats Views of different parts of the same Video surface as conflicting for simplicity. It doesn’t seem interesting to allow the case of reading from luma while simultaneously rendering to chroma in the same surface, for example, even though it may be possible in hardware.

Video Resource
Format
(DXGI_FORMAT_*)
Valid View Format
(DXGI_FORMAT_*)
Meaning Mapping to
View Channel
View Types
Supported
AYUV
(This is the most
common YUV
4:4:4 format)
R8G8B8A8_{UNORM|UINT},
or for UAVs, an
additional choice: R32_UINT
Straightforward mapping of the entire
surface in one view.

Using R32_UINT for UAVs allows both
read and write (as opposed
to just write for the other format)
V->R8,
U->G8,
Y->B8,
A->A8
SRV,
RTV,
UAV
YUY2
(This is the most
common YUV
4:2:2 format)
R8G8B8A8_{UNORM|UINT},
or for UAVs, an
additional choice: R32_UINT
Straightforward mapping of the entire
surface in one view.

Using R32_UINT for UAVs allows both read
and write (as opposed to just write for the
other format)
Y0->R8,
U0->G8,
Y1->B8,
V0->A8
SRV,
UAV
R8G8_B8G8_UNORM In this case the width of the view will
appear to be twice the R8G8B8A8 view would
be, with hardware reconstruction of RGBA done
automatically on read (and before filtering).
This has been in D3D hardware for a long time
(legacy) though it likely is not interesting any more.
Y0->R8,
U0->G8[0],
Y1->B8,
V0->G8[1]
SRV
NV12
(This is the most
common YUV
4:2:0 format)
R8_{UNORM|UINT} Luminance Data View Y->R8 SRV,
RTV,
UAV
R8G8_{UNORM|UINT} Chrominance Data View
(width and height are each 1/2
of luminance view)
U->R8,
V->G8
SRV,
RTV,
UAV
NV11
(This is the most
common YUV
4:1:1 format)
R8_{UNORM|UINT} Luminance Data View Y->R8 SRV,
RTV,
UAV
R8G8_{UNORM|UINT} Chrominance Data View
(width and height are each 1/4
of luminance view)
U->R8,
V->G8
SRV,
RTV,
UAV
P016
(This is a 16 bit per
channel planar
4:2:0 format)
R16_{UNORM|UINT} Luminance Data View Y->R16 SRV,
RTV,
UAV
R16G16_{UNORM|UINT},
or for UAVs, an
additional choice: R32_UINT
Chrominance Data View
(width and height are each 1/2
of luminance view)

Using R32_UINT for UAVs allows both read and
write (as opposed to just write for the other format)
U->R16,
V->G16
SRV,
RTV,
UAV
P010
(This is a 10 bit per
channel planar
4:2:0 format)
R16_{UNORM|UINT} Luminance Data View

D3D does not enforce or care whether or not the
lowest 6 bits are 0 (given this is a 10 bit format
using 16 bits) – application shader code would have
to enforce this manually if desired. From the D3D
point of view, this is format is no different than P016.
Y->R16 SRV,
RTV,
UAV
R16G16_{UNORM|UINT,
or for UAVs, an
additional choice: R32_UINT
Chrominance Data View
(width and height are each 1/2 of luminance view)

Using R32_UINT for UAVs allows both read and write
(as opposed to just write for the other format)

Same comment as above about this 10 bit format using
16 bits.
U->R16,
V->G16
SRV,
RTV,
UAV
Y216
(This is a 16 bit per
channel packed
4:2:2 format)
R16G16B16A16_{UNORM|UINT} Straightforward mapping of the entire surface
in one view.
Y0->R16,
U->G16,
Y1->B16,
V->A16
SRV,
UAV
Y210
(This is a 10 bit per
channel packed
4:2:2 format)
R16G16B16A16_{UNORM|UINT} Straightforward mapping of the entire surface
in one view.

D3D does not enforce or care whether or not the
lowest 6 bits are 0 (given this is a 10 bit format
using 16 bits) – application shader code would have
to enforce this manually if desired. From the D3D
point of view, this is format is no different than Y216.
Y0->R16,
U->G16,
Y1->B16,
V->A16
SRV,
UAV
Y416
(This is a 16 bit per
channel packed
4:4:4 format)
R16G16B16A16_{UNORM|UINT} Straightforward mapping of the entire surface
in one view.
U->R16,
Y->G16,
V->B16,
A->A16
SRV,
UAV
Y410
(This is a 10 bit per
channel packed
4:4:4 format)
R10G10B10A2_{UNORM|UINT},
or for UAVs, an
additional choice: R32_UINT
Straightforward mapping of the entire surface
in one view. Using R32_UINT for UAVs allows both
read and write (as opposed to just write for the
other format).
U->R10,
Y->G10,
V->B10,
A->A2
SRV,
UAV


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -