mirror of
https://github.com/moonlight-stream/moonlight-qt
synced 2025-01-09 09:48:43 +00:00
8959ddbeb6
Subviews cause our Metal layer to fall out of the direct composition path on Intel hardware
41 lines
1.1 KiB
Metal
41 lines
1.1 KiB
Metal
using namespace metal;
|
|
|
|
struct Vertex
|
|
{
|
|
float4 position [[ position ]];
|
|
float2 texCoords;
|
|
};
|
|
|
|
struct CscParams
|
|
{
|
|
float3 matrix[3];
|
|
float3 offsets;
|
|
};
|
|
|
|
constexpr sampler s(coord::normalized, address::clamp_to_edge, filter::linear);
|
|
|
|
vertex Vertex vs_draw(constant Vertex *vertices [[ buffer(0) ]], uint id [[ vertex_id ]])
|
|
{
|
|
return vertices[id];
|
|
}
|
|
|
|
fragment float4 ps_draw_biplanar(Vertex v [[ stage_in ]],
|
|
constant CscParams &cscParams [[ buffer(0) ]],
|
|
texture2d<float> luminancePlane [[ texture(0) ]],
|
|
texture2d<float> chrominancePlane [[ texture(1) ]])
|
|
{
|
|
float3 yuv = float3(luminancePlane.sample(s, v.texCoords).r, chrominancePlane.sample(s, v.texCoords).rg);
|
|
yuv -= cscParams.offsets;
|
|
|
|
float3 rgb;
|
|
rgb.r = dot(yuv, cscParams.matrix[0]);
|
|
rgb.g = dot(yuv, cscParams.matrix[1]);
|
|
rgb.b = dot(yuv, cscParams.matrix[2]);
|
|
return float4(rgb, 1.0f);
|
|
}
|
|
|
|
fragment float4 ps_draw_rgb(Vertex v [[ stage_in ]],
|
|
texture2d<float> rgbTexture [[ texture(0) ]])
|
|
{
|
|
return rgbTexture.sample(s, v.texCoords);
|
|
}
|