6 #include "flutter/testing/testing.h"
7 #include "gtest/gtest.h"
28 GTEST_SKIP() <<
"Not supported with SkSL";
30 ASSERT_TRUE(CanCompileAndReflect(
"sample.vert"));
38 GTEST_SKIP() <<
"Not supported with SkSL";
40 ASSERT_TRUE(CanCompileAndReflect(
46 GTEST_SKIP() <<
"Not supported with SkSL";
48 ASSERT_TRUE(CanCompileAndReflect(
"multiple_stages.hlsl",
51 ASSERT_TRUE(CanCompileAndReflect(
"multiple_stages.hlsl",
59 <<
"Only enabled on Metal backends till ES 3.2 support is added.";
61 ASSERT_TRUE(CanCompileAndReflect(
"sample.comp"));
67 GTEST_SKIP() <<
"Not supported with SkSL";
76 GTEST_SKIP() <<
"Not supported with SkSL";
79 ASSERT_FALSE(CanCompileAndReflect(
"struct_def_bug.vert"));
90 auto get_binding = [&](
const char* fixture) -> uint32_t {
91 auto json_fd = GetReflectionJson(fixture);
92 nlohmann::json shader_json = nlohmann::json::parse(json_fd->GetMapping());
93 return shader_json[
"buffers"][0][
"binding"].get<uint32_t>();
96 auto vert_uniform_binding = get_binding(
"sample.vert");
97 auto frag_uniform_binding = get_binding(
"sample.frag");
99 ASSERT_GT(frag_uniform_binding, vert_uniform_binding);
104 GTEST_SKIP() <<
"Not supported with SkSL";
106 ASSERT_TRUE(CanCompileAndReflect(
"sample_with_binding.vert",
110 struct binding_and_set {
115 auto get_binding = [&](
const char* fixture) -> binding_and_set {
116 auto json_fd = GetReflectionJson(fixture);
117 nlohmann::json shader_json = nlohmann::json::parse(json_fd->GetMapping());
118 uint32_t binding = shader_json[
"buffers"][0][
"binding"].get<uint32_t>();
119 uint32_t set = shader_json[
"buffers"][0][
"set"].get<uint32_t>();
120 return {binding, set};
123 auto vert_uniform_binding = get_binding(
"sample_with_binding.vert");
124 auto frag_uniform_binding = get_binding(
"sample.frag");
126 ASSERT_EQ(frag_uniform_binding.set, 0u);
127 ASSERT_EQ(vert_uniform_binding.set, 3u);
128 ASSERT_EQ(vert_uniform_binding.binding, 17u);
133 GTEST_SKIP() <<
"Only supported on SkSL";
138 auto shader = GetShaderFile(
"texture_lookup.frag", GetParam());
139 std::string_view shader_mapping(
140 reinterpret_cast<const char*
>(shader->GetMapping()), shader->GetSize());
142 constexpr std::string_view expected =
143 "textureA.eval(textureA_size * ( vec2(1.0) + flutter_FragCoord.xy));";
145 EXPECT_NE(shader_mapping.find(expected), std::string::npos);
150 GTEST_SKIP() <<
"Only supported on SkSL";
152 ASSERT_TRUE(CanCompileAndReflect(
"struct_internal.frag",
156 #define INSTANTIATE_TARGET_PLATFORM_TEST_SUITE_P(suite_name) \
157 INSTANTIATE_TEST_SUITE_P( \
158 suite_name, CompilerTest, \
159 ::testing::Values(TargetPlatform::kOpenGLES, \
160 TargetPlatform::kOpenGLDesktop, \
161 TargetPlatform::kMetalDesktop, \
162 TargetPlatform::kMetalIOS, TargetPlatform::kSkSL), \
163 [](const ::testing::TestParamInfo<CompilerTest::ParamType>& info) { \
164 return TargetPlatformToString(info.param); \
TEST(CompilerTest, ShaderKindMatchingIsSuccessful)
INSTANTIATE_TARGET_PLATFORM_TEST_SUITE_P(CompilerSuite)
TEST_P(CompilerTest, CanCompile)
SourceType SourceTypeFromFileName(const std::string &file_name)
bool TargetPlatformIsMetal(TargetPlatform platform)
bool TargetPlatformIsVulkan(TargetPlatform platform)