Skip Gamma and Gamut conversions for BT.709->SRGB

This introduces a new field 'doYuvToRgbConversionOnly' in
ExternalTextureParams to have the WGSL only do yuv->rgb conversion for
better performance. User studies shows that users don't really care
about the Gamma difference between 2.4 and 2.2.
https://source.chromium.org/chromium/chromium/src/+/main:ui/gfx/color_space.cc;l=1022;drc=a1dbb594a6741a400db35fe3678e77bad2504ea4

Bug: dawn:1082
Bug: dawn:1466
Change-Id: I61c0fe65c5969d8a61c267c202c8dd64c259ed8a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/92901
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Jie A Chen <jie.a.chen@intel.com>
This commit is contained in:
jchen10 2022-06-22 03:14:26 +00:00 committed by Dawn LUCI CQ
parent 797f0f82e0
commit ef62b58cf9
27 changed files with 586 additions and 413 deletions

View File

@ -1330,6 +1330,7 @@
{"name": "label", "type": "char", "annotation": "const*", "length": "strlen", "optional": true}, {"name": "label", "type": "char", "annotation": "const*", "length": "strlen", "optional": true},
{"name": "plane 0", "type": "texture view"}, {"name": "plane 0", "type": "texture view"},
{"name": "plane 1", "type": "texture view", "optional": true}, {"name": "plane 1", "type": "texture view", "optional": true},
{"name": "do yuv to rgb conversion only", "type": "bool", "default": "false"},
{"name": "yuv to rgb conversion matrix", "type": "float", "annotation": "const*", {"name": "yuv to rgb conversion matrix", "type": "float", "annotation": "const*",
"length": 12, "optional": true}, "length": 12, "optional": true},
{"name": "src transfer function parameters", "type": "float", "annotation": "const*", {"name": "src transfer function parameters", "type": "float", "annotation": "const*",

View File

@ -152,6 +152,8 @@ MaybeError ExternalTextureBase::Initialize(DeviceBase* device,
ExternalTextureParams params; ExternalTextureParams params;
params.numPlanes = descriptor->plane1 == nullptr ? 1 : 2; params.numPlanes = descriptor->plane1 == nullptr ? 1 : 2;
params.doYuvToRgbConversionOnly = descriptor->doYuvToRgbConversionOnly ? 1 : 0;
// YUV-to-RGB conversion is performed by multiplying the source YUV values with a 4x3 matrix // YUV-to-RGB conversion is performed by multiplying the source YUV values with a 4x3 matrix
// passed from Chromium. The matrix was originally sourced from /skia/src/core/SkYUVMath.cpp. // passed from Chromium. The matrix was originally sourced from /skia/src/core/SkYUVMath.cpp.
// This matrix is only used in multiplanar scenarios. // This matrix is only used in multiplanar scenarios.

View File

@ -28,7 +28,9 @@ class TextureViewBase;
struct ExternalTextureParams { struct ExternalTextureParams {
uint32_t numPlanes; uint32_t numPlanes;
std::array<uint32_t, 3> padding; // TODO(crbug.com/dawn/1466): Only go as few steps as necessary.
uint32_t doYuvToRgbConversionOnly;
std::array<uint32_t, 2> padding;
std::array<float, 12> yuvToRgbConversionMatrix; std::array<float, 12> yuvToRgbConversionMatrix;
std::array<float, 8> gammaDecodingParams = {}; std::array<float, 8> gammaDecodingParams = {};
std::array<float, 8> gammaEncodingParams = {}; std::array<float, 8> gammaEncodingParams = {};

View File

@ -251,6 +251,7 @@ struct MultiplanarExternalTexture::State {
// Create ExternalTextureParams struct. // Create ExternalTextureParams struct.
ast::StructMemberList ext_tex_params_member_list = { ast::StructMemberList ext_tex_params_member_list = {
b.Member("numPlanes", b.ty.u32()), b.Member("numPlanes", b.ty.u32()),
b.Member("doYuvToRgbConversionOnly", b.ty.u32()),
b.Member("yuvToRgbConversionMatrix", b.ty.mat3x4(b.ty.f32())), b.Member("yuvToRgbConversionMatrix", b.ty.mat3x4(b.ty.f32())),
b.Member("gammaDecodeParams", b.ty.type_name("GammaTransferParams")), b.Member("gammaDecodeParams", b.ty.type_name("GammaTransferParams")),
b.Member("gammaEncodeParams", b.ty.type_name("GammaTransferParams")), b.Member("gammaEncodeParams", b.ty.type_name("GammaTransferParams")),
@ -340,14 +341,20 @@ struct MultiplanarExternalTexture::State {
b.Mul(b.vec4<f32>(b.MemberAccessor(plane_0_call, "r"), b.Mul(b.vec4<f32>(b.MemberAccessor(plane_0_call, "r"),
b.MemberAccessor(plane_1_call, "rg"), 1_f), b.MemberAccessor(plane_1_call, "rg"), 1_f),
b.MemberAccessor("params", "yuvToRgbConversionMatrix")))))), b.MemberAccessor("params", "yuvToRgbConversionMatrix")))))),
// color = gammaConversion(color, gammaDecodeParams); // if (params.doYuvToRgbConversionOnly == 0u)
b.Assign("color", b.Call("gammaCorrection", "color", b.If(b.create<ast::BinaryExpression>(
b.MemberAccessor("params", "gammaDecodeParams"))), ast::BinaryOp::kEqual, b.MemberAccessor("params", "doYuvToRgbConversionOnly"),
// color = (params.gamutConversionMatrix * color); b.Expr(0_u)),
b.Assign("color", b.Mul(b.MemberAccessor("params", "gamutConversionMatrix"), "color")), b.Block(
// color = gammaConversion(color, gammaEncodeParams); // color = gammaConversion(color, gammaDecodeParams);
b.Assign("color", b.Call("gammaCorrection", "color", b.Assign("color", b.Call("gammaCorrection", "color",
b.MemberAccessor("params", "gammaEncodeParams"))), b.MemberAccessor("params", "gammaDecodeParams"))),
// color = (params.gamutConversionMatrix * color);
b.Assign("color",
b.Mul(b.MemberAccessor("params", "gamutConversionMatrix"), "color")),
// color = gammaConversion(color, gammaEncodeParams);
b.Assign("color", b.Call("gammaCorrection", "color",
b.MemberAccessor("params", "gammaEncodeParams"))))),
// return vec4<f32>(color, 1.f); // return vec4<f32>(color, 1.f);
b.Return(b.vec4<f32>("color", 1_f))}; b.Return(b.vec4<f32>("color", 1_f))};
} }

View File

