summaryrefslogtreecommitdiffstats
path: root/o3d/core/cross
diff options
context:
space:
mode:
Diffstat (limited to 'o3d/core/cross')
-rw-r--r--o3d/core/cross/command_buffer/display_window_cb.h9
-rw-r--r--o3d/core/cross/command_buffer/renderer_cb.cc139
-rw-r--r--o3d/core/cross/command_buffer/renderer_cb.h57
3 files changed, 85 insertions, 120 deletions
diff --git a/o3d/core/cross/command_buffer/display_window_cb.h b/o3d/core/cross/command_buffer/display_window_cb.h
index 52cd08a..06b494e 100644
--- a/o3d/core/cross/command_buffer/display_window_cb.h
+++ b/o3d/core/cross/command_buffer/display_window_cb.h
@@ -34,6 +34,7 @@
#define O3D_CORE_WIN_DISPLAY_WINDOW_CB_H_
#include "core/cross/display_window.h"
+#include "gpu_plugin/command_buffer.h"
#include "gpu_plugin/np_utils/np_object_pointer.h"
namespace o3d {
@@ -53,12 +54,14 @@ class DisplayWindowCB : public DisplayWindow {
npp_ = npp;
}
- gpu_plugin::NPObjectPointer<NPObject> command_buffer() const {
+ gpu_plugin::NPObjectPointer<gpu_plugin::CommandBuffer>
+ command_buffer() const {
return command_buffer_;
}
void set_command_buffer(
- const gpu_plugin::NPObjectPointer<NPObject> command_buffer) {
+ const gpu_plugin::NPObjectPointer<gpu_plugin::CommandBuffer>
+ command_buffer) {
command_buffer_ = command_buffer;
}
@@ -80,7 +83,7 @@ class DisplayWindowCB : public DisplayWindow {
private:
NPP npp_;
- gpu_plugin::NPObjectPointer<NPObject> command_buffer_;
+ gpu_plugin::NPObjectPointer<gpu_plugin::CommandBuffer> command_buffer_;
int width_;
int height_;
DISALLOW_COPY_AND_ASSIGN(DisplayWindowCB);
diff --git a/o3d/core/cross/command_buffer/renderer_cb.cc b/o3d/core/cross/command_buffer/renderer_cb.cc
index 5d0dcd58..e964672 100644
--- a/o3d/core/cross/command_buffer/renderer_cb.cc
+++ b/o3d/core/cross/command_buffer/renderer_cb.cc
@@ -53,20 +53,26 @@
#include "gpu_plugin/gpu_processor.h"
#include "gpu_plugin/np_utils/np_browser.h"
#include "gpu_plugin/np_utils/np_utils.h"
-#include "gpu_plugin/system_services/shared_memory.h"
+
+#if !defined(CB_SERVICE_REMOTE)
+#include "gpu_plugin/gpu_processor.h"
+#endif
namespace o3d {
+using ::base::SharedMemory;
using command_buffer::o3d::GAPIInterface;
using command_buffer::O3DCmdHelper;
-using gpu_plugin::CommandBuffer;
-using gpu_plugin::GPUProcessor;
using gpu_plugin::NPBrowser;
using gpu_plugin::NPCreateObject;
using gpu_plugin::NPGetProperty;
using gpu_plugin::NPInvoke;
using gpu_plugin::NPInvokeVoid;
using gpu_plugin::NPObjectPointer;
-using gpu_plugin::SharedMemory;
+
+#if !defined(CB_SERVICE_REMOTE)
+using gpu_plugin::CommandBuffer;
+using gpu_plugin::GPUProcessor;
+#endif
RendererCB::RendererCB(ServiceLocator* service_locator,
int32 transfer_memory_size)
@@ -88,12 +94,13 @@ RendererCB::~RendererCB() {
}
void RendererCB::Destroy() {
- if (transfer_shm_id_ >= 0) {
- NPInvokeVoid(npp_, command_buffer_, "unregisterObject", transfer_shm_id_);
- transfer_shm_id_ = command_buffer::kInvalidSharedMemoryId;
+ if (command_buffer_.Get()) {
+ command_buffer_->DestroyTransferBuffer(transfer_shm_id_);
}
- transfer_shm_ = NPObjectPointer<NPObject>();
+ transfer_shm_id_ = command_buffer::kInvalidSharedMemoryId;
+ transfer_shm_ = NULL;
+ transfer_shm_address_ = NULL;
if (allocator_) {
delete allocator_;
@@ -298,30 +305,25 @@ Renderer::InitStatus RendererCB::InitPlatformSpecific(
return INITIALIZATION_ERROR;
}
- // Create and map a block of memory for the transfer buffer.
- transfer_shm_ = CreateSharedMemory(transfer_memory_size_, npp_);
- if (!transfer_shm_.Get()) {
+ transfer_shm_id_ = command_buffer_->CreateTransferBuffer(
+ transfer_memory_size_);
+ if (transfer_shm_id_ < 0) {
Destroy();
return INITIALIZATION_ERROR;
}
- size_t size_bytes;
- transfer_shm_address_ = NPBrowser::get()->MapMemory(npp_,
- transfer_shm_.Get(),
- &size_bytes);
- if (!transfer_shm_address_) {
+
+ transfer_shm_ = command_buffer_->GetTransferBuffer(transfer_shm_id_);
+ if (!transfer_shm_) {
Destroy();
return INITIALIZATION_ERROR;
}
- DCHECK(size_bytes == transfer_memory_size_);
- // Register the transfer buffer so it can be identified with an integer
- // in future commands.
- if (!NPInvoke(npp_, command_buffer_, "registerObject", transfer_shm_,
- &transfer_shm_id_)) {
+ if (!transfer_shm_->Map(transfer_memory_size_)) {
Destroy();
return INITIALIZATION_ERROR;
}
- DCHECK_GE(transfer_shm_id_, 0);
+
+ transfer_shm_address_ = transfer_shm_->memory();
// Insert a token.
frame_token_ = helper_->InsertToken();
@@ -340,12 +342,34 @@ Renderer::InitStatus RendererCB::InitPlatformSpecific(
return SUCCESS;
}
-static const unsigned int kDefaultCommandBufferSize = 256 << 10;
-
// This should be enough to hold the biggest possible buffer
// (2048x2048xABGR16F texture = 32MB)
static const int32 kDefaultTransferMemorySize = 32 << 20;
+#if defined(CB_SERVICE_REMOTE)
+
+RendererCBRemote *RendererCBRemote::CreateDefault(
+ ServiceLocator* service_locator) {
+ return new RendererCBRemote(service_locator,
+ kDefaultTransferMemorySize);
+}
+
+RendererCBRemote::RendererCBRemote(ServiceLocator* service_locator,
+ int32 transfer_memory_size)
+ : RendererCB(service_locator, transfer_memory_size) {
+}
+
+RendererCBRemote::~RendererCBRemote() {
+}
+
+Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) {
+ return RendererCBRemote::CreateDefault(service_locator);
+}
+
+#else // CB_SERVICE_REMOTE
+
+static const unsigned int kDefaultCommandBufferSize = 256 << 10;
+
RendererCBLocal *RendererCBLocal::CreateDefault(
ServiceLocator* service_locator) {
return new RendererCBLocal(service_locator,
@@ -363,23 +387,16 @@ RendererCBLocal::~RendererCBLocal() {
NPObjectPointer<CommandBuffer> RendererCBLocal::CreateCommandBuffer(
NPP npp, void* hwnd, int32 size) {
#if defined(OS_WIN)
- NPObjectPointer<SharedMemory> ring_buffer =
- NPCreateObject<SharedMemory>(npp);
- if (!ring_buffer->Initialize(size))
+ scoped_ptr<SharedMemory> ring_buffer(new SharedMemory);
+ if (!ring_buffer->Create(std::wstring(), false, false, size))
return NPObjectPointer<CommandBuffer>();
- size_t mapped_size;
- if (!NPBrowser::get()->MapMemory(npp,
- ring_buffer.Get(),
- &mapped_size)) {
+ if (!ring_buffer->Map(size))
return NPObjectPointer<CommandBuffer>();
- }
-
- DCHECK(mapped_size == size);
NPObjectPointer<CommandBuffer> command_buffer =
NPCreateObject<CommandBuffer>(npp);
- if (!command_buffer->Initialize(ring_buffer))
+ if (!command_buffer->Initialize(ring_buffer.release()))
return NPObjectPointer<CommandBuffer>();
scoped_refptr<GPUProcessor> gpu_processor(
@@ -397,58 +414,10 @@ NPObjectPointer<CommandBuffer> RendererCBLocal::CreateCommandBuffer(
#endif
}
-NPObjectPointer<NPObject> RendererCBLocal::CreateSharedMemory(int32 size,
- NPP npp) {
- NPObjectPointer<SharedMemory> shared_memory =
- NPCreateObject<SharedMemory>(npp);
-
- if (!shared_memory->Initialize(size))
- return NPObjectPointer<NPObject>();
-
- return shared_memory;
-}
-
-RendererCBRemote *RendererCBRemote::CreateDefault(
- ServiceLocator* service_locator) {
- return new RendererCBRemote(service_locator,
- kDefaultTransferMemorySize);
-}
-
-RendererCBRemote::RendererCBRemote(ServiceLocator* service_locator,
- int32 transfer_memory_size)
- : RendererCB(service_locator, transfer_memory_size) {
-}
-
-RendererCBRemote::~RendererCBRemote() {
-}
-
-NPObjectPointer<NPObject> RendererCBRemote::CreateSharedMemory(int32 size,
- NPP npp) {
- NPObjectPointer<NPObject> shared_memory;
-
- NPObjectPointer<NPObject> window = NPObjectPointer<NPObject>::FromReturned(
- NPBrowser::get()->GetWindowNPObject(npp));
- if (!window.Get())
- return shared_memory;
-
- NPObjectPointer<NPObject> chromium;
- if (!NPGetProperty(npp, window, "chromium", &chromium) || !chromium.Get())
- return shared_memory;
-
- NPObjectPointer<NPObject> system;
- if (!NPGetProperty(npp, chromium, "system", &system) || !system.Get())
- return shared_memory;
-
- if (!NPInvoke(npp, system, "createSharedMemory", size,
- &shared_memory)) {
- return shared_memory;
- }
-
- return shared_memory;
-}
-
Renderer* Renderer::CreateDefaultRenderer(ServiceLocator* service_locator) {
return RendererCBLocal::CreateDefault(service_locator);
}
+#endif // CB_SERVICE_REMOTE
+
} // namespace o3d
diff --git a/o3d/core/cross/command_buffer/renderer_cb.h b/o3d/core/cross/command_buffer/renderer_cb.h
index 59aca05..e58a2bc 100644
--- a/o3d/core/cross/command_buffer/renderer_cb.h
+++ b/o3d/core/cross/command_buffer/renderer_cb.h
@@ -35,6 +35,7 @@
#ifndef O3D_CORE_CROSS_COMMAND_BUFFER_RENDERER_CB_H_
#define O3D_CORE_CROSS_COMMAND_BUFFER_RENDERER_CB_H_
+#include "base/shared_memory.h"
#include "core/cross/precompile.h"
#include <vector>
#include "core/cross/renderer.h"
@@ -251,17 +252,13 @@ class RendererCB : public Renderer {
virtual InitStatus InitPlatformSpecific(const DisplayWindow& display_window,
bool off_screen);
- // Create a shared memory object of the given size.
- virtual gpu_plugin::NPObjectPointer<NPObject>
- CreateSharedMemory(int32 size, NPP npp) = 0;
-
private:
int32 transfer_memory_size_;
- gpu_plugin::NPObjectPointer<NPObject> transfer_shm_;
+ ::base::SharedMemory* transfer_shm_;
int32 transfer_shm_id_;
void *transfer_shm_address_;
NPP npp_;
- gpu_plugin::NPObjectPointer<NPObject> command_buffer_;
+ gpu_plugin::NPObjectPointer<gpu_plugin::CommandBuffer> command_buffer_;
::command_buffer::O3DCmdHelper *helper_;
::command_buffer::FencedAllocatorWrapper *allocator_;
@@ -282,6 +279,27 @@ class RendererCB : public Renderer {
DISALLOW_COPY_AND_ASSIGN(RendererCB);
};
+#if defined(CB_SERVICE_REMOTE)
+
+// This subclass initializes itself with a remotely created, potentially out-
+// of-process CommandBuffer. It requires that the browser supports the "system
+// service" to create shared memory, which is not available in the mange branch
+// of Chrome. Use RendererCBLocal for now.
+class RendererCBRemote : public RendererCB {
+ public:
+ // Creates a default RendererCBRemote.
+ static RendererCBRemote *CreateDefault(ServiceLocator* service_locator);
+
+ protected:
+ RendererCBRemote(ServiceLocator* service_locator, int32 transfer_memory_size);
+ virtual ~RendererCBRemote();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(RendererCBRemote);
+};
+
+#else // CB_SERVICE_REMOTE
+
// This subclass initializes itself with a locally created in-process
// CommandBuffer and GPUProcessor. This class will eventually go away and the
// code in RendererCBRemote will be merged into RendererCB.
@@ -298,36 +316,11 @@ class RendererCBLocal : public RendererCB {
int32 transfer_memory_size);
virtual ~RendererCBLocal();
- // Create a shared memory object of the given size using the system services
- // library directly.
- virtual gpu_plugin::NPObjectPointer<NPObject>
- CreateSharedMemory(int32 size, NPP npp);
-
private:
DISALLOW_COPY_AND_ASSIGN(RendererCBLocal);
};
-// This subclass initializes itself with a remotely created, potentially out-
-// of-process CommandBuffer. It requires that the browser supports the "system
-// service" to create shared memory, which is not available in the mange branch
-// of Chrome. Use RendererCBLocal for now.
-class RendererCBRemote : public RendererCB {
- public:
- // Creates a default RendererCBRemote.
- static RendererCBRemote *CreateDefault(ServiceLocator* service_locator);
-
- protected:
- RendererCBRemote(ServiceLocator* service_locator, int32 transfer_memory_size);
- virtual ~RendererCBRemote();
-
- // Create a shared memory object using the browser's
- // chromium.system.createSharedMemory method.
- virtual gpu_plugin::NPObjectPointer<NPObject>
- CreateSharedMemory(int32 size, NPP npp);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(RendererCBRemote);
-};
+#endif // CB_SERVICE_REMOTE
} // namespace o3d