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() { |