46 flatbuffers::FlatBufferBuilder builder;
47 fb::RuntimeStagesBuilder stages_builder(builder);
48 stages_builder.add_format_version(0);
49 auto stages = stages_builder.Finish();
50 builder.Finish(stages, fb::RuntimeStagesIdentifier());
51 auto mapping = std::make_shared<fml::NonOwnedMapping>(
52 builder.GetBufferPointer(), builder.GetSize());
54 EXPECT_FALSE(runtime_stages.ok());
55 EXPECT_EQ(runtime_stages.status().code(), absl::StatusCode::kInvalidArgument);
75 const std::shared_ptr<fml::Mapping> fixture =
78 ASSERT_GT(fixture->GetSize(), 0u);
80 ABSL_ASSERT_OK(stages);
85 switch (GetBackend()) {
89 ASSERT_EQ(stage->GetUniforms().size(), 17u);
91 auto uni = stage->GetUniform(
"u_color");
92 ASSERT_NE(uni,
nullptr);
93 EXPECT_EQ(uni->dimensions.rows, 4u);
94 EXPECT_EQ(uni->dimensions.cols, 1u);
95 EXPECT_EQ(uni->location, 0u);
99 auto uni = stage->GetUniform(
"u_alpha");
100 ASSERT_NE(uni,
nullptr);
101 EXPECT_EQ(uni->dimensions.rows, 1u);
102 EXPECT_EQ(uni->dimensions.cols, 1u);
103 EXPECT_EQ(uni->location, 1u);
107 auto uni = stage->GetUniform(
"u_sparkle_color");
108 ASSERT_NE(uni,
nullptr);
109 EXPECT_EQ(uni->dimensions.rows, 4u);
110 EXPECT_EQ(uni->dimensions.cols, 1u);
111 EXPECT_EQ(uni->location, 2u);
115 auto uni = stage->GetUniform(
"u_sparkle_alpha");
116 ASSERT_NE(uni,
nullptr);
117 EXPECT_EQ(uni->dimensions.rows, 1u);
118 EXPECT_EQ(uni->dimensions.cols, 1u);
119 EXPECT_EQ(uni->location, 3u);
123 auto uni = stage->GetUniform(
"u_blur");
124 ASSERT_NE(uni,
nullptr);
125 EXPECT_EQ(uni->dimensions.rows, 1u);
126 EXPECT_EQ(uni->dimensions.cols, 1u);
127 EXPECT_EQ(uni->location, 4u);
131 auto uni = stage->GetUniform(
"u_radius_scale");
132 ASSERT_NE(uni,
nullptr);
133 EXPECT_EQ(uni->dimensions.rows, 1u);
134 EXPECT_EQ(uni->dimensions.cols, 1u);
135 EXPECT_EQ(uni->location, 6u);
139 auto uni = stage->GetUniform(
"u_max_radius");
140 ASSERT_NE(uni,
nullptr);
141 EXPECT_EQ(uni->dimensions.rows, 1u);
142 EXPECT_EQ(uni->dimensions.cols, 1u);
143 EXPECT_EQ(uni->location, 7u);
147 auto uni = stage->GetUniform(
"u_resolution_scale");
148 ASSERT_NE(uni,
nullptr);
149 EXPECT_EQ(uni->dimensions.rows, 2u);
150 EXPECT_EQ(uni->dimensions.cols, 1u);
151 EXPECT_EQ(uni->location, 8u);
155 auto uni = stage->GetUniform(
"u_noise_scale");
156 ASSERT_NE(uni,
nullptr);
157 EXPECT_EQ(uni->dimensions.rows, 2u);
158 EXPECT_EQ(uni->dimensions.cols, 1u);
159 EXPECT_EQ(uni->location, 9u);
163 auto uni = stage->GetUniform(
"u_noise_phase");
164 ASSERT_NE(uni,
nullptr);
165 EXPECT_EQ(uni->dimensions.rows, 1u);
166 EXPECT_EQ(uni->dimensions.cols, 1u);
167 EXPECT_EQ(uni->location, 10u);
172 auto uni = stage->GetUniform(
"u_circle1");
173 ASSERT_NE(uni,
nullptr);
174 EXPECT_EQ(uni->dimensions.rows, 2u);
175 EXPECT_EQ(uni->dimensions.cols, 1u);
176 EXPECT_EQ(uni->location, 11u);
180 auto uni = stage->GetUniform(
"u_circle2");
181 ASSERT_NE(uni,
nullptr);
182 EXPECT_EQ(uni->dimensions.rows, 2u);
183 EXPECT_EQ(uni->dimensions.cols, 1u);
184 EXPECT_EQ(uni->location, 12u);
188 auto uni = stage->GetUniform(
"u_circle3");
189 ASSERT_NE(uni,
nullptr);
190 EXPECT_EQ(uni->dimensions.rows, 2u);
191 EXPECT_EQ(uni->dimensions.cols, 1u);
192 EXPECT_EQ(uni->location, 13u);
196 auto uni = stage->GetUniform(
"u_rotation1");
197 ASSERT_NE(uni,
nullptr);
198 EXPECT_EQ(uni->dimensions.rows, 2u);
199 EXPECT_EQ(uni->dimensions.cols, 1u);
200 EXPECT_EQ(uni->location, 14u);
204 auto uni = stage->GetUniform(
"u_rotation2");
205 ASSERT_NE(uni,
nullptr);
206 EXPECT_EQ(uni->dimensions.rows, 2u);
207 EXPECT_EQ(uni->dimensions.cols, 1u);
208 EXPECT_EQ(uni->location, 15u);
212 auto uni = stage->GetUniform(
"u_rotation3");
213 ASSERT_NE(uni,
nullptr);
214 EXPECT_EQ(uni->dimensions.rows, 2u);
215 EXPECT_EQ(uni->dimensions.cols, 1u);
216 EXPECT_EQ(uni->location, 16u);
222 EXPECT_EQ(stage->GetUniforms().size(), 1u);
226 EXPECT_EQ(uni->struct_float_count, 32u);
237 EXPECT_EQ(uni->GetSize(), 144u);
238 std::vector<uint8_t> layout(uni->GetSize() /
sizeof(
float), 1);
244 EXPECT_THAT(uni->struct_layout, ::testing::ElementsAreArray(layout));
342 auto stages_result = OpenAssetAsRuntimeStage(
"ink_sparkle.frag.iplr");
343 ABSL_ASSERT_OK(stages_result);
349 ASSERT_NE(stage,
nullptr);
350 ASSERT_TRUE(RegisterStage(*stage));
351 auto library = GetContext()->GetShaderLibrary();
352 using VS = RuntimeEffectVertexShader;
354 desc.
SetLabel(
"Runtime Stage InkSparkle");
359 auto vertex_descriptor = std::make_shared<VertexDescriptor>();
360 vertex_descriptor->SetStageInputs(VS::kAllShaderStageInputs,
361 VS::kInterleavedBufferLayout);
363 std::array<DescriptorSetLayout, 2> descriptor_set_layouts = {
364 VS::kDescriptorSetLayouts[0],
371 vertex_descriptor->RegisterDescriptorSetLayouts(descriptor_set_layouts);
375 color0.
format = GetContext()->GetCapabilities()->GetDefaultColorFormat();
380 const auto stencil_fmt =
381 GetContext()->GetCapabilities()->GetDefaultStencilFormat();
383 auto pipeline = GetContext()->GetPipelineLibrary()->GetPipeline(desc).Get();
384 ASSERT_NE(pipeline,
nullptr);