#include "gmock/gmock.h"
#include "src/tint/lang/glsl/writer/ast_printer/helper_test.h"
#include "src/tint/lang/wgsl/ast/stage_attribute.h"
#include "src/tint/lang/wgsl/ast/variable_decl_statement.h"
#include "src/tint/lang/wgsl/ast/workgroup_attribute.h"
HasSubstr;
namespace tint::glsl::writer {
namespace {
usingnamespacetint::core::fluent_types;
usingnamespacetint::core::number_suffixes;
GlslASTPrinterTest_Function;
TEST_F(GlslASTPrinterTest_Function, Emit_Function) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Function_Name_Collision) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Function_WithParams) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_NoReturn_Void) { … }
TEST_F(GlslASTPrinterTest_Function, PtrParameter) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_WithInOutVars) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_WithInOut_Builtins) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_SharedStruct_DifferentStages) { … }
#if 0
TEST_F(GlslASTPrinterTest_Function,
Emit_Attribute_EntryPoint_SharedStruct_HelperFunction) {
auto* vertex_output_struct = Structure(
"VertexOutput",
{Member("pos", ty.vec4<f32>(), {Builtin(core::BuiltinValue::kPosition)})});
Func("foo", Vector{Param("x", ty.f32())}, ty.Of(vertex_output_struct),
{Return(Call(ty.Of(vertex_output_struct),
Call<vec4<f32>>( "x", "x", "x", 1_f)))},
{});
Func("vert_main1", tint::Empty, ty.Of(vertex_output_struct),
{Return(Call(ty.Of(vertex_output_struct),
Expr(Call("foo", Expr(0.5_f)))))},
{Stage(ast::PipelineStage::kVertex)});
Func("vert_main2", tint::Empty, ty.Of(vertex_output_struct),
{Return(Call(ty.Of(vertex_output_struct),
Expr(Call("foo", Expr(0.25_f)))))},
{Stage(ast::PipelineStage::kVertex)});
ASTPrinter& gen = SanitizeAndBuild();
ASSERT_TRUE(gen.Generate()) << gen.Diagnostics();
EXPECT_EQ(gen.Result(), R"(struct VertexOutput {
float4 pos;
};
VertexOutput foo(float x) {
const VertexOutput tint_symbol_4 = {float4(x, x, x, 1.0f)};
return tint_symbol_4;
}
struct tint_symbol {
float4 pos : SV_Position;
};
tint_symbol vert_main1() {
const VertexOutput tint_symbol_1 = {foo(0.5f)};
const tint_symbol tint_symbol_5 = {tint_symbol_1.pos};
return tint_symbol_5;
}
struct tint_symbol_2 {
float4 pos : SV_Position;
};
tint_symbol_2 vert_main2() {
const VertexOutput tint_symbol_3 = {foo(0.25f)};
const tint_symbol_2 tint_symbol_6 = {tint_symbol_3.pos};
return tint_symbol_6;
}
)");
}
#endif
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_With_Uniform) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_With_UniformStruct) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_With_RW_StorageBuffer_Read) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_With_RO_StorageBuffer_Read) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_With_WO_StorageBuffer_Store) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_With_StorageBuffer_Store) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_Called_By_EntryPoint_With_Uniform) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_Called_By_EntryPoint_With_StorageBuffer) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_WithNameCollision) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_Compute) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_Compute_WithWorkgroup_Literal) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Attribute_EntryPoint_Compute_WithWorkgroup_Const) { … }
TEST_F(GlslASTPrinterTest_Function,
Emit_Attribute_EntryPoint_Compute_WithWorkgroup_OverridableConst) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Function_WithArrayParams) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Function_WithArrayReturn) { … }
TEST_F(GlslASTPrinterTest_Function, Emit_Multiple_EntryPoint_With_Same_ModuleVar) { … }
}
}