summaryrefslogtreecommitdiffstats
path: root/gpu/gles2_conform_support/egl/display.h
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/gles2_conform_support/egl/display.h')
-rw-r--r--gpu/gles2_conform_support/egl/display.h147
1 files changed, 91 insertions, 56 deletions
diff --git a/gpu/gles2_conform_support/egl/display.h b/gpu/gles2_conform_support/egl/display.h
index 619fed9..292d68b 100644
--- a/gpu/gles2_conform_support/egl/display.h
+++ b/gpu/gles2_conform_support/egl/display.h
@@ -9,87 +9,122 @@
#include <stddef.h>
#include <stdint.h>
-#include <vector>
-
#include "base/macros.h"
-#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
-#include "base/synchronization/lock.h"
+#include "gpu/command_buffer/client/gles2_cmd_helper.h"
+#include "gpu/command_buffer/client/gpu_control.h"
+#include "gpu/command_buffer/service/command_buffer_service.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+#include "gpu/command_buffer/service/gpu_scheduler.h"
+#include "ui/gfx/native_widget_types.h"
+#include "ui/gl/gl_context.h"
+#include "ui/gl/gl_surface.h"
+
+namespace gpu {
+class CommandBufferService;
+class GpuControl;
+class GpuScheduler;
+class TransferBuffer;
+class TransferBufferManagerInterface;
+
+namespace gles2 {
+class GLES2CmdHelper;
+class GLES2Implementation;
+} // namespace gles2
+} // namespace gpu
namespace egl {
class Config;
-class Context;
class Surface;
-class ThreadState;
-class Display {
+class Display : private gpu::GpuControl {
public:
- explicit Display();
- ~Display();
-
- bool is_initialized() const { return is_initialized_; }
+ explicit Display(EGLNativeDisplayType display_id);
+ ~Display() override;
- void ReleaseCurrentForReleaseThread(ThreadState*);
+ void SetCreateOffscreen(int width, int height) {
+ create_offscreen_ = true;
+ create_offscreen_width_ = width;
+ create_offscreen_height_ = height;
+ }
- EGLBoolean Initialize(ThreadState* ts, EGLint* major, EGLint* minor);
- EGLBoolean Terminate(ThreadState* ts);
- const char* QueryString(ThreadState* ts, EGLint name);
+ bool is_initialized() const { return is_initialized_; }
+ bool Initialize();
// Config routines.
- EGLBoolean GetConfigAttrib(ThreadState* ts,
- EGLConfig cfg,
- EGLint attribute,
- EGLint* value);
- EGLBoolean ChooseConfig(ThreadState* ts,
- const EGLint* attrib_list,
- EGLConfig* configs,
- EGLint config_size,
- EGLint* num_config);
- EGLBoolean GetConfigs(ThreadState*,
- EGLConfig*,
- EGLint config_size,
- EGLint* num_config);
+ bool IsValidConfig(EGLConfig config);
+ bool ChooseConfigs(
+ EGLConfig* configs, EGLint config_size, EGLint* num_config);
+ bool GetConfigs(EGLConfig* configs, EGLint config_size, EGLint* num_config);
+ bool GetConfigAttrib(EGLConfig config, EGLint attribute, EGLint* value);
// Surface routines.
- static bool IsValidNativeWindow(EGLNativeWindowType);
- EGLSurface CreatePbufferSurface(ThreadState*,
- EGLConfig,
- const EGLint* attrib_list);
- EGLSurface CreateWindowSurface(ThreadState*,
- EGLConfig,
+ bool IsValidNativeWindow(EGLNativeWindowType win);
+ bool IsValidSurface(EGLSurface surface);
+ EGLSurface CreateWindowSurface(EGLConfig config,
EGLNativeWindowType win,
const EGLint* attrib_list);
- EGLBoolean DestroySurface(ThreadState*, EGLSurface);
- EGLBoolean SwapBuffers(ThreadState*, EGLSurface);
+ void DestroySurface(EGLSurface surface);
+ void SwapBuffers(EGLSurface surface);
// Context routines.
- EGLContext CreateContext(ThreadState*,
- EGLConfig,
- EGLSurface share_ctx,
+ bool IsValidContext(EGLContext ctx);
+ EGLContext CreateContext(EGLConfig config,
+ EGLContext share_ctx,
const EGLint* attrib_list);
- EGLBoolean DestroyContext(ThreadState*, EGLContext);
-
- EGLBoolean ReleaseCurrent(ThreadState*);
- EGLBoolean MakeCurrent(ThreadState*, EGLSurface, EGLSurface, EGLContext);
-
- uint64_t GenerateFenceSyncRelease();
- bool IsFenceSyncRelease(uint64_t release);
- bool IsFenceSyncFlushed(uint64_t release);
- bool IsFenceSyncFlushReceived(uint64_t release);
+ void DestroyContext(EGLContext ctx);
+ bool MakeCurrent(EGLSurface draw, EGLSurface read, EGLContext ctx);
+
+ // GpuControl implementation.
+ gpu::Capabilities GetCapabilities() override;
+ int32_t CreateImage(ClientBuffer buffer,
+ size_t width,
+ size_t height,
+ unsigned internalformat) override;
+ void DestroyImage(int32_t id) override;
+ int32_t CreateGpuMemoryBufferImage(size_t width,
+ size_t height,
+ unsigned internalformat,
+ unsigned usage) override;
+ void SignalQuery(uint32_t query, const base::Closure& callback) override;
+ void SetLock(base::Lock*) override;
+ bool IsGpuChannelLost() override;
+ void EnsureWorkVisible() override;
+ gpu::CommandBufferNamespace GetNamespaceID() const override;
+ gpu::CommandBufferId GetCommandBufferID() const override;
+ int32_t GetExtraCommandBufferData() const override;
+ uint64_t GenerateFenceSyncRelease() override;
+ bool IsFenceSyncRelease(uint64_t release) override;
+ bool IsFenceSyncFlushed(uint64_t release) override;
+ bool IsFenceSyncFlushReceived(uint64_t release) override;
+ void SignalSyncToken(const gpu::SyncToken& sync_token,
+ const base::Closure& callback) override;
+ bool CanWaitUnverifiedSyncToken(const gpu::SyncToken* sync_token) override;
private:
- void InitializeConfigsIfNeeded();
- const Config* GetConfig(EGLConfig);
- Surface* GetSurface(EGLSurface);
- Context* GetContext(EGLContext);
+ EGLNativeDisplayType display_id_;
- base::Lock lock_;
bool is_initialized_;
+
+ bool create_offscreen_;
+ int create_offscreen_width_;
+ int create_offscreen_height_;
uint64_t next_fence_sync_release_;
- std::vector<scoped_refptr<Surface>> surfaces_;
- std::vector<scoped_refptr<Context>> contexts_;
- scoped_ptr<Config> configs_[2];
+
+ scoped_refptr<gpu::TransferBufferManagerInterface> transfer_buffer_manager_;
+ scoped_ptr<gpu::CommandBufferService> command_buffer_;
+ scoped_ptr<gpu::GpuScheduler> gpu_scheduler_;
+ scoped_ptr<gpu::gles2::GLES2Decoder> decoder_;
+ scoped_refptr<gfx::GLContext> gl_context_;
+ scoped_refptr<gfx::GLSurface> gl_surface_;
+ scoped_ptr<gpu::gles2::GLES2CmdHelper> gles2_cmd_helper_;
+ scoped_ptr<gpu::TransferBuffer> transfer_buffer_;
+
+ // TODO(alokp): Support more than one config, surface, and context.
+ scoped_ptr<Config> config_;
+ scoped_ptr<Surface> surface_;
+ scoped_ptr<gpu::gles2::GLES2Implementation> context_;
DISALLOW_COPY_AND_ASSIGN(Display);
};