Revert "ir/spirv-writer: Emit entry point declarations" This reverts commit 90789ea1f8f6aad42238dde3d75d39d8e07d0d60. Reason for revert: Compilation errors on MSVC and some linux machines. Original change's description: > ir/spirv-writer: Emit entry point declarations > > Emit the OpEntryPoint instruction with the pipeline stage. Interface > variables will be done later. > > Emit OpExecutionMode instructions for the workgroup size and fragment > shader origin, depending on the pipeline stage. > > Bug: tint:1906 > Change-Id: Ieeeda5f17da48a8cf0d3344d3b254542c7198cb9 > Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/131381 > Kokoro: Kokoro <noreply+kokoro@google.com> > Reviewed-by: Dan Sinclair <dsinclair@chromium.org> > Commit-Queue: James Price <jrprice@google.com> TBR=dsinclair@chromium.org,bclayton@google.com,jrprice@google.com,noreply+kokoro@google.com,dawn-scoped@luci-project-accounts.iam.gserviceaccount.com Change-Id: If828577648a585a51568eabc79f41e1735b72b8a No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: tint:1906 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/131743 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Ben Clayton <bclayton@google.com> Kokoro: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/writer/spirv/generator_impl_function_test.cc b/src/tint/writer/spirv/generator_impl_function_test.cc index bb7008c..e4cb71b 100644 --- a/src/tint/writer/spirv/generator_impl_function_test.cc +++ b/src/tint/writer/spirv/generator_impl_function_test.cc
@@ -46,109 +46,5 @@ )"); } -TEST_F(SpvGeneratorImplTest, Function_EntryPoint_Compute) { - auto* func = CreateFunction(); - func->name = ir.symbols.Register("main"); - func->return_type = ir.types.Get<type::Void>(); - func->pipeline_stage = ir::Function::PipelineStage::kCompute; - func->workgroup_size = {32, 4, 1}; - - generator_.EmitFunction(func); - EXPECT_EQ(DumpModule(generator_.Module()), R"(OpEntryPoint GLCompute %1 "main" -OpExecutionMode %1 LocalSize 32 4 1 -OpName %1 "main" -%2 = OpTypeVoid -%3 = OpTypeFunction %2 -%1 = OpFunction %2 None %3 -%4 = OpLabel -OpReturn -OpFunctionEnd -)"); -} - -TEST_F(SpvGeneratorImplTest, Function_EntryPoint_Fragment) { - auto* func = CreateFunction(); - func->name = ir.symbols.Register("main"); - func->return_type = ir.types.Get<type::Void>(); - func->pipeline_stage = ir::Function::PipelineStage::kFragment; - - generator_.EmitFunction(func); - EXPECT_EQ(DumpModule(generator_.Module()), R"(OpEntryPoint Fragment %1 "main" -OpExecutionMode %1 OriginUpperLeft -OpName %1 "main" -%2 = OpTypeVoid -%3 = OpTypeFunction %2 -%1 = OpFunction %2 None %3 -%4 = OpLabel -OpReturn -OpFunctionEnd -)"); -} - -TEST_F(SpvGeneratorImplTest, Function_EntryPoint_Vertex) { - auto* func = CreateFunction(); - func->name = ir.symbols.Register("main"); - func->return_type = ir.types.Get<type::Void>(); - func->pipeline_stage = ir::Function::PipelineStage::kVertex; - - generator_.EmitFunction(func); - EXPECT_EQ(DumpModule(generator_.Module()), R"(OpEntryPoint Vertex %1 "main" -OpName %1 "main" -%2 = OpTypeVoid -%3 = OpTypeFunction %2 -%1 = OpFunction %2 None %3 -%4 = OpLabel -OpReturn -OpFunctionEnd -)"); -} - -TEST_F(SpvGeneratorImplTest, Function_EntryPoint_Multiple) { - auto* f1 = CreateFunction(); - f1->name = ir.symbols.Register("main1"); - f1->return_type = ir.types.Get<type::Void>(); - f1->pipeline_stage = ir::Function::PipelineStage::kCompute; - f1->workgroup_size = {32, 4, 1}; - - auto* f2 = CreateFunction(); - f2->name = ir.symbols.Register("main2"); - f2->return_type = ir.types.Get<type::Void>(); - f2->pipeline_stage = ir::Function::PipelineStage::kCompute; - f2->workgroup_size = {8, 2, 16}; - - auto* f3 = CreateFunction(); - f3->name = ir.symbols.Register("main3"); - f3->return_type = ir.types.Get<type::Void>(); - f3->pipeline_stage = ir::Function::PipelineStage::kFragment; - - generator_.EmitFunction(f1); - generator_.EmitFunction(f2); - generator_.EmitFunction(f3); - EXPECT_EQ(DumpModule(generator_.Module()), R"(OpEntryPoint GLCompute %1 "main1" -OpEntryPoint GLCompute %5 "main2" -OpEntryPoint Fragment %7 "main3" -OpExecutionMode %1 LocalSize 32 4 1 -OpExecutionMode %5 LocalSize 8 2 16 -OpExecutionMode %7 OriginUpperLeft -OpName %1 "main1" -OpName %5 "main2" -OpName %7 "main3" -%2 = OpTypeVoid -%3 = OpTypeFunction %2 -%1 = OpFunction %2 None %3 -%4 = OpLabel -OpReturn -OpFunctionEnd -%5 = OpFunction %2 None %3 -%6 = OpLabel -OpReturn -OpFunctionEnd -%7 = OpFunction %2 None %3 -%8 = OpLabel -OpReturn -OpFunctionEnd -)"); -} - } // namespace } // namespace tint::writer::spirv
diff --git a/src/tint/writer/spirv/generator_impl_ir.cc b/src/tint/writer/spirv/generator_impl_ir.cc index 96820cc..e947e6c 100644 --- a/src/tint/writer/spirv/generator_impl_ir.cc +++ b/src/tint/writer/spirv/generator_impl_ir.cc
@@ -88,10 +88,7 @@ // Emit the function name. module_.PushDebug(spv::Op::OpName, {id, Operand(func->name.Name())}); - // Emit OpEntryPoint and OpExecutionMode declarations if needed. - if (func->pipeline_stage != ir::Function::PipelineStage::kUndefined) { - EmitEntryPoint(func, id); - } + // TODO(jrprice): Emit OpEntryPoint and OpExecutionMode declarations if needed. // Get the ID for the return type. auto return_type_id = Type(func->return_type); @@ -126,34 +123,4 @@ module_.PushFunction(current_function_); } -void GeneratorImplIr::EmitEntryPoint(const ir::Function* func, uint32_t id) { - SpvExecutionModel stage; - switch (func->pipeline_stage) { - case ir::Function::PipelineStage::kCompute: { - stage = SpvExecutionModelGLCompute; - module_.PushExecutionMode(spv::Op::OpExecutionMode, - {id, SpvExecutionModeLocalSize, func->workgroup_size->at(0), - func->workgroup_size->at(1), func->workgroup_size->at(2)}); - break; - } - case ir::Function::PipelineStage::kFragment: { - stage = SpvExecutionModelFragment; - module_.PushExecutionMode(spv::Op::OpExecutionMode, - {id, SpvExecutionModeOriginUpperLeft}); - // TODO(jrprice): Add DepthReplacing execution mode if FragDepth is used. - break; - } - case ir::Function::PipelineStage::kVertex: { - stage = SpvExecutionModelVertex; - break; - } - case ir::Function::PipelineStage::kUndefined: - TINT_ICE(Writer, diagnostics_) << "undefined pipeline stage for entry point"; - return; - } - - // TODO(jrprice): Add the interface list of all referenced global variables. - module_.PushEntryPoint(spv::Op::OpEntryPoint, {stage, id, func->name.Name()}); -} - } // namespace tint::writer::spirv
diff --git a/src/tint/writer/spirv/generator_impl_ir.h b/src/tint/writer/spirv/generator_impl_ir.h index 0aa4e7b..d9aab3c 100644 --- a/src/tint/writer/spirv/generator_impl_ir.h +++ b/src/tint/writer/spirv/generator_impl_ir.h
@@ -64,11 +64,6 @@ /// @param func the function to emit void EmitFunction(const ir::Function* func); - /// Emit entry point declarations for a function. - /// @param func the function to emit entry point declarations for - /// @param id the result ID of the function declaration - void EmitEntryPoint(const ir::Function* func, uint32_t id); - private: const ir::Module* ir_; spirv::Module module_;