Flutter Engine
 
Loading...
Searching...
No Matches
flutter::testing::EmbedderTestBackingStoreProducerVulkan Class Reference

#include <embedder_test_backingstore_producer_vulkan.h>

Inheritance diagram for flutter::testing::EmbedderTestBackingStoreProducerVulkan:
flutter::testing::EmbedderTestBackingStoreProducer

Public Member Functions

 EmbedderTestBackingStoreProducerVulkan (sk_sp< GrDirectContext > context, RenderTargetType type)
 
virtual ~EmbedderTestBackingStoreProducerVulkan ()
 
bool Create (const FlutterBackingStoreConfig *config, FlutterBackingStore *backing_store_out) override
 
sk_sp< SkSurface > GetSurface (const FlutterBackingStore *backing_store) const override
 
sk_sp< SkImage > MakeImageSnapshot (const FlutterBackingStore *backing_store) const override
 
- Public Member Functions inherited from flutter::testing::EmbedderTestBackingStoreProducer
 EmbedderTestBackingStoreProducer (sk_sp< GrDirectContext > context, RenderTargetType type)
 
virtual ~EmbedderTestBackingStoreProducer ()
 

Additional Inherited Members

- Public Types inherited from flutter::testing::EmbedderTestBackingStoreProducer
enum class  RenderTargetType {
  kSoftwareBuffer ,
  kSoftwareBuffer2 ,
  kOpenGLFramebuffer ,
  kOpenGLTexture ,
  kOpenGLSurface ,
  kMetalTexture ,
  kVulkanImage
}
 
- Protected Member Functions inherited from flutter::testing::EmbedderTestBackingStoreProducer
 FML_DISALLOW_COPY_AND_ASSIGN (EmbedderTestBackingStoreProducer)
 
- Protected Attributes inherited from flutter::testing::EmbedderTestBackingStoreProducer
sk_sp< GrDirectContext > context_
 
RenderTargetType type_
 

Detailed Description

Definition at line 14 of file embedder_test_backingstore_producer_vulkan.h.

Constructor & Destructor Documentation

◆ EmbedderTestBackingStoreProducerVulkan()

flutter::testing::EmbedderTestBackingStoreProducerVulkan::EmbedderTestBackingStoreProducerVulkan ( sk_sp< GrDirectContext >  context,
RenderTargetType  type 
)

Definition at line 23 of file embedder_test_backingstore_producer_vulkan.cc.

26 : EmbedderTestBackingStoreProducer(std::move(context), type),
27 test_vulkan_context_(nullptr) {}
GLenum type
EmbedderTestBackingStoreProducer(sk_sp< GrDirectContext > context, RenderTargetType type)

◆ ~EmbedderTestBackingStoreProducerVulkan()

flutter::testing::EmbedderTestBackingStoreProducerVulkan::~EmbedderTestBackingStoreProducerVulkan ( )
virtualdefault

Member Function Documentation

◆ Create()

bool flutter::testing::EmbedderTestBackingStoreProducerVulkan::Create ( const FlutterBackingStoreConfig config,
FlutterBackingStore backing_store_out 
)
overridevirtual

Implements flutter::testing::EmbedderTestBackingStoreProducer.

Definition at line 32 of file embedder_test_backingstore_producer_vulkan.cc.

