diff options
Diffstat (limited to 'chromium/ui/ozone/platform/drm')
11 files changed, 24 insertions, 10 deletions
diff --git a/chromium/ui/ozone/platform/drm/gpu/drm_overlay_validator.cc b/chromium/ui/ozone/platform/drm/gpu/drm_overlay_validator.cc index d0a82568e4a..186f4cc7cb7 100644 --- a/chromium/ui/ozone/platform/drm/gpu/drm_overlay_validator.cc +++ b/chromium/ui/ozone/platform/drm/gpu/drm_overlay_validator.cc @@ -32,8 +32,10 @@ scoped_refptr<ScanoutBuffer> GetBufferForPageFlipTest( } } + const std::vector<uint64_t> + modifiers; // TODO(dcastagna): use the right modifiers. scoped_refptr<ScanoutBuffer> scanout_buffer = - buffer_generator->Create(drm_device, format, size); + buffer_generator->Create(drm_device, format, modifiers, size); if (scanout_buffer) reusable_buffers->push_back(scanout_buffer); diff --git a/chromium/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc b/chromium/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc index 3b3642b8d88..31fc4af5cbf 100644 --- a/chromium/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc +++ b/chromium/ui/ozone/platform/drm/gpu/drm_overlay_validator_unittest.cc @@ -134,7 +134,7 @@ void DrmOverlayValidatorTest::AddPlane(const ui::OverlayCheck_Params& params) { scoped_refptr<ui::DrmDevice> drm = window_->GetController()->GetAllocationDrmDevice(); scoped_refptr<ui::ScanoutBuffer> scanout_buffer = buffer_generator_->Create( - drm, ui::GetFourCCFormatFromBufferFormat(params.format), + drm, ui::GetFourCCFormatFromBufferFormat(params.format), {}, params.buffer_size); ui::OverlayPlane plane(std::move(scanout_buffer), params.plane_z_order, params.transform, params.display_rect, diff --git a/chromium/ui/ozone/platform/drm/gpu/drm_thread.cc b/chromium/ui/ozone/platform/drm/gpu/drm_thread.cc index 6e187761ea9..d53e4acf1be 100644 --- a/chromium/ui/ozone/platform/drm/gpu/drm_thread.cc +++ b/chromium/ui/ozone/platform/drm/gpu/drm_thread.cc @@ -41,10 +41,15 @@ class GbmBufferGenerator : public ScanoutBufferGenerator { // ScanoutBufferGenerator: scoped_refptr<ScanoutBuffer> Create(const scoped_refptr<DrmDevice>& drm, uint32_t format, + const std::vector<uint64_t>& modifiers, const gfx::Size& size) override { scoped_refptr<GbmDevice> gbm(static_cast<GbmDevice*>(drm.get())); - // TODO(dcastagna): Use GBM_BO_USE_MAP modifier once minigbm exposes it. - return GbmBuffer::CreateBuffer(gbm, format, size, GBM_BO_USE_SCANOUT); + if (modifiers.size() > 0) { + return GbmBuffer::CreateBufferWithModifiers( + gbm, format, size, GBM_BO_USE_SCANOUT, modifiers); + } else { + return GbmBuffer::CreateBuffer(gbm, format, size, GBM_BO_USE_SCANOUT); + } } protected: diff --git a/chromium/ui/ozone/platform/drm/gpu/drm_window_unittest.cc b/chromium/ui/ozone/platform/drm/gpu/drm_window_unittest.cc index 40a207ec1c3..0fa311fbfe4 100644 --- a/chromium/ui/ozone/platform/drm/gpu/drm_window_unittest.cc +++ b/chromium/ui/ozone/platform/drm/gpu/drm_window_unittest.cc @@ -175,7 +175,7 @@ TEST_F(DrmWindowTest, CheckCallbackOnFailedSwap) { ui::MockDumbBufferGenerator buffer_generator; ui::DrmWindow* window = screen_manager_->GetWindow(kDefaultWidgetHandle); ui::OverlayPlane plane( - buffer_generator.Create(drm_, DRM_FORMAT_XRGB8888, window_size), + buffer_generator.Create(drm_, DRM_FORMAT_XRGB8888, {}, window_size), base::kInvalidPlatformFile); drm_->set_page_flip_expectation(false); diff --git a/chromium/ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.cc b/chromium/ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.cc index d6d0cf7efd1..0276dea0317 100644 --- a/chromium/ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.cc +++ b/chromium/ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.cc @@ -16,6 +16,7 @@ MockDumbBufferGenerator::~MockDumbBufferGenerator() {} scoped_refptr<ScanoutBuffer> MockDumbBufferGenerator::Create( const scoped_refptr<DrmDevice>& drm, uint32_t format, + const std::vector<uint64_t>& modifiers, const gfx::Size& size) { scoped_refptr<DrmBuffer> buffer(new DrmBuffer(drm)); SkImageInfo info = SkImageInfo::MakeN32Premul(size.width(), size.height()); diff --git a/chromium/ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.h b/chromium/ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.h index ecba7c761e9..f29f7e20ede 100644 --- a/chromium/ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.h +++ b/chromium/ui/ozone/platform/drm/gpu/mock_dumb_buffer_generator.h @@ -19,6 +19,7 @@ class MockDumbBufferGenerator : public ScanoutBufferGenerator { // ScanoutBufferGenerator: scoped_refptr<ScanoutBuffer> Create(const scoped_refptr<DrmDevice>& drm, uint32_t format, + const std::vector<uint64_t>& modifiers, const gfx::Size& size) override; private: diff --git a/chromium/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.cc b/chromium/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.cc index 08cd50acd63..c934a1db040 100644 --- a/chromium/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.cc +++ b/chromium/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.cc @@ -16,8 +16,11 @@ MockScanoutBufferGenerator::~MockScanoutBufferGenerator() {} scoped_refptr<ScanoutBuffer> MockScanoutBufferGenerator::Create( const scoped_refptr<DrmDevice>& drm, uint32_t format, + const std::vector<uint64_t>& modifiers, const gfx::Size& size) { - return CreateWithModifier(drm, format, DRM_FORMAT_MOD_NONE, size); + return CreateWithModifier( + drm, format, modifiers.empty() ? DRM_FORMAT_MOD_NONE : modifiers.front(), + size); } scoped_refptr<ScanoutBuffer> MockScanoutBufferGenerator::CreateWithModifier( diff --git a/chromium/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h b/chromium/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h index 2cb3161abaf..c904501b58b 100644 --- a/chromium/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h +++ b/chromium/ui/ozone/platform/drm/gpu/mock_scanout_buffer_generator.h @@ -19,6 +19,7 @@ class MockScanoutBufferGenerator : public ScanoutBufferGenerator { // ScanoutBufferGenerator: scoped_refptr<ScanoutBuffer> Create(const scoped_refptr<DrmDevice>& drm, uint32_t format, + const std::vector<uint64_t>& modifiers, const gfx::Size& size) override; scoped_refptr<ScanoutBuffer> CreateWithModifier( diff --git a/chromium/ui/ozone/platform/drm/gpu/scanout_buffer.h b/chromium/ui/ozone/platform/drm/gpu/scanout_buffer.h index b6b588562df..3d4f2c37f4b 100644 --- a/chromium/ui/ozone/platform/drm/gpu/scanout_buffer.h +++ b/chromium/ui/ozone/platform/drm/gpu/scanout_buffer.h @@ -61,6 +61,7 @@ class ScanoutBufferGenerator { virtual scoped_refptr<ScanoutBuffer> Create( const scoped_refptr<DrmDevice>& drm, uint32_t format, + const std::vector<uint64_t>& modifiers, const gfx::Size& size) = 0; }; diff --git a/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc b/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc index e8e477733e4..68cfa2a9735 100644 --- a/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc +++ b/chromium/ui/ozone/platform/drm/gpu/screen_manager.cc @@ -351,7 +351,7 @@ OverlayPlane ScreenManager::GetModesetBuffer( gfx::BufferFormat format = display::DisplaySnapshot::PrimaryFormat(); uint32_t fourcc_format = ui::GetFourCCFormatForOpaqueFramebuffer(format); - + const auto& modifiers = controller->GetFormatModifiers(fourcc_format); if (window) { const OverlayPlane* primary = window->GetLastModesetBuffer(); const DrmDevice* drm = controller->GetAllocationDrmDevice().get(); @@ -361,7 +361,6 @@ OverlayPlane ScreenManager::GetModesetBuffer( // modifier either and we can reuse the buffer. Otherwise, check // to see if the controller supports the buffers format // modifier. - const auto& modifiers = controller->GetFormatModifiers(fourcc_format); if (modifiers.empty()) return *primary; for (const uint64_t modifier : modifiers) { @@ -373,7 +372,7 @@ OverlayPlane ScreenManager::GetModesetBuffer( scoped_refptr<DrmDevice> drm = controller->GetAllocationDrmDevice(); scoped_refptr<ScanoutBuffer> buffer = - buffer_generator_->Create(drm, fourcc_format, bounds.size()); + buffer_generator_->Create(drm, fourcc_format, modifiers, bounds.size()); if (!buffer) { LOG(ERROR) << "Failed to create scanout buffer"; return OverlayPlane(nullptr, 0, gfx::OVERLAY_TRANSFORM_INVALID, gfx::Rect(), diff --git a/chromium/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc b/chromium/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc index a50a0ac275a..24c7bdd0fec 100644 --- a/chromium/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc +++ b/chromium/ui/ozone/platform/drm/gpu/screen_manager_unittest.cc @@ -498,8 +498,9 @@ TEST_F(ScreenManagerTest, EnableControllerWhenWindowHasBuffer) { new ui::DrmWindow(1, device_manager_.get(), screen_manager_.get())); window->Initialize(buffer_generator_.get()); window->SetBounds(GetPrimaryBounds()); + scoped_refptr<ui::ScanoutBuffer> buffer = buffer_generator_->Create( - drm_, DRM_FORMAT_XRGB8888, GetPrimaryBounds().size()); + drm_, DRM_FORMAT_XRGB8888, {}, GetPrimaryBounds().size()); window->SchedulePageFlip( std::vector<ui::OverlayPlane>( 1, ui::OverlayPlane(buffer, base::kInvalidPlatformFile)), |