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

Unified Diff: gpu/command_buffer/service/in_process_command_buffer.cc

Issue 962723002: Change CHROMIUM_image declarations to support multi planar input. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Handle through IPC. Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/in_process_command_buffer.cc
diff --git a/gpu/command_buffer/service/in_process_command_buffer.cc b/gpu/command_buffer/service/in_process_command_buffer.cc
index c4fa167800478e1887431a4b14524413271e8053..7f2f29762c7ba9d49e9a6be60ae17ab751bb6768 100644
--- a/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -700,15 +700,17 @@ gpu::Capabilities InProcessCommandBuffer::GetCapabilities() {
return capabilities_;
}
-int32 InProcessCommandBuffer::CreateImage(ClientBuffer buffer,
+int32 InProcessCommandBuffer::CreateImage(ClientBuffer* const buffers,
size_t width,
size_t height,
unsigned internalformat) {
CheckSequencedThread();
DCHECK(gpu_memory_buffer_manager_);
+ // TODO(emircan): See http://crbug.com/439520; support passing multiple
+ // buffers when new multi-planar formats are added.
reveman 2015/03/04 05:56:00 keep going.. :)
emircan 2015/03/04 23:31:50 I went ahead and modified the ImageFactory::Create
gfx::GpuMemoryBuffer* gpu_memory_buffer =
- gpu_memory_buffer_manager_->GpuMemoryBufferFromClientBuffer(buffer);
+ gpu_memory_buffer_manager_->GpuMemoryBufferFromClientBuffer(buffers[0]);
DCHECK(gpu_memory_buffer);
int32 new_id = next_image_id_.GetNext();
@@ -798,16 +800,27 @@ int32 InProcessCommandBuffer::CreateGpuMemoryBufferImage(
unsigned usage) {
CheckSequencedThread();
+ std::vector<gfx::GpuMemoryBuffer::Format> gpu_memory_buffer_formats;
+ gpu::ImageFactory::ImageFormatToGpuMemoryBufferFormats(
+ internalformat, &gpu_memory_buffer_formats);
+ int num_buffers = gpu_memory_buffer_formats.size();
+
+ DCHECK_GE(num_buffers, 1);
DCHECK(gpu_memory_buffer_manager_);
- scoped_ptr<gfx::GpuMemoryBuffer> buffer(
- gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(
- gfx::Size(width, height),
- gpu::ImageFactory::ImageFormatToGpuMemoryBufferFormat(internalformat),
- gpu::ImageFactory::ImageUsageToGpuMemoryBufferUsage(usage)));
- if (!buffer)
- return -1;
-
- return CreateImage(buffer->AsClientBuffer(), width, height, internalformat);
+
+ ScopedVector<gfx::GpuMemoryBuffer> buffers;
+ ClientBuffer client_buffers[num_buffers];
+ for (int i = 0; i < num_buffers; ++i) {
+ buffers.push_back(gpu_memory_buffer_manager_->AllocateGpuMemoryBuffer(
+ gfx::Size(width, height), gpu_memory_buffer_formats[i],
+ gpu::ImageFactory::ImageUsageToGpuMemoryBufferUsage(usage)));
+
+ if (!buffers[i])
+ return -1;
+
+ client_buffers[i] = buffers[i]->AsClientBuffer();
+ }
+ return CreateImage(client_buffers, width, height, internalformat);
}
uint32 InProcessCommandBuffer::InsertSyncPoint() {

Powered by Google App Engine
This is Rietveld 408576698