More GLSL fixes.

Remove register-and-space decoration.
Add "main" to GLSL keywords, to force renaming.
Output correct compute width decoration (not numthreads).
Remove static keyword.

Bug: tint:1218 tint:1219 tint:1220
Change-Id: I171f183690b6531c76218414e0d81f6ef5e22e6b
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/66340
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
Stephen White 2021-10-14 16:16:19 +00:00 committed by Tint LUCI CQ
parent 7cf3b28a87
commit 2f963aaf82
9 changed files with 222 additions and 266 deletions

View File

@ -136,6 +136,7 @@ const char* kReservedKeywordsGLSL[] = {
"layout",
"long",
"lowp",
"main",
"mat2",
"mat2x2",
"mat2x3",

View File

@ -93,22 +93,6 @@ const char* image_format_to_rwtexture_type(ast::ImageFormat image_format) {
}
}
// Helper for writing " : register(RX, spaceY)", where R is the register, X is
// the binding point binding value, and Y is the binding point group value.
struct RegisterAndSpace {
RegisterAndSpace(char r, ast::Variable::BindingPoint bp)
: reg(r), binding_point(bp) {}
char const reg;
ast::Variable::BindingPoint const binding_point;
};
std::ostream& operator<<(std::ostream& s, const RegisterAndSpace& rs) {
s << " : register(" << rs.reg << rs.binding_point.binding->value()
<< ", space" << rs.binding_point.group->value() << ")";
return s;
}
} // namespace
GeneratorImpl::GeneratorImpl(const Program* program) : TextGenerator(program) {}
@ -1591,16 +1575,13 @@ bool GeneratorImpl::EmitStorageVariable(const sem::Variable* var) {
return false;
}
out << RegisterAndSpace(var->Access() == ast::Access::kRead ? 't' : 'u',
decl->binding_point())
<< ";";
out << ";";
return true;
}
bool GeneratorImpl::EmitHandleVariable(const sem::Variable* var) {
auto* decl = var->Declaration();
auto* unwrapped_type = var->Type()->UnwrapRef();
auto out = line();
auto name = builder_.Symbols().NameFor(decl->symbol());
@ -1609,25 +1590,6 @@ bool GeneratorImpl::EmitHandleVariable(const sem::Variable* var) {
return false;
}
const char* register_space = nullptr;
if (unwrapped_type->Is<sem::Texture>()) {
register_space = "t";
if (auto* storage_tex = unwrapped_type->As<sem::StorageTexture>()) {
if (storage_tex->access() != ast::Access::kRead) {
register_space = "u";
}
}
} else if (unwrapped_type->Is<sem::Sampler>()) {
register_space = "s";
}
if (register_space) {
auto bp = decl->binding_point();
out << " : register(" << register_space << bp.binding->value() << ", space"
<< bp.group->value() << ")";
}
out << ";";
return true;
}
@ -1636,8 +1598,6 @@ bool GeneratorImpl::EmitPrivateVariable(const sem::Variable* var) {
auto* decl = var->Declaration();
auto out = line();
out << "static ";
auto name = builder_.Symbols().NameFor(decl->symbol());
auto* type = var->Type()->UnwrapRef();
if (!EmitTypeAndName(out, type, var->StorageClass(), var->Access(), name)) {
@ -1778,13 +1738,14 @@ bool GeneratorImpl::EmitEntryPointFunction(ast::Function* func) {
{
auto out = line();
if (func->pipeline_stage() == ast::PipelineStage::kCompute) {
// Emit the workgroup_size attribute.
// Emit the layout(local_size) attributes.
auto wgsize = func_sem->workgroup_size();
out << "[numthreads(";
out << "layout(";
for (int i = 0; i < 3; i++) {
if (i > 0) {
out << ", ";
}
out << "local_size_" << (i == 0 ? "x" : i == 1 ? "y" : "z") << " = ";
if (wgsize[i].overridable_const) {
auto* global = builder_.Sem().Get<sem::GlobalVariable>(
@ -1798,7 +1759,7 @@ bool GeneratorImpl::EmitEntryPointFunction(ast::Function* func) {
out << std::to_string(wgsize[i].value);
}
}
out << ")]" << std::endl;
out << ") in;" << std::endl;
}
out << func->return_type()->FriendlyName(builder_.Symbols());
@ -2641,7 +2602,7 @@ bool GeneratorImpl::EmitProgramConstVariable(const ast::Variable* var) {
line() << "#endif";
{
auto out = line();
out << "static const ";
out << "const ";
if (!EmitTypeAndName(out, type, sem->StorageClass(), sem->Access(),
builder_.Symbols().NameFor(var->symbol()))) {
return false;
@ -2650,7 +2611,7 @@ bool GeneratorImpl::EmitProgramConstVariable(const ast::Variable* var) {
}
} else {
auto out = line();
out << "static const ";
out << "const ";
if (!EmitTypeAndName(out, type, sem->StorageClass(), sem->Access(),
builder_.Symbols().NameFor(var->symbol()))) {
return false;

View File

@ -537,7 +537,7 @@ TEST_F(GlslGeneratorImplTest_Function,
precision mediump float;
Data coord : register(u0, space1);
Data coord;
void frag_main() {
float v = coord.b;
@ -586,7 +586,7 @@ TEST_F(GlslGeneratorImplTest_Function,
precision mediump float;
Data coord : register(t0, space1);
Data coord;
void frag_main() {
float v = coord.b;
@ -631,7 +631,7 @@ TEST_F(GlslGeneratorImplTest_Function,
precision mediump float;
Data coord : register(u0, space1);
Data coord;
void frag_main() {
coord.b = 2.0f;
@ -677,7 +677,7 @@ TEST_F(GlslGeneratorImplTest_Function,
precision mediump float;
Data coord : register(u0, space1);
Data coord;
void frag_main() {
coord.b = 2.0f;
@ -782,7 +782,7 @@ TEST_F(GlslGeneratorImplTest_Function,
precision mediump float;
S coord : register(u0, space1);
S coord;
float sub_func(float param) {
return coord.x;
@ -837,7 +837,7 @@ TEST_F(GlslGeneratorImplTest_Function, Emit_Decoration_EntryPoint_Compute) {
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
[numthreads(1, 1, 1)]
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
return;
}
@ -863,7 +863,7 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
[numthreads(2, 4, 6)]
layout(local_size_x = 2, local_size_y = 4, local_size_z = 6) in;
void main() {
return;
}
@ -892,11 +892,11 @@ TEST_F(GlslGeneratorImplTest_Function,
EXPECT_EQ(gen.result(), R"(#version 310 es
precision mediump float;
static const int width = int(2);
static const int height = int(3);
static const int depth = int(4);
const int width = int(2);
const int height = int(3);
const int depth = int(4);
[numthreads(2, 3, 4)]
layout(local_size_x = 2, local_size_y = 3, local_size_z = 4) in;
void main() {
return;
}
@ -928,17 +928,17 @@ precision mediump float;
#ifndef WGSL_SPEC_CONSTANT_7
#define WGSL_SPEC_CONSTANT_7 int(2)
#endif
static const int width = WGSL_SPEC_CONSTANT_7;
const int width = WGSL_SPEC_CONSTANT_7;
#ifndef WGSL_SPEC_CONSTANT_8
#define WGSL_SPEC_CONSTANT_8 int(3)
#endif
static const int height = WGSL_SPEC_CONSTANT_8;
const int height = WGSL_SPEC_CONSTANT_8;
#ifndef WGSL_SPEC_CONSTANT_9
#define WGSL_SPEC_CONSTANT_9 int(4)
#endif
static const int depth = WGSL_SPEC_CONSTANT_9;
const int depth = WGSL_SPEC_CONSTANT_9;
[numthreads(WGSL_SPEC_CONSTANT_7, WGSL_SPEC_CONSTANT_8, WGSL_SPEC_CONSTANT_9)]
layout(local_size_x = WGSL_SPEC_CONSTANT_7, local_size_y = WGSL_SPEC_CONSTANT_8, local_size_z = WGSL_SPEC_CONSTANT_9) in;
void main() {
return;
}
@ -1047,9 +1047,9 @@ TEST_F(GlslGeneratorImplTest_Function,
precision mediump float;
Data data : register(u0, space0);
Data data;
[numthreads(1, 1, 1)]
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void a() {
float v = data.d;
return;
@ -1060,7 +1060,7 @@ void main() {
[numthreads(1, 1, 1)]
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void b() {
float v = data.d;
return;

View File

@ -545,7 +545,7 @@ TEST_F(GlslGeneratorImplTest_Intrinsic, StorageBarrier) {
GeneratorImpl& gen = Build();
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_EQ(gen.result(), R"([numthreads(1, 1, 1)]
EXPECT_EQ(gen.result(), R"(layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
DeviceMemoryBarrierWithGroupSync();
return;
@ -564,7 +564,7 @@ TEST_F(GlslGeneratorImplTest_Intrinsic, WorkgroupBarrier) {
GeneratorImpl& gen = Build();
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_EQ(gen.result(), R"([numthreads(1, 1, 1)]
EXPECT_EQ(gen.result(), R"(layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
GroupMemoryBarrierWithGroupSync();
return;
@ -590,7 +590,7 @@ TEST_F(GlslGeneratorImplTest_Intrinsic, Ignore) {
return ((a + b) * c);
}
[numthreads(1, 1, 1)]
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void main() {
f(1, 2, 3);
return;

View File

@ -139,9 +139,9 @@ struct Data {
float mem;
};
static Data str = Data(0.0f);
Data str = Data(0.0f);
[numthreads(1, 1, 1)]
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void test_function() {
float expr = str.mem;
return;
@ -297,14 +297,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor, StorageBuffer_Store_Matrix_Empty) {
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
data.b = mat2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
return;
}
void main() {
main();
tint_symbol();
}
@ -340,14 +340,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
float x = data.a[2][1];
return;
}
void main() {
main();
tint_symbol();
}
@ -381,14 +381,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
int x = data.a[2];
return;
}
void main() {
main();
tint_symbol();
}
@ -423,14 +423,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
int x = data.a[((2 + 4) - 3)];
return;
}
void main() {
main();
tint_symbol();
}
@ -462,14 +462,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor, StorageBuffer_Store_ToArray) {
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
data.a[2] = 2;
return;
}
void main() {
main();
tint_symbol();
}
@ -512,14 +512,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor, StorageBuffer_Load_MultiLevel) {
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
vec3 x = data.c[2].b;
return;
}
void main() {
main();
tint_symbol();
}
@ -565,14 +565,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
vec2 x = data.c[2].b.xy;
return;
}
void main() {
main();
tint_symbol();
}
@ -618,14 +618,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
float x = data.c[2].b.g;
return;
}
void main() {
main();
tint_symbol();
}
@ -671,14 +671,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
float x = data.c[2].b[1];
return;
}
void main() {
main();
tint_symbol();
}
@ -720,14 +720,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor, StorageBuffer_Store_MultiLevel) {
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
data.c[2].b = vec3(1.0f, 2.0f, 3.0f);
return;
}
void main() {
main();
tint_symbol();
}
@ -773,14 +773,14 @@ TEST_F(GlslGeneratorImplTest_MemberAccessor,
precision mediump float;
Data data : register(u0, space1);
Data data;
void main() {
void tint_symbol() {
data.c[2].b.y = 1.0f;
return;
}
void main() {
main();
tint_symbol();
}

View File

@ -29,8 +29,7 @@ TEST_F(GlslGeneratorImplTest_ModuleConstant, Emit_ModuleConstant) {
GeneratorImpl& gen = Build();
ASSERT_TRUE(gen.EmitProgramConstVariable(var)) << gen.error();
EXPECT_EQ(gen.result(),
"static const float pos[3] = float[3](1.0f, 2.0f, 3.0f);\n");
EXPECT_EQ(gen.result(), "const float pos[3] = float[3](1.0f, 2.0f, 3.0f);\n");
}
TEST_F(GlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant) {
@ -45,7 +44,7 @@ TEST_F(GlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant) {
EXPECT_EQ(gen.result(), R"(#ifndef WGSL_SPEC_CONSTANT_23
#define WGSL_SPEC_CONSTANT_23 3.0f
#endif
static const float pos = WGSL_SPEC_CONSTANT_23;
const float pos = WGSL_SPEC_CONSTANT_23;
)");
}
@ -61,7 +60,7 @@ TEST_F(GlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant_NoConstructor) {
EXPECT_EQ(gen.result(), R"(#ifndef WGSL_SPEC_CONSTANT_23
#error spec constant required for constant id 23
#endif
static const float pos = WGSL_SPEC_CONSTANT_23;
const float pos = WGSL_SPEC_CONSTANT_23;
)");
}
@ -82,11 +81,11 @@ TEST_F(GlslGeneratorImplTest_ModuleConstant, Emit_SpecConstant_NoId) {
EXPECT_EQ(gen.result(), R"(#ifndef WGSL_SPEC_CONSTANT_0
#define WGSL_SPEC_CONSTANT_0 3.0f
#endif
static const float a = WGSL_SPEC_CONSTANT_0;
const float a = WGSL_SPEC_CONSTANT_0;
#ifndef WGSL_SPEC_CONSTANT_1
#define WGSL_SPEC_CONSTANT_1 2.0f
#endif
static const float b = WGSL_SPEC_CONSTANT_1;
const float b = WGSL_SPEC_CONSTANT_1;
)");
}

View File

@ -52,7 +52,7 @@ TEST_F(GlslSanitizerTest, Call_ArrayLength) {
precision mediump float;
my_struct b : register(t1, space2);
my_struct b;
void a_func() {
uint tint_symbol_1 = 0u;
@ -101,7 +101,7 @@ TEST_F(GlslSanitizerTest, Call_ArrayLength_OtherMembersInStruct) {
precision mediump float;
my_struct b : register(t1, space2);
my_struct b;
void a_func() {
uint tint_symbol_1 = 0u;
@ -152,7 +152,7 @@ TEST_F(GlslSanitizerTest, Call_ArrayLength_ViaLets) {
precision mediump float;
my_struct b : register(t1, space2);
my_struct b;
void a_func() {
uint tint_symbol_1 = 0u;
@ -192,13 +192,13 @@ TEST_F(GlslSanitizerTest, PromoteArrayInitializerToConstVar) {
auto* expect = R"(#version 310 es
precision mediump float;
void main() {
int tint_symbol[4] = int[4](1, 2, 3, 4);
int pos = tint_symbol[3];
void tint_symbol() {
int tint_symbol_1[4] = int[4](1, 2, 3, 4);
int pos = tint_symbol_1[3];
return;
}
void main() {
main();
tint_symbol();
}
@ -239,13 +239,13 @@ struct S {
int c;
};
void main() {
S tint_symbol = S(1, vec3(2.0f, 3.0f, 4.0f), 4);
vec3 pos = tint_symbol.b;
void tint_symbol() {
S tint_symbol_1 = S(1, vec3(2.0f, 3.0f, 4.0f), 4);
vec3 pos = tint_symbol_1.b;
return;
}
void main() {
main();
tint_symbol();
}
@ -280,13 +280,13 @@ TEST_F(GlslSanitizerTest, InlinePtrLetsBasic) {
auto* expect = R"(#version 310 es
precision mediump float;
void main() {
void tint_symbol() {
int v = 0;
int x = v;
return;
}
void main() {
main();
tint_symbol();
}
@ -331,13 +331,13 @@ TEST_F(GlslSanitizerTest, InlinePtrLetsComplexChain) {
auto* expect = R"(#version 310 es
precision mediump float;
void main() {
void tint_symbol() {
mat4 m = mat4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
float f = m[2][1];
return;
}
void main() {
main();
tint_symbol();
}

View File

@ -352,14 +352,12 @@ INSTANTIATE_TEST_SUITE_P(
GlslGeneratorImplTest_Type,
GlslDepthTexturesTest,
testing::Values(
GlslDepthTextureData{ast::TextureDimension::k2d,
"Texture2D tex : register(t1, space2);"},
GlslDepthTextureData{ast::TextureDimension::k2d, "Texture2D tex;"},
GlslDepthTextureData{ast::TextureDimension::k2dArray,
"Texture2DArray tex : register(t1, space2);"},
GlslDepthTextureData{ast::TextureDimension::kCube,
"TextureCube tex : register(t1, space2);"},
"Texture2DArray tex;"},
GlslDepthTextureData{ast::TextureDimension::kCube, "TextureCube tex;"},
GlslDepthTextureData{ast::TextureDimension::kCubeArray,
"TextureCubeArray tex : register(t1, space2);"}));
"TextureCubeArray tex;"}));
using GlslDepthMultisampledTexturesTest = TestHelper;
TEST_F(GlslDepthMultisampledTexturesTest, Emit) {
@ -377,8 +375,7 @@ TEST_F(GlslDepthMultisampledTexturesTest, Emit) {
GeneratorImpl& gen = Build();
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_THAT(gen.result(),
HasSubstr("Texture2DMS<float4> tex : register(t1, space2);"));
EXPECT_THAT(gen.result(), HasSubstr("Texture2DMS<float4> tex;"));
}
enum class TextureDataType { F32, U32, I32 };
@ -424,100 +421,99 @@ TEST_P(GlslSampledTexturesTest, Emit) {
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_THAT(gen.result(), HasSubstr(params.result));
}
INSTANTIATE_TEST_SUITE_P(
GlslGeneratorImplTest_Type,
GlslSampledTexturesTest,
testing::Values(
GlslSampledTextureData{
ast::TextureDimension::k1d,
TextureDataType::F32,
"Texture1D<float4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k2d,
TextureDataType::F32,
"Texture2D<float4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k2dArray,
TextureDataType::F32,
"Texture2DArray<float4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k3d,
TextureDataType::F32,
"Texture3D<float4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::kCube,
TextureDataType::F32,
"TextureCube<float4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::kCubeArray,
TextureDataType::F32,
"TextureCubeArray<float4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k1d,
TextureDataType::U32,
"Texture1D<uint4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k2d,
TextureDataType::U32,
"Texture2D<uint4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k2dArray,
TextureDataType::U32,
"Texture2DArray<uint4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k3d,
TextureDataType::U32,
"Texture3D<uint4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::kCube,
TextureDataType::U32,
"TextureCube<uint4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::kCubeArray,
TextureDataType::U32,
"TextureCubeArray<uint4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k1d,
TextureDataType::I32,
"Texture1D<int4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k2d,
TextureDataType::I32,
"Texture2D<int4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k2dArray,
TextureDataType::I32,
"Texture2DArray<int4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::k3d,
TextureDataType::I32,
"Texture3D<int4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::kCube,
TextureDataType::I32,
"TextureCube<int4> tex : register(t1, space2);",
},
GlslSampledTextureData{
ast::TextureDimension::kCubeArray,
TextureDataType::I32,
"TextureCubeArray<int4> tex : register(t1, space2);",
}));
INSTANTIATE_TEST_SUITE_P(GlslGeneratorImplTest_Type,
GlslSampledTexturesTest,
testing::Values(
GlslSampledTextureData{
ast::TextureDimension::k1d,
TextureDataType::F32,
"Texture1D<float4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k2d,
TextureDataType::F32,
"Texture2D<float4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k2dArray,
TextureDataType::F32,
"Texture2DArray<float4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k3d,
TextureDataType::F32,
"Texture3D<float4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::kCube,
TextureDataType::F32,
"TextureCube<float4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::kCubeArray,
TextureDataType::F32,
"TextureCubeArray<float4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k1d,
TextureDataType::U32,
"Texture1D<uint4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k2d,
TextureDataType::U32,
"Texture2D<uint4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k2dArray,
TextureDataType::U32,
"Texture2DArray<uint4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k3d,
TextureDataType::U32,
"Texture3D<uint4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::kCube,
TextureDataType::U32,
"TextureCube<uint4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::kCubeArray,
TextureDataType::U32,
"TextureCubeArray<uint4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k1d,
TextureDataType::I32,
"Texture1D<int4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k2d,
TextureDataType::I32,
"Texture2D<int4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k2dArray,
TextureDataType::I32,
"Texture2DArray<int4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::k3d,
TextureDataType::I32,
"Texture3D<int4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::kCube,
TextureDataType::I32,
"TextureCube<int4> tex;",
},
GlslSampledTextureData{
ast::TextureDimension::kCubeArray,
TextureDataType::I32,
"TextureCubeArray<int4> tex;",
}));
TEST_F(GlslGeneratorImplTest_Type, EmitMultisampledTexture) {
auto* f32 = create<sem::F32>();
@ -564,46 +560,45 @@ TEST_P(GlslStorageTexturesTest, Emit) {
INSTANTIATE_TEST_SUITE_P(
GlslGeneratorImplTest_Type,
GlslStorageTexturesTest,
testing::Values(
GlslStorageTextureData{
ast::TextureDimension::k1d, ast::ImageFormat::kRgba8Unorm,
"RWTexture1D<float4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k2d, ast::ImageFormat::kRgba16Float,
"RWTexture2D<float4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k2dArray, ast::ImageFormat::kR32Float,
"RWTexture2DArray<float4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k3d, ast::ImageFormat::kRg32Float,
"RWTexture3D<float4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k1d, ast::ImageFormat::kRgba32Float,
"RWTexture1D<float4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k2d, ast::ImageFormat::kRgba16Uint,
"RWTexture2D<uint4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k2dArray, ast::ImageFormat::kR32Uint,
"RWTexture2DArray<uint4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k3d, ast::ImageFormat::kRg32Uint,
"RWTexture3D<uint4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k1d, ast::ImageFormat::kRgba32Uint,
"RWTexture1D<uint4> tex : register(u1, space2);"},
GlslStorageTextureData{ast::TextureDimension::k2d,
ast::ImageFormat::kRgba16Sint,
"RWTexture2D<int4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k2dArray, ast::ImageFormat::kR32Sint,
"RWTexture2DArray<int4> tex : register(u1, space2);"},
GlslStorageTextureData{ast::TextureDimension::k3d,
ast::ImageFormat::kRg32Sint,
"RWTexture3D<int4> tex : register(u1, space2);"},
GlslStorageTextureData{
ast::TextureDimension::k1d, ast::ImageFormat::kRgba32Sint,
"RWTexture1D<int4> tex : register(u1, space2);"}));
testing::Values(GlslStorageTextureData{ast::TextureDimension::k1d,
ast::ImageFormat::kRgba8Unorm,
"RWTexture1D<float4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k2d,
ast::ImageFormat::kRgba16Float,
"RWTexture2D<float4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k2dArray,
ast::ImageFormat::kR32Float,
"RWTexture2DArray<float4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k3d,
ast::ImageFormat::kRg32Float,
"RWTexture3D<float4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k1d,
ast::ImageFormat::kRgba32Float,
"RWTexture1D<float4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k2d,
ast::ImageFormat::kRgba16Uint,
"RWTexture2D<uint4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k2dArray,
ast::ImageFormat::kR32Uint,
"RWTexture2DArray<uint4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k3d,
ast::ImageFormat::kRg32Uint,
"RWTexture3D<uint4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k1d,
ast::ImageFormat::kRgba32Uint,
"RWTexture1D<uint4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k2d,
ast::ImageFormat::kRgba16Sint,
"RWTexture2D<int4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k2dArray,
ast::ImageFormat::kR32Sint,
"RWTexture2DArray<int4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k3d,
ast::ImageFormat::kRg32Sint,
"RWTexture3D<int4> tex;"},
GlslStorageTextureData{ast::TextureDimension::k1d,
ast::ImageFormat::kRgba32Sint,
"RWTexture1D<int4> tex;"}));
} // namespace
} // namespace glsl

View File

@ -76,7 +76,7 @@ TEST_F(GlslGeneratorImplTest_VariableDecl, Emit_VariableDeclStatement_Private) {
gen.increment_indent();
ASSERT_TRUE(gen.Generate()) << gen.error();
EXPECT_THAT(gen.result(), HasSubstr(" static float a = 0.0f;\n"));
EXPECT_THAT(gen.result(), HasSubstr(" float a = 0.0f;\n"));
}
TEST_F(GlslGeneratorImplTest_VariableDecl,