Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(410)

Side by Side Diff: components/exo/wayland/clients/client_base.cc

Issue 2846203002: exo: no-roundtrip dmabuf import (Closed)
Patch Set: follow naming convention, fixup error checking Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | components/exo/wayland/server.cc » ('j') | components/exo/wayland/server.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/exo/wayland/clients/client_base.h" 5 #include "components/exo/wayland/clients/client_base.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <linux-dmabuf-unstable-v1-client-protocol.h> 8 #include <linux-dmabuf-unstable-v1-client-protocol.h>
9 #include <presentation-time-client-protocol.h> 9 #include <presentation-time-client-protocol.h>
10 #include <wayland-client-core.h> 10 #include <wayland-client-core.h>
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 void RegistryRemover(void* data, wl_registry* registry, uint32_t id) { 105 void RegistryRemover(void* data, wl_registry* registry, uint32_t id) {
106 LOG(WARNING) << "Got a registry losing event for " << id; 106 LOG(WARNING) << "Got a registry losing event for " << id;
107 } 107 }
108 108
109 void BufferRelease(void* data, wl_buffer* /* buffer */) { 109 void BufferRelease(void* data, wl_buffer* /* buffer */) {
110 ClientBase::Buffer* buffer = static_cast<ClientBase::Buffer*>(data); 110 ClientBase::Buffer* buffer = static_cast<ClientBase::Buffer*>(data);
111 buffer->busy = false; 111 buffer->busy = false;
112 } 112 }
113 113
114 #if defined(OZONE_PLATFORM_GBM) 114 #if defined(OZONE_PLATFORM_GBM)
115 void LinuxBufferParamsCreated(void* data,
116 zwp_linux_buffer_params_v1* params,
117 wl_buffer* new_buffer) {
118 ClientBase::Buffer* buffer = static_cast<ClientBase::Buffer*>(data);
119 buffer->buffer.reset(new_buffer);
120 }
121
122 void LinuxBufferParamsFailed(void* data, zwp_linux_buffer_params_v1* params) {
123 LOG(ERROR) << "Linux buffer params failed";
124 }
125
126 const GrGLInterface* GrGLCreateNativeInterface() { 115 const GrGLInterface* GrGLCreateNativeInterface() {
127 return GrGLAssembleInterface(nullptr, [](void* ctx, const char name[]) { 116 return GrGLAssembleInterface(nullptr, [](void* ctx, const char name[]) {
128 return eglGetProcAddress(name); 117 return eglGetProcAddress(name);
129 }); 118 });
130 } 119 }
131
132 zwp_linux_buffer_params_v1_listener g_params_listener = {
133 LinuxBufferParamsCreated, LinuxBufferParamsFailed};
134 #endif 120 #endif
135 121
136 wl_registry_listener g_registry_listener = {RegistryHandler, RegistryRemover}; 122 wl_registry_listener g_registry_listener = {RegistryHandler, RegistryRemover};
137 123
138 wl_buffer_listener g_buffer_listener = {BufferRelease}; 124 wl_buffer_listener g_buffer_listener = {BufferRelease};
139 125
140 } // namespace 126 } // namespace
141 127
142 //////////////////////////////////////////////////////////////////////////////// 128 ////////////////////////////////////////////////////////////////////////////////
143 // ClientBase::InitParams, public: 129 // ClientBase::InitParams, public:
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 #endif 292 #endif
307 for (size_t i = 0; i < params.num_buffers; ++i) { 293 for (size_t i = 0; i < params.num_buffers; ++i) {
308 auto buffer = CreateBuffer(params.drm_format); 294 auto buffer = CreateBuffer(params.drm_format);
309 if (!buffer) { 295 if (!buffer) {
310 LOG(ERROR) << "Failed to create buffer"; 296 LOG(ERROR) << "Failed to create buffer";
311 return false; 297 return false;
312 } 298 }
313 buffers_.push_back(std::move(buffer)); 299 buffers_.push_back(std::move(buffer));
314 } 300 }
315 301
316 wl_display_roundtrip(display_.get());
317 for (size_t i = 0; i < buffers_.size(); ++i) { 302 for (size_t i = 0; i < buffers_.size(); ++i) {
303 // if the buffer handle doesn't exist, we would either be killed by the
reveman 2017/06/05 13:08:53 nit: "If" as comments should have proper capitaliz
304 // server or die here.
318 if (!buffers_[i]->buffer) { 305 if (!buffers_[i]->buffer) {
319 LOG(ERROR) << "LinuxBufferParamsCreated was not called on the buffer."; 306 LOG(ERROR) << "buffer handle uninitialized.";
320 return false; 307 return false;
321 } 308 }
322 309
323 wl_buffer_add_listener(buffers_[i]->buffer.get(), &g_buffer_listener, 310 wl_buffer_add_listener(buffers_[i]->buffer.get(), &g_buffer_listener,
324 buffers_[i].get()); 311 buffers_[i].get());
325 } 312 }
326 313
327 surface_.reset(static_cast<wl_surface*>( 314 surface_.reset(static_cast<wl_surface*>(
328 wl_compositor_create_surface(globals_.compositor.get()))); 315 wl_compositor_create_surface(globals_.compositor.get())));
329 if (!surface_) { 316 if (!surface_) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 buffer->bo.reset(gbm_bo_create(device_.get(), width_, height_, drm_format, 368 buffer->bo.reset(gbm_bo_create(device_.get(), width_, height_, drm_format,
382 GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING)); 369 GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING));
383 if (!buffer->bo) { 370 if (!buffer->bo) {
384 LOG(ERROR) << "Can't create gbm buffer"; 371 LOG(ERROR) << "Can't create gbm buffer";
385 return nullptr; 372 return nullptr;
386 } 373 }
387 base::ScopedFD fd(gbm_bo_get_plane_fd(buffer->bo.get(), 0)); 374 base::ScopedFD fd(gbm_bo_get_plane_fd(buffer->bo.get(), 0));
388 375
389 buffer->params.reset( 376 buffer->params.reset(
390 zwp_linux_dmabuf_v1_create_params(globals_.linux_dmabuf.get())); 377 zwp_linux_dmabuf_v1_create_params(globals_.linux_dmabuf.get()));
391 zwp_linux_buffer_params_v1_add_listener(buffer->params.get(),
392 &g_params_listener, buffer.get());
393 for (size_t i = 0; i < gbm_bo_get_num_planes(buffer->bo.get()); ++i) { 378 for (size_t i = 0; i < gbm_bo_get_num_planes(buffer->bo.get()); ++i) {
394 base::ScopedFD fd(gbm_bo_get_plane_fd(buffer->bo.get(), i)); 379 base::ScopedFD fd(gbm_bo_get_plane_fd(buffer->bo.get(), i));
395 uint32_t stride = gbm_bo_get_plane_stride(buffer->bo.get(), i); 380 uint32_t stride = gbm_bo_get_plane_stride(buffer->bo.get(), i);
396 uint32_t offset = gbm_bo_get_plane_offset(buffer->bo.get(), i); 381 uint32_t offset = gbm_bo_get_plane_offset(buffer->bo.get(), i);
397 zwp_linux_buffer_params_v1_add(buffer->params.get(), fd.get(), i, offset, 382 zwp_linux_buffer_params_v1_add(buffer->params.get(), fd.get(), i, offset,
398 stride, 0, 0); 383 stride, 0, 0);
399 } 384 }
400 zwp_linux_buffer_params_v1_create(buffer->params.get(), width_, height_, 385 buffer->buffer.reset(zwp_linux_buffer_params_v1_create_immed(
401 drm_format, 0); 386 buffer->params.get(), width_, height_, drm_format, 0));
402 387
403 if (gbm_bo_get_num_planes(buffer->bo.get()) != 1) 388 if (gbm_bo_get_num_planes(buffer->bo.get()) != 1)
404 return buffer; 389 return buffer;
405 390
406 EGLint khr_image_attrs[] = {EGL_DMA_BUF_PLANE0_FD_EXT, 391 EGLint khr_image_attrs[] = {EGL_DMA_BUF_PLANE0_FD_EXT,
407 fd.get(), 392 fd.get(),
408 EGL_WIDTH, 393 EGL_WIDTH,
409 width_, 394 width_,
410 EGL_HEIGHT, 395 EGL_HEIGHT,
411 height_, 396 height_,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 buffer->sk_surface = SkSurface::MakeRasterDirect( 449 buffer->sk_surface = SkSurface::MakeRasterDirect(
465 SkImageInfo::Make(width_, height_, kColorType, kOpaque_SkAlphaType), 450 SkImageInfo::Make(width_, height_, kColorType, kOpaque_SkAlphaType),
466 static_cast<uint8_t*>(buffer->shared_memory->memory()), stride); 451 static_cast<uint8_t*>(buffer->shared_memory->memory()), stride);
467 DCHECK(buffer->sk_surface); 452 DCHECK(buffer->sk_surface);
468 return buffer; 453 return buffer;
469 } 454 }
470 455
471 } // namespace clients 456 } // namespace clients
472 } // namespace wayland 457 } // namespace wayland
473 } // namespace exo 458 } // namespace exo
OLDNEW
« no previous file with comments | « no previous file | components/exo/wayland/server.cc » ('j') | components/exo/wayland/server.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698