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

Side by Side Diff: ui/gl/gl_image_linux_dma_buffer.cc

Issue 1071273002: NotForReview: Implement zero/one-copy texture for ozone freon using Intel DRM Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/gl/gl_image_linux_dma_buffer.h" 5 #include "ui/gl/gl_image_linux_dma_buffer.h"
6 6
7 #include <unistd.h> 7 #include <unistd.h>
8 8
9 #define FOURCC(a, b, c, d) \ 9 #define FOURCC(a, b, c, d) \
10 ((static_cast<uint32>(a)) | (static_cast<uint32>(b) << 8) | \ 10 ((static_cast<uint32>(a)) | (static_cast<uint32>(b) << 8) | \
11 (static_cast<uint32>(c) << 16) | (static_cast<uint32>(d) << 24)) 11 (static_cast<uint32>(c) << 16) | (static_cast<uint32>(d) << 24))
12 12
13 #define DRM_FORMAT_ARGB8888 FOURCC('A', 'R', '2', '4') 13 #define DRM_FORMAT_ARGB8888 FOURCC('A', 'R', '2', '4')
14 #define DRM_FORMAT_XRGB8888 FOURCC('X', 'R', '2', '4') 14 #define DRM_FORMAT_XRGB8888 FOURCC('X', 'R', '2', '4')
15 15
16 namespace gfx { 16 namespace gfx {
17 namespace { 17 namespace {
18 18
19 bool ValidFormat(unsigned internalformat, gfx::GpuMemoryBuffer::Format format) { 19 bool ValidInternalFormat(unsigned internalformat) {
20 switch (internalformat) { 20 switch (internalformat) {
21 case GL_ATC_RGB_AMD:
22 return format == gfx::GpuMemoryBuffer::ATC;
23 case GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD:
24 return format == gfx::GpuMemoryBuffer::ATCIA;
25 case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
26 return format == gfx::GpuMemoryBuffer::DXT1;
27 case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
28 return format == gfx::GpuMemoryBuffer::DXT5;
29 case GL_ETC1_RGB8_OES:
30 return format == gfx::GpuMemoryBuffer::ETC1;
31 case GL_RGB: 21 case GL_RGB:
32 switch (format) {
33 case gfx::GpuMemoryBuffer::RGBX_8888:
34 return true;
35 case gfx::GpuMemoryBuffer::ATC:
36 case gfx::GpuMemoryBuffer::ATCIA:
37 case gfx::GpuMemoryBuffer::DXT1:
38 case gfx::GpuMemoryBuffer::DXT5:
39 case gfx::GpuMemoryBuffer::ETC1:
40 case gfx::GpuMemoryBuffer::R_8:
41 case gfx::GpuMemoryBuffer::RGBA_8888:
42 case gfx::GpuMemoryBuffer::BGRA_8888:
43 case gfx::GpuMemoryBuffer::YUV_420:
44 return false;
45 }
46 NOTREACHED();
47 return false;
48 case GL_RGBA: 22 case GL_RGBA:
49 switch (format) { 23 case GL_BGRA_EXT:
50 case gfx::GpuMemoryBuffer::BGRA_8888: 24 return true;
51 return true;
52 case gfx::GpuMemoryBuffer::ATC:
53 case gfx::GpuMemoryBuffer::ATCIA:
54 case gfx::GpuMemoryBuffer::DXT1:
55 case gfx::GpuMemoryBuffer::DXT5:
56 case gfx::GpuMemoryBuffer::ETC1:
57 case gfx::GpuMemoryBuffer::R_8:
58 case gfx::GpuMemoryBuffer::RGBX_8888:
59 case gfx::GpuMemoryBuffer::RGBA_8888:
60 case gfx::GpuMemoryBuffer::YUV_420:
61 return false;
62 }
63 NOTREACHED();
64 return false;
65 case GL_R8:
66 return false;
67 default: 25 default:
68 return false; 26 return false;
69 } 27 }
70 } 28 }
71 29
30 bool ValidFormat(gfx::GpuMemoryBuffer::Format format) {
31 switch (format) {
32 case gfx::GpuMemoryBuffer::RGBA_8888:
33 case gfx::GpuMemoryBuffer::BGRA_8888:
34 case gfx::GpuMemoryBuffer::RGBX_8888:
35 return true;
36 case gfx::GpuMemoryBuffer::ATC:
37 case gfx::GpuMemoryBuffer::ATCIA:
38 case gfx::GpuMemoryBuffer::DXT1:
39 case gfx::GpuMemoryBuffer::DXT5:
40 case gfx::GpuMemoryBuffer::ETC1:
41 case gfx::GpuMemoryBuffer::R_8:
42 case gfx::GpuMemoryBuffer::YUV_420:
43 return false;
44 }
45
46 NOTREACHED();
47 return false;
48 }
49
72 EGLint FourCC(gfx::GpuMemoryBuffer::Format format) { 50 EGLint FourCC(gfx::GpuMemoryBuffer::Format format) {
73 switch (format) { 51 switch (format) {
74 case gfx::GpuMemoryBuffer::BGRA_8888: 52 case gfx::GpuMemoryBuffer::BGRA_8888:
75 return DRM_FORMAT_ARGB8888; 53 return DRM_FORMAT_ARGB8888;
76 case gfx::GpuMemoryBuffer::RGBX_8888: 54 case gfx::GpuMemoryBuffer::RGBX_8888:
77 return DRM_FORMAT_XRGB8888; 55 return DRM_FORMAT_XRGB8888;
78 case gfx::GpuMemoryBuffer::ATC: 56 case gfx::GpuMemoryBuffer::ATC:
79 case gfx::GpuMemoryBuffer::ATCIA: 57 case gfx::GpuMemoryBuffer::ATCIA:
80 case gfx::GpuMemoryBuffer::DXT1: 58 case gfx::GpuMemoryBuffer::DXT1:
81 case gfx::GpuMemoryBuffer::DXT5: 59 case gfx::GpuMemoryBuffer::DXT5:
(...skipping 19 matching lines...) Expand all
101 unsigned internalformat) 79 unsigned internalformat)
102 : GLImageEGL(size), internalformat_(internalformat) { 80 : GLImageEGL(size), internalformat_(internalformat) {
103 } 81 }
104 82
105 GLImageLinuxDMABuffer::~GLImageLinuxDMABuffer() { 83 GLImageLinuxDMABuffer::~GLImageLinuxDMABuffer() {
106 } 84 }
107 85
108 bool GLImageLinuxDMABuffer::Initialize(const base::FileDescriptor& handle, 86 bool GLImageLinuxDMABuffer::Initialize(const base::FileDescriptor& handle,
109 gfx::GpuMemoryBuffer::Format format, 87 gfx::GpuMemoryBuffer::Format format,
110 int pitch) { 88 int pitch) {
111 if (!ValidFormat(internalformat_, format)) { 89 if (!ValidInternalFormat(internalformat_)) {
112 LOG(ERROR) << "Invalid format: " << internalformat_; 90 LOG(ERROR) << "Invalid internalformat: " << internalformat_;
113 return false; 91 return false;
114 } 92 }
115 93
94 if (!ValidFormat(format)) {
95 LOG(ERROR) << "Invalid format: " << format;
96 return false;
97 }
98
116 if (!IsHandleValid(handle)) { 99 if (!IsHandleValid(handle)) {
117 LOG(ERROR) << "Invalid file descriptor: " << handle.fd; 100 LOG(ERROR) << "Invalid file descriptor: " << handle.fd;
118 return false; 101 return false;
119 } 102 }
120 103
121 // Note: If eglCreateImageKHR is successful for a EGL_LINUX_DMA_BUF_EXT 104 // Note: If eglCreateImageKHR is successful for a EGL_LINUX_DMA_BUF_EXT
122 // target, the EGL will take a reference to the dma_buf. 105 // target, the EGL will take a reference to the dma_buf.
123 EGLint attrs[] = {EGL_WIDTH, 106 EGLint attrs[] = {EGL_WIDTH,
124 size_.width(), 107 size_.width(),
125 EGL_HEIGHT, 108 EGL_HEIGHT,
126 size_.height(), 109 size_.height(),
127 EGL_LINUX_DRM_FOURCC_EXT, 110 EGL_LINUX_DRM_FOURCC_EXT,
128 FourCC(format), 111 FourCC(format),
129 EGL_DMA_BUF_PLANE0_FD_EXT, 112 EGL_DMA_BUF_PLANE0_FD_EXT,
130 handle.fd, 113 handle.fd,
131 EGL_DMA_BUF_PLANE0_OFFSET_EXT, 114 EGL_DMA_BUF_PLANE0_OFFSET_EXT,
132 0, 115 0,
133 EGL_DMA_BUF_PLANE0_PITCH_EXT, 116 EGL_DMA_BUF_PLANE0_PITCH_EXT,
134 pitch, 117 pitch,
135 EGL_NONE}; 118 EGL_NONE};
136 return GLImageEGL::Initialize( 119 return GLImageEGL::Initialize(EGL_LINUX_DMA_BUF_EXT,
137 EGL_LINUX_DMA_BUF_EXT, static_cast<EGLClientBuffer>(NULL), attrs); 120 static_cast<EGLClientBuffer>(nullptr), attrs);
138 } 121 }
139 122
140 } // namespace gfx 123 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698