15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef GPU_GLES2_CONFORM_SUPPORT_EGL_DISPLAY_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define GPU_GLES2_CONFORM_SUPPORT_EGL_DISPLAY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <EGL/egl.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/client/gles2_cmd_helper.h" 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "gpu/command_buffer/client/gpu_control.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/command_buffer_service.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gles2_cmd_decoder.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gpu_scheduler.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_context.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_surface.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandBufferService; 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class GpuControl; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GpuScheduler; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TransferBuffer; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TransferBufferManagerInterface; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLES2CmdHelper; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GLES2Implementation; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gles2 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gpu 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace egl { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Config; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Surface; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class Display : private gpu::GpuControl { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit Display(EGLNativeDisplayType display_id); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Display(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCreateOffscreen(int width, int height) { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) create_offscreen_ = true; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) create_offscreen_width_ = width; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) create_offscreen_height_ = height; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_initialized() const { return is_initialized_; } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool Initialize(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Config routines. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsValidConfig(EGLConfig config); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ChooseConfigs( 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EGLConfig* configs, EGLint config_size, EGLint* num_config); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetConfigs(EGLConfig* configs, EGLint config_size, EGLint* num_config); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetConfigAttrib(EGLConfig config, EGLint attribute, EGLint* value); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Surface routines. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsValidNativeWindow(EGLNativeWindowType win); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsValidSurface(EGLSurface surface); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EGLSurface CreateWindowSurface(EGLConfig config, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EGLNativeWindowType win, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EGLint* attrib_list); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DestroySurface(EGLSurface surface); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SwapBuffers(EGLSurface surface); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Context routines. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsValidContext(EGLContext ctx); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EGLContext CreateContext(EGLConfig config, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EGLContext share_ctx, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const EGLint* attrib_list); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DestroyContext(EGLContext ctx); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool MakeCurrent(EGLSurface draw, EGLSurface read, EGLContext ctx); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // GpuControl implementation. 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual gpu::Capabilities GetCapabilities() OVERRIDE; 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual gfx::GpuMemoryBuffer* CreateGpuMemoryBuffer(size_t width, 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) size_t height, 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned internalformat, 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) unsigned usage, 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int32* id) OVERRIDE; 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void DestroyGpuMemoryBuffer(int32 id) OVERRIDE; 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual uint32 InsertSyncPoint() OVERRIDE; 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual uint32 InsertFutureSyncPoint() OVERRIDE; 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void RetireSyncPoint(uint32 sync_point) OVERRIDE; 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SignalSyncPoint(uint32 sync_point, 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const base::Closure& callback) OVERRIDE; 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SignalQuery(uint32 query, 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const base::Closure& callback) OVERRIDE; 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SetSurfaceVisible(bool visible) OVERRIDE; 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void Echo(const base::Closure& callback) OVERRIDE; 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual uint32 CreateStreamTexture(uint32 texture_id) OVERRIDE; 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EGLNativeDisplayType display_id_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_initialized_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool create_offscreen_; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int create_offscreen_width_; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int create_offscreen_height_; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::TransferBufferManagerInterface> transfer_buffer_manager_; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::CommandBufferService> command_buffer_; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::GpuScheduler> gpu_scheduler_; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::gles2::GLES2Decoder> decoder_; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<gfx::GLContext> gl_context_; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<gfx::GLSurface> gl_surface_; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::gles2::GLES2CmdHelper> gles2_cmd_helper_; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::TransferBuffer> transfer_buffer_; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(alokp): Support more than one config, surface, and context. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Config> config_; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Surface> surface_; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::gles2::GLES2Implementation> context_; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Display); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace egl 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // GPU_GLES2_CONFORM_SUPPORT_EGL_DISPLAY_H_ 123