mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-24 23:43:30 +00:00
This CL converts a few more std::vector<std::unique_ptr<foo>>'s to FooList aliases. Change-Id: If0dd672f11beaeabd9e89e82903c2174b11be6e1 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/19103 Reviewed-by: David Neto <dneto@google.com>
100 lines
3.2 KiB
C++
100 lines
3.2 KiB
C++
// Copyright 2020 The Tint Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef SRC_READER_SPIRV_FUNCTION_H_
|
|
#define SRC_READER_SPIRV_FUNCTION_H_
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "source/opt/constants.h"
|
|
#include "source/opt/function.h"
|
|
#include "source/opt/ir_context.h"
|
|
#include "source/opt/type_manager.h"
|
|
#include "src/ast/expression.h"
|
|
#include "src/ast/module.h"
|
|
#include "src/reader/spirv/fail_stream.h"
|
|
#include "src/reader/spirv/namer.h"
|
|
#include "src/reader/spirv/parser_impl.h"
|
|
|
|
namespace tint {
|
|
namespace reader {
|
|
namespace spirv {
|
|
|
|
/// A FunctionEmitter emits a SPIR-V function onto a Tint AST module.
|
|
class FunctionEmitter {
|
|
public:
|
|
/// Creates a FunctionEmitter, and prepares to write to the AST module
|
|
/// in |pi|.
|
|
/// @param pi a ParserImpl which has already executed BuildInternalModule
|
|
/// @param function the function to emit
|
|
FunctionEmitter(ParserImpl* pi, const spvtools::opt::Function& function);
|
|
/// Destructor
|
|
~FunctionEmitter();
|
|
|
|
/// Emits the function to AST module.
|
|
/// @return whether emission succeeded
|
|
bool Emit();
|
|
|
|
/// @returns true if emission has not yet failed.
|
|
bool success() const { return fail_stream_.status(); }
|
|
/// @returns true if emission has failed.
|
|
bool failed() const { return !success(); }
|
|
|
|
/// @returns the body of the function.
|
|
const ast::StatementList& ast_body() { return ast_body_; }
|
|
|
|
/// Records failure.
|
|
/// @returns a FailStream on which to emit diagnostics.
|
|
FailStream& Fail() { return fail_stream_.Fail(); }
|
|
|
|
/// Emits the declaration, which comprises the name, parameters, and
|
|
/// return type. The function AST node is appended to the module
|
|
/// AST node.
|
|
/// @returns true if emission has not yet failed.
|
|
bool EmitFunctionDeclaration();
|
|
|
|
/// Emits declarations of function variables.
|
|
/// @returns false if emission failed.
|
|
bool EmitFunctionVariables();
|
|
|
|
/// Makes an expression
|
|
/// @param id the SPIR-V ID of the value
|
|
/// @returns true if emission has not yet failed.
|
|
std::unique_ptr<ast::Expression> MakeExpression(uint32_t id);
|
|
|
|
private:
|
|
/// @returns the store type for the OpVariable instruction, or
|
|
/// null on failure.
|
|
ast::type::Type* GetVariableStoreType(
|
|
const spvtools::opt::Instruction& var_decl_inst);
|
|
|
|
ParserImpl& parser_impl_;
|
|
ast::Module& ast_module_;
|
|
spvtools::opt::IRContext& ir_context_;
|
|
spvtools::opt::analysis::DefUseManager* def_use_mgr_;
|
|
spvtools::opt::analysis::ConstantManager* constant_mgr_;
|
|
spvtools::opt::analysis::TypeManager* type_mgr_;
|
|
FailStream& fail_stream_;
|
|
Namer& namer_;
|
|
const spvtools::opt::Function& function_;
|
|
ast::StatementList ast_body_;
|
|
};
|
|
|
|
} // namespace spirv
|
|
} // namespace reader
|
|
} // namespace tint
|
|
|
|
#endif // SRC_READER_SPIRV_FUNCTION_H_
|