6 #include "flutter/testing/testing.h"
7 #include "gtest/gtest.h"
19 std::shared_ptr<const fml::Mapping> fixture =
20 flutter::testing::OpenFixtureAsMapping(
"check_gles_definition.frag");
52 GTEST_SKIP() <<
"Not supported with SkSL";
54 ASSERT_TRUE(CanCompileAndReflect(
"sample.vert"));
62 GTEST_SKIP() <<
"Not supported with SkSL";
64 ASSERT_TRUE(CanCompileAndReflect(
70 GTEST_SKIP() <<
"Not supported with SkSL";
72 ASSERT_TRUE(CanCompileAndReflect(
"multiple_stages.hlsl",
75 ASSERT_TRUE(CanCompileAndReflect(
"multiple_stages.hlsl",
83 <<
"Only enabled on Metal backends till ES 3.2 support is added.";
85 ASSERT_TRUE(CanCompileAndReflect(
"sample.comp"));
91 GTEST_SKIP() <<
"Not supported with SkSL";
100 GTEST_SKIP() <<
"Not supported with SkSL";
103 ASSERT_FALSE(CanCompileAndReflect(
"struct_def_bug.vert"));
114 auto get_binding = [&](
const char* fixture) -> uint32_t {
115 auto json_fd = GetReflectionJson(fixture);
116 nlohmann::json shader_json = nlohmann::json::parse(json_fd->GetMapping());
117 return shader_json[
"buffers"][0][
"binding"].get<uint32_t>();
120 auto vert_uniform_binding = get_binding(
"sample.vert");
121 auto frag_uniform_binding = get_binding(
"sample.frag");
123 ASSERT_GT(frag_uniform_binding, vert_uniform_binding);
128 GTEST_SKIP() <<
"Not supported with SkSL";
130 ASSERT_TRUE(CanCompileAndReflect(
"sample_with_binding.vert",
134 struct binding_and_set {
139 auto get_binding = [&](
const char* fixture) -> binding_and_set {
140 auto json_fd = GetReflectionJson(fixture);
141 nlohmann::json shader_json = nlohmann::json::parse(json_fd->GetMapping());
142 uint32_t binding = shader_json[
"buffers"][0][
"binding"].get<uint32_t>();
143 uint32_t set = shader_json[
"buffers"][0][
"set"].get<uint32_t>();
144 return {binding, set};
147 auto vert_uniform_binding = get_binding(
"sample_with_binding.vert");
148 auto frag_uniform_binding = get_binding(
"sample.frag");
150 ASSERT_EQ(frag_uniform_binding.set, 0u);
151 ASSERT_EQ(vert_uniform_binding.set, 3u);
152 ASSERT_EQ(vert_uniform_binding.binding, 17u);
157 GTEST_SKIP() <<
"Only supported on SkSL";
162 auto shader = GetShaderFile(
"texture_lookup.frag", GetParam());
163 std::string_view shader_mapping(
164 reinterpret_cast<const char*
>(shader->GetMapping()), shader->GetSize());
166 constexpr std::string_view expected =
167 "textureA.eval(textureA_size * ( vec2(1.0) + flutter_FragCoord.xy));";
169 EXPECT_NE(shader_mapping.find(expected), std::string::npos);
174 GTEST_SKIP() <<
"Only supported on SkSL";
176 ASSERT_TRUE(CanCompileAndReflect(
"struct_internal.frag",
180 #define INSTANTIATE_TARGET_PLATFORM_TEST_SUITE_P(suite_name) \
181 INSTANTIATE_TEST_SUITE_P( \
182 suite_name, CompilerTest, \
183 ::testing::Values(TargetPlatform::kOpenGLES, \
184 TargetPlatform::kOpenGLDesktop, \
185 TargetPlatform::kMetalDesktop, \
186 TargetPlatform::kMetalIOS, TargetPlatform::kSkSL), \
187 [](const ::testing::TestParamInfo<CompilerTest::ParamType>& info) { \
188 return TargetPlatformToString(info.param); \
std::shared_ptr< fml::Mapping > GetSPIRVAssembly() const
INSTANTIATE_TARGET_PLATFORM_TEST_SUITE_P(CompilerSuite)
TEST_P(CompilerTest, CanCompile)
TEST(CompilerTest, Defines)
SourceType SourceTypeFromFileName(const std::string &file_name)
bool TargetPlatformIsMetal(TargetPlatform platform)
bool TargetPlatformIsVulkan(TargetPlatform platform)
TargetPlatform target_platform
SourceLanguage source_language
std::string entry_point_name
TargetPlatform target_platform