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

Side by Side Diff: components/exo/wayland/server.cc

Issue 2039813002: Add format modifier IDs for EGL_EXT_image_dma_buf_import extension (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add format modifier IDs for EGL_EXT_image_dma_buf_import extension Created 4 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/server.h" 5 #include "components/exo/wayland/server.h"
6 6
7 #include <grp.h> 7 #include <grp.h>
8 #include <linux/input.h> 8 #include <linux/input.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 [format](const drm_supported_format& supported_format) { 507 [format](const drm_supported_format& supported_format) {
508 return supported_format.drm_format == format; 508 return supported_format.drm_format == format;
509 }); 509 });
510 if (supported_format == 510 if (supported_format ==
511 (drm_supported_formats + arraysize(drm_supported_formats))) { 511 (drm_supported_formats + arraysize(drm_supported_formats))) {
512 wl_resource_post_error(resource, WL_DRM_ERROR_INVALID_FORMAT, 512 wl_resource_post_error(resource, WL_DRM_ERROR_INVALID_FORMAT,
513 "invalid format 0x%x", format); 513 "invalid format 0x%x", format);
514 return; 514 return;
515 } 515 }
516 516
517 std::vector<int> strides{stride0, stride1, stride2}; 517 std::vector<gfx::GbmBufferPlane> planes;
518 std::vector<int> offsets{offset0, offset1, offset2}; 518 planes.emplace_back(stride0, offset0, 0);
519 planes.emplace_back(stride1, offset1, 0);
520 planes.emplace_back(stride2, offset2, 0);
519 std::vector<base::ScopedFD> fds; 521 std::vector<base::ScopedFD> fds;
520 522
521 int planes = 523 int num_planes =
522 gfx::NumberOfPlanesForBufferFormat(supported_format->buffer_format); 524 gfx::NumberOfPlanesForBufferFormat(supported_format->buffer_format);
523 strides.resize(planes); 525 planes.resize(num_planes);
524 offsets.resize(planes);
525 fds.push_back(base::ScopedFD(name)); 526 fds.push_back(base::ScopedFD(name));
526 527
527 std::unique_ptr<Buffer> buffer = 528 std::unique_ptr<Buffer> buffer =
528 GetUserDataAs<Display>(resource)->CreateLinuxDMABufBuffer( 529 GetUserDataAs<Display>(resource)->CreateLinuxDMABufBuffer(
529 gfx::Size(width, height), supported_format->buffer_format, strides, 530 gfx::Size(width, height), supported_format->buffer_format, planes,
530 offsets, std::move(fds)); 531 std::move(fds));
531 if (!buffer) { 532 if (!buffer) {
532 wl_resource_post_no_memory(resource); 533 wl_resource_post_no_memory(resource);
533 return; 534 return;
534 } 535 }
535 536
536 wl_resource* buffer_resource = 537 wl_resource* buffer_resource =
537 wl_resource_create(client, &wl_buffer_interface, 1, id); 538 wl_resource_create(client, &wl_buffer_interface, 1, id);
538 539
539 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback, 540 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback,
540 base::Unretained(buffer_resource))); 541 base::Unretained(buffer_resource)));
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 654
654 size_t num_planes = 655 size_t num_planes =
655 gfx::NumberOfPlanesForBufferFormat(supported_format->buffer_format); 656 gfx::NumberOfPlanesForBufferFormat(supported_format->buffer_format);
656 657
657 if (linux_buffer_params->planes.size() != num_planes) { 658 if (linux_buffer_params->planes.size() != num_planes) {
658 wl_resource_post_error(resource, ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_PLANE_IDX, 659 wl_resource_post_error(resource, ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_PLANE_IDX,
659 "plane idx out of bounds"); 660 "plane idx out of bounds");
660 return; 661 return;
661 } 662 }
662 663
663 std::vector<int> strides; 664 std::vector<gfx::GbmBufferPlane> planes;
664 std::vector<int> offsets;
665 std::vector<base::ScopedFD> fds; 665 std::vector<base::ScopedFD> fds;
666 666
667 for (uint32_t i = 0; i < num_planes; ++i) { 667 for (uint32_t i = 0; i < num_planes; ++i) {
668 auto plane_it = linux_buffer_params->planes.find(i); 668 auto plane_it = linux_buffer_params->planes.find(i);
669 if (plane_it == linux_buffer_params->planes.end()) { 669 if (plane_it == linux_buffer_params->planes.end()) {
670 wl_resource_post_error(resource, 670 wl_resource_post_error(resource,
671 ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INCOMPLETE, 671 ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INCOMPLETE,
672 "missing a plane"); 672 "missing a plane");
673 return; 673 return;
674 } 674 }
675 LinuxBufferParams::Plane& plane = plane_it->second; 675 LinuxBufferParams::Plane& plane = plane_it->second;
676 strides.push_back(plane.stride); 676 planes.emplace_back(plane.stride, plane.offset, 0);
677 offsets.push_back(plane.offset);
678 if (plane.fd.is_valid()) 677 if (plane.fd.is_valid())
679 fds.push_back(std::move(plane.fd)); 678 fds.push_back(std::move(plane.fd));
680 } 679 }
681 680
682 std::unique_ptr<Buffer> buffer = 681 std::unique_ptr<Buffer> buffer =
683 linux_buffer_params->display->CreateLinuxDMABufBuffer( 682 linux_buffer_params->display->CreateLinuxDMABufBuffer(
684 gfx::Size(width, height), supported_format->buffer_format, strides, 683 gfx::Size(width, height), supported_format->buffer_format, planes,
685 offsets, std::move(fds)); 684 std::move(fds));
686 if (!buffer) { 685 if (!buffer) {
687 zwp_linux_buffer_params_v1_send_failed(resource); 686 zwp_linux_buffer_params_v1_send_failed(resource);
688 return; 687 return;
689 } 688 }
690 689
691 wl_resource* buffer_resource = 690 wl_resource* buffer_resource =
692 wl_resource_create(client, &wl_buffer_interface, 1, 0); 691 wl_resource_create(client, &wl_buffer_interface, 1, 0);
693 692
694 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback, 693 buffer->set_release_callback(base::Bind(&HandleBufferReleaseCallback,
695 base::Unretained(buffer_resource))); 694 base::Unretained(buffer_resource)));
(...skipping 1953 matching lines...) Expand 10 before | Expand all | Expand 10 after
2649 DCHECK(event_loop); 2648 DCHECK(event_loop);
2650 wl_event_loop_dispatch(event_loop, timeout.InMilliseconds()); 2649 wl_event_loop_dispatch(event_loop, timeout.InMilliseconds());
2651 } 2650 }
2652 2651
2653 void Server::Flush() { 2652 void Server::Flush() {
2654 wl_display_flush_clients(wl_display_.get()); 2653 wl_display_flush_clients(wl_display_.get());
2655 } 2654 }
2656 2655
2657 } // namespace wayland 2656 } // namespace wayland
2658 } // namespace exo 2657 } // namespace exo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698