From 687f18991649e9172ea12fed3bdc7bf3adfbbe8a Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Wed, 5 Jan 2022 14:08:36 -0800 Subject: [PATCH] Don't waste space on an unnecessary depth buffer. --- impeller/aiks/canvas.cc | 4 ++++ impeller/aiks/canvas.h | 2 ++ impeller/display_list/display_list_dispatcher.cc | 5 +++++ impeller/display_list/display_list_dispatcher.h | 3 +++ impeller/renderer/backend/metal/formats_mtl.h | 2 ++ impeller/renderer/backend/metal/surface_mtl.mm | 2 +- impeller/renderer/formats.h | 3 +++ impeller/renderer/pipeline_builder.h | 2 +- impeller/renderer/render_target.cc | 2 +- impeller/renderer/renderer_unittests.cc | 2 +- 10 files changed, 23 insertions(+), 4 deletions(-) diff --git a/impeller/aiks/canvas.cc b/impeller/aiks/canvas.cc index 99d7a47c58368..3af66e13e8918 100644 --- a/impeller/aiks/canvas.cc +++ b/impeller/aiks/canvas.cc @@ -53,6 +53,10 @@ void Canvas::Concat(const Matrix& xformation) { xformation_stack_.back().xformation = xformation * GetCurrentTransformation(); } +void Canvas::ResetTransform() { + xformation_stack_.back().xformation = {}; +} + void Canvas::Transform(const Matrix& xformation) { Concat(xformation); } diff --git a/impeller/aiks/canvas.h b/impeller/aiks/canvas.h index 2bf6aeeed4816..2b00151f585a0 100644 --- a/impeller/aiks/canvas.h +++ b/impeller/aiks/canvas.h @@ -41,6 +41,8 @@ class Canvas { const Matrix& GetCurrentTransformation() const; + void ResetTransform(); + void Transform(const Matrix& xformation); void Concat(const Matrix& xformation); diff --git a/impeller/display_list/display_list_dispatcher.cc b/impeller/display_list/display_list_dispatcher.cc index 540c08965fde0..c349a55e5a5d6 100644 --- a/impeller/display_list/display_list_dispatcher.cc +++ b/impeller/display_list/display_list_dispatcher.cc @@ -206,6 +206,11 @@ void DisplayListDispatcher::transformFullPerspective(SkScalar mxx, canvas_.Transform(xformation); } +// |flutter::Dispatcher| +void DisplayListDispatcher::transformReset() { + canvas_.ResetTransform(); +} + static Rect ToRect(const SkRect& rect) { return Rect::MakeLTRB(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom); } diff --git a/impeller/display_list/display_list_dispatcher.h b/impeller/display_list/display_list_dispatcher.h index c32f295f6e4dd..67a95d94b82d3 100644 --- a/impeller/display_list/display_list_dispatcher.h +++ b/impeller/display_list/display_list_dispatcher.h @@ -118,6 +118,9 @@ class DisplayListDispatcher final : public flutter::Dispatcher { SkScalar mwz, SkScalar mwt) override; + // |flutter::Dispatcher| + void transformReset() override; + // |flutter::Dispatcher| void clipRect(const SkRect& rect, SkClipOp clip_op, bool is_aa) override; diff --git a/impeller/renderer/backend/metal/formats_mtl.h b/impeller/renderer/backend/metal/formats_mtl.h index 9ebf190477561..742435d3938bf 100644 --- a/impeller/renderer/backend/metal/formats_mtl.h +++ b/impeller/renderer/backend/metal/formats_mtl.h @@ -29,6 +29,8 @@ constexpr MTLPixelFormat ToMTLPixelFormat(PixelFormat format) { return MTLPixelFormatDepth32Float_Stencil8; case PixelFormat::kR8G8B8A8UNormInt: return MTLPixelFormatRGBA8Unorm; + case PixelFormat::kS8UInt: + return MTLPixelFormatStencil8; case PixelFormat::kR8G8B8A8UNormIntSRGB: return MTLPixelFormatRGBA8Unorm_sRGB; } diff --git a/impeller/renderer/backend/metal/surface_mtl.mm b/impeller/renderer/backend/metal/surface_mtl.mm index 52b24d24976f1..9c66eadfefe8e 100644 --- a/impeller/renderer/backend/metal/surface_mtl.mm +++ b/impeller/renderer/backend/metal/surface_mtl.mm @@ -61,7 +61,7 @@ TextureDescriptor stencil0_tex; stencil0_tex.type = TextureType::k2DMultisample; stencil0_tex.sample_count = SampleCount::kCount4; - stencil0_tex.format = PixelFormat::kD32FloatS8UNormInt; + stencil0_tex.format = PixelFormat::kS8UInt; stencil0_tex.size = msaa_tex_desc.size; stencil0_tex.usage = static_cast(TextureUsage::kRenderTarget); diff --git a/impeller/renderer/formats.h b/impeller/renderer/formats.h index 72c49a1a71bf1..4b4a4dd143f2f 100644 --- a/impeller/renderer/formats.h +++ b/impeller/renderer/formats.h @@ -50,6 +50,7 @@ enum class PixelFormat { kR8G8B8A8UNormIntSRGB, kB8G8R8A8UNormInt, kB8G8R8A8UNormIntSRGB, + kS8UInt, // Esoteric formats only used as render targets. kD32FloatS8UNormInt, }; @@ -166,6 +167,8 @@ constexpr size_t BytesPerPixelForPixelFormat(PixelFormat format) { switch (format) { case PixelFormat::kUnknown: return 0u; + case PixelFormat::kS8UInt: + return 1u; case PixelFormat::kR8G8B8A8UNormInt: case PixelFormat::kR8G8B8A8UNormIntSRGB: case PixelFormat::kB8G8R8A8UNormInt: diff --git a/impeller/renderer/pipeline_builder.h b/impeller/renderer/pipeline_builder.h index 82e6a742d33a2..90c6c7884f63a 100644 --- a/impeller/renderer/pipeline_builder.h +++ b/impeller/renderer/pipeline_builder.h @@ -109,7 +109,7 @@ struct PipelineBuilder { StencilAttachmentDescriptor stencil0; stencil0.stencil_compare = CompareFunction::kLessEqual; desc.SetStencilAttachmentDescriptors(stencil0); - desc.SetStencilPixelFormat(PixelFormat::kD32FloatS8UNormInt); + desc.SetStencilPixelFormat(PixelFormat::kS8UInt); } return true; diff --git a/impeller/renderer/render_target.cc b/impeller/renderer/render_target.cc index 0e6f8bcf20e14..fb6d8ce58dc57 100644 --- a/impeller/renderer/render_target.cc +++ b/impeller/renderer/render_target.cc @@ -188,7 +188,7 @@ RenderTarget RenderTarget::CreateOffscreen(const Context& context, static_cast(TextureUsage::kShaderRead); TextureDescriptor stencil_tex0; - stencil_tex0.format = PixelFormat::kD32FloatS8UNormInt; + stencil_tex0.format = PixelFormat::kS8UInt; stencil_tex0.size = size; stencil_tex0.usage = static_cast(TextureUsage::kRenderTarget); diff --git a/impeller/renderer/renderer_unittests.cc b/impeller/renderer/renderer_unittests.cc index 57933170d1a54..097cba63cd060 100644 --- a/impeller/renderer/renderer_unittests.cc +++ b/impeller/renderer/renderer_unittests.cc @@ -224,7 +224,7 @@ TEST_F(RendererTest, CanRenderToTexture) { stencil0.store_action = StoreAction::kDontCare; TextureDescriptor stencil_texture_desc; stencil_texture_desc.size = texture_descriptor.size; - stencil_texture_desc.format = PixelFormat::kD32FloatS8UNormInt; + stencil_texture_desc.format = PixelFormat::kS8UInt; stencil_texture_desc.usage = static_cast(TextureUsage::kRenderTarget); stencil0.texture = context->GetPermanentsAllocator()->CreateTexture(