From 3b465983aadf31c377d3a1efc568117dafb0c48e Mon Sep 17 00:00:00 2001 From: Brandon DeRosier Date: Fri, 11 Nov 2022 23:50:18 -0800 Subject: [PATCH] [Impeller] Include the new primitive type in the pipeline hash (#37546) * Include the new primitive type in the pipeline hash * Add test --- ci/licenses_golden/licenses_flutter | 1 + impeller/renderer/BUILD.gn | 1 + impeller/renderer/pipeline_descriptor.cc | 4 ++- .../renderer/pipeline_descriptor_unittests.cc | 27 +++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 impeller/renderer/pipeline_descriptor_unittests.cc diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 5cb3aed373664..7475e7b46533b 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -1525,6 +1525,7 @@ FILE: ../../../flutter/impeller/renderer/pipeline_builder.cc FILE: ../../../flutter/impeller/renderer/pipeline_builder.h FILE: ../../../flutter/impeller/renderer/pipeline_descriptor.cc FILE: ../../../flutter/impeller/renderer/pipeline_descriptor.h +FILE: ../../../flutter/impeller/renderer/pipeline_descriptor_unittests.cc FILE: ../../../flutter/impeller/renderer/pipeline_library.cc FILE: ../../../flutter/impeller/renderer/pipeline_library.h FILE: ../../../flutter/impeller/renderer/platform.cc diff --git a/impeller/renderer/BUILD.gn b/impeller/renderer/BUILD.gn index eed570791b32a..100d5db2202c4 100644 --- a/impeller/renderer/BUILD.gn +++ b/impeller/renderer/BUILD.gn @@ -106,6 +106,7 @@ impeller_component("renderer_unittests") { sources = [ "device_buffer_unittests.cc", "host_buffer_unittests.cc", + "pipeline_descriptor_unittests.cc", "renderer_unittests.cc", ] diff --git a/impeller/renderer/pipeline_descriptor.cc b/impeller/renderer/pipeline_descriptor.cc index ce19de3a8afa1..c6d8029e46b64 100644 --- a/impeller/renderer/pipeline_descriptor.cc +++ b/impeller/renderer/pipeline_descriptor.cc @@ -40,6 +40,7 @@ std::size_t PipelineDescriptor::GetHash() const { fml::HashCombineSeed(seed, back_stencil_attachment_descriptor_); fml::HashCombineSeed(seed, winding_order_); fml::HashCombineSeed(seed, cull_mode_); + fml::HashCombineSeed(seed, primitive_type_); return seed; } @@ -57,7 +58,8 @@ bool PipelineDescriptor::IsEqual(const PipelineDescriptor& other) const { back_stencil_attachment_descriptor_ == other.back_stencil_attachment_descriptor_ && winding_order_ == other.winding_order_ && - cull_mode_ == other.cull_mode_; + cull_mode_ == other.cull_mode_ && + primitive_type_ == other.primitive_type_; } PipelineDescriptor& PipelineDescriptor::SetLabel(std::string label) { diff --git a/impeller/renderer/pipeline_descriptor_unittests.cc b/impeller/renderer/pipeline_descriptor_unittests.cc new file mode 100644 index 0000000000000..88e038c05107f --- /dev/null +++ b/impeller/renderer/pipeline_descriptor_unittests.cc @@ -0,0 +1,27 @@ +// 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 + +#include "flutter/testing/testing.h" +#include "impeller/renderer/pipeline_descriptor.h" + +namespace impeller { +namespace testing { + +TEST(PipelineDescriptorTest, PrimitiveTypeHashEquality) { + PipelineDescriptor descA; + PipelineDescriptor descB; + + ASSERT_TRUE(descA.IsEqual(descB)); + ASSERT_EQ(descA.GetHash(), descB.GetHash()); + + descA.SetPrimitiveType(PrimitiveType::kTriangleStrip); + + ASSERT_FALSE(descA.IsEqual(descB)); + ASSERT_NE(descA.GetHash(), descB.GetHash()); +} + +} // namespace testing +} // namespace impeller