Implement YUV 4:4:4 decoding with D3D11VA on Intel GPUs
This commit is contained in:
parent
6c6f808365
commit
0bb0d27d64
10 changed files with 223 additions and 100 deletions
|
|
@ -3,4 +3,6 @@ fxc /T vs_4_0_level_9_3 /Fo d3d11_vertex.fxc d3d11_vertex.hlsl
|
|||
fxc /T ps_4_0_level_9_3 /Fo d3d11_overlay_pixel.fxc d3d11_overlay_pixel.hlsl
|
||||
fxc /T ps_4_0_level_9_3 /Fo d3d11_genyuv_pixel.fxc d3d11_genyuv_pixel.hlsl
|
||||
fxc /T ps_4_0_level_9_3 /Fo d3d11_bt601lim_pixel.fxc d3d11_bt601lim_pixel.hlsl
|
||||
fxc /T ps_4_0_level_9_3 /Fo d3d11_bt2020lim_pixel.fxc d3d11_bt2020lim_pixel.hlsl
|
||||
fxc /T ps_4_0_level_9_3 /Fo d3d11_bt2020lim_pixel.fxc d3d11_bt2020lim_pixel.hlsl
|
||||
fxc /T ps_4_0_level_9_3 /Fo d3d11_ayuv_pixel.fxc d3d11_ayuv_pixel.hlsl
|
||||
fxc /T ps_4_0_level_9_3 /Fo d3d11_y410_pixel.fxc d3d11_y410_pixel.hlsl
|
||||
BIN
app/shaders/d3d11_ayuv_pixel.fxc
Normal file
BIN
app/shaders/d3d11_ayuv_pixel.fxc
Normal file
Binary file not shown.
9
app/shaders/d3d11_ayuv_pixel.hlsl
Normal file
9
app/shaders/d3d11_ayuv_pixel.hlsl
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#include "d3d11_yuv444_pixel_start.hlsli"
|
||||
|
||||
min16float3 swizzle(min16float3 input)
|
||||
{
|
||||
// AYUV SRVs are in VUYA order
|
||||
return input.bgr;
|
||||
}
|
||||
|
||||
#include "d3d11_yuv444_pixel_end.hlsli"
|
||||
BIN
app/shaders/d3d11_y410_pixel.fxc
Normal file
BIN
app/shaders/d3d11_y410_pixel.fxc
Normal file
Binary file not shown.
9
app/shaders/d3d11_y410_pixel.hlsl
Normal file
9
app/shaders/d3d11_y410_pixel.hlsl
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#include "d3d11_yuv444_pixel_start.hlsli"
|
||||
|
||||
min16float3 swizzle(min16float3 input)
|
||||
{
|
||||
// Y410 SRVs are in UYVA order
|
||||
return input.grb;
|
||||
}
|
||||
|
||||
#include "d3d11_yuv444_pixel_end.hlsli"
|
||||
13
app/shaders/d3d11_yuv444_pixel_end.hlsli
Normal file
13
app/shaders/d3d11_yuv444_pixel_end.hlsli
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
min16float4 main(ShaderInput input) : SV_TARGET
|
||||
{
|
||||
// Clamp the texcoords to avoid sampling the row of texels adjacent to the alignment padding
|
||||
min16float3 yuv = swizzle(videoTex.Sample(theSampler, min(input.tex, chromaTexMax.rg)));
|
||||
|
||||
// Subtract the YUV offset for limited vs full range
|
||||
yuv -= offsets;
|
||||
|
||||
// Multiply by the conversion matrix for this colorspace
|
||||
yuv = mul(yuv, cscMatrix);
|
||||
|
||||
return min16float4(yuv, 1.0);
|
||||
}
|
||||
19
app/shaders/d3d11_yuv444_pixel_start.hlsli
Normal file
19
app/shaders/d3d11_yuv444_pixel_start.hlsli
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
Texture2D<min16float3> videoTex : register(t0);
|
||||
SamplerState theSampler : register(s0);
|
||||
|
||||
struct ShaderInput
|
||||
{
|
||||
float4 pos : SV_POSITION;
|
||||
float2 tex : TEXCOORD0;
|
||||
};
|
||||
|
||||
cbuffer ChromaLimitBuf : register(b0)
|
||||
{
|
||||
min16float3 chromaTexMax;
|
||||
};
|
||||
|
||||
cbuffer CSC_CONST_BUF : register(b1)
|
||||
{
|
||||
min16float3x3 cscMatrix;
|
||||
min16float3 offsets;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue