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

Side by Side Diff: content/browser/gpu/browser_gpu_memory_buffer_manager.cc

Issue 2551743002: gpu: Move native memory buffer configuration into //gpu (Closed)
Patch Set: . Created 4 years 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 "content/browser/gpu/browser_gpu_memory_buffer_manager.h" 5 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 } 44 }
45 45
46 void GpuMemoryBufferDeleted( 46 void GpuMemoryBufferDeleted(
47 scoped_refptr<base::SingleThreadTaskRunner> destruction_task_runner, 47 scoped_refptr<base::SingleThreadTaskRunner> destruction_task_runner,
48 const gpu::GpuMemoryBufferImpl::DestructionCallback& destruction_callback, 48 const gpu::GpuMemoryBufferImpl::DestructionCallback& destruction_callback,
49 const gpu::SyncToken& sync_token) { 49 const gpu::SyncToken& sync_token) {
50 destruction_task_runner->PostTask( 50 destruction_task_runner->PostTask(
51 FROM_HERE, base::Bind(destruction_callback, sync_token)); 51 FROM_HERE, base::Bind(destruction_callback, sync_token));
52 } 52 }
53 53
54 GpuMemoryBufferConfigurationSet GetNativeGpuMemoryBufferConfigurations() {
55 GpuMemoryBufferConfigurationSet configurations;
56
57 if (BrowserGpuMemoryBufferManager::IsNativeGpuMemoryBuffersEnabled()) {
58 const gfx::BufferFormat kNativeFormats[] = {
59 gfx::BufferFormat::R_8,
60 gfx::BufferFormat::RG_88,
61 gfx::BufferFormat::BGR_565,
62 gfx::BufferFormat::RGBA_4444,
63 gfx::BufferFormat::RGBA_8888,
64 gfx::BufferFormat::BGRA_8888,
65 gfx::BufferFormat::UYVY_422,
66 gfx::BufferFormat::YVU_420,
67 gfx::BufferFormat::YUV_420_BIPLANAR};
68 const gfx::BufferUsage kNativeUsages[] = {
69 gfx::BufferUsage::GPU_READ, gfx::BufferUsage::SCANOUT,
70 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
71 gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT};
72 for (auto& format : kNativeFormats) {
73 for (auto& usage : kNativeUsages) {
74 if (gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage))
75 configurations.insert(std::make_pair(format, usage));
76 }
77 }
78 }
79
80 #if defined(USE_OZONE) || defined(OS_MACOSX)
81 // Disable native buffers only when using Mesa.
82 bool force_native_gpu_read_write_formats =
83 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
84 switches::kUseGL) != gl::kGLImplementationOSMesaName;
85 #else
86 bool force_native_gpu_read_write_formats = false;
87 #endif
88 if (force_native_gpu_read_write_formats) {
89 const gfx::BufferFormat kGPUReadWriteFormats[] = {
90 gfx::BufferFormat::BGR_565, gfx::BufferFormat::RGBA_8888,
91 gfx::BufferFormat::RGBX_8888, gfx::BufferFormat::BGRA_8888,
92 gfx::BufferFormat::BGRX_8888, gfx::BufferFormat::UYVY_422,
93 gfx::BufferFormat::YVU_420, gfx::BufferFormat::YUV_420_BIPLANAR};
94 const gfx::BufferUsage kGPUReadWriteUsages[] = {
95 gfx::BufferUsage::GPU_READ, gfx::BufferUsage::SCANOUT};
96 for (auto& format : kGPUReadWriteFormats) {
97 for (auto& usage : kGPUReadWriteUsages) {
98 if (gpu::IsNativeGpuMemoryBufferConfigurationSupported(format, usage))
99 configurations.insert(std::make_pair(format, usage));
100 }
101 }
102 }
103
104 return configurations;
105 }
106
107 BrowserGpuMemoryBufferManager* g_gpu_memory_buffer_manager = nullptr; 54 BrowserGpuMemoryBufferManager* g_gpu_memory_buffer_manager = nullptr;
108 55
109 } // namespace 56 } // namespace
110 57
111 struct BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferRequest { 58 struct BrowserGpuMemoryBufferManager::CreateGpuMemoryBufferRequest {
112 CreateGpuMemoryBufferRequest(const gfx::Size& size, 59 CreateGpuMemoryBufferRequest(const gfx::Size& size,
113 gfx::BufferFormat format, 60 gfx::BufferFormat format,
114 gfx::BufferUsage usage, 61 gfx::BufferUsage usage,
115 int client_id, 62 int client_id,
116 gpu::SurfaceHandle surface_handle) 63 gpu::SurfaceHandle surface_handle)
(...skipping 27 matching lines...) Expand all
144 client_id, 91 client_id,
145 gpu::kNullSurfaceHandle), 92 gpu::kNullSurfaceHandle),
146 handle(handle) {} 93 handle(handle) {}
147 ~CreateGpuMemoryBufferFromHandleRequest() {} 94 ~CreateGpuMemoryBufferFromHandleRequest() {}
148 gfx::GpuMemoryBufferHandle handle; 95 gfx::GpuMemoryBufferHandle handle;
149 }; 96 };
150 97
151 BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager( 98 BrowserGpuMemoryBufferManager::BrowserGpuMemoryBufferManager(
152 int gpu_client_id, 99 int gpu_client_id,
153 uint64_t gpu_client_tracing_id) 100 uint64_t gpu_client_tracing_id)
154 : native_configurations_(GetNativeGpuMemoryBufferConfigurations()), 101 : native_configurations_(gpu::GetNativeGpuMemoryBufferConfigurations()),
155 gpu_client_id_(gpu_client_id), 102 gpu_client_id_(gpu_client_id),
156 gpu_client_tracing_id_(gpu_client_tracing_id), 103 gpu_client_tracing_id_(gpu_client_tracing_id),
157 gpu_host_id_(0) { 104 gpu_host_id_(0) {
158 DCHECK(!g_gpu_memory_buffer_manager); 105 DCHECK(!g_gpu_memory_buffer_manager);
159 g_gpu_memory_buffer_manager = this; 106 g_gpu_memory_buffer_manager = this;
160 } 107 }
161 108
162 BrowserGpuMemoryBufferManager::~BrowserGpuMemoryBufferManager() { 109 BrowserGpuMemoryBufferManager::~BrowserGpuMemoryBufferManager() {
163 g_gpu_memory_buffer_manager = nullptr; 110 g_gpu_memory_buffer_manager = nullptr;
164 } 111 }
165 112
166 // static 113 // static
167 BrowserGpuMemoryBufferManager* BrowserGpuMemoryBufferManager::current() { 114 BrowserGpuMemoryBufferManager* BrowserGpuMemoryBufferManager::current() {
168 return g_gpu_memory_buffer_manager; 115 return g_gpu_memory_buffer_manager;
169 } 116 }
170 117
171 // static 118 // static
172 bool BrowserGpuMemoryBufferManager::IsNativeGpuMemoryBuffersEnabled() {
173 // Disable native buffers when using Mesa.
174 if (base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
175 switches::kUseGL) == gl::kGLImplementationOSMesaName) {
176 return false;
177 }
178
179 #if defined(OS_MACOSX)
180 return !base::CommandLine::ForCurrentProcess()->HasSwitch(
181 switches::kDisableNativeGpuMemoryBuffers);
182 #else
183 return base::CommandLine::ForCurrentProcess()->HasSwitch(
184 switches::kEnableNativeGpuMemoryBuffers);
185 #endif
186 }
187
188 // static
189 uint32_t BrowserGpuMemoryBufferManager::GetImageTextureTarget( 119 uint32_t BrowserGpuMemoryBufferManager::GetImageTextureTarget(
190 gfx::BufferFormat format, 120 gfx::BufferFormat format,
191 gfx::BufferUsage usage) { 121 gfx::BufferUsage usage) {
192 GpuMemoryBufferConfigurationSet native_configurations = 122 gpu::GpuMemoryBufferConfigurationSet native_configurations =
193 GetNativeGpuMemoryBufferConfigurations(); 123 gpu::GetNativeGpuMemoryBufferConfigurations();
194 if (native_configurations.find(std::make_pair(format, usage)) == 124 if (native_configurations.find(std::make_pair(format, usage)) ==
195 native_configurations.end()) { 125 native_configurations.end()) {
196 return GL_TEXTURE_2D; 126 return GL_TEXTURE_2D;
197 } 127 }
198 128
199 switch (gpu::GetNativeGpuMemoryBufferType()) { 129 switch (gpu::GetNativeGpuMemoryBufferType()) {
200 case gfx::OZONE_NATIVE_PIXMAP: 130 case gfx::OZONE_NATIVE_PIXMAP:
201 // GPU memory buffers that are shared with the GL using EGLImages 131 // GPU memory buffers that are shared with the GL using EGLImages
202 // require TEXTURE_EXTERNAL_OES. 132 // require TEXTURE_EXTERNAL_OES.
203 return GL_TEXTURE_EXTERNAL_OES; 133 return GL_TEXTURE_EXTERNAL_OES;
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 format(format), 606 format(format),
677 usage(usage), 607 usage(usage),
678 gpu_host_id(gpu_host_id) {} 608 gpu_host_id(gpu_host_id) {}
679 609
680 BrowserGpuMemoryBufferManager::BufferInfo::BufferInfo(const BufferInfo& other) = 610 BrowserGpuMemoryBufferManager::BufferInfo::BufferInfo(const BufferInfo& other) =
681 default; 611 default;
682 612
683 BrowserGpuMemoryBufferManager::BufferInfo::~BufferInfo() {} 613 BrowserGpuMemoryBufferManager::BufferInfo::~BufferInfo() {}
684 614
685 } // namespace content 615 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/gpu/browser_gpu_memory_buffer_manager.h ('k') | content/browser/gpu/compositor_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698