OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |