Chromium Code Reviews| 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() { |