diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/ui/ozone/platform/scenic | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/ui/ozone/platform/scenic')
14 files changed, 99 insertions, 81 deletions
diff --git a/chromium/ui/ozone/platform/scenic/BUILD.gn b/chromium/ui/ozone/platform/scenic/BUILD.gn index ed6dd8a0f29..32792aaf31a 100644 --- a/chromium/ui/ozone/platform/scenic/BUILD.gn +++ b/chromium/ui/ozone/platform/scenic/BUILD.gn @@ -55,6 +55,8 @@ source_set("scenic") { "//third_party/fuchsia-sdk/sdk/pkg/scenic_cpp", "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp", "//ui/base", + "//ui/base/cursor", + "//ui/base/cursor:cursor_base", "//ui/base/ime/fuchsia", "//ui/display/fake", "//ui/events:dom_keycode_converter", diff --git a/chromium/ui/ozone/platform/scenic/ozone_platform_scenic.cc b/chromium/ui/ozone/platform/scenic/ozone_platform_scenic.cc index c9f0f74031d..fcd5d1ccf32 100644 --- a/chromium/ui/ozone/platform/scenic/ozone_platform_scenic.cc +++ b/chromium/ui/ozone/platform/scenic/ozone_platform_scenic.cc @@ -15,6 +15,7 @@ #include "base/message_loop/message_pump_type.h" #include "base/notreached.h" #include "mojo/public/cpp/bindings/pending_remote.h" +#include "ui/base/cursor/cursor_factory.h" #include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h" #include "ui/base/ime/fuchsia/input_method_fuchsia.h" #include "ui/display/fake/fake_display_delegate.h" @@ -30,7 +31,6 @@ #include "ui/ozone/platform/scenic/scenic_window_manager.h" #include "ui/ozone/platform/scenic/sysmem_buffer_collection.h" #include "ui/ozone/platform_selection.h" -#include "ui/ozone/public/cursor_factory_ozone.h" #include "ui/ozone/public/gpu_platform_support_host.h" #include "ui/ozone/public/input_controller.h" #include "ui/ozone/public/mojom/scenic_gpu_service.mojom.h" @@ -77,9 +77,7 @@ class OzonePlatformScenic return overlay_manager_.get(); } - CursorFactoryOzone* GetCursorFactoryOzone() override { - return cursor_factory_ozone_.get(); - } + CursorFactory* GetCursorFactory() override { return cursor_factory_.get(); } InputController* GetInputController() override { return input_controller_.get(); @@ -137,7 +135,7 @@ class OzonePlatformScenic window_manager_ = std::make_unique<ScenicWindowManager>(); overlay_manager_ = std::make_unique<StubOverlayManager>(); input_controller_ = CreateStubInputController(); - cursor_factory_ozone_ = std::make_unique<BitmapCursorFactoryOzone>(); + cursor_factory_ = std::make_unique<BitmapCursorFactoryOzone>(); scenic_gpu_host_ = std::make_unique<ScenicGpuHost>(window_manager_.get()); @@ -208,7 +206,7 @@ class OzonePlatformScenic std::unique_ptr<KeyboardLayoutEngine> keyboard_layout_engine_; std::unique_ptr<PlatformEventSource> platform_event_source_; - std::unique_ptr<CursorFactoryOzone> cursor_factory_ozone_; + std::unique_ptr<CursorFactory> cursor_factory_; std::unique_ptr<InputController> input_controller_; std::unique_ptr<OverlayManagerOzone> overlay_manager_; std::unique_ptr<ScenicGpuHost> scenic_gpu_host_; diff --git a/chromium/ui/ozone/platform/scenic/scenic_surface.cc b/chromium/ui/ozone/platform/scenic/scenic_surface.cc index 2d75a091190..dc7fd2ec10f 100644 --- a/chromium/ui/ozone/platform/scenic/scenic_surface.cc +++ b/chromium/ui/ozone/platform/scenic/scenic_surface.cc @@ -19,11 +19,13 @@ ScenicSurface::ScenicSurface( scenic::SessionPtrAndListenerRequest sesion_and_listener_request) : scenic_session_(std::move(sesion_and_listener_request)), shape_(&scenic_session_), - material_(&scenic_session_), scenic_surface_factory_(scenic_surface_factory), window_(window) { + // Setting alpha to 0 makes this transparent. + scenic::Material transparent_material(&scenic_session_); + transparent_material.SetColor(0, 0, 0, 0); shape_.SetShape(scenic::Rectangle(&scenic_session_, 1.f, 1.f)); - shape_.SetMaterial(material_); + shape_.SetMaterial(transparent_material); scenic_surface_factory->AddSurface(window, this); scenic_session_.SetDebugName("Chromium ScenicSurface"); } @@ -33,23 +35,28 @@ ScenicSurface::~ScenicSurface() { scenic_surface_factory_->RemoveSurface(window_); } -void ScenicSurface::SetTextureToNewImagePipe( +bool ScenicSurface::SetTextureToNewImagePipe( fidl::InterfaceRequest<fuchsia::images::ImagePipe2> image_pipe_request) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); uint32_t image_pipe_id = scenic_session_.AllocResourceId(); scenic_session_.Enqueue(scenic::NewCreateImagePipe2Cmd( image_pipe_id, std::move(image_pipe_request))); - material_.SetTexture(image_pipe_id); + scenic::Material image_material(&scenic_session_); + image_material.SetTexture(image_pipe_id); + shape_.SetMaterial(image_material); scenic_session_.ReleaseResource(image_pipe_id); scenic_session_.Present2( /*requested_presentation_time=*/0, /*requested_prediction_span=*/0, [](fuchsia::scenic::scheduling::FuturePresentationTimes info) {}); + return true; } void ScenicSurface::SetTextureToImage(const scenic::Image& image) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - material_.SetTexture(image); + scenic::Material image_material(&scenic_session_); + image_material.SetTexture(image); + shape_.SetMaterial(image_material); } mojo::PlatformHandle ScenicSurface::CreateView() { diff --git a/chromium/ui/ozone/platform/scenic/scenic_surface.h b/chromium/ui/ozone/platform/scenic/scenic_surface.h index d9b730ae611..3264a594fc0 100644 --- a/chromium/ui/ozone/platform/scenic/scenic_surface.h +++ b/chromium/ui/ozone/platform/scenic/scenic_surface.h @@ -35,8 +35,9 @@ class ScenicSurface : public ui::PlatformWindowSurface { ~ScenicSurface() override; // Sets the texture of the surface to a new image pipe. - void SetTextureToNewImagePipe( - fidl::InterfaceRequest<fuchsia::images::ImagePipe2> image_pipe_request); + bool SetTextureToNewImagePipe( + fidl::InterfaceRequest<fuchsia::images::ImagePipe2> image_pipe_request) + override; // Sets the texture of the surface to an image resource. void SetTextureToImage(const scenic::Image& image); @@ -58,7 +59,6 @@ class ScenicSurface : public ui::PlatformWindowSurface { scenic::Session scenic_session_; std::unique_ptr<scenic::View> parent_; scenic::ShapeNode shape_; - scenic::Material material_; ScenicSurfaceFactory* const scenic_surface_factory_; const gfx::AcceleratedWidget window_; diff --git a/chromium/ui/ozone/platform/scenic/scenic_surface_factory.cc b/chromium/ui/ozone/platform/scenic/scenic_surface_factory.cc index 7280c5e154f..7719bac9d88 100644 --- a/chromium/ui/ozone/platform/scenic/scenic_surface_factory.cc +++ b/chromium/ui/ozone/platform/scenic/scenic_surface_factory.cc @@ -9,8 +9,8 @@ #include <memory> #include "base/bind.h" -#include "base/fuchsia/default_context.h" #include "base/fuchsia/fuchsia_logging.h" +#include "base/fuchsia/process_context.h" #include "base/macros.h" #include "base/memory/ptr_util.h" #include "third_party/angle/src/common/fuchsia_egl/fuchsia_egl.h" @@ -43,7 +43,7 @@ struct FuchsiaEGLWindowDeleter { fuchsia::ui::scenic::ScenicPtr ConnectToScenic() { fuchsia::ui::scenic::ScenicPtr scenic = - base::fuchsia::ComponentContextForCurrentProcess() + base::ComponentContextForProcess() ->svc() ->Connect<fuchsia::ui::scenic::Scenic>(); scenic.set_error_handler([](zx_status_t status) { @@ -130,8 +130,7 @@ class GLOzoneEGLScenic : public GLOzoneEGL { fuchsia::sysmem::AllocatorHandle ConnectSysmemAllocator() { fuchsia::sysmem::AllocatorHandle allocator; - base::fuchsia::ComponentContextForCurrentProcess()->svc()->Connect( - allocator.NewRequest()); + base::ComponentContextForProcess()->svc()->Connect(allocator.NewRequest()); return allocator; } diff --git a/chromium/ui/ozone/platform/scenic/scenic_window.cc b/chromium/ui/ozone/platform/scenic/scenic_window.cc index 0de00de69aa..81cafe89676 100644 --- a/chromium/ui/ozone/platform/scenic/scenic_window.cc +++ b/chromium/ui/ozone/platform/scenic/scenic_window.cc @@ -37,8 +37,7 @@ ScenicWindow::ScenicWindow(ScenicWindowManager* window_manager, "chromium window"), node_(&scenic_session_), input_node_(&scenic_session_), - render_node_(&scenic_session_), - background_node_(&scenic_session_) { + render_node_(&scenic_session_) { scenic_session_.set_error_handler( fit::bind_member(this, &ScenicWindow::OnScenicError)); scenic_session_.set_event_handler( @@ -52,28 +51,8 @@ ScenicWindow::ScenicWindow(ScenicWindowManager* window_manager, // Add input shape. node_.AddChild(input_node_); - // Add rendering subtree, rooted at Z=-2 to make room for background layers in - // the Z-order (lesser values are higher in the visual ordering). - constexpr float kRenderNodeZPosition = -2.; - constexpr float kBackgroundNodeZPosition = kRenderNodeZPosition + 1.; - render_node_.SetTranslation(0., 0., kRenderNodeZPosition); node_.AddChild(render_node_); - // Initialize a black background to be just behind |render_node_|. - scenic::Material background_color(&scenic_session_); - background_color.SetColor(0, 0, 0, 255); // RGBA (0,0,0,255) = opaque black. - background_node_.SetMaterial(background_color); - scenic::Rectangle background_shape(&scenic_session_, 1., 1.); - background_node_.SetShape(background_shape); - background_node_.SetTranslation(0., 0., kBackgroundNodeZPosition); - node_.AddChild(background_node_); - - // Render the background immediately. - scenic_session_.Present2( - /*requested_presentation_time=*/0, - /*requested_prediction_span=*/0, - [](fuchsia::scenic::scheduling::FuturePresentationTimes info) {}); - delegate_->OnAcceleratedWidgetAvailable(window_id_); } @@ -247,9 +226,6 @@ void ScenicWindow::UpdateSize() { size_dips_.height()); input_node_.SetShape(window_rect); - // Resize the input and background nodes to cover the whole surface. - background_node_.SetShape(window_rect); - // This is necessary when using vulkan because ImagePipes are presented // separately and we need to make sure our sizes change is committed. scenic_session_.Present2( diff --git a/chromium/ui/ozone/platform/scenic/scenic_window.h b/chromium/ui/ozone/platform/scenic/scenic_window.h index d70d88b218f..2edac2d4e7e 100644 --- a/chromium/ui/ozone/platform/scenic/scenic_window.h +++ b/chromium/ui/ozone/platform/scenic/scenic_window.h @@ -119,10 +119,6 @@ class COMPONENT_EXPORT(OZONE) ScenicWindow // Node in |scenic_session_| for rendering (hit testing disabled). scenic::EntityNode render_node_; - // Node in |scenic_session_| for rendering a solid color, placed just behind - // |render_node_| in the Z order. - scenic::ShapeNode background_node_; - std::unique_ptr<scenic::ViewHolder> surface_view_holder_; // The ratio used for translating device-independent coordinates to absolute diff --git a/chromium/ui/ozone/platform/scenic/scenic_window_manager.cc b/chromium/ui/ozone/platform/scenic/scenic_window_manager.cc index b8a8c539251..6a0a177b10d 100644 --- a/chromium/ui/ozone/platform/scenic/scenic_window_manager.cc +++ b/chromium/ui/ozone/platform/scenic/scenic_window_manager.cc @@ -7,8 +7,8 @@ #include <lib/sys/cpp/component_context.h> #include <memory> -#include "base/fuchsia/default_context.h" #include "base/fuchsia/fuchsia_logging.h" +#include "base/fuchsia/process_context.h" #include "ui/ozone/platform/scenic/ozone_platform_scenic.h" namespace ui { @@ -33,7 +33,7 @@ std::unique_ptr<PlatformScreen> ScenicWindowManager::CreateScreen() { fuchsia::ui::scenic::Scenic* ScenicWindowManager::GetScenic() { if (!scenic_) { - scenic_ = base::fuchsia::ComponentContextForCurrentProcess() + scenic_ = base::ComponentContextForProcess() ->svc() ->Connect<fuchsia::ui::scenic::Scenic>(); scenic_.set_error_handler( diff --git a/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc b/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc index a1a51db49d0..d320987b58e 100644 --- a/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc +++ b/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.cc @@ -116,7 +116,8 @@ bool SysmemBufferCollection::IsNativePixmapConfigSupported( format == gfx::BufferFormat::BGRX_8888; bool usage_supported = usage == gfx::BufferUsage::SCANOUT || usage == gfx::BufferUsage::SCANOUT_CPU_READ_WRITE || - usage == gfx::BufferUsage::GPU_READ_CPU_READ_WRITE; + usage == gfx::BufferUsage::GPU_READ_CPU_READ_WRITE || + usage == gfx::BufferUsage::GPU_READ; return format_supported && usage_supported; } @@ -142,7 +143,7 @@ bool SysmemBufferCollection::Initialize( if (vk_device == VK_NULL_HANDLE) return false; - size_ = size; + min_size_ = size; format_ = format; usage_ = usage; vk_device_ = vk_device; @@ -163,15 +164,24 @@ bool SysmemBufferCollection::Initialize( bool SysmemBufferCollection::Initialize( fuchsia::sysmem::Allocator_Sync* allocator, VkDevice vk_device, - zx::channel token_handle) { + zx::channel token_handle, + gfx::BufferFormat format, + gfx::BufferUsage usage, + bool force_protected) { DCHECK(!collection_); DCHECK(!vk_buffer_collection_); - usage_ = gfx::BufferUsage::GPU_READ; - vk_device_ = vk_device; + // Set nominal size of 1x1, which will be used only for + // vkSetBufferCollectionConstraintsFUCHSIA(). The actual size of the allocated + // buffers is determined by constraints set by other sysmem clients for the + // same collection. Size of the Vulkan image is determined by the valus passed + // to CreateVkImage(). + min_size_ = gfx::Size(1, 1); - // Assume that all imported collections are in NV12 format. - format_ = gfx::BufferFormat::YUV_420_BIPLANAR; + vk_device_ = vk_device; + format_ = format; + usage_ = usage; + is_protected_ = force_protected; fuchsia::sysmem::BufferCollectionTokenSyncPtr token; token.Bind(std::move(token_handle)); @@ -206,18 +216,12 @@ scoped_refptr<gfx::NativePixmap> SysmemBufferCollection::CreateNativePixmap( buffers_info_.settings.image_format_constraints; // The logic should match LogicalBufferCollection::Allocate(). - size_t width = - RoundUp(std::max(format.min_coded_width, format.required_max_coded_width), - format.coded_width_divisor); - size_t stride = - RoundUp(std::max(static_cast<size_t>(format.min_bytes_per_row), - gfx::RowSizeForBufferFormat(width, format_, 0)), - format.bytes_per_row_divisor); - size_t height = RoundUp( - std::max(format.min_coded_height, format.required_max_coded_height), - format.coded_height_divisor); + size_t stride = RoundUp( + std::max(static_cast<size_t>(format.min_bytes_per_row), + gfx::RowSizeForBufferFormat(image_size_.width(), format_, 0)), + format.bytes_per_row_divisor); size_t plane_offset = buffers_info_.buffers[buffer_index].vmo_usable_start; - size_t plane_size = stride * height; + size_t plane_size = stride * image_size_.height(); handle.planes.emplace_back(stride, plane_offset, plane_size, std::move(main_plane_vmo)); @@ -421,7 +425,7 @@ bool SysmemBufferCollection::InitializeInternal( ignore_result(token_channel.release()); VkImageCreateInfo image_create_info; - InitializeImageCreateInfo(&image_create_info, size_); + InitializeImageCreateInfo(&image_create_info, min_size_); if (vkSetBufferCollectionConstraintsFUCHSIA(vk_device_, vk_buffer_collection_, &image_create_info) != @@ -446,6 +450,16 @@ bool SysmemBufferCollection::InitializeInternal( DCHECK_GE(buffers_info_.buffer_count, buffers_for_camping); DCHECK(buffers_info_.settings.has_image_format_constraints); + // The logic should match LogicalBufferCollection::Allocate(). + const fuchsia::sysmem::ImageFormatConstraints& format = + buffers_info_.settings.image_format_constraints; + size_t width = + RoundUp(std::max(format.min_coded_width, format.required_max_coded_width), + format.coded_width_divisor); + size_t height = RoundUp( + std::max(format.min_coded_height, format.required_max_coded_height), + format.coded_height_divisor); + image_size_ = gfx::Size(width, height); buffer_size_ = buffers_info_.settings.buffer_settings.size_bytes; is_protected_ = buffers_info_.settings.buffer_settings.is_secure; @@ -469,7 +483,13 @@ void SysmemBufferCollection::InitializeImageCreateInfo( vk_image_info->samples = VK_SAMPLE_COUNT_1_BIT; vk_image_info->tiling = is_mappable() ? VK_IMAGE_TILING_LINEAR : VK_IMAGE_TILING_OPTIMAL; + vk_image_info->usage = VK_IMAGE_USAGE_SAMPLED_BIT; + if (usage_ == gfx::BufferUsage::SCANOUT || + usage_ == gfx::BufferUsage::SCANOUT_CPU_READ_WRITE) { + vk_image_info->usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + } + vk_image_info->sharingMode = VK_SHARING_MODE_EXCLUSIVE; vk_image_info->initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; } diff --git a/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.h b/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.h index 1bfed23b840..34628685327 100644 --- a/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.h +++ b/chromium/ui/ozone/platform/scenic/sysmem_buffer_collection.h @@ -48,7 +48,10 @@ class SysmemBufferCollection bool Initialize(fuchsia::sysmem::Allocator_Sync* allocator, VkDevice vk_device, - zx::channel token); + zx::channel token, + gfx::BufferFormat format, + gfx::BufferUsage usage, + bool force_protected); // Must not be called more than once. void SetOnDeletedCallback(base::OnceClosure on_deleted); @@ -70,7 +73,7 @@ class SysmemBufferCollection gfx::SysmemBufferCollectionId id() const { return id_; } size_t num_buffers() const { return buffers_info_.buffer_count; } - gfx::Size size() const { return size_; } + gfx::Size size() const { return image_size_; } gfx::BufferFormat format() const { return format_; } size_t buffer_size() const { return buffers_info_.settings.buffer_settings.size_bytes; @@ -96,10 +99,11 @@ class SysmemBufferCollection const gfx::SysmemBufferCollectionId id_; - gfx::Size size_; + // Image size passed to vkSetBufferCollectionConstraintsFUCHSIA(). The actual + // buffers size may be larger depending on constraints set by other + // sysmem clients. Size of the image is passed to CreateVkImage(). + gfx::Size min_size_; - // Valid only for owned buffer collections, i.e. those that that were - // initialized using the first Initialize() methods. gfx::BufferFormat format_ = gfx::BufferFormat::RGBA_8888; gfx::BufferUsage usage_ = gfx::BufferUsage::GPU_READ_CPU_READ_WRITE; @@ -118,6 +122,7 @@ class SysmemBufferCollection // threads. THREAD_CHECKER(vulkan_thread_checker_); + gfx::Size image_size_; size_t buffer_size_ = 0; bool is_protected_ = false; diff --git a/chromium/ui/ozone/platform/scenic/sysmem_buffer_manager.cc b/chromium/ui/ozone/platform/scenic/sysmem_buffer_manager.cc index 2d0a2d5869a..b1bdfb23b55 100644 --- a/chromium/ui/ozone/platform/scenic/sysmem_buffer_manager.cc +++ b/chromium/ui/ozone/platform/scenic/sysmem_buffer_manager.cc @@ -51,9 +51,13 @@ scoped_refptr<SysmemBufferCollection> SysmemBufferManager::ImportSysmemBufferCollection( VkDevice vk_device, gfx::SysmemBufferCollectionId id, - zx::channel token) { + zx::channel token, + gfx::BufferFormat format, + gfx::BufferUsage usage, + bool force_protected) { auto result = base::MakeRefCounted<SysmemBufferCollection>(id); - if (!result->Initialize(allocator_.get(), vk_device, std::move(token))) { + if (!result->Initialize(allocator_.get(), vk_device, std::move(token), format, + usage, force_protected)) { return nullptr; } RegisterCollection(result.get()); diff --git a/chromium/ui/ozone/platform/scenic/sysmem_buffer_manager.h b/chromium/ui/ozone/platform/scenic/sysmem_buffer_manager.h index b726855beb2..9bc6fe9bd35 100644 --- a/chromium/ui/ozone/platform/scenic/sysmem_buffer_manager.h +++ b/chromium/ui/ozone/platform/scenic/sysmem_buffer_manager.h @@ -46,7 +46,10 @@ class SysmemBufferManager { scoped_refptr<SysmemBufferCollection> ImportSysmemBufferCollection( VkDevice vk_device, gfx::SysmemBufferCollectionId id, - zx::channel token); + zx::channel token, + gfx::BufferFormat format, + gfx::BufferUsage usage, + bool force_protected); scoped_refptr<SysmemBufferCollection> GetCollectionById( gfx::SysmemBufferCollectionId id); diff --git a/chromium/ui/ozone/platform/scenic/vulkan_implementation_scenic.cc b/chromium/ui/ozone/platform/scenic/vulkan_implementation_scenic.cc index ce74e4b9cf8..9152a959c73 100644 --- a/chromium/ui/ozone/platform/scenic/vulkan_implementation_scenic.cc +++ b/chromium/ui/ozone/platform/scenic/vulkan_implementation_scenic.cc @@ -269,7 +269,7 @@ VulkanImplementationScenic::CreateImageFromGpuMemoryHandle( auto image = gpu::VulkanImage::Create( device_queue, vk_image, vk_device_memory, size, vk_image_info.format, vk_image_info.tiling, vk_device_size, 0 /* memory_type_index */, - ycbcr_info); + ycbcr_info, vk_image_info.flags); if (image->format() != vk_format) { DLOG(ERROR) << "Unexpected format " << vk_format << " vs " @@ -298,10 +298,16 @@ std::unique_ptr<gpu::SysmemBufferCollection> VulkanImplementationScenic::RegisterSysmemBufferCollection( VkDevice device, gfx::SysmemBufferCollectionId id, - zx::channel token) { + zx::channel token, + gfx::BufferFormat format, + gfx::BufferUsage usage) { + // SCANOUT images must be protected in protected mode. + bool force_protected = + usage == gfx::BufferUsage::SCANOUT && enforce_protected_memory(); + return std::make_unique<SysmemBufferCollectionImpl>( - sysmem_buffer_manager_->ImportSysmemBufferCollection(device, id, - std::move(token))); + sysmem_buffer_manager_->ImportSysmemBufferCollection( + device, id, std::move(token), format, usage, force_protected)); } } // namespace ui diff --git a/chromium/ui/ozone/platform/scenic/vulkan_implementation_scenic.h b/chromium/ui/ozone/platform/scenic/vulkan_implementation_scenic.h index 6b1a1afa1f1..cbc7e0d111b 100644 --- a/chromium/ui/ozone/platform/scenic/vulkan_implementation_scenic.h +++ b/chromium/ui/ozone/platform/scenic/vulkan_implementation_scenic.h @@ -56,7 +56,9 @@ class VulkanImplementationScenic : public gpu::VulkanImplementation { std::unique_ptr<gpu::SysmemBufferCollection> RegisterSysmemBufferCollection( VkDevice device, gfx::SysmemBufferCollectionId id, - zx::channel token) override; + zx::channel token, + gfx::BufferFormat format, + gfx::BufferUsage usage) override; private: ScenicSurfaceFactory* const scenic_surface_factory_; |