| // Copyright 2018 The Fuchsia 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 <type_traits> |
| |
| #include "src/ui/lib/escher/paper/paper_renderer.h" |
| #include "src/ui/lib/escher/paper/paper_renderer_config.h" |
| #include "src/ui/lib/escher/test/common/gtest_escher.h" |
| |
| namespace { |
| |
| using namespace escher; |
| |
| using PaperRendererConfigTest = escher::test::TestWithVkValidationLayer; |
| |
| VK_TEST_F(PaperRendererConfigTest, TestInvalidSampleCount) { |
| EscherWeakPtr escher = test::GetEscher()->GetWeakPtr(); |
| PaperRendererPtr renderer = PaperRenderer::New(escher, PaperRendererConfig()); |
| auto old_config = renderer->config(); |
| auto new_config = renderer->config(); |
| |
| const std::vector<size_t> kSampleCountCandidates = {1, 2, 4}; |
| auto it = std::find_if(kSampleCountCandidates.begin(), kSampleCountCandidates.end(), |
| [escher](const size_t sample_count) { |
| const auto& msaa_sample_counts = |
| escher->device()->caps().msaa_sample_counts; |
| return msaa_sample_counts.find(sample_count) == msaa_sample_counts.end(); |
| }); |
| if (it == kSampleCountCandidates.end()) { |
| FX_LOGS(INFO) << "Cannot find a sample count not supported by the device. Test terminated."; |
| } else { |
| new_config.msaa_sample_count = *it; |
| FX_LOGS(INFO) << "Setting the sample count to a value not upported by the device. " |
| "Error messages are expected."; |
| renderer->SetConfig(new_config); |
| |
| // SetConfig should fail and the renderer config should not change. |
| EXPECT_TRUE(renderer->config().msaa_sample_count != new_config.msaa_sample_count); |
| EXPECT_TRUE(renderer->config().msaa_sample_count == old_config.msaa_sample_count); |
| } |
| } |
| |
| VK_TEST_F(PaperRendererConfigTest, TestInvalidDepthStencilFormat) { |
| EscherWeakPtr escher = test::GetEscher()->GetWeakPtr(); |
| PaperRendererPtr renderer = PaperRenderer::New(escher, PaperRendererConfig()); |
| auto old_config = renderer->config(); |
| auto new_config = renderer->config(); |
| |
| new_config.depth_stencil_format = vk::Format::eUndefined; |
| FX_LOGS(INFO) << "Setting the depth stencil format to a format not supported by the device. " |
| "Error messages are expected."; |
| renderer->SetConfig(new_config); |
| |
| // SetConfig should fail and the renderer config should not change. |
| EXPECT_TRUE(renderer->config().depth_stencil_format != new_config.depth_stencil_format); |
| EXPECT_TRUE(renderer->config().depth_stencil_format == old_config.depth_stencil_format); |
| } |
| |
| } // namespace |