diff options
Diffstat (limited to 'gpu/gles2_conform_support/egl/display.h')
-rw-r--r-- | gpu/gles2_conform_support/egl/display.h | 147 |
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); }; |