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": "plane 0", "type": "texture view"},
{"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*",
"length": 12, "optional": true},
{"name": "src transfer function parameters", "type": "float", "annotation": "const*",

View File

@ -152,6 +152,8 @@ MaybeError ExternalTextureBase::Initialize(DeviceBase* device,
ExternalTextureParams params;
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
// passed from Chromium. The matrix was originally sourced from /skia/src/core/SkYUVMath.cpp.
// This matrix is only used in multiplanar scenarios.

View File

@ -28,7 +28,9 @@ class TextureViewBase;
struct ExternalTextureParams {
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, 8> gammaDecodingParams = {};
std::array<float, 8> gammaEncodingParams = {};

View File

@ -251,6 +251,7 @@ struct MultiplanarExternalTexture::State {
// Create ExternalTextureParams struct.
ast::StructMemberList ext_tex_params_member_list = {
b.Member("numPlanes", b.ty.u32()),
b.Member("doYuvToRgbConversionOnly", b.ty.u32()),
b.Member("yuvToRgbConversionMatrix", b.ty.mat3x4(b.ty.f32())),
b.Member("gammaDecodeParams", 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.MemberAccessor(plane_1_call, "rg"), 1_f),
b.MemberAccessor("params", "yuvToRgbConversionMatrix")))))),
// color = gammaConversion(color, gammaDecodeParams);
b.Assign("color", b.Call("gammaCorrection", "color",
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"))),
// if (params.doYuvToRgbConversionOnly == 0u)
b.If(b.create<ast::BinaryExpression>(
ast::BinaryOp::kEqual, b.MemberAccessor("params", "doYuvToRgbConversionOnly"),
b.Expr(0_u)),
b.Block(
// color = gammaConversion(color, gammaDecodeParams);
b.Assign("color", b.Call("gammaCorrection", "color",
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);
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
/// 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
/// 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> {
public:
/// BindingsMap is a map where the key is the binding location of a

View File

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

View File

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

View File

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

View File

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

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
};
struct ExternalTextureParams {
uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams;
@ -36,9 +37,11 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
} else {
color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f));
}
color = gammaCorrection(color, params.gammaDecodeParams);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
if ((params.doYuvToRgbConversionOnly == 0u)) {
color = gammaCorrection(color, params.gammaDecodeParams);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
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) {
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;
}

View File

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

View File

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

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
};
struct ExternalTextureParams {
uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams;
@ -37,9 +38,11 @@ float4 textureSampleExternal(Texture2D<float4> plane0, Texture2D<float4> plane1,
} else {
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);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
if ((params.doYuvToRgbConversionOnly == 0u)) {
color = gammaCorrection(color, params.gammaDecodeParams);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
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) {
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;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
};
struct ExternalTextureParams {
uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams;
@ -36,9 +37,11 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
} else {
color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f));
}
color = gammaCorrection(color, params.gammaDecodeParams);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
if ((params.doYuvToRgbConversionOnly == 0u)) {
color = gammaCorrection(color, params.gammaDecodeParams);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
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) {
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;
}

View File

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

View File

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

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
};
struct ExternalTextureParams {
uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams;
@ -37,9 +38,11 @@ float4 textureSampleExternal(Texture2D<float4> plane0, Texture2D<float4> plane1,
} else {
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);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
if ((params.doYuvToRgbConversionOnly == 0u)) {
color = gammaCorrection(color, params.gammaDecodeParams);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
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) {
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;
}

View File

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

View File

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

View File

@ -10,6 +10,7 @@ struct GammaTransferParams {
};
struct ExternalTextureParams {
uint numPlanes;
uint doYuvToRgbConversionOnly;
float3x4 yuvToRgbConversionMatrix;
GammaTransferParams gammaDecodeParams;
GammaTransferParams gammaEncodeParams;
@ -36,9 +37,11 @@ float4 textureLoadExternal(Texture2D<float4> plane0, Texture2D<float4> plane1, i
} else {
color = mul(params.yuvToRgbConversionMatrix, float4(plane0.Load(int3(coord, 0)).r, plane1.Load(int3(coord, 0)).rg, 1.0f));
}
color = gammaCorrection(color, params.gammaDecodeParams);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
if ((params.doYuvToRgbConversionOnly == 0u)) {
color = gammaCorrection(color, params.gammaDecodeParams);
color = mul(color, params.gamutConversionMatrix);
color = gammaCorrection(color, params.gammaEncodeParams);
}
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) {
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;
}

View File

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

View File

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