blob: 8285c137808a37fdc427ab996ff4e3d8d253cc81 [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 "flutter/testing/testing.h" // IWYU pragma: keep
#include "fml/mapping.h"
#include "gtest/gtest.h"
#include "impeller/renderer/backend/gles/proc_table_gles.h"
#include "impeller/renderer/backend/gles/test/mock_gles.h"
namespace impeller {
namespace testing {
TEST(SpecConstant, CanCreateShaderWithSpecializationConstant) {
auto mock_gles = MockGLES::Init();
auto& proc_table = mock_gles->GetProcTable();
auto shader_source =
"#version 100\n"
"#ifndef SPIRV_CROSS_CONSTANT_ID_0\n"
"#define SPIRV_CROSS_CONSTANT_ID_0 1\n"
"#endif\n"
"void main() { return vec4(0.0); }";
auto test_shader = std::make_shared<fml::DataMapping>(shader_source);
auto result = proc_table.ComputeShaderWithDefines(*test_shader, {0});
auto expected_shader_source =
"#version 100\n"
"#define SPIRV_CROSS_CONSTANT_ID_0 0\n"
"#ifndef SPIRV_CROSS_CONSTANT_ID_0\n"
"#define SPIRV_CROSS_CONSTANT_ID_0 1\n"
"#endif\n"
"void main() { return vec4(0.0); }";
if (!result.has_value()) {
GTEST_FAIL() << "Expected shader source";
}
ASSERT_EQ(result.value(), expected_shader_source);
}
TEST(SpecConstant, CanCreateShaderWithSpecializationConstantMultipleValues) {
auto mock_gles = MockGLES::Init();
auto& proc_table = mock_gles->GetProcTable();
auto shader_source =
"#version 100\n"
"#ifndef SPIRV_CROSS_CONSTANT_ID_0\n"
"#define SPIRV_CROSS_CONSTANT_ID_0 1\n"
"#endif\n"
"void main() { return vec4(0.0); }";
auto test_shader = std::make_shared<fml::DataMapping>(shader_source);
auto result =
proc_table.ComputeShaderWithDefines(*test_shader, {0, 1, 2, 3, 4, 5});
auto expected_shader_source =
"#version 100\n"
"#define SPIRV_CROSS_CONSTANT_ID_0 0\n"
"#define SPIRV_CROSS_CONSTANT_ID_1 1\n"
"#define SPIRV_CROSS_CONSTANT_ID_2 2\n"
"#define SPIRV_CROSS_CONSTANT_ID_3 3\n"
"#define SPIRV_CROSS_CONSTANT_ID_4 4\n"
"#define SPIRV_CROSS_CONSTANT_ID_5 5\n"
"#ifndef SPIRV_CROSS_CONSTANT_ID_0\n"
"#define SPIRV_CROSS_CONSTANT_ID_0 1\n"
"#endif\n"
"void main() { return vec4(0.0); }";
if (!result.has_value()) {
GTEST_FAIL() << "Expected shader source";
}
ASSERT_EQ(result.value(), expected_shader_source);
}
} // namespace testing
} // namespace impeller