-
Notifications
You must be signed in to change notification settings - Fork 29.8k
Closed
flutter/engine
#49848Labels
P1High-priority issues at the top of the work listHigh-priority issues at the top of the work liste: impellerImpeller rendering backend issues and features requestsImpeller rendering backend issues and features requestsengineflutter/engine related. See also e: labels.flutter/engine related. See also e: labels.team-engineOwned by Engine teamOwned by Engine teamtriaged-engineTriaged by Engine teamTriaged by Engine team
Description
flutter/engine#49642 is blocked on a failure on an assert that the texture getting sent to the gaussian blur hasn't had its mipmaps generated. When investigating the problem it was seen that TextureVK::mipmaps_generated_ is never set to true. In Metal that happens by virtue of BlitGenerateMipmapCommandMTL::Encode calling TextureMTL::GenerateMipmap which sets mipmaps_generated_.
If the following patch is added to make mipmaps_generated_ get set there is still a validations error.
diff --git a/impeller/renderer/backend/vulkan/blit_command_vk.cc b/impeller/renderer/backend/vulkan/blit_command_vk.cc
index 6f9a9a55c7..0cd334658d 100644
--- a/impeller/renderer/backend/vulkan/blit_command_vk.cc
+++ b/impeller/renderer/backend/vulkan/blit_command_vk.cc
@@ -353,6 +353,7 @@ bool BlitGenerateMipmapCommandVK::Encode(CommandEncoderVK& encoder) const {
// state so it doesn't try to perform redundant transitions under the hood.
src.SetLayoutWithoutEncoding(vk::ImageLayout::eShaderReadOnlyOptimal);
+ src.SetMipMapGenerated();
return true;
}
diff --git a/impeller/renderer/backend/vulkan/texture_vk.h b/impeller/renderer/backend/vulkan/texture_vk.h
index 4df1dcc37b..56ebb217d6 100644
--- a/impeller/renderer/backend/vulkan/texture_vk.h
+++ b/impeller/renderer/backend/vulkan/texture_vk.h
@@ -38,6 +38,8 @@ class TextureVK final : public Texture, public BackendCast<TextureVK, Texture> {
std::shared_ptr<const TextureSourceVK> GetTextureSource() const;
+ void SetMipMapGenerated() { mipmap_generated_ = true; }
+
private:
std::weak_ptr<Context> context_;
std::shared_ptr<TextureSourceVK> source_;The validation error is the following:
[mvk-error] VK_ERROR_INITIALIZATION_FAILED: Could not create MTLCounterSampleBuffer for query pool of type VK_QUERY_TYPE_TIMESTAMP. Reverting to emulated behavior. (Error code 0): Cannot allocate sample buffer
in
libsystem_kernel.dylib!__pthread_kill (Unknown Source:0)
libsystem_pthread.dylib!pthread_kill (Unknown Source:0)
libsystem_c.dylib!abort (Unknown Source:0)
impeller_unittests!fml::KillProcess() (/Users/aaclarke/dev/engine/src/flutter/fml/logging.cc:175)
impeller_unittests!fml::LogMessage::~LogMessage() (/Users/aaclarke/dev/engine/src/flutter/fml/logging.cc:162)
impeller_unittests!fml::LogMessage::~LogMessage() (/Users/aaclarke/dev/engine/src/flutter/fml/logging.cc:100)
impeller_unittests!impeller::ImpellerValidationBreak(char const*) (/Users/aaclarke/dev/engine/src/flutter/impeller/base/validation.cc:47)
impeller_unittests!impeller::ValidationLog::~ValidationLog() (/Users/aaclarke/dev/engine/src/flutter/impeller/base/validation.cc:32)
impeller_unittests!impeller::ValidationLog::~ValidationLog() (/Users/aaclarke/dev/engine/src/flutter/impeller/base/validation.cc:30)
impeller_unittests!impeller::GPUTracerVK::RecordCmdBufferStart(impeller::vk::CommandBuffer const&, impeller::GPUProbe&) (/Users/aaclarke/dev/engine/src/flutter/impeller/renderer/backend/vulkan/gpu_tracer_vk.cc:89)
impeller_unittests!impeller::GPUProbe::RecordCmdBufferStart(impeller::vk::CommandBuffer const&) (/Users/aaclarke/dev/engine/src/flutter/impeller/renderer/backend/vulkan/gpu_tracer_vk.cc:201)
impeller_unittests!impeller::CommandEncoderFactoryVK::Create() (/Users/aaclarke/dev/engine/src/flutter/impeller/renderer/backend/vulkan/command_encoder_vk.cc:59)
impeller_unittests!impeller::CommandBufferVK::GetEncoder() (/Users/aaclarke/dev/engine/src/flutter/impeller/renderer/backend/vulkan/command_buffer_vk.cc:49)
impeller_unittests!impeller::RenderPassVK::OnEncodeCommands(impeller::Context const&) const (/Users/aaclarke/dev/engine/src/flutter/impeller/renderer/backend/vulkan/render_pass_vk.cc:486)
impeller_unittests!impeller::RenderPass::EncodeCommands() const (/Users/aaclarke/dev/engine/src/flutter/impeller/renderer/render_pass.cc:85)
impeller_unittests!impeller::CommandBuffer::EncodeAndSubmit(std::_fl::shared_ptr<impeller::RenderPass> const&) (/Users/aaclarke/dev/engine/src/flutter/impeller/renderer/command_buffer.cc:45)
impeller_unittests!impeller::InlinePassContext::EndPass() (/Users/aaclarke/dev/engine/src/flutter/impeller/entity/inline_pass_context.cc:61)
impeller_unittests!impeller::EntityPass::GetEntityForElement(std::_fl::variant<impeller::Entity, std::_fl::unique_ptr<impeller::EntityPass, std::_fl::default_delete<impeller::EntityPass>>> const&, impeller::ContentContext&, impeller::Capture&, impeller::InlinePassContext&, impeller::TSize<long long>, impeller::TPoint<float>, unsigned int, std::_fl::vector<impeller::EntityPass::ClipCoverageLayer, std::_fl::allocator<impeller::EntityPass::ClipCoverageLayer>>&, unsigned long) const (/Users/aaclarke/dev/engine/src/flutter/impeller/entity/entity_pass.cc:555)
impeller_unittests!impeller::EntityPass::OnRender(impeller::ContentContext&, impeller::Capture&, impeller::TSize<long long>, impeller::EntityPassTarget&, impeller::TPoint<float>, impeller::TPoint<float>, unsigned int, std::_fl::vector<impeller::EntityPass::ClipCoverageLayer, std::_fl::allocator<impeller::EntityPass::ClipCoverageLayer>>&, unsigned long, std::_fl::shared_ptr<impeller::Contents>, std::_fl::optional<impeller::InlinePassContext::RenderPassResult> const&) const (/Users/aaclarke/dev/engine/src/flutter/impeller/entity/entity_pass.cc:898)
impeller_unittests!impeller::EntityPass::Render(impeller::ContentContext&, impeller::RenderTarget const&) const (/Users/aaclarke/dev/engine/src/flutter/impeller/entity/entity_pass.cc:350)
Metadata
Metadata
Assignees
Labels
P1High-priority issues at the top of the work listHigh-priority issues at the top of the work liste: impellerImpeller rendering backend issues and features requestsImpeller rendering backend issues and features requestsengineflutter/engine related. See also e: labels.flutter/engine related. See also e: labels.team-engineOwned by Engine teamOwned by Engine teamtriaged-engineTriaged by Engine teamTriaged by Engine team