blob: a8e4ee3422de1a0d686422acd5b423ac814077a6 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "impeller/renderer/vertex_descriptor.h"
namespace impeller {
VertexDescriptor::VertexDescriptor() = default;
VertexDescriptor::~VertexDescriptor() = default;
void VertexDescriptor::SetStageInputs(
const ShaderStageIOSlot* const stage_inputs[],
size_t count,
const ShaderStageBufferLayout* const stage_layout[],
size_t layout_count) {
inputs_.reserve(inputs_.size() + count);
layouts_.reserve(layouts_.size() + layout_count);
for (size_t i = 0; i < count; i++) {
inputs_.emplace_back(*stage_inputs[i]);
}
for (size_t i = 0; i < layout_count; i++) {
layouts_.emplace_back(*stage_layout[i]);
}
}
void VertexDescriptor::SetStageInputs(
const std::vector<ShaderStageIOSlot>& inputs,
const std::vector<ShaderStageBufferLayout>& layout) {
inputs_.insert(inputs_.end(), inputs.begin(), inputs.end());
layouts_.insert(layouts_.end(), layout.begin(), layout.end());
}
void VertexDescriptor::RegisterDescriptorSetLayouts(
const DescriptorSetLayout desc_set_layout[],
size_t count) {
desc_set_layouts_.reserve(desc_set_layouts_.size() + count);
for (size_t i = 0; i < count; i++) {
uses_input_attachments_ |=
desc_set_layout[i].descriptor_type == DescriptorType::kInputAttachment;
desc_set_layouts_.emplace_back(desc_set_layout[i]);
}
}
// |Comparable<VertexDescriptor>|
size_t VertexDescriptor::GetHash() const {
auto seed = fml::HashCombine();
for (const auto& input : inputs_) {
fml::HashCombineSeed(seed, input.GetHash());
}
for (const auto& layout : layouts_) {
fml::HashCombineSeed(seed, layout.GetHash());
}
return seed;
}
// |Comparable<VertexDescriptor>|
bool VertexDescriptor::IsEqual(const VertexDescriptor& other) const {
return inputs_ == other.inputs_ && layouts_ == other.layouts_;
}
const std::vector<ShaderStageIOSlot>& VertexDescriptor::GetStageInputs() const {
return inputs_;
}
const std::vector<ShaderStageBufferLayout>& VertexDescriptor::GetStageLayouts()
const {
return layouts_;
}
const std::vector<DescriptorSetLayout>&
VertexDescriptor::GetDescriptorSetLayouts() const {
return desc_set_layouts_;
}
bool VertexDescriptor::UsesInputAttacments() const {
return uses_input_attachments_;
}
} // namespace impeller