34 {
35 if (!test_vulkan_context_) {
36 test_vulkan_context_ = fml::MakeRefCounted<TestVulkanContext>();
37 }
38
39 auto surface_size = DlISize(config->size.width, config->size.height);
40 auto optional_image = test_vulkan_context_->CreateImage(surface_size);
41 if (!optional_image.has_value()) {
42 FML_LOG(ERROR) << "Could not create Vulkan image.";
43 return false;
44 }
45 TestVulkanImage* test_image = new TestVulkanImage(std::move(*optional_image));
46
47 GrVkImageInfo image_info = {
48 .fImage = test_image->GetImage(),
49 .fImageTiling = VK_IMAGE_TILING_OPTIMAL,
50 .fImageLayout = VK_IMAGE_LAYOUT_UNDEFINED,
51 .fFormat = VK_FORMAT_R8G8B8A8_UNORM,
52 .fImageUsageFlags = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
53 VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
54 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
55 VK_IMAGE_USAGE_SAMPLED_BIT,
56 .fSampleCount = 1,
57 .fLevelCount = 1,
58 };
59 auto backend_texture = GrBackendTextures::MakeVk(
60 surface_size.width, surface_size.height, image_info);
61
62 SkSurfaceProps surface_properties(0, kUnknown_SkPixelGeometry);
63
64 SkSurfaces::TextureReleaseProc release_vktexture = [](void* user_data) {
65 delete reinterpret_cast<TestVulkanImage*>(user_data);
66 };
67
68 sk_sp<SkSurface> surface = SkSurfaces::WrapBackendTexture(
69 context_.get(), // context
70 backend_texture, // back-end texture
71 kTopLeft_GrSurfaceOrigin, // surface origin
72 1, // sample count
73 kRGBA_8888_SkColorType, // color type
74 SkColorSpace::MakeSRGB(), // color space
75 &surface_properties, // surface properties
76 release_vktexture, // texture release proc
77 test_image // release context
78 );
79
80 if (!surface) {
81 FML_LOG(ERROR) << "Could not create Skia surface from Vulkan image.";
82 return false;
83 }
84 backing_store_out->type = kFlutterBackingStoreTypeVulkan;
85
87 image->image = reinterpret_cast<uint64_t>(image_info.fImage);
88 image->format = VK_FORMAT_R8G8B8A8_UNORM;
89 backing_store_out->vulkan.image = image;
90
91 // Collect all allocated resources in the destruction_callback.
92 {
93 auto user_data = new UserData{.surface = surface, .image = image};
94 backing_store_out->user_data = user_data;
95 backing_store_out->vulkan.user_data = user_data;
96 backing_store_out->vulkan.destruction_callback = [](void* user_data) {
97 UserData* d = reinterpret_cast<UserData*>(user_data);
98 delete d->image;
99 delete d;
100 };
101 }
102
103 return true;
104}
@ kFlutterBackingStoreTypeVulkan
Specifies a Vulkan backing store. This is backed by a Vulkan VkImage.
Definition embedder.h:2057
FlutterVulkanImage * image
auto & d
Definition main.cc:28
VkSurfaceKHR surface
Definition main.cc:65
#define FML_LOG(severity)
Definition logging.h:101
impeller::ISize32 DlISize
FlutterSize size
The size of the render target the engine expects to render into.
Definition embedder.h:2093
FlutterVulkanBackingStore vulkan
Definition embedder.h:2085
FlutterBackingStoreType type
Specifies the type of backing store.
Definition embedder.h:2071
double height
Definition embedder.h:629
double width
Definition embedder.h:628
VoidCallback destruction_callback
Definition embedder.h:1994
const FlutterVulkanImage * image
Definition embedder.h:1987
FlutterVulkanImageHandle image
Definition embedder.h:931
uint32_t format
The VkFormat of the image (for example: VK_FORMAT_R8G8B8A8_UNORM).
Definition embedder.h:933

References flutter::testing::EmbedderTestBackingStoreProducer::context_, d, FlutterVulkanBackingStore::destruction_callback, FML_LOG, FlutterVulkanImage::format, flutter::testing::TestVulkanImage::GetImage(), FlutterSize::height, FlutterVulkanImage::image, FlutterVulkanBackingStore::image, image, kFlutterBackingStoreTypeVulkan, FlutterBackingStoreConfig::size, surface, FlutterBackingStore::type, user_data, FlutterVulkanBackingStore::user_data, FlutterBackingStore::user_data, FlutterBackingStore::vulkan, and FlutterSize::width.

◆ GetSurface()

sk_sp< SkSurface > flutter::testing::EmbedderTestBackingStoreProducerVulkan::GetSurface ( const FlutterBackingStore backing_store) const
overridevirtual

Implements flutter::testing::EmbedderTestBackingStoreProducer.

Definition at line 106 of file embedder_test_backingstore_producer_vulkan.cc.

107 {
108 UserData* user_data = reinterpret_cast<UserData*>(backing_store->user_data);
109 return user_data->surface;
110}

References user_data, and FlutterBackingStore::user_data.

◆ MakeImageSnapshot()

sk_sp< SkImage > flutter::testing::EmbedderTestBackingStoreProducerVulkan::MakeImageSnapshot ( const FlutterBackingStore backing_store) const
overridevirtual

Implements flutter::testing::EmbedderTestBackingStoreProducer.

Definition at line 112 of file embedder_test_backingstore_producer_vulkan.cc.

113 {
114 UserData* user_data = reinterpret_cast<UserData*>(backing_store->user_data);
115 return user_data->surface->makeImageSnapshot();
116}

References user_data, and FlutterBackingStore::user_data.


The documentation for this class was generated from the following files: