[wgsl-writer] Emit stage decorations.
This CL updates the wgsl writer to emit the stage decorations. Change-Id: I0501088e074aa5d027f83fd0a2ac45ba3f36332f Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/28701 Commit-Queue: dan sinclair <dsinclair@chromium.org> Reviewed-by: David Neto <dneto@google.com> Reviewed-by: Sarah Mashayekhi <sarahmashay@google.com>
This commit is contained in:
parent
51ac24ab10
commit
48d08d2147
|
@ -44,6 +44,7 @@
|
|||
#include "src/ast/scalar_constructor_expression.h"
|
||||
#include "src/ast/set_decoration.h"
|
||||
#include "src/ast/sint_literal.h"
|
||||
#include "src/ast/stage_decoration.h"
|
||||
#include "src/ast/statement.h"
|
||||
#include "src/ast/struct.h"
|
||||
#include "src/ast/struct_member.h"
|
||||
|
@ -434,6 +435,9 @@ bool GeneratorImpl::EmitFunction(ast::Function* func) {
|
|||
out_ << "workgroup_size(" << std::to_string(x) << ", "
|
||||
<< std::to_string(y) << ", " << std::to_string(z) << ")";
|
||||
}
|
||||
if (deco->IsStage()) {
|
||||
out_ << "stage(" << deco->AsStage()->value() << ")";
|
||||
}
|
||||
out_ << "]]" << std::endl;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,7 +15,9 @@
|
|||
#include "gtest/gtest.h"
|
||||
#include "src/ast/discard_statement.h"
|
||||
#include "src/ast/function.h"
|
||||
#include "src/ast/pipeline_stage.h"
|
||||
#include "src/ast/return_statement.h"
|
||||
#include "src/ast/stage_decoration.h"
|
||||
#include "src/ast/type/f32_type.h"
|
||||
#include "src/ast/type/i32_type.h"
|
||||
#include "src/ast/type/void_type.h"
|
||||
|
@ -78,7 +80,7 @@ TEST_F(WgslGeneratorImplTest, Emit_Function_WithParams) {
|
|||
)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, Emit_Function_WithDecorations) {
|
||||
TEST_F(WgslGeneratorImplTest, Emit_Function_WithDecoration_WorkgroupSize) {
|
||||
auto body = std::make_unique<ast::BlockStatement>();
|
||||
body->append(std::make_unique<ast::DiscardStatement>());
|
||||
body->append(std::make_unique<ast::ReturnStatement>());
|
||||
|
@ -100,6 +102,54 @@ TEST_F(WgslGeneratorImplTest, Emit_Function_WithDecorations) {
|
|||
)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, Emit_Function_WithDecoration_Stage) {
|
||||
auto body = std::make_unique<ast::BlockStatement>();
|
||||
body->append(std::make_unique<ast::DiscardStatement>());
|
||||
body->append(std::make_unique<ast::ReturnStatement>());
|
||||
|
||||
ast::type::VoidType void_type;
|
||||
ast::Function func("my_func", {}, &void_type);
|
||||
func.add_decoration(
|
||||
std::make_unique<ast::StageDecoration>(ast::PipelineStage::kFragment));
|
||||
func.set_body(std::move(body));
|
||||
|
||||
GeneratorImpl g;
|
||||
g.increment_indent();
|
||||
|
||||
ASSERT_TRUE(g.EmitFunction(&func));
|
||||
EXPECT_EQ(g.result(), R"( [[stage(fragment)]]
|
||||
fn my_func() -> void {
|
||||
discard;
|
||||
return;
|
||||
}
|
||||
)");
|
||||
}
|
||||
|
||||
TEST_F(WgslGeneratorImplTest, Emit_Function_WithDecoration_Multiple) {
|
||||
auto body = std::make_unique<ast::BlockStatement>();
|
||||
body->append(std::make_unique<ast::DiscardStatement>());
|
||||
body->append(std::make_unique<ast::ReturnStatement>());
|
||||
|
||||
ast::type::VoidType void_type;
|
||||
ast::Function func("my_func", {}, &void_type);
|
||||
func.add_decoration(
|
||||
std::make_unique<ast::StageDecoration>(ast::PipelineStage::kFragment));
|
||||
func.add_decoration(std::make_unique<ast::WorkgroupDecoration>(2u, 4u, 6u));
|
||||
func.set_body(std::move(body));
|
||||
|
||||
GeneratorImpl g;
|
||||
g.increment_indent();
|
||||
|
||||
ASSERT_TRUE(g.EmitFunction(&func));
|
||||
EXPECT_EQ(g.result(), R"( [[stage(fragment)]]
|
||||
[[workgroup_size(2, 4, 6)]]
|
||||
fn my_func() -> void {
|
||||
discard;
|
||||
return;
|
||||
}
|
||||
)");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace wgsl
|
||||
} // namespace writer
|
||||
|
|
Loading…
Reference in New Issue