semantic::Function: Clean up ReferencedXXX() return types

Use a type alias for the most common and lengthy return type.

Drop the `const` from the return type - it is (or at least should be) meaningless.

Fix `auto& referenced_variables =` local variable declaration in inspector.cc.
You cannot take a reference to a non-ref return value of a function.
I have no idea why the compiler wasn't erroring about this.

Change-Id: Icc0b4a9bf4b4c9d03b44670eda27214ef04ad41c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/42021
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
This commit is contained in:
Ben Clayton 2021-02-18 16:36:18 +00:00 committed by Commit Bot service account
parent 3a9a55eec6
commit 1d5a7eb82f
3 changed files with 38 additions and 48 deletions

View File

@ -412,7 +412,7 @@ std::vector<ResourceBinding> Inspector::GetSampledTextureResourceBindingsImpl(
std::vector<ResourceBinding> result;
auto* func_sem = program_->Sem().Get(func);
auto& referenced_variables =
auto referenced_variables =
multisampled_only ? func_sem->ReferencedMultisampledTextureVariables()
: func_sem->ReferencedSampledTextureVariables();
for (auto& ref : referenced_variables) {

View File

@ -47,6 +47,9 @@ class Function : public Castable<Function, CallTarget> {
ast::GroupDecoration* group = nullptr;
};
/// A vector of [Variable*, BindingInfo] pairs
using VariableBindings = std::vector<std::pair<const Variable*, BindingInfo>>;
/// Constructor
/// @param declaration the ast::Function
/// @param referenced_module_vars the referenced module variables
@ -80,59 +83,52 @@ class Function : public Castable<Function, CallTarget> {
}
/// Retrieves any referenced location variables
/// @returns the <variable, decoration> pair.
const std::vector<std::pair<const Variable*, ast::LocationDecoration*>>
std::vector<std::pair<const Variable*, ast::LocationDecoration*>>
ReferencedLocationVariables() const;
/// Retrieves any referenced builtin variables
/// @returns the <variable, decoration> pair.
const std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
ReferencedBuiltinVariables() const;
/// Retrieves any referenced uniform variables. Note, the variables must be
/// decorated with both binding and group decorations.
/// @returns the referenced uniforms
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedUniformVariables() const;
VariableBindings ReferencedUniformVariables() const;
/// Retrieves any referenced storagebuffer variables. Note, the variables
/// must be decorated with both binding and group decorations.
/// @returns the referenced storagebuffers
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedStorageBufferVariables() const;
VariableBindings ReferencedStorageBufferVariables() const;
/// Retrieves any referenced regular Sampler variables. Note, the
/// variables must be decorated with both binding and group decorations.
/// @returns the referenced storagebuffers
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedSamplerVariables() const;
VariableBindings ReferencedSamplerVariables() const;
/// Retrieves any referenced comparison Sampler variables. Note, the
/// variables must be decorated with both binding and group decorations.
/// @returns the referenced storagebuffers
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedComparisonSamplerVariables() const;
VariableBindings ReferencedComparisonSamplerVariables() const;
/// Retrieves any referenced sampled textures variables. Note, the
/// variables must be decorated with both binding and group decorations.
/// @returns the referenced sampled textures
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedSampledTextureVariables() const;
VariableBindings ReferencedSampledTextureVariables() const;
/// Retrieves any referenced multisampled textures variables. Note, the
/// variables must be decorated with both binding and group decorations.
/// @returns the referenced sampled textures
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedMultisampledTextureVariables() const;
VariableBindings ReferencedMultisampledTextureVariables() const;
/// Retrieves any referenced storage texture variables. Note, the variables
/// must be decorated with both binding and group decorations.
/// @returns the referenced storage textures
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedStorageTextureVariables() const;
VariableBindings ReferencedStorageTextureVariables() const;
/// Retrieves any locally referenced builtin variables
/// @returns the <variable, decoration> pairs.
const std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
LocalReferencedBuiltinVariables() const;
/// Checks if the given entry point is an ancestor
@ -141,10 +137,9 @@ class Function : public Castable<Function, CallTarget> {
bool HasAncestorEntryPoint(Symbol sym) const;
private:
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedSamplerVariablesImpl(type::SamplerKind kind) const;
const std::vector<std::pair<const Variable*, BindingInfo>>
ReferencedSampledTextureVariablesImpl(bool multisampled) const;
VariableBindings ReferencedSamplerVariablesImpl(type::SamplerKind kind) const;
VariableBindings ReferencedSampledTextureVariablesImpl(
bool multisampled) const;
ast::Function* const declaration_;
std::vector<const Variable*> const referenced_module_vars_;

View File

@ -57,7 +57,7 @@ Function::Function(ast::Function* declaration,
Function::~Function() = default;
const std::vector<std::pair<const Variable*, ast::LocationDecoration*>>
std::vector<std::pair<const Variable*, ast::LocationDecoration*>>
Function::ReferencedLocationVariables() const {
std::vector<std::pair<const Variable*, ast::LocationDecoration*>> ret;
@ -72,9 +72,8 @@ Function::ReferencedLocationVariables() const {
return ret;
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedUniformVariables() const {
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret;
Function::VariableBindings Function::ReferencedUniformVariables() const {
VariableBindings ret;
for (auto* var : ReferencedModuleVariables()) {
if (var->StorageClass() != ast::StorageClass::kUniform) {
@ -99,9 +98,8 @@ Function::ReferencedUniformVariables() const {
return ret;
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedStorageBufferVariables() const {
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret;
Function::VariableBindings Function::ReferencedStorageBufferVariables() const {
VariableBindings ret;
for (auto* var : ReferencedModuleVariables()) {
if (var->StorageClass() != ast::StorageClass::kStorage) {
@ -126,7 +124,7 @@ Function::ReferencedStorageBufferVariables() const {
return ret;
}
const std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
Function::ReferencedBuiltinVariables() const {
std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> ret;
@ -141,29 +139,26 @@ Function::ReferencedBuiltinVariables() const {
return ret;
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedSamplerVariables() const {
Function::VariableBindings Function::ReferencedSamplerVariables() const {
return ReferencedSamplerVariablesImpl(type::SamplerKind::kSampler);
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedComparisonSamplerVariables() const {
Function::VariableBindings Function::ReferencedComparisonSamplerVariables()
const {
return ReferencedSamplerVariablesImpl(type::SamplerKind::kComparisonSampler);
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedSampledTextureVariables() const {
Function::VariableBindings Function::ReferencedSampledTextureVariables() const {
return ReferencedSampledTextureVariablesImpl(false);
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedMultisampledTextureVariables() const {
Function::VariableBindings Function::ReferencedMultisampledTextureVariables()
const {
return ReferencedSampledTextureVariablesImpl(true);
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedStorageTextureVariables() const {
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret;
Function::VariableBindings Function::ReferencedStorageTextureVariables() const {
VariableBindings ret;
for (auto* var : ReferencedModuleVariables()) {
auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded();
@ -190,7 +185,7 @@ Function::ReferencedStorageTextureVariables() const {
return ret;
}
const std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>>
Function::LocalReferencedBuiltinVariables() const {
std::vector<std::pair<const Variable*, ast::BuiltinDecoration*>> ret;
@ -214,9 +209,9 @@ bool Function::HasAncestorEntryPoint(Symbol symbol) const {
return false;
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedSamplerVariablesImpl(type::SamplerKind kind) const {
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret;
Function::VariableBindings Function::ReferencedSamplerVariablesImpl(
type::SamplerKind kind) const {
VariableBindings ret;
for (auto* var : ReferencedModuleVariables()) {
auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded();
@ -244,9 +239,9 @@ Function::ReferencedSamplerVariablesImpl(type::SamplerKind kind) const {
return ret;
}
const std::vector<std::pair<const Variable*, Function::BindingInfo>>
Function::ReferencedSampledTextureVariablesImpl(bool multisampled) const {
std::vector<std::pair<const Variable*, Function::BindingInfo>> ret;
Function::VariableBindings Function::ReferencedSampledTextureVariablesImpl(
bool multisampled) const {
VariableBindings ret;
for (auto* var : ReferencedModuleVariables()) {
auto* unwrapped_type = var->Declaration()->type()->UnwrapIfNeeded();