@ -46,7 +46,10 @@ struct BindingPoints {
/// textureSampleLevel that contain a texture_external parameter will be /// textureSampleLevel that contain a texture_external parameter will be
/// transformed into a newly generated version of the function, which can /// transformed into a newly generated version of the function, which can
/// perform the desired operation on a single RGBA plane or on seperate Y and UV /// perform the desired operation on a single RGBA plane or on seperate Y and UV
/// planes. /// planes, and do colorspace conversions including yuv->rgb conversion, gamma
/// decoding, gamut conversion, and gamma encoding steps. Specifically
// for BT.709 to SRGB conversion, it takes the fast path only doing the yuv->rgb
// step and skipping all other steps.
class MultiplanarExternalTexture : public Castable<MultiplanarExternalTexture, Transform> { class MultiplanarExternalTexture : public Castable<MultiplanarExternalTexture, Transform> {
public: public:
/// BindingsMap is a map where the key is the binding location of a /// BindingsMap is a map where the key is the binding location of a

View File

@ -118,6 +118,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -172,6 +173,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -225,6 +227,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -253,9 +256,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -298,6 +303,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -322,9 +328,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -370,6 +378,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -396,9 +405,11 @@ fn textureLoadExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, coord
} else { } else {
color = (vec4<f32>(textureLoad(plane0, coord, 0i).r, textureLoad(plane1, coord, 0i).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureLoad(plane0, coord, 0i).r, textureLoad(plane1, coord, 0i).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -440,6 +451,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -464,9 +476,11 @@ fn textureLoadExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, coord
} else { } else {
color = (vec4<f32>(textureLoad(plane0, coord, 0i).r, textureLoad(plane1, coord, 0i).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureLoad(plane0, coord, 0i).r, textureLoad(plane1, coord, 0i).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -512,6 +526,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -540,9 +555,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -553,9 +570,11 @@ fn textureLoadExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, coord
} else { } else {
color = (vec4<f32>(textureLoad(plane0, coord, 0i).r, textureLoad(plane1, coord, 0i).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureLoad(plane0, coord, 0i).r, textureLoad(plane1, coord, 0i).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -599,6 +618,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -623,9 +643,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -636,9 +658,11 @@ fn textureLoadExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, coord
} else { } else {
color = (vec4<f32>(textureLoad(plane0, coord, 0i).r, textureLoad(plane1, coord, 0i).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureLoad(plane0, coord, 0i).r, textureLoad(plane1, coord, 0i).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -688,6 +712,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -734,9 +759,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -788,6 +815,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -812,9 +840,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -870,6 +900,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -899,9 +930,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -952,6 +985,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -976,9 +1010,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -1036,6 +1072,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -1064,9 +1101,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -1129,6 +1168,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -1162,9 +1202,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -1223,6 +1265,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -1247,9 +1290,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -1313,6 +1358,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -1337,9 +1383,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -1391,6 +1439,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -1441,6 +1490,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -1467,9 +1517,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }
@ -1526,6 +1578,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
numPlanes : u32, numPlanes : u32,
doYuvToRgbConversionOnly : u32,
yuvToRgbConversionMatrix : mat3x4<f32>, yuvToRgbConversionMatrix : mat3x4<f32>,
gammaDecodeParams : GammaTransferParams, gammaDecodeParams : GammaTransferParams,
gammaEncodeParams : GammaTransferParams, gammaEncodeParams : GammaTransferParams,
@ -1555,9 +1608,11 @@ fn textureSampleExternal(plane0 : texture_2d<f32>, plane1 : texture_2d<f32>, smp
} else { } else {
color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (vec4<f32>(textureSampleLevel(plane0, smp, coord, 0.0f).r, textureSampleLevel(plane1, smp, coord, 0.0f).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return vec4<f32>(color, 1.0f); return vec4<f32>(color, 1.0f);
} }

View File

@ -13,6 +13,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -21,6 +22,7 @@ struct ExternalTextureParams {
layout(binding = 2) uniform ExternalTextureParams_1 { layout(binding = 2) uniform ExternalTextureParams_1 {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -61,6 +63,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -69,6 +72,7 @@ struct ExternalTextureParams {
layout(binding = 2) uniform ExternalTextureParams_1 { layout(binding = 2) uniform ExternalTextureParams_1 {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -103,6 +107,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -111,6 +116,7 @@ struct ExternalTextureParams {
layout(binding = 2) uniform ExternalTextureParams_1 { layout(binding = 2) uniform ExternalTextureParams_1 {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;

View File

@ -14,6 +14,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix; float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;

View File

@ -16,8 +16,9 @@
OpName %ext_tex_plane_1 "ext_tex_plane_1" OpName %ext_tex_plane_1 "ext_tex_plane_1"
OpName %ExternalTextureParams "ExternalTextureParams" OpName %ExternalTextureParams "ExternalTextureParams"
OpMemberName %ExternalTextureParams 0 "numPlanes" OpMemberName %ExternalTextureParams 0 "numPlanes"
OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix" OpMemberName %ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %ExternalTextureParams 2 "gammaDecodeParams" OpMemberName %ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %ExternalTextureParams 3 "gammaDecodeParams"
OpName %GammaTransferParams "GammaTransferParams" OpName %GammaTransferParams "GammaTransferParams"
OpMemberName %GammaTransferParams 0 "G" OpMemberName %GammaTransferParams 0 "G"
OpMemberName %GammaTransferParams 1 "A" OpMemberName %GammaTransferParams 1 "A"
@ -27,8 +28,8 @@
OpMemberName %GammaTransferParams 5 "E" OpMemberName %GammaTransferParams 5 "E"
OpMemberName %GammaTransferParams 6 "F" OpMemberName %GammaTransferParams 6 "F"
OpMemberName %GammaTransferParams 7 "padding" OpMemberName %GammaTransferParams 7 "padding"
OpMemberName %ExternalTextureParams 3 "gammaEncodeParams" OpMemberName %ExternalTextureParams 4 "gammaEncodeParams"
OpMemberName %ExternalTextureParams 4 "gamutConversionMatrix" OpMemberName %ExternalTextureParams 5 "gamutConversionMatrix"
OpName %ext_tex_params "ext_tex_params" OpName %ext_tex_params "ext_tex_params"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %textureDimensions_ba1481 "textureDimensions_ba1481" OpName %textureDimensions_ba1481 "textureDimensions_ba1481"
@ -43,10 +44,11 @@
OpDecorate %ext_tex_plane_1 Binding 1 OpDecorate %ext_tex_plane_1 Binding 1
OpDecorate %ExternalTextureParams Block OpDecorate %ExternalTextureParams Block
OpMemberDecorate %ExternalTextureParams 0 Offset 0 OpMemberDecorate %ExternalTextureParams 0 Offset 0
OpMemberDecorate %ExternalTextureParams 1 Offset 16 OpMemberDecorate %ExternalTextureParams 1 Offset 4
OpMemberDecorate %ExternalTextureParams 1 ColMajor OpMemberDecorate %ExternalTextureParams 2 Offset 16
OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 2 ColMajor
OpMemberDecorate %ExternalTextureParams 2 Offset 64 OpMemberDecorate %ExternalTextureParams 2 MatrixStride 16
OpMemberDecorate %ExternalTextureParams 3 Offset 64
OpMemberDecorate %GammaTransferParams 0 Offset 0 OpMemberDecorate %GammaTransferParams 0 Offset 0
OpMemberDecorate %GammaTransferParams 1 Offset 4 OpMemberDecorate %GammaTransferParams 1 Offset 4
OpMemberDecorate %GammaTransferParams 2 Offset 8 OpMemberDecorate %GammaTransferParams 2 Offset 8
@ -55,10 +57,10 @@
OpMemberDecorate %GammaTransferParams 5 Offset 20 OpMemberDecorate %GammaTransferParams 5 Offset 20
OpMemberDecorate %GammaTransferParams 6 Offset 24 OpMemberDecorate %GammaTransferParams 6 Offset 24
OpMemberDecorate %GammaTransferParams 7 Offset 28 OpMemberDecorate %GammaTransferParams 7 Offset 28
OpMemberDecorate %ExternalTextureParams 3 Offset 96 OpMemberDecorate %ExternalTextureParams 4 Offset 96
OpMemberDecorate %ExternalTextureParams 4 Offset 128 OpMemberDecorate %ExternalTextureParams 5 Offset 128
OpMemberDecorate %ExternalTextureParams 4 ColMajor OpMemberDecorate %ExternalTextureParams 5 ColMajor
OpMemberDecorate %ExternalTextureParams 4 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 5 MatrixStride 16
OpDecorate %ext_tex_params NonWritable OpDecorate %ext_tex_params NonWritable
OpDecorate %ext_tex_params DescriptorSet 1 OpDecorate %ext_tex_params DescriptorSet 1
OpDecorate %ext_tex_params Binding 2 OpDecorate %ext_tex_params Binding 2
@ -80,7 +82,7 @@
%GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint %GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint
%v3float = OpTypeVector %float 3 %v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3 %mat3v3float = OpTypeMatrix %v3float 3
%ExternalTextureParams = OpTypeStruct %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float %ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
%ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
%arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
}; };
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix; float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -36,9 +37,11 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
} else { } else {
color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f)); color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f));
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = mul(color, params.gamutConversionMatrix); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }
@ -71,7 +74,8 @@ float3x3 tint_symbol_7(uint4 buffer[11], uint offset) {
ExternalTextureParams tint_symbol_1(uint4 buffer[11], uint offset) { ExternalTextureParams tint_symbol_1(uint4 buffer[11], uint offset) {
const uint scalar_offset_14 = ((offset + 0u)) / 4; const uint scalar_offset_14 = ((offset + 0u)) / 4;
const ExternalTextureParams tint_symbol_10 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], tint_symbol_3(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 64u)), tint_symbol_5(buffer, (offset + 96u)), tint_symbol_7(buffer, (offset + 128u))}; const uint scalar_offset_15 = ((offset + 4u)) / 4;
const ExternalTextureParams tint_symbol_10 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_3(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 64u)), tint_symbol_5(buffer, (offset + 96u)), tint_symbol_7(buffer, (offset + 128u))};
return tint_symbol_10; return tint_symbol_10;
} }

View File

@ -14,7 +14,8 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
/* 0x0000 */ uint numPlanes; /* 0x0000 */ uint numPlanes;
/* 0x0004 */ int8_t tint_pad[12]; /* 0x0004 */ uint doYuvToRgbConversionOnly;
/* 0x0008 */ int8_t tint_pad[8];
/* 0x0010 */ float3x4 yuvToRgbConversionMatrix; /* 0x0010 */ float3x4 yuvToRgbConversionMatrix;
/* 0x0040 */ GammaTransferParams gammaDecodeParams; /* 0x0040 */ GammaTransferParams gammaDecodeParams;
/* 0x0060 */ GammaTransferParams gammaEncodeParams; /* 0x0060 */ GammaTransferParams gammaEncodeParams;
@ -35,9 +36,11 @@ float4 textureLoadExternal(texture2d<float, access::sample> plane0, texture2d<fl
} else { } else {
color = (float4(plane0.read(uint2(coord), 0)[0], float4(plane1.read(uint2(coord), 0)).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (float4(plane0.read(uint2(coord), 0)[0], float4(plane1.read(uint2(coord), 0)).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }

View File

@ -1,7 +1,7 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 129 ; Bound: 134
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%27 = OpExtInstImport "GLSL.std.450" %27 = OpExtInstImport "GLSL.std.450"
@ -16,8 +16,9 @@
OpName %ext_tex_plane_1 "ext_tex_plane_1" OpName %ext_tex_plane_1 "ext_tex_plane_1"
OpName %ExternalTextureParams "ExternalTextureParams" OpName %ExternalTextureParams "ExternalTextureParams"
OpMemberName %ExternalTextureParams 0 "numPlanes" OpMemberName %ExternalTextureParams 0 "numPlanes"
OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix" OpMemberName %ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %ExternalTextureParams 2 "gammaDecodeParams" OpMemberName %ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %ExternalTextureParams 3 "gammaDecodeParams"
OpName %GammaTransferParams "GammaTransferParams" OpName %GammaTransferParams "GammaTransferParams"
OpMemberName %GammaTransferParams 0 "G" OpMemberName %GammaTransferParams 0 "G"
OpMemberName %GammaTransferParams 1 "A" OpMemberName %GammaTransferParams 1 "A"
@ -27,8 +28,8 @@
OpMemberName %GammaTransferParams 5 "E" OpMemberName %GammaTransferParams 5 "E"
OpMemberName %GammaTransferParams 6 "F" OpMemberName %GammaTransferParams 6 "F"
OpMemberName %GammaTransferParams 7 "padding" OpMemberName %GammaTransferParams 7 "padding"
OpMemberName %ExternalTextureParams 3 "gammaEncodeParams" OpMemberName %ExternalTextureParams 4 "gammaEncodeParams"
OpMemberName %ExternalTextureParams 4 "gamutConversionMatrix" OpMemberName %ExternalTextureParams 5 "gamutConversionMatrix"
OpName %ext_tex_params "ext_tex_params" OpName %ext_tex_params "ext_tex_params"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %gammaCorrection "gammaCorrection" OpName %gammaCorrection "gammaCorrection"
@ -52,10 +53,11 @@
OpDecorate %ext_tex_plane_1 Binding 1 OpDecorate %ext_tex_plane_1 Binding 1
OpDecorate %ExternalTextureParams Block OpDecorate %ExternalTextureParams Block
OpMemberDecorate %ExternalTextureParams 0 Offset 0 OpMemberDecorate %ExternalTextureParams 0 Offset 0
OpMemberDecorate %ExternalTextureParams 1 Offset 16 OpMemberDecorate %ExternalTextureParams 1 Offset 4
OpMemberDecorate %ExternalTextureParams 1 ColMajor OpMemberDecorate %ExternalTextureParams 2 Offset 16
OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 2 ColMajor
OpMemberDecorate %ExternalTextureParams 2 Offset 64 OpMemberDecorate %ExternalTextureParams 2 MatrixStride 16
OpMemberDecorate %ExternalTextureParams 3 Offset 64
OpMemberDecorate %GammaTransferParams 0 Offset 0 OpMemberDecorate %GammaTransferParams 0 Offset 0
OpMemberDecorate %GammaTransferParams 1 Offset 4 OpMemberDecorate %GammaTransferParams 1 Offset 4
OpMemberDecorate %GammaTransferParams 2 Offset 8 OpMemberDecorate %GammaTransferParams 2 Offset 8
@ -64,10 +66,10 @@
OpMemberDecorate %GammaTransferParams 5 Offset 20 OpMemberDecorate %GammaTransferParams 5 Offset 20
OpMemberDecorate %GammaTransferParams 6 Offset 24 OpMemberDecorate %GammaTransferParams 6 Offset 24
OpMemberDecorate %GammaTransferParams 7 Offset 28 OpMemberDecorate %GammaTransferParams 7 Offset 28
OpMemberDecorate %ExternalTextureParams 3 Offset 96 OpMemberDecorate %ExternalTextureParams 4 Offset 96
OpMemberDecorate %ExternalTextureParams 4 Offset 128 OpMemberDecorate %ExternalTextureParams 5 Offset 128
OpMemberDecorate %ExternalTextureParams 4 ColMajor OpMemberDecorate %ExternalTextureParams 5 ColMajor
OpMemberDecorate %ExternalTextureParams 4 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 5 MatrixStride 16
OpDecorate %ext_tex_params NonWritable OpDecorate %ext_tex_params NonWritable
OpDecorate %ext_tex_params DescriptorSet 1 OpDecorate %ext_tex_params DescriptorSet 1
OpDecorate %ext_tex_params Binding 2 OpDecorate %ext_tex_params Binding 2
@ -89,7 +91,7 @@
%GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint %GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint
%v3float = OpTypeVector %float 3 %v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3 %mat3v3float = OpTypeMatrix %v3float 3
%ExternalTextureParams = OpTypeStruct %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float %ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
%ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
%arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
@ -105,11 +107,12 @@
%78 = OpConstantNull %int %78 = OpConstantNull %int
%v2float = OpTypeVector %float 2 %v2float = OpTypeVector %float 2
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%92 = OpConstantNull %uint
%void = OpTypeVoid %void = OpTypeVoid
%105 = OpTypeFunction %void %110 = OpTypeFunction %void
%112 = OpConstantNull %v2int %117 = OpConstantNull %v2int
%_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Function_v4float = OpTypePointer Function %v4float
%116 = OpTypeFunction %v4float %121 = OpTypeFunction %v4float
%gammaCorrection = OpFunction %v3float None %21 %gammaCorrection = OpFunction %v3float None %21
%v = OpFunctionParameter %v3float %v = OpFunctionParameter %v3float
%params = OpFunctionParameter %GammaTransferParams %params = OpFunctionParameter %GammaTransferParams
@ -170,59 +173,66 @@
%85 = OpCompositeExtract %float %84 0 %85 = OpCompositeExtract %float %84 0
%86 = OpCompositeExtract %float %84 1 %86 = OpCompositeExtract %float %84 1
%88 = OpCompositeConstruct %v4float %81 %85 %86 %float_1 %88 = OpCompositeConstruct %v4float %81 %85 %86 %float_1
%89 = OpCompositeExtract %mat3v4float %params_0 1 %89 = OpCompositeExtract %mat3v4float %params_0 2
%90 = OpVectorTimesMatrix %v3float %88 %89 %90 = OpVectorTimesMatrix %v3float %88 %89
OpStore %color %90 OpStore %color %90
OpBranch %74 OpBranch %74
%74 = OpLabel %74 = OpLabel
%92 = OpLoad %v3float %color %91 = OpCompositeExtract %uint %params_0 1
%93 = OpCompositeExtract %GammaTransferParams %params_0 2 %93 = OpIEqual %bool %91 %92
%91 = OpFunctionCall %v3float %gammaCorrection %92 %93 OpSelectionMerge %94 None
OpStore %color %91 OpBranchConditional %93 %95 %94
%94 = OpCompositeExtract %mat3v3float %params_0 4 %95 = OpLabel
%95 = OpLoad %v3float %color %97 = OpLoad %v3float %color
%96 = OpMatrixTimesVector %v3float %94 %95 %98 = OpCompositeExtract %GammaTransferParams %params_0 3
%96 = OpFunctionCall %v3float %gammaCorrection %97 %98
OpStore %color %96 OpStore %color %96
%98 = OpLoad %v3float %color %99 = OpCompositeExtract %mat3v3float %params_0 5
%99 = OpCompositeExtract %GammaTransferParams %params_0 3
%97 = OpFunctionCall %v3float %gammaCorrection %98 %99
OpStore %color %97
%100 = OpLoad %v3float %color %100 = OpLoad %v3float %color
%101 = OpCompositeExtract %float %100 0 %101 = OpMatrixTimesVector %v3float %99 %100
%102 = OpCompositeExtract %float %100 1 OpStore %color %101
%103 = OpCompositeExtract %float %100 2 %103 = OpLoad %v3float %color
%104 = OpCompositeConstruct %v4float %101 %102 %103 %float_1 %104 = OpCompositeExtract %GammaTransferParams %params_0 4
OpReturnValue %104 %102 = OpFunctionCall %v3float %gammaCorrection %103 %104
OpStore %color %102
OpBranch %94
%94 = OpLabel
%105 = OpLoad %v3float %color
%106 = OpCompositeExtract %float %105 0
%107 = OpCompositeExtract %float %105 1
%108 = OpCompositeExtract %float %105 2
%109 = OpCompositeConstruct %v4float %106 %107 %108 %float_1
OpReturnValue %109
OpFunctionEnd OpFunctionEnd
%textureLoad_8acf41 = OpFunction %void None %105 %textureLoad_8acf41 = OpFunction %void None %110
%108 = OpLabel %113 = OpLabel
%res = OpVariable %_ptr_Function_v4float Function %5 %res = OpVariable %_ptr_Function_v4float Function %5
%110 = OpLoad %11 %arg_0 %115 = OpLoad %11 %arg_0
%111 = OpLoad %11 %ext_tex_plane_1 %116 = OpLoad %11 %ext_tex_plane_1
%113 = OpLoad %ExternalTextureParams %ext_tex_params %118 = OpLoad %ExternalTextureParams %ext_tex_params
%109 = OpFunctionCall %v4float %textureLoadExternal %110 %111 %112 %113 %114 = OpFunctionCall %v4float %textureLoadExternal %115 %116 %117 %118
OpStore %res %109 OpStore %res %114
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %116 %vertex_main_inner = OpFunction %v4float None %121
%118 = OpLabel %123 = OpLabel
%119 = OpFunctionCall %void %textureLoad_8acf41 %124 = OpFunctionCall %void %textureLoad_8acf41
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %105 %vertex_main = OpFunction %void None %110
%121 = OpLabel %126 = OpLabel
%122 = OpFunctionCall %v4float %vertex_main_inner %127 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %122 OpStore %value %127
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %105 %fragment_main = OpFunction %void None %110
%124 = OpLabel %129 = OpLabel
%125 = OpFunctionCall %void %textureLoad_8acf41 %130 = OpFunctionCall %void %textureLoad_8acf41
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %105 %compute_main = OpFunction %void None %110
%127 = OpLabel %132 = OpLabel
%128 = OpFunctionCall %void %textureLoad_8acf41 %133 = OpFunctionCall %void %textureLoad_8acf41
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
}; };
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix; float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -37,9 +38,11 @@ float4 textureSampleExternal(Texture2D<float4> plane0, Texture2D<float4> plane1,
} else { } else {
color = mul(params.yuvToRgbConversionMatrix, float4(plane0.SampleLevel(smp, coord, 0.0f).r, plane1.SampleLevel(smp, coord, 0.0f).rg, 1.0f)); color = mul(params.yuvToRgbConversionMatrix, float4(plane0.SampleLevel(smp, coord, 0.0f).r, plane1.SampleLevel(smp, coord, 0.0f).rg, 1.0f));
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = mul(color, params.gamutConversionMatrix); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }
@ -72,7 +75,8 @@ float3x3 tint_symbol_7(uint4 buffer[11], uint offset) {
ExternalTextureParams tint_symbol_1(uint4 buffer[11], uint offset) { ExternalTextureParams tint_symbol_1(uint4 buffer[11], uint offset) {
const uint scalar_offset_14 = ((offset + 0u)) / 4; const uint scalar_offset_14 = ((offset + 0u)) / 4;
const ExternalTextureParams tint_symbol_10 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], tint_symbol_3(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 64u)), tint_symbol_5(buffer, (offset + 96u)), tint_symbol_7(buffer, (offset + 128u))}; const uint scalar_offset_15 = ((offset + 4u)) / 4;
const ExternalTextureParams tint_symbol_10 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_3(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 64u)), tint_symbol_5(buffer, (offset + 96u)), tint_symbol_7(buffer, (offset + 128u))};
return tint_symbol_10; return tint_symbol_10;
} }

View File

@ -14,7 +14,8 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
/* 0x0000 */ uint numPlanes; /* 0x0000 */ uint numPlanes;
/* 0x0004 */ int8_t tint_pad[12]; /* 0x0004 */ uint doYuvToRgbConversionOnly;
/* 0x0008 */ int8_t tint_pad[8];
/* 0x0010 */ float3x4 yuvToRgbConversionMatrix; /* 0x0010 */ float3x4 yuvToRgbConversionMatrix;
/* 0x0040 */ GammaTransferParams gammaDecodeParams; /* 0x0040 */ GammaTransferParams gammaDecodeParams;
/* 0x0060 */ GammaTransferParams gammaEncodeParams; /* 0x0060 */ GammaTransferParams gammaEncodeParams;
@ -35,9 +36,11 @@ float4 textureSampleExternal(texture2d<float, access::sample> plane0, texture2d<
} else { } else {
color = (float4(plane0.sample(smp, coord, level(0.0f))[0], float4(plane1.sample(smp, coord, level(0.0f))).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (float4(plane0.sample(smp, coord, level(0.0f))[0], float4(plane1.sample(smp, coord, level(0.0f))).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }

View File

@ -1,7 +1,7 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 135 ; Bound: 140
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%30 = OpExtInstImport "GLSL.std.450" %30 = OpExtInstImport "GLSL.std.450"
@ -16,8 +16,9 @@
OpName %ext_tex_plane_1 "ext_tex_plane_1" OpName %ext_tex_plane_1 "ext_tex_plane_1"
OpName %ExternalTextureParams "ExternalTextureParams" OpName %ExternalTextureParams "ExternalTextureParams"
OpMemberName %ExternalTextureParams 0 "numPlanes" OpMemberName %ExternalTextureParams 0 "numPlanes"
OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix" OpMemberName %ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %ExternalTextureParams 2 "gammaDecodeParams" OpMemberName %ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %ExternalTextureParams 3 "gammaDecodeParams"
OpName %GammaTransferParams "GammaTransferParams" OpName %GammaTransferParams "GammaTransferParams"
OpMemberName %GammaTransferParams 0 "G" OpMemberName %GammaTransferParams 0 "G"
OpMemberName %GammaTransferParams 1 "A" OpMemberName %GammaTransferParams 1 "A"
@ -27,8 +28,8 @@
OpMemberName %GammaTransferParams 5 "E" OpMemberName %GammaTransferParams 5 "E"
OpMemberName %GammaTransferParams 6 "F" OpMemberName %GammaTransferParams 6 "F"
OpMemberName %GammaTransferParams 7 "padding" OpMemberName %GammaTransferParams 7 "padding"
OpMemberName %ExternalTextureParams 3 "gammaEncodeParams" OpMemberName %ExternalTextureParams 4 "gammaEncodeParams"
OpMemberName %ExternalTextureParams 4 "gamutConversionMatrix" OpMemberName %ExternalTextureParams 5 "gamutConversionMatrix"
OpName %ext_tex_params "ext_tex_params" OpName %ext_tex_params "ext_tex_params"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -54,10 +55,11 @@
OpDecorate %ext_tex_plane_1 Binding 2 OpDecorate %ext_tex_plane_1 Binding 2
OpDecorate %ExternalTextureParams Block OpDecorate %ExternalTextureParams Block
OpMemberDecorate %ExternalTextureParams 0 Offset 0 OpMemberDecorate %ExternalTextureParams 0 Offset 0
OpMemberDecorate %ExternalTextureParams 1 Offset 16 OpMemberDecorate %ExternalTextureParams 1 Offset 4
OpMemberDecorate %ExternalTextureParams 1 ColMajor OpMemberDecorate %ExternalTextureParams 2 Offset 16
OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 2 ColMajor
OpMemberDecorate %ExternalTextureParams 2 Offset 64 OpMemberDecorate %ExternalTextureParams 2 MatrixStride 16
OpMemberDecorate %ExternalTextureParams 3 Offset 64
OpMemberDecorate %GammaTransferParams 0 Offset 0 OpMemberDecorate %GammaTransferParams 0 Offset 0
OpMemberDecorate %GammaTransferParams 1 Offset 4 OpMemberDecorate %GammaTransferParams 1 Offset 4
OpMemberDecorate %GammaTransferParams 2 Offset 8 OpMemberDecorate %GammaTransferParams 2 Offset 8
@ -66,10 +68,10 @@
OpMemberDecorate %GammaTransferParams 5 Offset 20 OpMemberDecorate %GammaTransferParams 5 Offset 20
OpMemberDecorate %GammaTransferParams 6 Offset 24 OpMemberDecorate %GammaTransferParams 6 Offset 24
OpMemberDecorate %GammaTransferParams 7 Offset 28 OpMemberDecorate %GammaTransferParams 7 Offset 28
OpMemberDecorate %ExternalTextureParams 3 Offset 96 OpMemberDecorate %ExternalTextureParams 4 Offset 96
OpMemberDecorate %ExternalTextureParams 4 Offset 128 OpMemberDecorate %ExternalTextureParams 5 Offset 128
OpMemberDecorate %ExternalTextureParams 4 ColMajor OpMemberDecorate %ExternalTextureParams 5 ColMajor
OpMemberDecorate %ExternalTextureParams 4 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 5 MatrixStride 16
OpDecorate %ext_tex_params NonWritable OpDecorate %ext_tex_params NonWritable
OpDecorate %ext_tex_params DescriptorSet 1 OpDecorate %ext_tex_params DescriptorSet 1
OpDecorate %ext_tex_params Binding 3 OpDecorate %ext_tex_params Binding 3
@ -93,7 +95,7 @@
%GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint %GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint
%v3float = OpTypeVector %float 3 %v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3 %mat3v3float = OpTypeMatrix %v3float 3
%ExternalTextureParams = OpTypeStruct %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float %ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
%ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
%arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
@ -110,11 +112,12 @@
%uint_1 = OpConstant %uint 1 %uint_1 = OpConstant %uint 1
%81 = OpTypeSampledImage %11 %81 = OpTypeSampledImage %11
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%97 = OpConstantNull %uint
%void = OpTypeVoid %void = OpTypeVoid
%110 = OpTypeFunction %void %115 = OpTypeFunction %void
%118 = OpConstantNull %v2float %123 = OpConstantNull %v2float
%_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Function_v4float = OpTypePointer Function %v4float
%122 = OpTypeFunction %v4float %127 = OpTypeFunction %v4float
%gammaCorrection = OpFunction %v3float None %24 %gammaCorrection = OpFunction %v3float None %24
%v = OpFunctionParameter %v3float %v = OpFunctionParameter %v3float
%params = OpFunctionParameter %GammaTransferParams %params = OpFunctionParameter %GammaTransferParams
@ -179,60 +182,67 @@
%90 = OpCompositeExtract %float %89 0 %90 = OpCompositeExtract %float %89 0
%91 = OpCompositeExtract %float %89 1 %91 = OpCompositeExtract %float %89 1
%93 = OpCompositeConstruct %v4float %86 %90 %91 %float_1 %93 = OpCompositeConstruct %v4float %86 %90 %91 %float_1
%94 = OpCompositeExtract %mat3v4float %params_0 1 %94 = OpCompositeExtract %mat3v4float %params_0 2
%95 = OpVectorTimesMatrix %v3float %93 %94 %95 = OpVectorTimesMatrix %v3float %93 %94
OpStore %color %95 OpStore %color %95
OpBranch %77 OpBranch %77
%77 = OpLabel %77 = OpLabel
%97 = OpLoad %v3float %color %96 = OpCompositeExtract %uint %params_0 1
%98 = OpCompositeExtract %GammaTransferParams %params_0 2 %98 = OpIEqual %bool %96 %97
%96 = OpFunctionCall %v3float %gammaCorrection %97 %98 OpSelectionMerge %99 None
OpStore %color %96 OpBranchConditional %98 %100 %99
%99 = OpCompositeExtract %mat3v3float %params_0 4 %100 = OpLabel
%100 = OpLoad %v3float %color %102 = OpLoad %v3float %color
%101 = OpMatrixTimesVector %v3float %99 %100 %103 = OpCompositeExtract %GammaTransferParams %params_0 3
%101 = OpFunctionCall %v3float %gammaCorrection %102 %103
OpStore %color %101 OpStore %color %101
%103 = OpLoad %v3float %color %104 = OpCompositeExtract %mat3v3float %params_0 5
%104 = OpCompositeExtract %GammaTransferParams %params_0 3
%102 = OpFunctionCall %v3float %gammaCorrection %103 %104
OpStore %color %102
%105 = OpLoad %v3float %color %105 = OpLoad %v3float %color
%106 = OpCompositeExtract %float %105 0 %106 = OpMatrixTimesVector %v3float %104 %105
%107 = OpCompositeExtract %float %105 1 OpStore %color %106
%108 = OpCompositeExtract %float %105 2 %108 = OpLoad %v3float %color
%109 = OpCompositeConstruct %v4float %106 %107 %108 %float_1 %109 = OpCompositeExtract %GammaTransferParams %params_0 4
OpReturnValue %109 %107 = OpFunctionCall %v3float %gammaCorrection %108 %109
OpStore %color %107
OpBranch %99
%99 = OpLabel
%110 = OpLoad %v3float %color
%111 = OpCompositeExtract %float %110 0
%112 = OpCompositeExtract %float %110 1
%113 = OpCompositeExtract %float %110 2
%114 = OpCompositeConstruct %v4float %111 %112 %113 %float_1
OpReturnValue %114
OpFunctionEnd OpFunctionEnd
%textureSampleLevel_979816 = OpFunction %void None %110 %textureSampleLevel_979816 = OpFunction %void None %115
%113 = OpLabel %118 = OpLabel
%res = OpVariable %_ptr_Function_v4float Function %5 %res = OpVariable %_ptr_Function_v4float Function %5
%115 = OpLoad %11 %arg_0 %120 = OpLoad %11 %arg_0
%116 = OpLoad %11 %ext_tex_plane_1 %121 = OpLoad %11 %ext_tex_plane_1
%117 = OpLoad %23 %arg_1 %122 = OpLoad %23 %arg_1
%119 = OpLoad %ExternalTextureParams %ext_tex_params %124 = OpLoad %ExternalTextureParams %ext_tex_params
%114 = OpFunctionCall %v4float %textureSampleExternal %115 %116 %117 %118 %119 %119 = OpFunctionCall %v4float %textureSampleExternal %120 %121 %122 %123 %124
OpStore %res %114 OpStore %res %119
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %122 %vertex_main_inner = OpFunction %v4float None %127
%124 = OpLabel %129 = OpLabel
%125 = OpFunctionCall %void %textureSampleLevel_979816 %130 = OpFunctionCall %void %textureSampleLevel_979816
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %110 %vertex_main = OpFunction %void None %115
%127 = OpLabel %132 = OpLabel
%128 = OpFunctionCall %v4float %vertex_main_inner %133 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %128 OpStore %value %133
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %110 %fragment_main = OpFunction %void None %115
%130 = OpLabel %135 = OpLabel
%131 = OpFunctionCall %void %textureSampleLevel_979816 %136 = OpFunctionCall %void %textureSampleLevel_979816
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %110 %compute_main = OpFunction %void None %115
%133 = OpLabel %138 = OpLabel
%134 = OpFunctionCall %void %textureSampleLevel_979816 %139 = OpFunctionCall %void %textureSampleLevel_979816
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -13,6 +13,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -21,6 +22,7 @@ struct ExternalTextureParams {
layout(binding = 2) uniform ExternalTextureParams_1 { layout(binding = 2) uniform ExternalTextureParams_1 {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -61,6 +63,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -69,6 +72,7 @@ struct ExternalTextureParams {
layout(binding = 2) uniform ExternalTextureParams_1 { layout(binding = 2) uniform ExternalTextureParams_1 {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -103,6 +107,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -111,6 +116,7 @@ struct ExternalTextureParams {
layout(binding = 2) uniform ExternalTextureParams_1 { layout(binding = 2) uniform ExternalTextureParams_1 {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
mat3x4 yuvToRgbConversionMatrix; mat3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;

View File

@ -14,6 +14,7 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix; float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;

View File

@ -16,8 +16,9 @@
OpName %ext_tex_plane_1 "ext_tex_plane_1" OpName %ext_tex_plane_1 "ext_tex_plane_1"
OpName %ExternalTextureParams "ExternalTextureParams" OpName %ExternalTextureParams "ExternalTextureParams"
OpMemberName %ExternalTextureParams 0 "numPlanes" OpMemberName %ExternalTextureParams 0 "numPlanes"
OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix" OpMemberName %ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %ExternalTextureParams 2 "gammaDecodeParams" OpMemberName %ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %ExternalTextureParams 3 "gammaDecodeParams"
OpName %GammaTransferParams "GammaTransferParams" OpName %GammaTransferParams "GammaTransferParams"
OpMemberName %GammaTransferParams 0 "G" OpMemberName %GammaTransferParams 0 "G"
OpMemberName %GammaTransferParams 1 "A" OpMemberName %GammaTransferParams 1 "A"
@ -27,8 +28,8 @@
OpMemberName %GammaTransferParams 5 "E" OpMemberName %GammaTransferParams 5 "E"
OpMemberName %GammaTransferParams 6 "F" OpMemberName %GammaTransferParams 6 "F"
OpMemberName %GammaTransferParams 7 "padding" OpMemberName %GammaTransferParams 7 "padding"
OpMemberName %ExternalTextureParams 3 "gammaEncodeParams" OpMemberName %ExternalTextureParams 4 "gammaEncodeParams"
OpMemberName %ExternalTextureParams 4 "gamutConversionMatrix" OpMemberName %ExternalTextureParams 5 "gamutConversionMatrix"
OpName %ext_tex_params "ext_tex_params" OpName %ext_tex_params "ext_tex_params"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %textureDimensions_ba1481 "textureDimensions_ba1481" OpName %textureDimensions_ba1481 "textureDimensions_ba1481"
@ -43,10 +44,11 @@
OpDecorate %ext_tex_plane_1 Binding 1 OpDecorate %ext_tex_plane_1 Binding 1
OpDecorate %ExternalTextureParams Block OpDecorate %ExternalTextureParams Block
OpMemberDecorate %ExternalTextureParams 0 Offset 0 OpMemberDecorate %ExternalTextureParams 0 Offset 0
OpMemberDecorate %ExternalTextureParams 1 Offset 16 OpMemberDecorate %ExternalTextureParams 1 Offset 4
OpMemberDecorate %ExternalTextureParams 1 ColMajor OpMemberDecorate %ExternalTextureParams 2 Offset 16
OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 2 ColMajor
OpMemberDecorate %ExternalTextureParams 2 Offset 64 OpMemberDecorate %ExternalTextureParams 2 MatrixStride 16
OpMemberDecorate %ExternalTextureParams 3 Offset 64
OpMemberDecorate %GammaTransferParams 0 Offset 0 OpMemberDecorate %GammaTransferParams 0 Offset 0
OpMemberDecorate %GammaTransferParams 1 Offset 4 OpMemberDecorate %GammaTransferParams 1 Offset 4
OpMemberDecorate %GammaTransferParams 2 Offset 8 OpMemberDecorate %GammaTransferParams 2 Offset 8
@ -55,10 +57,10 @@
OpMemberDecorate %GammaTransferParams 5 Offset 20 OpMemberDecorate %GammaTransferParams 5 Offset 20
OpMemberDecorate %GammaTransferParams 6 Offset 24 OpMemberDecorate %GammaTransferParams 6 Offset 24
OpMemberDecorate %GammaTransferParams 7 Offset 28 OpMemberDecorate %GammaTransferParams 7 Offset 28
OpMemberDecorate %ExternalTextureParams 3 Offset 96 OpMemberDecorate %ExternalTextureParams 4 Offset 96
OpMemberDecorate %ExternalTextureParams 4 Offset 128 OpMemberDecorate %ExternalTextureParams 5 Offset 128
OpMemberDecorate %ExternalTextureParams 4 ColMajor OpMemberDecorate %ExternalTextureParams 5 ColMajor
OpMemberDecorate %ExternalTextureParams 4 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 5 MatrixStride 16
OpDecorate %ext_tex_params NonWritable OpDecorate %ext_tex_params NonWritable
OpDecorate %ext_tex_params DescriptorSet 1 OpDecorate %ext_tex_params DescriptorSet 1
OpDecorate %ext_tex_params Binding 2 OpDecorate %ext_tex_params Binding 2
@ -80,7 +82,7 @@
%GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint %GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint
%v3float = OpTypeVector %float 3 %v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3 %mat3v3float = OpTypeMatrix %v3float 3
%ExternalTextureParams = OpTypeStruct %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float %ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
%ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
%arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
}; };
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix; float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -36,9 +37,11 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
} else { } else {
color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f)); color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f));
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = mul(color, params.gamutConversionMatrix); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }
@ -71,7 +74,8 @@ float3x3 tint_symbol_7(uint4 buffer[11], uint offset) {
ExternalTextureParams tint_symbol_1(uint4 buffer[11], uint offset) { ExternalTextureParams tint_symbol_1(uint4 buffer[11], uint offset) {
const uint scalar_offset_14 = ((offset + 0u)) / 4; const uint scalar_offset_14 = ((offset + 0u)) / 4;
const ExternalTextureParams tint_symbol_10 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], tint_symbol_3(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 64u)), tint_symbol_5(buffer, (offset + 96u)), tint_symbol_7(buffer, (offset + 128u))}; const uint scalar_offset_15 = ((offset + 4u)) / 4;
const ExternalTextureParams tint_symbol_10 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_3(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 64u)), tint_symbol_5(buffer, (offset + 96u)), tint_symbol_7(buffer, (offset + 128u))};
return tint_symbol_10; return tint_symbol_10;
} }

View File

@ -14,7 +14,8 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
/* 0x0000 */ uint numPlanes; /* 0x0000 */ uint numPlanes;
/* 0x0004 */ int8_t tint_pad[12]; /* 0x0004 */ uint doYuvToRgbConversionOnly;
/* 0x0008 */ int8_t tint_pad[8];
/* 0x0010 */ float3x4 yuvToRgbConversionMatrix; /* 0x0010 */ float3x4 yuvToRgbConversionMatrix;
/* 0x0040 */ GammaTransferParams gammaDecodeParams; /* 0x0040 */ GammaTransferParams gammaDecodeParams;
/* 0x0060 */ GammaTransferParams gammaEncodeParams; /* 0x0060 */ GammaTransferParams gammaEncodeParams;
@ -35,9 +36,11 @@ float4 textureLoadExternal(texture2d<float, access::sample> plane0, texture2d<fl
} else { } else {
color = (float4(plane0.read(uint2(coord), 0)[0], float4(plane1.read(uint2(coord), 0)).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (float4(plane0.read(uint2(coord), 0)[0], float4(plane1.read(uint2(coord), 0)).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }

View File

@ -1,7 +1,7 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 132 ; Bound: 137
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%27 = OpExtInstImport "GLSL.std.450" %27 = OpExtInstImport "GLSL.std.450"
@ -16,8 +16,9 @@
OpName %ext_tex_plane_1 "ext_tex_plane_1" OpName %ext_tex_plane_1 "ext_tex_plane_1"
OpName %ExternalTextureParams "ExternalTextureParams" OpName %ExternalTextureParams "ExternalTextureParams"
OpMemberName %ExternalTextureParams 0 "numPlanes" OpMemberName %ExternalTextureParams 0 "numPlanes"
OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix" OpMemberName %ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %ExternalTextureParams 2 "gammaDecodeParams" OpMemberName %ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %ExternalTextureParams 3 "gammaDecodeParams"
OpName %GammaTransferParams "GammaTransferParams" OpName %GammaTransferParams "GammaTransferParams"
OpMemberName %GammaTransferParams 0 "G" OpMemberName %GammaTransferParams 0 "G"
OpMemberName %GammaTransferParams 1 "A" OpMemberName %GammaTransferParams 1 "A"
@ -27,8 +28,8 @@
OpMemberName %GammaTransferParams 5 "E" OpMemberName %GammaTransferParams 5 "E"
OpMemberName %GammaTransferParams 6 "F" OpMemberName %GammaTransferParams 6 "F"
OpMemberName %GammaTransferParams 7 "padding" OpMemberName %GammaTransferParams 7 "padding"
OpMemberName %ExternalTextureParams 3 "gammaEncodeParams" OpMemberName %ExternalTextureParams 4 "gammaEncodeParams"
OpMemberName %ExternalTextureParams 4 "gamutConversionMatrix" OpMemberName %ExternalTextureParams 5 "gamutConversionMatrix"
OpName %ext_tex_params "ext_tex_params" OpName %ext_tex_params "ext_tex_params"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %gammaCorrection "gammaCorrection" OpName %gammaCorrection "gammaCorrection"
@ -53,10 +54,11 @@
OpDecorate %ext_tex_plane_1 Binding 1 OpDecorate %ext_tex_plane_1 Binding 1
OpDecorate %ExternalTextureParams Block OpDecorate %ExternalTextureParams Block
OpMemberDecorate %ExternalTextureParams 0 Offset 0 OpMemberDecorate %ExternalTextureParams 0 Offset 0
OpMemberDecorate %ExternalTextureParams 1 Offset 16 OpMemberDecorate %ExternalTextureParams 1 Offset 4
OpMemberDecorate %ExternalTextureParams 1 ColMajor OpMemberDecorate %ExternalTextureParams 2 Offset 16
OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 2 ColMajor
OpMemberDecorate %ExternalTextureParams 2 Offset 64 OpMemberDecorate %ExternalTextureParams 2 MatrixStride 16
OpMemberDecorate %ExternalTextureParams 3 Offset 64
OpMemberDecorate %GammaTransferParams 0 Offset 0 OpMemberDecorate %GammaTransferParams 0 Offset 0
OpMemberDecorate %GammaTransferParams 1 Offset 4 OpMemberDecorate %GammaTransferParams 1 Offset 4
OpMemberDecorate %GammaTransferParams 2 Offset 8 OpMemberDecorate %GammaTransferParams 2 Offset 8
@ -65,10 +67,10 @@
OpMemberDecorate %GammaTransferParams 5 Offset 20 OpMemberDecorate %GammaTransferParams 5 Offset 20
OpMemberDecorate %GammaTransferParams 6 Offset 24 OpMemberDecorate %GammaTransferParams 6 Offset 24
OpMemberDecorate %GammaTransferParams 7 Offset 28 OpMemberDecorate %GammaTransferParams 7 Offset 28
OpMemberDecorate %ExternalTextureParams 3 Offset 96 OpMemberDecorate %ExternalTextureParams 4 Offset 96
OpMemberDecorate %ExternalTextureParams 4 Offset 128 OpMemberDecorate %ExternalTextureParams 5 Offset 128
OpMemberDecorate %ExternalTextureParams 4 ColMajor OpMemberDecorate %ExternalTextureParams 5 ColMajor
OpMemberDecorate %ExternalTextureParams 4 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 5 MatrixStride 16
OpDecorate %ext_tex_params NonWritable OpDecorate %ext_tex_params NonWritable
OpDecorate %ext_tex_params DescriptorSet 1 OpDecorate %ext_tex_params DescriptorSet 1
OpDecorate %ext_tex_params Binding 2 OpDecorate %ext_tex_params Binding 2
@ -90,7 +92,7 @@
%GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint %GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint
%v3float = OpTypeVector %float 3 %v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3 %mat3v3float = OpTypeMatrix %v3float 3
%ExternalTextureParams = OpTypeStruct %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float %ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
%ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
%arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
@ -106,12 +108,13 @@
%78 = OpConstantNull %int %78 = OpConstantNull %int
%v2float = OpTypeVector %float 2 %v2float = OpTypeVector %float 2
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%92 = OpConstantNull %uint
%void = OpTypeVoid %void = OpTypeVoid
%105 = OpTypeFunction %void %110 = OpTypeFunction %void
%109 = OpConstantNull %v2int %114 = OpConstantNull %v2int
%_ptr_Function_v2int = OpTypePointer Function %v2int %_ptr_Function_v2int = OpTypePointer Function %v2int
%_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Function_v4float = OpTypePointer Function %v4float
%119 = OpTypeFunction %v4float %124 = OpTypeFunction %v4float
%gammaCorrection = OpFunction %v3float None %21 %gammaCorrection = OpFunction %v3float None %21
%v = OpFunctionParameter %v3float %v = OpFunctionParameter %v3float
%params = OpFunctionParameter %GammaTransferParams %params = OpFunctionParameter %GammaTransferParams
@ -172,62 +175,69 @@
%85 = OpCompositeExtract %float %84 0 %85 = OpCompositeExtract %float %84 0
%86 = OpCompositeExtract %float %84 1 %86 = OpCompositeExtract %float %84 1
%88 = OpCompositeConstruct %v4float %81 %85 %86 %float_1 %88 = OpCompositeConstruct %v4float %81 %85 %86 %float_1
%89 = OpCompositeExtract %mat3v4float %params_0 1 %89 = OpCompositeExtract %mat3v4float %params_0 2
%90 = OpVectorTimesMatrix %v3float %88 %89 %90 = OpVectorTimesMatrix %v3float %88 %89
OpStore %color %90 OpStore %color %90
OpBranch %74 OpBranch %74
%74 = OpLabel %74 = OpLabel
%92 = OpLoad %v3float %color %91 = OpCompositeExtract %uint %params_0 1
%93 = OpCompositeExtract %GammaTransferParams %params_0 2 %93 = OpIEqual %bool %91 %92
%91 = OpFunctionCall %v3float %gammaCorrection %92 %93 OpSelectionMerge %94 None
OpStore %color %91 OpBranchConditional %93 %95 %94
%94 = OpCompositeExtract %mat3v3float %params_0 4 %95 = OpLabel
%95 = OpLoad %v3float %color %97 = OpLoad %v3float %color
%96 = OpMatrixTimesVector %v3float %94 %95 %98 = OpCompositeExtract %GammaTransferParams %params_0 3
%96 = OpFunctionCall %v3float %gammaCorrection %97 %98
OpStore %color %96 OpStore %color %96
%98 = OpLoad %v3float %color %99 = OpCompositeExtract %mat3v3float %params_0 5
%99 = OpCompositeExtract %GammaTransferParams %params_0 3
%97 = OpFunctionCall %v3float %gammaCorrection %98 %99
OpStore %color %97
%100 = OpLoad %v3float %color %100 = OpLoad %v3float %color
%101 = OpCompositeExtract %float %100 0 %101 = OpMatrixTimesVector %v3float %99 %100
%102 = OpCompositeExtract %float %100 1 OpStore %color %101
%103 = OpCompositeExtract %float %100 2 %103 = OpLoad %v3float %color
%104 = OpCompositeConstruct %v4float %101 %102 %103 %float_1 %104 = OpCompositeExtract %GammaTransferParams %params_0 4
OpReturnValue %104 %102 = OpFunctionCall %v3float %gammaCorrection %103 %104
OpStore %color %102
OpBranch %94
%94 = OpLabel
%105 = OpLoad %v3float %color
%106 = OpCompositeExtract %float %105 0
%107 = OpCompositeExtract %float %105 1
%108 = OpCompositeExtract %float %105 2
%109 = OpCompositeConstruct %v4float %106 %107 %108 %float_1
OpReturnValue %109
OpFunctionEnd OpFunctionEnd
%textureLoad_8acf41 = OpFunction %void None %105 %textureLoad_8acf41 = OpFunction %void None %110
%108 = OpLabel %113 = OpLabel
%arg_1 = OpVariable %_ptr_Function_v2int Function %109 %arg_1 = OpVariable %_ptr_Function_v2int Function %114
%res = OpVariable %_ptr_Function_v4float Function %5 %res = OpVariable %_ptr_Function_v4float Function %5
OpStore %arg_1 %109 OpStore %arg_1 %114
%113 = OpLoad %11 %arg_0 %118 = OpLoad %11 %arg_0
%114 = OpLoad %11 %ext_tex_plane_1 %119 = OpLoad %11 %ext_tex_plane_1
%115 = OpLoad %v2int %arg_1 %120 = OpLoad %v2int %arg_1
%116 = OpLoad %ExternalTextureParams %ext_tex_params %121 = OpLoad %ExternalTextureParams %ext_tex_params
%112 = OpFunctionCall %v4float %textureLoadExternal %113 %114 %115 %116 %117 = OpFunctionCall %v4float %textureLoadExternal %118 %119 %120 %121
OpStore %res %112 OpStore %res %117
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %119 %vertex_main_inner = OpFunction %v4float None %124
%121 = OpLabel %126 = OpLabel
%122 = OpFunctionCall %void %textureLoad_8acf41 %127 = OpFunctionCall %void %textureLoad_8acf41
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %105 %vertex_main = OpFunction %void None %110
%124 = OpLabel %129 = OpLabel
%125 = OpFunctionCall %v4float %vertex_main_inner %130 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %125 OpStore %value %130
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %105 %fragment_main = OpFunction %void None %110
%127 = OpLabel %132 = OpLabel
%128 = OpFunctionCall %void %textureLoad_8acf41 %133 = OpFunctionCall %void %textureLoad_8acf41
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %105 %compute_main = OpFunction %void None %110
%130 = OpLabel %135 = OpLabel
%131 = OpFunctionCall %void %textureLoad_8acf41 %136 = OpFunctionCall %void %textureLoad_8acf41
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
}; };
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix; float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -37,9 +38,11 @@ float4 textureSampleExternal(Texture2D<float4> plane0, Texture2D<float4> plane1,
} else { } else {
color = mul(params.yuvToRgbConversionMatrix, float4(plane0.SampleLevel(smp, coord, 0.0f).r, plane1.SampleLevel(smp, coord, 0.0f).rg, 1.0f)); color = mul(params.yuvToRgbConversionMatrix, float4(plane0.SampleLevel(smp, coord, 0.0f).r, plane1.SampleLevel(smp, coord, 0.0f).rg, 1.0f));
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = mul(color, params.gamutConversionMatrix); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }
@ -72,7 +75,8 @@ float3x3 tint_symbol_7(uint4 buffer[11], uint offset) {
ExternalTextureParams tint_symbol_1(uint4 buffer[11], uint offset) { ExternalTextureParams tint_symbol_1(uint4 buffer[11], uint offset) {
const uint scalar_offset_14 = ((offset + 0u)) / 4; const uint scalar_offset_14 = ((offset + 0u)) / 4;
const ExternalTextureParams tint_symbol_10 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], tint_symbol_3(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 64u)), tint_symbol_5(buffer, (offset + 96u)), tint_symbol_7(buffer, (offset + 128u))}; const uint scalar_offset_15 = ((offset + 4u)) / 4;
const ExternalTextureParams tint_symbol_10 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_3(buffer, (offset + 16u)), tint_symbol_5(buffer, (offset + 64u)), tint_symbol_5(buffer, (offset + 96u)), tint_symbol_7(buffer, (offset + 128u))};
return tint_symbol_10; return tint_symbol_10;
} }

View File

@ -14,7 +14,8 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
/* 0x0000 */ uint numPlanes; /* 0x0000 */ uint numPlanes;
/* 0x0004 */ int8_t tint_pad[12]; /* 0x0004 */ uint doYuvToRgbConversionOnly;
/* 0x0008 */ int8_t tint_pad[8];
/* 0x0010 */ float3x4 yuvToRgbConversionMatrix; /* 0x0010 */ float3x4 yuvToRgbConversionMatrix;
/* 0x0040 */ GammaTransferParams gammaDecodeParams; /* 0x0040 */ GammaTransferParams gammaDecodeParams;
/* 0x0060 */ GammaTransferParams gammaEncodeParams; /* 0x0060 */ GammaTransferParams gammaEncodeParams;
@ -35,9 +36,11 @@ float4 textureSampleExternal(texture2d<float, access::sample> plane0, texture2d<
} else { } else {
color = (float4(plane0.sample(smp, coord, level(0.0f))[0], float4(plane1.sample(smp, coord, level(0.0f))).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (float4(plane0.sample(smp, coord, level(0.0f))[0], float4(plane1.sample(smp, coord, level(0.0f))).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }

View File

@ -1,7 +1,7 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 138 ; Bound: 143
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%30 = OpExtInstImport "GLSL.std.450" %30 = OpExtInstImport "GLSL.std.450"
@ -16,8 +16,9 @@
OpName %ext_tex_plane_1 "ext_tex_plane_1" OpName %ext_tex_plane_1 "ext_tex_plane_1"
OpName %ExternalTextureParams "ExternalTextureParams" OpName %ExternalTextureParams "ExternalTextureParams"
OpMemberName %ExternalTextureParams 0 "numPlanes" OpMemberName %ExternalTextureParams 0 "numPlanes"
OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix" OpMemberName %ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %ExternalTextureParams 2 "gammaDecodeParams" OpMemberName %ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %ExternalTextureParams 3 "gammaDecodeParams"
OpName %GammaTransferParams "GammaTransferParams" OpName %GammaTransferParams "GammaTransferParams"
OpMemberName %GammaTransferParams 0 "G" OpMemberName %GammaTransferParams 0 "G"
OpMemberName %GammaTransferParams 1 "A" OpMemberName %GammaTransferParams 1 "A"
@ -27,8 +28,8 @@
OpMemberName %GammaTransferParams 5 "E" OpMemberName %GammaTransferParams 5 "E"
OpMemberName %GammaTransferParams 6 "F" OpMemberName %GammaTransferParams 6 "F"
OpMemberName %GammaTransferParams 7 "padding" OpMemberName %GammaTransferParams 7 "padding"
OpMemberName %ExternalTextureParams 3 "gammaEncodeParams" OpMemberName %ExternalTextureParams 4 "gammaEncodeParams"
OpMemberName %ExternalTextureParams 4 "gamutConversionMatrix" OpMemberName %ExternalTextureParams 5 "gamutConversionMatrix"
OpName %ext_tex_params "ext_tex_params" OpName %ext_tex_params "ext_tex_params"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %arg_1 "arg_1" OpName %arg_1 "arg_1"
@ -55,10 +56,11 @@
OpDecorate %ext_tex_plane_1 Binding 2 OpDecorate %ext_tex_plane_1 Binding 2
OpDecorate %ExternalTextureParams Block OpDecorate %ExternalTextureParams Block
OpMemberDecorate %ExternalTextureParams 0 Offset 0 OpMemberDecorate %ExternalTextureParams 0 Offset 0
OpMemberDecorate %ExternalTextureParams 1 Offset 16 OpMemberDecorate %ExternalTextureParams 1 Offset 4
OpMemberDecorate %ExternalTextureParams 1 ColMajor OpMemberDecorate %ExternalTextureParams 2 Offset 16
OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 2 ColMajor
OpMemberDecorate %ExternalTextureParams 2 Offset 64 OpMemberDecorate %ExternalTextureParams 2 MatrixStride 16
OpMemberDecorate %ExternalTextureParams 3 Offset 64
OpMemberDecorate %GammaTransferParams 0 Offset 0 OpMemberDecorate %GammaTransferParams 0 Offset 0
OpMemberDecorate %GammaTransferParams 1 Offset 4 OpMemberDecorate %GammaTransferParams 1 Offset 4
OpMemberDecorate %GammaTransferParams 2 Offset 8 OpMemberDecorate %GammaTransferParams 2 Offset 8
@ -67,10 +69,10 @@
OpMemberDecorate %GammaTransferParams 5 Offset 20 OpMemberDecorate %GammaTransferParams 5 Offset 20
OpMemberDecorate %GammaTransferParams 6 Offset 24 OpMemberDecorate %GammaTransferParams 6 Offset 24
OpMemberDecorate %GammaTransferParams 7 Offset 28 OpMemberDecorate %GammaTransferParams 7 Offset 28
OpMemberDecorate %ExternalTextureParams 3 Offset 96 OpMemberDecorate %ExternalTextureParams 4 Offset 96
OpMemberDecorate %ExternalTextureParams 4 Offset 128 OpMemberDecorate %ExternalTextureParams 5 Offset 128
OpMemberDecorate %ExternalTextureParams 4 ColMajor OpMemberDecorate %ExternalTextureParams 5 ColMajor
OpMemberDecorate %ExternalTextureParams 4 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 5 MatrixStride 16
OpDecorate %ext_tex_params NonWritable OpDecorate %ext_tex_params NonWritable
OpDecorate %ext_tex_params DescriptorSet 1 OpDecorate %ext_tex_params DescriptorSet 1
OpDecorate %ext_tex_params Binding 3 OpDecorate %ext_tex_params Binding 3
@ -94,7 +96,7 @@
%GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint %GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint
%v3float = OpTypeVector %float 3 %v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3 %mat3v3float = OpTypeMatrix %v3float 3
%ExternalTextureParams = OpTypeStruct %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float %ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
%ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
%arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
@ -111,12 +113,13 @@
%uint_1 = OpConstant %uint 1 %uint_1 = OpConstant %uint 1
%81 = OpTypeSampledImage %11 %81 = OpTypeSampledImage %11
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%97 = OpConstantNull %uint
%void = OpTypeVoid %void = OpTypeVoid
%110 = OpTypeFunction %void %115 = OpTypeFunction %void
%114 = OpConstantNull %v2float %119 = OpConstantNull %v2float
%_ptr_Function_v2float = OpTypePointer Function %v2float %_ptr_Function_v2float = OpTypePointer Function %v2float
%_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Function_v4float = OpTypePointer Function %v4float
%125 = OpTypeFunction %v4float %130 = OpTypeFunction %v4float
%gammaCorrection = OpFunction %v3float None %24 %gammaCorrection = OpFunction %v3float None %24
%v = OpFunctionParameter %v3float %v = OpFunctionParameter %v3float
%params = OpFunctionParameter %GammaTransferParams %params = OpFunctionParameter %GammaTransferParams
@ -181,63 +184,70 @@
%90 = OpCompositeExtract %float %89 0 %90 = OpCompositeExtract %float %89 0
%91 = OpCompositeExtract %float %89 1 %91 = OpCompositeExtract %float %89 1
%93 = OpCompositeConstruct %v4float %86 %90 %91 %float_1 %93 = OpCompositeConstruct %v4float %86 %90 %91 %float_1
%94 = OpCompositeExtract %mat3v4float %params_0 1 %94 = OpCompositeExtract %mat3v4float %params_0 2
%95 = OpVectorTimesMatrix %v3float %93 %94 %95 = OpVectorTimesMatrix %v3float %93 %94
OpStore %color %95 OpStore %color %95
OpBranch %77 OpBranch %77
%77 = OpLabel %77 = OpLabel
%97 = OpLoad %v3float %color %96 = OpCompositeExtract %uint %params_0 1
%98 = OpCompositeExtract %GammaTransferParams %params_0 2 %98 = OpIEqual %bool %96 %97
%96 = OpFunctionCall %v3float %gammaCorrection %97 %98 OpSelectionMerge %99 None
OpStore %color %96 OpBranchConditional %98 %100 %99
%99 = OpCompositeExtract %mat3v3float %params_0 4 %100 = OpLabel
%100 = OpLoad %v3float %color %102 = OpLoad %v3float %color
%101 = OpMatrixTimesVector %v3float %99 %100 %103 = OpCompositeExtract %GammaTransferParams %params_0 3
%101 = OpFunctionCall %v3float %gammaCorrection %102 %103
OpStore %color %101 OpStore %color %101
%103 = OpLoad %v3float %color %104 = OpCompositeExtract %mat3v3float %params_0 5
%104 = OpCompositeExtract %GammaTransferParams %params_0 3
%102 = OpFunctionCall %v3float %gammaCorrection %103 %104
OpStore %color %102
%105 = OpLoad %v3float %color %105 = OpLoad %v3float %color
%106 = OpCompositeExtract %float %105 0 %106 = OpMatrixTimesVector %v3float %104 %105
%107 = OpCompositeExtract %float %105 1 OpStore %color %106
%108 = OpCompositeExtract %float %105 2 %108 = OpLoad %v3float %color
%109 = OpCompositeConstruct %v4float %106 %107 %108 %float_1 %109 = OpCompositeExtract %GammaTransferParams %params_0 4
OpReturnValue %109 %107 = OpFunctionCall %v3float %gammaCorrection %108 %109
OpStore %color %107
OpBranch %99
%99 = OpLabel
%110 = OpLoad %v3float %color
%111 = OpCompositeExtract %float %110 0
%112 = OpCompositeExtract %float %110 1
%113 = OpCompositeExtract %float %110 2
%114 = OpCompositeConstruct %v4float %111 %112 %113 %float_1
OpReturnValue %114
OpFunctionEnd OpFunctionEnd
%textureSampleLevel_979816 = OpFunction %void None %110 %textureSampleLevel_979816 = OpFunction %void None %115
%113 = OpLabel %118 = OpLabel
%arg_2 = OpVariable %_ptr_Function_v2float Function %114 %arg_2 = OpVariable %_ptr_Function_v2float Function %119
%res = OpVariable %_ptr_Function_v4float Function %5 %res = OpVariable %_ptr_Function_v4float Function %5
OpStore %arg_2 %114 OpStore %arg_2 %119
%118 = OpLoad %11 %arg_0 %123 = OpLoad %11 %arg_0
%119 = OpLoad %11 %ext_tex_plane_1 %124 = OpLoad %11 %ext_tex_plane_1
%120 = OpLoad %23 %arg_1 %125 = OpLoad %23 %arg_1
%121 = OpLoad %v2float %arg_2 %126 = OpLoad %v2float %arg_2
%122 = OpLoad %ExternalTextureParams %ext_tex_params %127 = OpLoad %ExternalTextureParams %ext_tex_params
%117 = OpFunctionCall %v4float %textureSampleExternal %118 %119 %120 %121 %122 %122 = OpFunctionCall %v4float %textureSampleExternal %123 %124 %125 %126 %127
OpStore %res %117 OpStore %res %122
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %125 %vertex_main_inner = OpFunction %v4float None %130
%127 = OpLabel %132 = OpLabel
%128 = OpFunctionCall %void %textureSampleLevel_979816 %133 = OpFunctionCall %void %textureSampleLevel_979816
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %110 %vertex_main = OpFunction %void None %115
%130 = OpLabel %135 = OpLabel
%131 = OpFunctionCall %v4float %vertex_main_inner %136 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %131 OpStore %value %136
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %110 %fragment_main = OpFunction %void None %115
%133 = OpLabel %138 = OpLabel
%134 = OpFunctionCall %void %textureSampleLevel_979816 %139 = OpFunctionCall %void %textureSampleLevel_979816
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %110 %compute_main = OpFunction %void None %115
%136 = OpLabel %141 = OpLabel
%137 = OpFunctionCall %void %textureSampleLevel_979816 %142 = OpFunctionCall %void %textureSampleLevel_979816
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
}; };
struct ExternalTextureParams { struct ExternalTextureParams {
uint numPlanes; uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix; float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams; GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams; GammaTransferParams gammaEncodeParams;
@ -36,9 +37,11 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
} else { } else {
color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f)); color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f));
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = mul(color, params.gamutConversionMatrix); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }
@ -75,7 +78,8 @@ float3x3 tint_symbol_8(uint4 buffer[11], uint offset) {
ExternalTextureParams tint_symbol_2(uint4 buffer[11], uint offset) { ExternalTextureParams tint_symbol_2(uint4 buffer[11], uint offset) {
const uint scalar_offset_14 = ((offset + 0u)) / 4; const uint scalar_offset_14 = ((offset + 0u)) / 4;
const ExternalTextureParams tint_symbol_11 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], tint_symbol_4(buffer, (offset + 16u)), tint_symbol_6(buffer, (offset + 64u)), tint_symbol_6(buffer, (offset + 96u)), tint_symbol_8(buffer, (offset + 128u))}; const uint scalar_offset_15 = ((offset + 4u)) / 4;
const ExternalTextureParams tint_symbol_11 = {buffer[scalar_offset_14 / 4][scalar_offset_14 % 4], buffer[scalar_offset_15 / 4][scalar_offset_15 % 4], tint_symbol_4(buffer, (offset + 16u)), tint_symbol_6(buffer, (offset + 64u)), tint_symbol_6(buffer, (offset + 96u)), tint_symbol_8(buffer, (offset + 128u))};
return tint_symbol_11; return tint_symbol_11;
} }

View File

@ -14,7 +14,8 @@ struct GammaTransferParams {
struct ExternalTextureParams { struct ExternalTextureParams {
/* 0x0000 */ uint numPlanes; /* 0x0000 */ uint numPlanes;
/* 0x0004 */ int8_t tint_pad[12]; /* 0x0004 */ uint doYuvToRgbConversionOnly;
/* 0x0008 */ int8_t tint_pad[8];
/* 0x0010 */ float3x4 yuvToRgbConversionMatrix; /* 0x0010 */ float3x4 yuvToRgbConversionMatrix;
/* 0x0040 */ GammaTransferParams gammaDecodeParams; /* 0x0040 */ GammaTransferParams gammaDecodeParams;
/* 0x0060 */ GammaTransferParams gammaEncodeParams; /* 0x0060 */ GammaTransferParams gammaEncodeParams;
@ -35,9 +36,11 @@ float4 textureLoadExternal(texture2d<float, access::sample> plane0, texture2d<fl
} else { } else {
color = (float4(plane0.read(uint2(coord), 0)[0], float4(plane1.read(uint2(coord), 0)).rg, 1.0f) * params.yuvToRgbConversionMatrix); color = (float4(plane0.read(uint2(coord), 0)[0], float4(plane1.read(uint2(coord), 0)).rg, 1.0f) * params.yuvToRgbConversionMatrix);
} }
color = gammaCorrection(color, params.gammaDecodeParams); if ((params.doYuvToRgbConversionOnly == 0u)) {
color = (params.gamutConversionMatrix * color); color = gammaCorrection(color, params.gammaDecodeParams);
color = gammaCorrection(color, params.gammaEncodeParams); color = (params.gamutConversionMatrix * color);
color = gammaCorrection(color, params.gammaEncodeParams);
}
return float4(color, 1.0f); return float4(color, 1.0f);
} }

View File

@ -1,7 +1,7 @@
; SPIR-V ; SPIR-V
; Version: 1.3 ; Version: 1.3
; Generator: Google Tint Compiler; 0 ; Generator: Google Tint Compiler; 0
; Bound: 137 ; Bound: 142
; Schema: 0 ; Schema: 0
OpCapability Shader OpCapability Shader
%27 = OpExtInstImport "GLSL.std.450" %27 = OpExtInstImport "GLSL.std.450"
@ -16,8 +16,9 @@
OpName %ext_tex_plane_1 "ext_tex_plane_1" OpName %ext_tex_plane_1 "ext_tex_plane_1"
OpName %ExternalTextureParams "ExternalTextureParams" OpName %ExternalTextureParams "ExternalTextureParams"
OpMemberName %ExternalTextureParams 0 "numPlanes" OpMemberName %ExternalTextureParams 0 "numPlanes"
OpMemberName %ExternalTextureParams 1 "yuvToRgbConversionMatrix" OpMemberName %ExternalTextureParams 1 "doYuvToRgbConversionOnly"
OpMemberName %ExternalTextureParams 2 "gammaDecodeParams" OpMemberName %ExternalTextureParams 2 "yuvToRgbConversionMatrix"
OpMemberName %ExternalTextureParams 3 "gammaDecodeParams"
OpName %GammaTransferParams "GammaTransferParams" OpName %GammaTransferParams "GammaTransferParams"
OpMemberName %GammaTransferParams 0 "G" OpMemberName %GammaTransferParams 0 "G"
OpMemberName %GammaTransferParams 1 "A" OpMemberName %GammaTransferParams 1 "A"
@ -27,8 +28,8 @@
OpMemberName %GammaTransferParams 5 "E" OpMemberName %GammaTransferParams 5 "E"
OpMemberName %GammaTransferParams 6 "F" OpMemberName %GammaTransferParams 6 "F"
OpMemberName %GammaTransferParams 7 "padding" OpMemberName %GammaTransferParams 7 "padding"
OpMemberName %ExternalTextureParams 3 "gammaEncodeParams" OpMemberName %ExternalTextureParams 4 "gammaEncodeParams"
OpMemberName %ExternalTextureParams 4 "gamutConversionMatrix" OpMemberName %ExternalTextureParams 5 "gamutConversionMatrix"
OpName %ext_tex_params "ext_tex_params" OpName %ext_tex_params "ext_tex_params"
OpName %arg_0 "arg_0" OpName %arg_0 "arg_0"
OpName %gammaCorrection "gammaCorrection" OpName %gammaCorrection "gammaCorrection"
@ -57,10 +58,11 @@
OpDecorate %ext_tex_plane_1 Binding 1 OpDecorate %ext_tex_plane_1 Binding 1
OpDecorate %ExternalTextureParams Block OpDecorate %ExternalTextureParams Block
OpMemberDecorate %ExternalTextureParams 0 Offset 0 OpMemberDecorate %ExternalTextureParams 0 Offset 0
OpMemberDecorate %ExternalTextureParams 1 Offset 16 OpMemberDecorate %ExternalTextureParams 1 Offset 4
OpMemberDecorate %ExternalTextureParams 1 ColMajor OpMemberDecorate %ExternalTextureParams 2 Offset 16
OpMemberDecorate %ExternalTextureParams 1 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 2 ColMajor
OpMemberDecorate %ExternalTextureParams 2 Offset 64 OpMemberDecorate %ExternalTextureParams 2 MatrixStride 16
OpMemberDecorate %ExternalTextureParams 3 Offset 64
OpMemberDecorate %GammaTransferParams 0 Offset 0 OpMemberDecorate %GammaTransferParams 0 Offset 0
OpMemberDecorate %GammaTransferParams 1 Offset 4 OpMemberDecorate %GammaTransferParams 1 Offset 4
OpMemberDecorate %GammaTransferParams 2 Offset 8 OpMemberDecorate %GammaTransferParams 2 Offset 8
@ -69,10 +71,10 @@
OpMemberDecorate %GammaTransferParams 5 Offset 20 OpMemberDecorate %GammaTransferParams 5 Offset 20
OpMemberDecorate %GammaTransferParams 6 Offset 24 OpMemberDecorate %GammaTransferParams 6 Offset 24
OpMemberDecorate %GammaTransferParams 7 Offset 28 OpMemberDecorate %GammaTransferParams 7 Offset 28
OpMemberDecorate %ExternalTextureParams 3 Offset 96 OpMemberDecorate %ExternalTextureParams 4 Offset 96
OpMemberDecorate %ExternalTextureParams 4 Offset 128 OpMemberDecorate %ExternalTextureParams 5 Offset 128
OpMemberDecorate %ExternalTextureParams 4 ColMajor OpMemberDecorate %ExternalTextureParams 5 ColMajor
OpMemberDecorate %ExternalTextureParams 4 MatrixStride 16 OpMemberDecorate %ExternalTextureParams 5 MatrixStride 16
OpDecorate %ext_tex_params NonWritable OpDecorate %ext_tex_params NonWritable
OpDecorate %ext_tex_params DescriptorSet 1 OpDecorate %ext_tex_params DescriptorSet 1
OpDecorate %ext_tex_params Binding 2 OpDecorate %ext_tex_params Binding 2
@ -94,7 +96,7 @@
%GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint %GammaTransferParams = OpTypeStruct %float %float %float %float %float %float %float %uint
%v3float = OpTypeVector %float 3 %v3float = OpTypeVector %float 3
%mat3v3float = OpTypeMatrix %v3float 3 %mat3v3float = OpTypeMatrix %v3float 3
%ExternalTextureParams = OpTypeStruct %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float %ExternalTextureParams = OpTypeStruct %uint %uint %mat3v4float %GammaTransferParams %GammaTransferParams %mat3v3float
%_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams %_ptr_Uniform_ExternalTextureParams = OpTypePointer Uniform %ExternalTextureParams
%ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform %ext_tex_params = OpVariable %_ptr_Uniform_ExternalTextureParams Uniform
%arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant %arg_0 = OpVariable %_ptr_UniformConstant_11 UniformConstant
@ -110,12 +112,13 @@
%78 = OpConstantNull %int %78 = OpConstantNull %int
%v2float = OpTypeVector %float 2 %v2float = OpTypeVector %float 2
%float_1 = OpConstant %float 1 %float_1 = OpConstant %float 1
%105 = OpTypeFunction %v4float %11 %11 %ExternalTextureParams %v2int %92 = OpConstantNull %uint
%110 = OpTypeFunction %v4float %11 %11 %ExternalTextureParams %v2int
%void = OpTypeVoid %void = OpTypeVoid
%113 = OpTypeFunction %void %118 = OpTypeFunction %void
%121 = OpConstantNull %v2int %126 = OpConstantNull %v2int
%_ptr_Function_v4float = OpTypePointer Function %v4float %_ptr_Function_v4float = OpTypePointer Function %v4float
%124 = OpTypeFunction %v4float %129 = OpTypeFunction %v4float
%gammaCorrection = OpFunction %v3float None %21 %gammaCorrection = OpFunction %v3float None %21
%v = OpFunctionParameter %v3float %v = OpFunctionParameter %v3float
%params = OpFunctionParameter %GammaTransferParams %params = OpFunctionParameter %GammaTransferParams
@ -176,68 +179,75 @@
%85 = OpCompositeExtract %float %84 0 %85 = OpCompositeExtract %float %84 0
%86 = OpCompositeExtract %float %84 1 %86 = OpCompositeExtract %float %84 1
%88 = OpCompositeConstruct %v4float %81 %85 %86 %float_1 %88 = OpCompositeConstruct %v4float %81 %85 %86 %float_1
%89 = OpCompositeExtract %mat3v4float %params_0 1 %89 = OpCompositeExtract %mat3v4float %params_0 2
%90 = OpVectorTimesMatrix %v3float %88 %89 %90 = OpVectorTimesMatrix %v3float %88 %89
OpStore %color %90 OpStore %color %90
OpBranch %74 OpBranch %74
%74 = OpLabel %74 = OpLabel
%92 = OpLoad %v3float %color %91 = OpCompositeExtract %uint %params_0 1
%93 = OpCompositeExtract %GammaTransferParams %params_0 2 %93 = OpIEqual %bool %91 %92
%91 = OpFunctionCall %v3float %gammaCorrection %92 %93 OpSelectionMerge %94 None
OpStore %color %91 OpBranchConditional %93 %95 %94
%94 = OpCompositeExtract %mat3v3float %params_0 4 %95 = OpLabel
%95 = OpLoad %v3float %color %97 = OpLoad %v3float %color
%96 = OpMatrixTimesVector %v3float %94 %95 %98 = OpCompositeExtract %GammaTransferParams %params_0 3
%96 = OpFunctionCall %v3float %gammaCorrection %97 %98
OpStore %color %96 OpStore %color %96
%98 = OpLoad %v3float %color %99 = OpCompositeExtract %mat3v3float %params_0 5
%99 = OpCompositeExtract %GammaTransferParams %params_0 3
%97 = OpFunctionCall %v3float %gammaCorrection %98 %99
OpStore %color %97
%100 = OpLoad %v3float %color %100 = OpLoad %v3float %color
%101 = OpCompositeExtract %float %100 0 %101 = OpMatrixTimesVector %v3float %99 %100
%102 = OpCompositeExtract %float %100 1 OpStore %color %101
%103 = OpCompositeExtract %float %100 2 %103 = OpLoad %v3float %color
%104 = OpCompositeConstruct %v4float %101 %102 %103 %float_1 %104 = OpCompositeExtract %GammaTransferParams %params_0 4
OpReturnValue %104 %102 = OpFunctionCall %v3float %gammaCorrection %103 %104
OpStore %color %102
OpBranch %94
%94 = OpLabel
%105 = OpLoad %v3float %color
%106 = OpCompositeExtract %float %105 0
%107 = OpCompositeExtract %float %105 1
%108 = OpCompositeExtract %float %105 2
%109 = OpCompositeConstruct %v4float %106 %107 %108 %float_1
OpReturnValue %109
OpFunctionEnd OpFunctionEnd
%textureLoad2d = OpFunction %v4float None %105 %textureLoad2d = OpFunction %v4float None %110
%texture = OpFunctionParameter %11 %texture = OpFunctionParameter %11
%ext_tex_plane_1_1 = OpFunctionParameter %11 %ext_tex_plane_1_1 = OpFunctionParameter %11
%ext_tex_params_1 = OpFunctionParameter %ExternalTextureParams %ext_tex_params_1 = OpFunctionParameter %ExternalTextureParams
%coords = OpFunctionParameter %v2int %coords = OpFunctionParameter %v2int
%111 = OpLabel
%112 = OpFunctionCall %v4float %textureLoadExternal %texture %ext_tex_plane_1_1 %coords %ext_tex_params_1
OpReturnValue %112
OpFunctionEnd
%doTextureLoad = OpFunction %void None %113
%116 = OpLabel %116 = OpLabel
%117 = OpFunctionCall %v4float %textureLoadExternal %texture %ext_tex_plane_1_1 %coords %ext_tex_params_1
OpReturnValue %117
OpFunctionEnd
%doTextureLoad = OpFunction %void None %118
%121 = OpLabel
%res = OpVariable %_ptr_Function_v4float Function %5 %res = OpVariable %_ptr_Function_v4float Function %5
%118 = OpLoad %11 %arg_0 %123 = OpLoad %11 %arg_0
%119 = OpLoad %11 %ext_tex_plane_1 %124 = OpLoad %11 %ext_tex_plane_1
%120 = OpLoad %ExternalTextureParams %ext_tex_params %125 = OpLoad %ExternalTextureParams %ext_tex_params
%117 = OpFunctionCall %v4float %textureLoad2d %118 %119 %120 %121 %122 = OpFunctionCall %v4float %textureLoad2d %123 %124 %125 %126
OpStore %res %117 OpStore %res %122
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%vertex_main_inner = OpFunction %v4float None %124 %vertex_main_inner = OpFunction %v4float None %129
%126 = OpLabel %131 = OpLabel
%127 = OpFunctionCall %void %doTextureLoad %132 = OpFunctionCall %void %doTextureLoad
OpReturnValue %5 OpReturnValue %5
OpFunctionEnd OpFunctionEnd
%vertex_main = OpFunction %void None %113 %vertex_main = OpFunction %void None %118
%129 = OpLabel %134 = OpLabel
%130 = OpFunctionCall %v4float %vertex_main_inner %135 = OpFunctionCall %v4float %vertex_main_inner
OpStore %value %130 OpStore %value %135
OpStore %vertex_point_size %float_1 OpStore %vertex_point_size %float_1
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%fragment_main = OpFunction %void None %113 %fragment_main = OpFunction %void None %118
%132 = OpLabel %137 = OpLabel
%133 = OpFunctionCall %void %doTextureLoad %138 = OpFunctionCall %void %doTextureLoad
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd
%compute_main = OpFunction %void None %113 %compute_main = OpFunction %void None %118
%135 = OpLabel %140 = OpLabel
%136 = OpFunctionCall %void %doTextureLoad %141 = OpFunctionCall %void %doTextureLoad
OpReturn OpReturn
OpFunctionEnd OpFunctionEnd