dawn-cmake/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl
Antonio Maiorano a730eb738e Add option to auto generate bindings for external textures
With this change, the backend sanitizers always run the
MultiplanarExternalTexture transform. If the new option is enabled, it
auto-generates bindings for this transform.

This change also enables this auto-generation for the Tint commandline
application, as well as for the fuzzers.

Bug: chromium:1310623
Change-Id: I3c661c4753dc67c0212051d09024cbeda3939f8c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/85542
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
2022-04-06 13:57:54 +00:00

60 lines
2.7 KiB
Plaintext

#include <metal_stdlib>
using namespace metal;
struct ExternalTextureParams {
/* 0x0000 */ uint numPlanes;
/* 0x0004 */ float vr;
/* 0x0008 */ float ug;
/* 0x000c */ float vg;
/* 0x0010 */ float ub;
};
float4 textureLoadExternal(texture2d<float, access::sample> plane0, texture2d<float, access::sample> plane1, int2 coord, ExternalTextureParams params) {
if ((params.numPlanes == 1u)) {
return plane0.read(uint2(coord), 0);
}
float const y = (plane0.read(uint2(coord), 0)[0] - 0.0625f);
float2 const uv = (float4(plane1.read(uint2(coord), 0)).rg - 0.5f);
float const u = uv[0];
float const v = uv[1];
float const r = ((1.164000034f * y) + (params.vr * v));
float const g = (((1.164000034f * y) - (params.ug * u)) - (params.vg * v));
float const b = ((1.164000034f * y) + (params.ub * u));
return float4(r, g, b, 1.0f);
}
float4 textureLoad2d(texture2d<float, access::sample> tint_symbol, texture2d<float, access::sample> ext_tex_plane_1_1, ExternalTextureParams ext_tex_params_1, int2 coords) {
return textureLoadExternal(tint_symbol, ext_tex_plane_1_1, coords, ext_tex_params_1);
}
void doTextureLoad(texture2d<float, access::sample> tint_symbol_2, texture2d<float, access::sample> tint_symbol_3, const constant ExternalTextureParams* const tint_symbol_4) {
float4 res = textureLoad2d(tint_symbol_2, tint_symbol_3, *(tint_symbol_4), int2());
}
struct tint_symbol_1 {
float4 value [[position]];
};
float4 vertex_main_inner(texture2d<float, access::sample> tint_symbol_5, texture2d<float, access::sample> tint_symbol_6, const constant ExternalTextureParams* const tint_symbol_7) {
doTextureLoad(tint_symbol_5, tint_symbol_6, tint_symbol_7);
return float4();
}
vertex tint_symbol_1 vertex_main(texture2d<float, access::sample> tint_symbol_8 [[texture(0)]], texture2d<float, access::sample> tint_symbol_9 [[texture(1)]], const constant ExternalTextureParams* tint_symbol_10 [[buffer(2)]]) {
float4 const inner_result = vertex_main_inner(tint_symbol_8, tint_symbol_9, tint_symbol_10);
tint_symbol_1 wrapper_result = {};
wrapper_result.value = inner_result;
return wrapper_result;
}
fragment void fragment_main(texture2d<float, access::sample> tint_symbol_11 [[texture(0)]], texture2d<float, access::sample> tint_symbol_12 [[texture(1)]], const constant ExternalTextureParams* tint_symbol_13 [[buffer(2)]]) {
doTextureLoad(tint_symbol_11, tint_symbol_12, tint_symbol_13);
return;
}
kernel void compute_main(texture2d<float, access::sample> tint_symbol_14 [[texture(0)]], texture2d<float, access::sample> tint_symbol_15 [[texture(1)]], const constant ExternalTextureParams* tint_symbol_16 [[buffer(2)]]) {
doTextureLoad(tint_symbol_14, tint_symbol_15, tint_symbol_16);
return;
}