mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-11 14:41:50 +00:00
transform/shader_io: Generate a wrapper function
This is a major reworking of this transform. The old transform code was getting unwieldy, with part of the complication coming from the handling of multiple return statements. By generating a wrapper function instead, we can avoid a lot of this complexity. The original entry point function is stripped of all shader IO attributes (as well as `stage` and `workgroup_size`), but the body is left unmodified. A new entry point wrapper function is introduced which calls the original function, packing/unpacking the shader inputs as necessary, and propagates the result to the corresponding shader outputs. The new code has been refactored to use a state object with the different parts of the transform split into separate functions, which makes it much more manageable. Fixed: tint:1076 Bug: tint:920 Change-Id: I3490a0ea7a3509a4e198ce730e476516649d8d96 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/60521 Auto-Submit: James Price <jrprice@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: James Price <jrprice@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
committed by
Tint LUCI CQ
parent
3e92e9f8ba
commit
a5d73ce965
@@ -86,11 +86,16 @@ struct tint_symbol_2 {
|
||||
float4 x_GLF_color_1 : SV_Target0;
|
||||
};
|
||||
|
||||
tint_symbol_2 main(tint_symbol_1 tint_symbol) {
|
||||
const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
|
||||
main_out main_inner(float4 gl_FragCoord_param) {
|
||||
gl_FragCoord = gl_FragCoord_param;
|
||||
main_1();
|
||||
const main_out tint_symbol_3 = {x_GLF_color};
|
||||
const tint_symbol_2 tint_symbol_4 = {tint_symbol_3.x_GLF_color_1};
|
||||
return tint_symbol_4;
|
||||
return tint_symbol_3;
|
||||
}
|
||||
|
||||
tint_symbol_2 main(tint_symbol_1 tint_symbol) {
|
||||
const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
|
||||
tint_symbol_2 wrapper_result = (tint_symbol_2)0;
|
||||
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
|
||||
return wrapper_result;
|
||||
}
|
||||
|
||||
@@ -10,22 +10,22 @@ struct tint_array_wrapper_1 {
|
||||
struct main_out {
|
||||
float4 x_GLF_color_1;
|
||||
};
|
||||
struct tint_symbol_2 {
|
||||
struct tint_symbol_1 {
|
||||
float4 x_GLF_color_1 [[color(0)]];
|
||||
};
|
||||
|
||||
float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6, thread tint_array_wrapper_1* const tint_symbol_7) {
|
||||
float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol_3, thread float4* const tint_symbol_4, thread tint_array_wrapper_1* const tint_symbol_5) {
|
||||
int b = 0;
|
||||
int i = 0;
|
||||
bool x_115 = false;
|
||||
bool x_116_phi = false;
|
||||
b = 0;
|
||||
(*(tint_symbol_5)).arr[0] = 5;
|
||||
(*(tint_symbol_5)).arr[2] = 0;
|
||||
(*(tint_symbol_5)).arr[4] = 0;
|
||||
(*(tint_symbol_5)).arr[6] = 0;
|
||||
(*(tint_symbol_5)).arr[8] = 0;
|
||||
float const x_71 = (*(tint_symbol_6)).x;
|
||||
(*(tint_symbol_3)).arr[0] = 5;
|
||||
(*(tint_symbol_3)).arr[2] = 0;
|
||||
(*(tint_symbol_3)).arr[4] = 0;
|
||||
(*(tint_symbol_3)).arr[6] = 0;
|
||||
(*(tint_symbol_3)).arr[8] = 0;
|
||||
float const x_71 = (*(tint_symbol_4)).x;
|
||||
if ((x_71 >= 0.0f)) {
|
||||
while (true) {
|
||||
int const x_79 = b;
|
||||
@@ -38,8 +38,8 @@ float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol
|
||||
if ((x_83 <= 5)) {
|
||||
int const x_87 = b;
|
||||
int const x_88 = b;
|
||||
int const x_90 = (*(tint_symbol_5)).arr[x_88];
|
||||
(*(tint_symbol_7)).arr[x_87] = x_90;
|
||||
int const x_90 = (*(tint_symbol_3)).arr[x_88];
|
||||
(*(tint_symbol_5)).arr[x_87] = x_90;
|
||||
int const x_92 = b;
|
||||
b = as_type<int>((as_type<uint>(x_92) + as_type<uint>(2)));
|
||||
}
|
||||
@@ -53,18 +53,18 @@ float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol
|
||||
break;
|
||||
}
|
||||
int const x_101 = i;
|
||||
int const x_103 = (*(tint_symbol_7)).arr[0];
|
||||
(*(tint_symbol_5)).arr[x_101] = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
|
||||
int const x_103 = (*(tint_symbol_5)).arr[0];
|
||||
(*(tint_symbol_3)).arr[x_101] = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
|
||||
{
|
||||
int const x_106 = i;
|
||||
i = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
|
||||
}
|
||||
}
|
||||
int const x_109 = (*(tint_symbol_7)).arr[0];
|
||||
int const x_109 = (*(tint_symbol_5)).arr[0];
|
||||
bool const x_110 = (x_109 == 5);
|
||||
x_116_phi = x_110;
|
||||
if (x_110) {
|
||||
int const x_114 = (*(tint_symbol_5)).arr[0];
|
||||
int const x_114 = (*(tint_symbol_3)).arr[0];
|
||||
x_115 = (x_114 == 6);
|
||||
x_116_phi = x_115;
|
||||
}
|
||||
@@ -77,7 +77,7 @@ float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void main_1(thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread tint_array_wrapper_1* const tint_symbol_10, thread float4* const tint_symbol_11) {
|
||||
void main_1(thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7, thread tint_array_wrapper_1* const tint_symbol_8, thread float4* const tint_symbol_9) {
|
||||
int i_1 = 0;
|
||||
int param = 0;
|
||||
int param_1 = 0;
|
||||
@@ -90,14 +90,14 @@ void main_1(thread tint_array_wrapper* const tint_symbol_8, thread float4* const
|
||||
}
|
||||
int const x_54 = i_1;
|
||||
param = x_54;
|
||||
float const x_55 = func_i1_(&(param), tint_symbol_8, tint_symbol_9, tint_symbol_10);
|
||||
float const x_55 = func_i1_(&(param), tint_symbol_6, tint_symbol_7, tint_symbol_8);
|
||||
int const x_56 = i_1;
|
||||
param_1 = x_56;
|
||||
float const x_57 = func_i1_(&(param_1), tint_symbol_8, tint_symbol_9, tint_symbol_10);
|
||||
float const x_57 = func_i1_(&(param_1), tint_symbol_6, tint_symbol_7, tint_symbol_8);
|
||||
if ((x_57 == 1.0f)) {
|
||||
*(tint_symbol_11) = float4(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
*(tint_symbol_9) = float4(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
} else {
|
||||
*(tint_symbol_11) = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
*(tint_symbol_9) = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
{
|
||||
int const x_62 = i_1;
|
||||
@@ -107,15 +107,21 @@ void main_1(thread tint_array_wrapper* const tint_symbol_8, thread float4* const
|
||||
return;
|
||||
}
|
||||
|
||||
fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]]) {
|
||||
thread float4 tint_symbol_12 = 0.0f;
|
||||
thread tint_array_wrapper tint_symbol_13 = {};
|
||||
thread tint_array_wrapper_1 tint_symbol_14 = {};
|
||||
thread float4 tint_symbol_15 = 0.0f;
|
||||
tint_symbol_12 = gl_FragCoord_param;
|
||||
main_1(&(tint_symbol_13), &(tint_symbol_12), &(tint_symbol_14), &(tint_symbol_15));
|
||||
main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_15};
|
||||
tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
|
||||
return tint_symbol_4;
|
||||
main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread tint_array_wrapper_1* const tint_symbol_12, thread float4* const tint_symbol_13) {
|
||||
*(tint_symbol_10) = gl_FragCoord_param;
|
||||
main_1(tint_symbol_11, tint_symbol_10, tint_symbol_12, tint_symbol_13);
|
||||
main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_13)};
|
||||
return tint_symbol_2;
|
||||
}
|
||||
|
||||
fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
|
||||
thread float4 tint_symbol_14 = 0.0f;
|
||||
thread tint_array_wrapper tint_symbol_15 = {};
|
||||
thread tint_array_wrapper_1 tint_symbol_16 = {};
|
||||
thread float4 tint_symbol_17 = 0.0f;
|
||||
main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17));
|
||||
tint_symbol_1 wrapper_result = {};
|
||||
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
|
||||
return wrapper_result;
|
||||
}
|
||||
|
||||
|
||||
@@ -86,11 +86,16 @@ struct tint_symbol_2 {
|
||||
float4 x_GLF_color_1 : SV_Target0;
|
||||
};
|
||||
|
||||
tint_symbol_2 main(tint_symbol_1 tint_symbol) {
|
||||
const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
|
||||
main_out main_inner(float4 gl_FragCoord_param) {
|
||||
gl_FragCoord = gl_FragCoord_param;
|
||||
main_1();
|
||||
const main_out tint_symbol_3 = {x_GLF_color};
|
||||
const tint_symbol_2 tint_symbol_4 = {tint_symbol_3.x_GLF_color_1};
|
||||
return tint_symbol_4;
|
||||
return tint_symbol_3;
|
||||
}
|
||||
|
||||
tint_symbol_2 main(tint_symbol_1 tint_symbol) {
|
||||
const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
|
||||
tint_symbol_2 wrapper_result = (tint_symbol_2)0;
|
||||
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
|
||||
return wrapper_result;
|
||||
}
|
||||
|
||||
@@ -10,22 +10,22 @@ struct tint_array_wrapper_1 {
|
||||
struct main_out {
|
||||
float4 x_GLF_color_1;
|
||||
};
|
||||
struct tint_symbol_2 {
|
||||
struct tint_symbol_1 {
|
||||
float4 x_GLF_color_1 [[color(0)]];
|
||||
};
|
||||
|
||||
float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol_5, thread float4* const tint_symbol_6, thread tint_array_wrapper_1* const tint_symbol_7) {
|
||||
float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol_3, thread float4* const tint_symbol_4, thread tint_array_wrapper_1* const tint_symbol_5) {
|
||||
int b = 0;
|
||||
int i = 0;
|
||||
bool x_115 = false;
|
||||
bool x_116_phi = false;
|
||||
b = 0;
|
||||
(*(tint_symbol_5)).arr[0] = 5;
|
||||
(*(tint_symbol_5)).arr[2] = 0;
|
||||
(*(tint_symbol_5)).arr[4] = 0;
|
||||
(*(tint_symbol_5)).arr[6] = 0;
|
||||
(*(tint_symbol_5)).arr[8] = 0;
|
||||
float const x_71 = (*(tint_symbol_6)).x;
|
||||
(*(tint_symbol_3)).arr[0] = 5;
|
||||
(*(tint_symbol_3)).arr[2] = 0;
|
||||
(*(tint_symbol_3)).arr[4] = 0;
|
||||
(*(tint_symbol_3)).arr[6] = 0;
|
||||
(*(tint_symbol_3)).arr[8] = 0;
|
||||
float const x_71 = (*(tint_symbol_4)).x;
|
||||
if ((x_71 >= 0.0f)) {
|
||||
while (true) {
|
||||
int const x_79 = b;
|
||||
@@ -38,8 +38,8 @@ float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol
|
||||
if ((x_83 <= 5)) {
|
||||
int const x_87 = b;
|
||||
int const x_88 = b;
|
||||
int const x_90 = (*(tint_symbol_5)).arr[x_88];
|
||||
(*(tint_symbol_7)).arr[x_87] = x_90;
|
||||
int const x_90 = (*(tint_symbol_3)).arr[x_88];
|
||||
(*(tint_symbol_5)).arr[x_87] = x_90;
|
||||
int const x_92 = b;
|
||||
b = as_type<int>((as_type<uint>(x_92) + as_type<uint>(2)));
|
||||
}
|
||||
@@ -53,18 +53,18 @@ float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol
|
||||
break;
|
||||
}
|
||||
int const x_101 = i;
|
||||
int const x_103 = (*(tint_symbol_7)).arr[0];
|
||||
(*(tint_symbol_5)).arr[x_101] = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
|
||||
int const x_103 = (*(tint_symbol_5)).arr[0];
|
||||
(*(tint_symbol_3)).arr[x_101] = as_type<int>((as_type<uint>(x_103) + as_type<uint>(1)));
|
||||
{
|
||||
int const x_106 = i;
|
||||
i = as_type<int>((as_type<uint>(x_106) + as_type<uint>(1)));
|
||||
}
|
||||
}
|
||||
int const x_109 = (*(tint_symbol_7)).arr[0];
|
||||
int const x_109 = (*(tint_symbol_5)).arr[0];
|
||||
bool const x_110 = (x_109 == 5);
|
||||
x_116_phi = x_110;
|
||||
if (x_110) {
|
||||
int const x_114 = (*(tint_symbol_5)).arr[0];
|
||||
int const x_114 = (*(tint_symbol_3)).arr[0];
|
||||
x_115 = (x_114 == 6);
|
||||
x_116_phi = x_115;
|
||||
}
|
||||
@@ -77,7 +77,7 @@ float func_i1_(thread int* const a, thread tint_array_wrapper* const tint_symbol
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void main_1(thread tint_array_wrapper* const tint_symbol_8, thread float4* const tint_symbol_9, thread tint_array_wrapper_1* const tint_symbol_10, thread float4* const tint_symbol_11) {
|
||||
void main_1(thread tint_array_wrapper* const tint_symbol_6, thread float4* const tint_symbol_7, thread tint_array_wrapper_1* const tint_symbol_8, thread float4* const tint_symbol_9) {
|
||||
int i_1 = 0;
|
||||
int param = 0;
|
||||
int param_1 = 0;
|
||||
@@ -90,14 +90,14 @@ void main_1(thread tint_array_wrapper* const tint_symbol_8, thread float4* const
|
||||
}
|
||||
int const x_54 = i_1;
|
||||
param = x_54;
|
||||
float const x_55 = func_i1_(&(param), tint_symbol_8, tint_symbol_9, tint_symbol_10);
|
||||
float const x_55 = func_i1_(&(param), tint_symbol_6, tint_symbol_7, tint_symbol_8);
|
||||
int const x_56 = i_1;
|
||||
param_1 = x_56;
|
||||
float const x_57 = func_i1_(&(param_1), tint_symbol_8, tint_symbol_9, tint_symbol_10);
|
||||
float const x_57 = func_i1_(&(param_1), tint_symbol_6, tint_symbol_7, tint_symbol_8);
|
||||
if ((x_57 == 1.0f)) {
|
||||
*(tint_symbol_11) = float4(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
*(tint_symbol_9) = float4(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
} else {
|
||||
*(tint_symbol_11) = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
*(tint_symbol_9) = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
{
|
||||
int const x_62 = i_1;
|
||||
@@ -107,15 +107,21 @@ void main_1(thread tint_array_wrapper* const tint_symbol_8, thread float4* const
|
||||
return;
|
||||
}
|
||||
|
||||
fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]]) {
|
||||
thread float4 tint_symbol_12 = 0.0f;
|
||||
thread tint_array_wrapper tint_symbol_13 = {};
|
||||
thread tint_array_wrapper_1 tint_symbol_14 = {};
|
||||
thread float4 tint_symbol_15 = 0.0f;
|
||||
tint_symbol_12 = gl_FragCoord_param;
|
||||
main_1(&(tint_symbol_13), &(tint_symbol_12), &(tint_symbol_14), &(tint_symbol_15));
|
||||
main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_15};
|
||||
tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
|
||||
return tint_symbol_4;
|
||||
main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_10, thread tint_array_wrapper* const tint_symbol_11, thread tint_array_wrapper_1* const tint_symbol_12, thread float4* const tint_symbol_13) {
|
||||
*(tint_symbol_10) = gl_FragCoord_param;
|
||||
main_1(tint_symbol_11, tint_symbol_10, tint_symbol_12, tint_symbol_13);
|
||||
main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_13)};
|
||||
return tint_symbol_2;
|
||||
}
|
||||
|
||||
fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
|
||||
thread float4 tint_symbol_14 = 0.0f;
|
||||
thread tint_array_wrapper tint_symbol_15 = {};
|
||||
thread tint_array_wrapper_1 tint_symbol_16 = {};
|
||||
thread float4 tint_symbol_17 = 0.0f;
|
||||
main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_14), &(tint_symbol_15), &(tint_symbol_16), &(tint_symbol_17));
|
||||
tint_symbol_1 wrapper_result = {};
|
||||
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
|
||||
return wrapper_result;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user