Index: gpu/command_buffer/tests/gl_manager.cc |
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc |
index aeda007c8f6d9ff2a4434cba40134bfed30f78e8..56e0008a3dc0fc57ef2d9d86245e36c4bbd874fe 100644 |
--- a/gpu/command_buffer/tests/gl_manager.cc |
+++ b/gpu/command_buffer/tests/gl_manager.cc |
@@ -4,13 +4,16 @@ |
#include "gpu/command_buffer/tests/gl_manager.h" |
+#include <GLES2/gl2.h> |
+#include <GLES2/gl2ext.h> |
+ |
#include <vector> |
#include "base/at_exit.h" |
#include "base/bind.h" |
+#include "base/memory/ref_counted_memory.h" |
#include "gpu/command_buffer/client/gles2_implementation.h" |
#include "gpu/command_buffer/client/gles2_lib.h" |
-#include "gpu/command_buffer/client/gpu_memory_buffer_factory.h" |
#include "gpu/command_buffer/client/transfer_buffer.h" |
#include "gpu/command_buffer/common/constants.h" |
#include "gpu/command_buffer/common/gles2_cmd_utils.h" |
@@ -18,16 +21,62 @@ |
#include "gpu/command_buffer/service/context_group.h" |
#include "gpu/command_buffer/service/gl_context_virtual.h" |
#include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
-#include "gpu/command_buffer/service/gpu_control_service.h" |
#include "gpu/command_buffer/service/gpu_scheduler.h" |
#include "gpu/command_buffer/service/image_manager.h" |
#include "gpu/command_buffer/service/mailbox_manager.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/gfx/gpu_memory_buffer.h" |
#include "ui/gl/gl_context.h" |
+#include "ui/gl/gl_image_ref_counted_memory.h" |
#include "ui/gl/gl_share_group.h" |
#include "ui/gl/gl_surface.h" |
namespace gpu { |
+namespace { |
+ |
+int BytesPerPixel(unsigned internalformat) { |
+ switch (internalformat) { |
+ case GL_RGBA8_OES: |
+ return 4; |
+ default: |
+ NOTREACHED(); |
+ return 0; |
+ } |
+} |
+ |
no sievers
2014/07/11 18:33:29
I've been wanting to use InProcessCommandBuffer fo
reveman
2014/07/11 21:08:06
Acknowledged.
|
+class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { |
+ public: |
+ GpuMemoryBufferImpl(base::RefCountedBytes* bytes, |
+ const gfx::Size& size, |
+ unsigned internalformat) |
+ : bytes_(bytes), |
+ size_(size), |
+ internalformat_(internalformat), |
+ mapped_(false) {} |
+ |
+ // Overridden from gfx::GpuMemoryBuffer: |
+ virtual void* Map() OVERRIDE { |
+ mapped_ = true; |
+ return &bytes_->data().front(); |
+ } |
+ virtual void Unmap() OVERRIDE { mapped_ = false; } |
+ virtual bool IsMapped() const OVERRIDE { return mapped_; } |
+ virtual uint32 GetStride() const OVERRIDE { |
+ return size_.width() * BytesPerPixel(internalformat_); |
+ } |
+ virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE { |
+ NOTREACHED(); |
+ return gfx::GpuMemoryBufferHandle(); |
+ } |
+ |
+ private: |
+ scoped_refptr<base::RefCountedBytes> bytes_; |
+ const gfx::Size size_; |
+ unsigned internalformat_; |
+ bool mapped_; |
+}; |
+ |
+} // namespace |
int GLManager::use_count_; |
scoped_refptr<gfx::GLShareGroup>* GLManager::base_share_group_; |
@@ -41,11 +90,10 @@ GLManager::Options::Options() |
virtual_manager(NULL), |
bind_generates_resource(false), |
lose_context_when_out_of_memory(false), |
- context_lost_allowed(false), |
- image_manager(NULL) {} |
+ context_lost_allowed(false) { |
+} |
-GLManager::GLManager() |
- : context_lost_allowed_(false), gpu_memory_buffer_factory_(NULL) { |
+GLManager::GLManager() : context_lost_allowed_(false) { |
SetupBaseContext(); |
} |
@@ -120,7 +168,6 @@ void GLManager::Initialize(const GLManager::Options& options) { |
if (!context_group) { |
context_group = |
new gles2::ContextGroup(mailbox_manager_.get(), |
- options.image_manager, |
NULL, |
new gpu::gles2::ShaderTranslatorCache, |
NULL, |
@@ -172,11 +219,6 @@ void GLManager::Initialize(const GLManager::Options& options) { |
::gpu::gles2::DisallowedFeatures(), |
attribs)) << "could not initialize decoder"; |
- gpu_control_service_.reset( |
- new GpuControlService(decoder_->GetContextGroup()->image_manager(), |
- decoder_->GetQueryManager())); |
- gpu_memory_buffer_factory_ = options.gpu_memory_buffer_factory; |
- |
command_buffer_->SetPutOffsetChangeCallback( |
base::Bind(&GLManager::PumpCommands, base::Unretained(this))); |
command_buffer_->SetGetBufferChangeCallback( |
@@ -278,25 +320,34 @@ gfx::GpuMemoryBuffer* GLManager::CreateGpuMemoryBuffer( |
unsigned internalformat, |
unsigned usage, |
int32* id) { |
+ gfx::Size size(width, height); |
+ |
*id = -1; |
+ |
+ std::vector<unsigned char> data( |
+ size.GetArea() * BytesPerPixel(internalformat), 0); |
+ scoped_refptr<base::RefCountedBytes> bytes(new base::RefCountedBytes(data)); |
scoped_ptr<gfx::GpuMemoryBuffer> buffer( |
- gpu_memory_buffer_factory_->CreateGpuMemoryBuffer( |
- width, height, internalformat, usage)); |
- if (!buffer.get()) |
- return NULL; |
+ new GpuMemoryBufferImpl(bytes.get(), size, internalformat)); |
static int32 next_id = 1; |
- *id = next_id++; |
- gpu_control_service_->RegisterGpuMemoryBuffer( |
- *id, buffer->GetHandle(), width, height, internalformat); |
- gfx::GpuMemoryBuffer* raw_buffer = buffer.get(); |
- memory_buffers_.add(*id, buffer.Pass()); |
- return raw_buffer; |
+ int32 new_id = next_id++; |
+ |
+ scoped_refptr<gfx::GLImageRefCountedMemory> image( |
+ new gfx::GLImageRefCountedMemory(size, internalformat)); |
+ if (!image->Initialize(bytes.get())) |
+ return NULL; |
+ |
+ decoder()->GetImageManager()->AddImage(image.get(), new_id); |
+ |
+ *id = new_id; |
+ gpu_memory_buffers_.add(new_id, buffer.Pass()); |
+ return gpu_memory_buffers_.get(new_id); |
reveman
2014/07/11 21:08:06
Changed this to be consistent with CommandBufferPr
|
} |
void GLManager::DestroyGpuMemoryBuffer(int32 id) { |
- memory_buffers_.erase(id); |
- gpu_control_service_->UnregisterGpuMemoryBuffer(id); |
+ decoder()->GetImageManager()->RemoveImage(id); |
+ gpu_memory_buffers_.erase(id); |
} |
uint32 GLManager::InsertSyncPoint() { |