diff options
author | jbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-26 21:09:27 +0000 |
---|---|---|
committer | jbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-26 21:09:27 +0000 |
commit | 5763796867cd36dc07dbba82e38c61a5879a0c77 (patch) | |
tree | e7ce1e2150db516a842e278f013b1ebc7585d7e3 /ppapi | |
parent | ffbec69cf826b6c5e88f2f29500c2f6f277130b9 (diff) | |
download | chromium_src-5763796867cd36dc07dbba82e38c61a5879a0c77.zip chromium_src-5763796867cd36dc07dbba82e38c61a5879a0c77.tar.gz chromium_src-5763796867cd36dc07dbba82e38c61a5879a0c77.tar.bz2 |
Add Pepper support for several GL extensions
Add support to the command buffer code generator to generate multiple pepper interfaces, and use that to generate interfaces for ANGLE_instanced_arrays, ANGLE_framebuffer_blit, ANGLE_framebuffer_multisample, CHROMIUM_enable_feature, and CHROMIUM_map_sub.
BUG=93148
TEST=
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=123696
Review URL: https://chromiumcodereview.appspot.com/9420017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@123702 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r-- | ppapi/c/dev/ppb_gles_chromium_texture_mapping_dev.h | 3 | ||||
-rw-r--r-- | ppapi/c/dev/ppb_opengles2ext_dev.h | 82 | ||||
-rw-r--r-- | ppapi/lib/gl/gles2/gl2ext_ppapi.c | 58 | ||||
-rw-r--r-- | ppapi/lib/gl/gles2/gl2ext_ppapi.h | 13 | ||||
-rw-r--r-- | ppapi/lib/gl/gles2/gles2.c | 94 | ||||
-rw-r--r-- | ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc | 6 | ||||
-rw-r--r-- | ppapi/native_client/src/shared/ppapi_proxy/plugin_opengles.cc | 101 | ||||
-rw-r--r-- | ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc | 17 | ||||
-rw-r--r-- | ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_3d.h | 11 | ||||
-rw-r--r-- | ppapi/proxy/interface_list.cc | 11 | ||||
-rw-r--r-- | ppapi/shared_impl/ppb_opengles2_shared.cc | 396 | ||||
-rw-r--r-- | ppapi/shared_impl/ppb_opengles2_shared.h | 10 |
12 files changed, 649 insertions, 153 deletions
diff --git a/ppapi/c/dev/ppb_gles_chromium_texture_mapping_dev.h b/ppapi/c/dev/ppb_gles_chromium_texture_mapping_dev.h index 8ad0093..e07e870 100644 --- a/ppapi/c/dev/ppb_gles_chromium_texture_mapping_dev.h +++ b/ppapi/c/dev/ppb_gles_chromium_texture_mapping_dev.h @@ -13,6 +13,9 @@ #define PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_INTERFACE \ PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_INTERFACE_0_1 +// This interface is deprecated. Please use +// PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE_1_0 instead. + struct PPB_GLESChromiumTextureMapping_Dev_0_1 { // Maps the sub-image of a texture. 'level', 'xoffset', 'yoffset', 'width', // 'height', 'format' and 'type' correspond to the similarly named parameters diff --git a/ppapi/c/dev/ppb_opengles2ext_dev.h b/ppapi/c/dev/ppb_opengles2ext_dev.h new file mode 100644 index 0000000..2aa172f --- /dev/null +++ b/ppapi/c/dev/ppb_opengles2ext_dev.h @@ -0,0 +1,82 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file is auto-generated from +// gpu/command_buffer/build_gles2_cmd_buffer.py +// DO NOT EDIT! + +// OpenGL ES interface. +#ifndef C_DEV_PPB_OPENGLES2EXT_DEV_H_ +#define C_DEV_PPB_OPENGLES2EXT_DEV_H_ + +#include "ppapi/c/pp_resource.h" +#include "ppapi/c/ppb_opengles2.h" + +#define PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE_1_0 \ + "PPB_OpenGLES2InstancedArrays(Dev);1.0" +#define PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE \ + PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE_1_0 + +struct PPB_OpenGLES2InstancedArrays_Dev { + void (*DrawArraysInstancedANGLE)( + PP_Resource context, GLenum mode, GLint first, GLsizei count, + GLsizei primcount); + void (*DrawElementsInstancedANGLE)( + PP_Resource context, GLenum mode, GLsizei count, GLenum type, + const void* indices, GLsizei primcount); + void (*VertexAttribDivisorANGLE)( + PP_Resource context, GLuint index, GLuint divisor); +}; + +#define PPB_OPENGLES2_FRAMEBUFFERBLIT_DEV_INTERFACE_1_0 \ + "PPB_OpenGLES2FramebufferBlit(Dev);1.0" +#define PPB_OPENGLES2_FRAMEBUFFERBLIT_DEV_INTERFACE \ + PPB_OPENGLES2_FRAMEBUFFERBLIT_DEV_INTERFACE_1_0 + +struct PPB_OpenGLES2FramebufferBlit_Dev { + void (*BlitFramebufferEXT)( + PP_Resource context, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, + GLenum filter); +}; + +#define PPB_OPENGLES2_FRAMEBUFFERMULTISAMPLE_DEV_INTERFACE_1_0 \ + "PPB_OpenGLES2FramebufferMultisample(Dev);1.0" +#define PPB_OPENGLES2_FRAMEBUFFERMULTISAMPLE_DEV_INTERFACE \ + PPB_OPENGLES2_FRAMEBUFFERMULTISAMPLE_DEV_INTERFACE_1_0 + +struct PPB_OpenGLES2FramebufferMultisample_Dev { + void (*RenderbufferStorageMultisampleEXT)( + PP_Resource context, GLenum target, GLsizei samples, + GLenum internalformat, GLsizei width, GLsizei height); +}; + +#define PPB_OPENGLES2_CHROMIUMENABLEFEATURE_DEV_INTERFACE_1_0 \ + "PPB_OpenGLES2ChromiumEnableFeature(Dev);1.0" +#define PPB_OPENGLES2_CHROMIUMENABLEFEATURE_DEV_INTERFACE \ + PPB_OPENGLES2_CHROMIUMENABLEFEATURE_DEV_INTERFACE_1_0 + +struct PPB_OpenGLES2ChromiumEnableFeature_Dev { + GLboolean (*EnableFeatureCHROMIUM)(PP_Resource context, const char* feature); +}; + +#define PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE_1_0 \ + "PPB_OpenGLES2ChromiumMapSub(Dev);1.0" +#define PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE \ + PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE_1_0 + +struct PPB_OpenGLES2ChromiumMapSub_Dev { + void* (*MapBufferSubDataCHROMIUM)( + PP_Resource context, GLuint target, GLintptr offset, GLsizeiptr size, + GLenum access); + void (*UnmapBufferSubDataCHROMIUM)(PP_Resource context, const void* mem); + void* (*MapTexSubImage2DCHROMIUM)( + PP_Resource context, GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, + GLenum access); + void (*UnmapTexSubImage2DCHROMIUM)(PP_Resource context, const void* mem); +}; + +#endif // C_DEV_PPB_OPENGLES2EXT_DEV_H_ + diff --git a/ppapi/lib/gl/gles2/gl2ext_ppapi.c b/ppapi/lib/gl/gles2/gl2ext_ppapi.c index 62d842d..6bdc09d 100644 --- a/ppapi/lib/gl/gles2/gl2ext_ppapi.c +++ b/ppapi/lib/gl/gles2/gl2ext_ppapi.c @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -26,6 +26,16 @@ // TODO(alokp): This will need to be thread-safe if we build gles2 as a // shared library. static const struct PPB_OpenGLES2* g_gles2_interface = NULL; +static const struct PPB_OpenGLES2InstancedArrays_Dev* + g_gles2_instanced_arrays_interface = NULL; +static const struct PPB_OpenGLES2FramebufferBlit_Dev* + g_gles2_framebuffer_blit_interface = NULL; +static const struct PPB_OpenGLES2FramebufferMultisample_Dev* + g_gles2_framebuffer_multisample_interface = NULL; +static const struct PPB_OpenGLES2ChromiumEnableFeature_Dev* + g_gles2_chromium_enable_feature_interface = NULL; +static const struct PPB_OpenGLES2ChromiumMapSub_Dev* + g_gles2_chromium_map_sub_interface = NULL; // TODO(alokp): Make sure PP_TLS works on all supported platforms. static PP_TLS PP_Resource g_current_context = 0; @@ -35,6 +45,28 @@ GLboolean GL_APIENTRY glInitializePPAPI( if (!g_gles2_interface) { g_gles2_interface = get_browser_interface(PPB_OPENGLES2_INTERFACE); } + if (!g_gles2_instanced_arrays_interface) { + g_gles2_instanced_arrays_interface = + get_browser_interface(PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE); + } + if (!g_gles2_framebuffer_blit_interface) { + g_gles2_framebuffer_blit_interface = + get_browser_interface(PPB_OPENGLES2_FRAMEBUFFERBLIT_DEV_INTERFACE); + } + if (!g_gles2_framebuffer_multisample_interface) { + g_gles2_framebuffer_multisample_interface = + get_browser_interface( + PPB_OPENGLES2_FRAMEBUFFERMULTISAMPLE_DEV_INTERFACE); + } + if (!g_gles2_chromium_enable_feature_interface) { + g_gles2_chromium_enable_feature_interface = + get_browser_interface( + PPB_OPENGLES2_CHROMIUMENABLEFEATURE_DEV_INTERFACE); + } + if (!g_gles2_chromium_map_sub_interface) { + g_gles2_chromium_map_sub_interface = + get_browser_interface(PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE); + } return g_gles2_interface ? GL_TRUE : GL_FALSE; } @@ -55,3 +87,27 @@ const struct PPB_OpenGLES2* GL_APIENTRY glGetInterfacePPAPI() { return g_gles2_interface; } +const struct PPB_OpenGLES2InstancedArrays_Dev* GL_APIENTRY + glGetInstancedArraysInterfacePPAPI() { + return g_gles2_instanced_arrays_interface; +} + +const struct PPB_OpenGLES2FramebufferBlit_Dev* GL_APIENTRY + glGetFramebufferBlitInterfacePPAPI() { + return g_gles2_framebuffer_blit_interface; +} + +const struct PPB_OpenGLES2FramebufferMultisample_Dev* GL_APIENTRY + glGetFramebufferMultisampleInterfacePPAPI() { + return g_gles2_framebuffer_multisample_interface; +} + +const struct PPB_OpenGLES2ChromiumEnableFeature_Dev* GL_APIENTRY + glGetChromiumEnableFeatureInterfacePPAPI() { + return g_gles2_chromium_enable_feature_interface; +} + +const struct PPB_OpenGLES2ChromiumMapSub_Dev* GL_APIENTRY + glGetChromiumMapSubInterfacePPAPI() { + return g_gles2_chromium_map_sub_interface; +} diff --git a/ppapi/lib/gl/gles2/gl2ext_ppapi.h b/ppapi/lib/gl/gles2/gl2ext_ppapi.h index fcfabd8..d33814e 100644 --- a/ppapi/lib/gl/gles2/gl2ext_ppapi.h +++ b/ppapi/lib/gl/gles2/gl2ext_ppapi.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -12,6 +12,7 @@ #include "ppapi/c/pp_resource.h" #include "ppapi/c/ppb.h" #include "ppapi/c/ppb_opengles2.h" +#include "ppapi/c/dev/ppb_opengles2ext_dev.h" #ifdef __cplusplus extern "C" { @@ -36,6 +37,16 @@ GL_APICALL PP_Resource GL_APIENTRY glGetCurrentContextPPAPI(); // Returns OpenGL ES 2.0 interface. GL_APICALL const struct PPB_OpenGLES2* GL_APIENTRY glGetInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2InstancedArrays_Dev* GL_APIENTRY + glGetInstancedArraysInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2FramebufferBlit_Dev* GL_APIENTRY + glGetFramebufferBlitInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2FramebufferMultisample_Dev* GL_APIENTRY + glGetFramebufferMultisampleInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2ChromiumEnableFeature_Dev* GL_APIENTRY + glGetChromiumEnableFeatureInterfacePPAPI(); +GL_APICALL const struct PPB_OpenGLES2ChromiumMapSub_Dev* GL_APIENTRY + glGetChromiumMapSubInterfacePPAPI(); #ifdef __cplusplus } diff --git a/ppapi/lib/gl/gles2/gles2.c b/ppapi/lib/gl/gles2/gles2.c index 8dba474..f0ae66f 100644 --- a/ppapi/lib/gl/gles2/gles2.c +++ b/ppapi/lib/gl/gles2/gles2.c @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -753,3 +753,95 @@ void GL_APIENTRY glViewport(GLint x, GLint y, GLsizei width, GLsizei height) { glGetCurrentContextPPAPI(), x, y, width, height); } +void GL_APIENTRY glBlitFramebufferEXT( + GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, + GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) { + const struct PPB_OpenGLES2FramebufferBlit_Dev* ext = + glGetFramebufferBlitInterfacePPAPI(); + if (ext) + ext->BlitFramebufferEXT( + glGetCurrentContextPPAPI(), srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, + dstX1, dstY1, mask, filter); +} + +void GL_APIENTRY glRenderbufferStorageMultisampleEXT( + GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, + GLsizei height) { + const struct PPB_OpenGLES2FramebufferMultisample_Dev* ext = + glGetFramebufferMultisampleInterfacePPAPI(); + if (ext) + ext->RenderbufferStorageMultisampleEXT( + glGetCurrentContextPPAPI(), target, samples, internalformat, width, + height); +} + +GLboolean GL_APIENTRY glEnableFeatureCHROMIUM(const char* feature) { + const struct PPB_OpenGLES2ChromiumEnableFeature_Dev* ext = + glGetChromiumEnableFeatureInterfacePPAPI(); + if (ext) + return ext->EnableFeatureCHROMIUM(glGetCurrentContextPPAPI(), feature); + return 0; +} + +void* GL_APIENTRY glMapBufferSubDataCHROMIUM( + GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) { + const struct PPB_OpenGLES2ChromiumMapSub_Dev* ext = + glGetChromiumMapSubInterfacePPAPI(); + if (ext) + return ext->MapBufferSubDataCHROMIUM( + glGetCurrentContextPPAPI(), target, offset, size, access); + return 0; +} + +void GL_APIENTRY glUnmapBufferSubDataCHROMIUM(const void* mem) { + const struct PPB_OpenGLES2ChromiumMapSub_Dev* ext = + glGetChromiumMapSubInterfacePPAPI(); + if (ext) + ext->UnmapBufferSubDataCHROMIUM(glGetCurrentContextPPAPI(), mem); +} + +void* GL_APIENTRY glMapTexSubImage2DCHROMIUM( + GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLenum type, GLenum access) { + const struct PPB_OpenGLES2ChromiumMapSub_Dev* ext = + glGetChromiumMapSubInterfacePPAPI(); + if (ext) + return ext->MapTexSubImage2DCHROMIUM( + glGetCurrentContextPPAPI(), target, level, xoffset, yoffset, width, + height, format, type, access); + return 0; +} + +void GL_APIENTRY glUnmapTexSubImage2DCHROMIUM(const void* mem) { + const struct PPB_OpenGLES2ChromiumMapSub_Dev* ext = + glGetChromiumMapSubInterfacePPAPI(); + if (ext) + ext->UnmapTexSubImage2DCHROMIUM(glGetCurrentContextPPAPI(), mem); +} + +void GL_APIENTRY glDrawArraysInstancedANGLE( + GLenum mode, GLint first, GLsizei count, GLsizei primcount) { + const struct PPB_OpenGLES2InstancedArrays_Dev* ext = + glGetInstancedArraysInterfacePPAPI(); + if (ext) + ext->DrawArraysInstancedANGLE( + glGetCurrentContextPPAPI(), mode, first, count, primcount); +} + +void GL_APIENTRY glDrawElementsInstancedANGLE( + GLenum mode, GLsizei count, GLenum type, const void* indices, + GLsizei primcount) { + const struct PPB_OpenGLES2InstancedArrays_Dev* ext = + glGetInstancedArraysInterfacePPAPI(); + if (ext) + ext->DrawElementsInstancedANGLE( + glGetCurrentContextPPAPI(), mode, count, type, indices, primcount); +} + +void GL_APIENTRY glVertexAttribDivisorANGLE(GLuint index, GLuint divisor) { + const struct PPB_OpenGLES2InstancedArrays_Dev* ext = + glGetInstancedArraysInterfacePPAPI(); + if (ext) + ext->VertexAttribDivisorANGLE(glGetCurrentContextPPAPI(), index, divisor); +} + diff --git a/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc b/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc index 9eb4215bd..d5ede41 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/browser_globals.cc @@ -19,6 +19,7 @@ #include "native_client/src/trusted/plugin/plugin.h" #include "ppapi/c/dev/ppb_gles_chromium_texture_mapping_dev.h" #include "ppapi/c/dev/ppb_layer_compositor_dev.h" +#include "ppapi/c/dev/ppb_opengles2ext_dev.h" #include "ppapi/c/ppb_graphics_3d.h" #include "ppapi/c/ppb_opengles2.h" #include "ppapi/c/trusted/ppb_graphics_3d_trusted.h" @@ -188,6 +189,11 @@ const void* GetBrowserInterface(const char* interface_name) { PPB_GRAPHICS_3D_TRUSTED_INTERFACE, PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_INTERFACE, PPB_OPENGLES2_INTERFACE, + PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE, + PPB_OPENGLES2_FRAMEBUFFERBLIT_DEV_INTERFACE, + PPB_OPENGLES2_FRAMEBUFFERMULTISAMPLE_DEV_INTERFACE, + PPB_OPENGLES2_CHROMIUMENABLEFEATURE_DEV_INTERFACE, + PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE, PPB_LAYER_COMPOSITOR_DEV_INTERFACE }; for (size_t i = 0; i < NACL_ARRAY_SIZE(disabled_interface_names); i++) { diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_opengles.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_opengles.cc index 9d47004..0a61662 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_opengles.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_opengles.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -629,6 +629,65 @@ void Viewport( PP_Resource context, GLint x, GLint y, GLsizei width, GLsizei height) { PluginGraphics3D::implFromResource(context)->Viewport(x, y, width, height); } +void BlitFramebufferEXT( + PP_Resource context, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, + GLenum filter) { + PluginGraphics3D::implFromResource( + context)->BlitFramebufferEXT( + srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, + filter); +} +void RenderbufferStorageMultisampleEXT( + PP_Resource context, GLenum target, GLsizei samples, GLenum internalformat, + GLsizei width, GLsizei height) { + PluginGraphics3D::implFromResource( + context)->RenderbufferStorageMultisampleEXT( + target, samples, internalformat, width, height); +} +GLboolean EnableFeatureCHROMIUM(PP_Resource context, const char* feature) { + return PluginGraphics3D::implFromResource( + context)->EnableFeatureCHROMIUM(feature); +} +void* MapBufferSubDataCHROMIUM( + PP_Resource context, GLuint target, GLintptr offset, GLsizeiptr size, + GLenum access) { + return PluginGraphics3D::implFromResource( + context)->MapBufferSubDataCHROMIUM(target, offset, size, access); +} +void UnmapBufferSubDataCHROMIUM(PP_Resource context, const void* mem) { + PluginGraphics3D::implFromResource(context)->UnmapBufferSubDataCHROMIUM(mem); +} +void* MapTexSubImage2DCHROMIUM( + PP_Resource context, GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, + GLenum access) { + return PluginGraphics3D::implFromResource( + context)->MapTexSubImage2DCHROMIUM( + target, level, xoffset, yoffset, width, height, format, type, + access); +} +void UnmapTexSubImage2DCHROMIUM(PP_Resource context, const void* mem) { + PluginGraphics3D::implFromResource(context)->UnmapTexSubImage2DCHROMIUM(mem); +} +void DrawArraysInstancedANGLE( + PP_Resource context, GLenum mode, GLint first, GLsizei count, + GLsizei primcount) { + PluginGraphics3D::implFromResource( + context)->DrawArraysInstancedANGLE(mode, first, count, primcount); +} +void DrawElementsInstancedANGLE( + PP_Resource context, GLenum mode, GLsizei count, GLenum type, + const void* indices, GLsizei primcount) { + PluginGraphics3D::implFromResource( + context)->DrawElementsInstancedANGLE( + mode, count, type, indices, primcount); +} +void VertexAttribDivisorANGLE( + PP_Resource context, GLuint index, GLuint divisor) { + PluginGraphics3D::implFromResource( + context)->VertexAttribDivisorANGLE(index, divisor); +} } // namespace @@ -779,3 +838,43 @@ const PPB_OpenGLES2* PluginGraphics3D::GetOpenGLESInterface() { }; return &ppb_opengles; } +const PPB_OpenGLES2InstancedArrays_Dev* + PluginGraphics3D::GetOpenGLESInstancedArraysInterface() { + const static struct PPB_OpenGLES2InstancedArrays_Dev ppb_opengles = { + &DrawArraysInstancedANGLE, + &DrawElementsInstancedANGLE, + &VertexAttribDivisorANGLE + }; + return &ppb_opengles; +} +const PPB_OpenGLES2FramebufferBlit_Dev* + PluginGraphics3D::GetOpenGLESFramebufferBlitInterface() { + const static struct PPB_OpenGLES2FramebufferBlit_Dev ppb_opengles = { + &BlitFramebufferEXT + }; + return &ppb_opengles; +} +const PPB_OpenGLES2FramebufferMultisample_Dev* + PluginGraphics3D::GetOpenGLESFramebufferMultisampleInterface() { + const static struct PPB_OpenGLES2FramebufferMultisample_Dev ppb_opengles = { + &RenderbufferStorageMultisampleEXT + }; + return &ppb_opengles; +} +const PPB_OpenGLES2ChromiumEnableFeature_Dev* + PluginGraphics3D::GetOpenGLESChromiumEnableFeatureInterface() { + const static struct PPB_OpenGLES2ChromiumEnableFeature_Dev ppb_opengles = { + &EnableFeatureCHROMIUM + }; + return &ppb_opengles; +} +const PPB_OpenGLES2ChromiumMapSub_Dev* + PluginGraphics3D::GetOpenGLESChromiumMapSubInterface() { + const static struct PPB_OpenGLES2ChromiumMapSub_Dev ppb_opengles = { + &MapBufferSubDataCHROMIUM, + &UnmapBufferSubDataCHROMIUM, + &MapTexSubImage2DCHROMIUM, + &UnmapTexSubImage2DCHROMIUM + }; + return &ppb_opengles; +} diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc index fb3cb04..3e9132a 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb.cc @@ -90,7 +90,22 @@ InterfaceMapElement interface_map[] = { PluginNetAddressPrivate::GetInterface0_1(), true }, { PPB_NETADDRESS_PRIVATE_INTERFACE_1_0, PluginNetAddressPrivate::GetInterface1_0(), true }, - { PPB_OPENGLES2_INTERFACE, PluginGraphics3D::GetOpenGLESInterface(), + { PPB_OPENGLES2_INTERFACE_1_0, PluginGraphics3D::GetOpenGLESInterface(), + true }, + { PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE_1_0, + PluginGraphics3D::GetOpenGLESInstancedArraysInterface(), + true }, + { PPB_OPENGLES2_FRAMEBUFFERBLIT_DEV_INTERFACE_1_0, + PluginGraphics3D::GetOpenGLESFramebufferBlitInterface(), + true }, + { PPB_OPENGLES2_FRAMEBUFFERMULTISAMPLE_DEV_INTERFACE_1_0, + PluginGraphics3D::GetOpenGLESFramebufferMultisampleInterface(), + true }, + { PPB_OPENGLES2_CHROMIUMENABLEFEATURE_DEV_INTERFACE_1_0, + PluginGraphics3D::GetOpenGLESChromiumEnableFeatureInterface(), + true }, + { PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE_1_0, + PluginGraphics3D::GetOpenGLESChromiumMapSubInterface(), true }, { PPB_PDF_INTERFACE, PluginPDF::GetInterface(), true }, { PPB_SCROLLBAR_DEV_INTERFACE, PluginScrollbar::GetInterface(), true }, diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_3d.h b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_3d.h index 84af986..a071e4b 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_3d.h +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_graphics_3d.h @@ -11,6 +11,7 @@ #include "ppapi/c/pp_graphics_3d.h" #include "ppapi/c/ppb_graphics_3d.h" #include "ppapi/c/ppb_opengles2.h" +#include "ppapi/c/dev/ppb_opengles2ext_dev.h" #include "ppapi/c/pp_instance.h" namespace gpu { @@ -32,6 +33,16 @@ class PluginGraphics3D : public PluginResource { static const PPB_Graphics3D* GetInterface(); static const PPB_OpenGLES2* GetOpenGLESInterface(); + static const PPB_OpenGLES2InstancedArrays_Dev* + GetOpenGLESInstancedArraysInterface(); + static const PPB_OpenGLES2FramebufferBlit_Dev* + GetOpenGLESFramebufferBlitInterface(); + static const PPB_OpenGLES2FramebufferMultisample_Dev* + GetOpenGLESFramebufferMultisampleInterface(); + static const PPB_OpenGLES2ChromiumEnableFeature_Dev* + GetOpenGLESChromiumEnableFeatureInterface(); + static const PPB_OpenGLES2ChromiumMapSub_Dev* + GetOpenGLESChromiumMapSubInterface(); virtual bool InitFromBrowserResource(PP_Resource graphics3d_id); diff --git a/ppapi/proxy/interface_list.cc b/ppapi/proxy/interface_list.cc index 9bf73c2..f5b97f3 100644 --- a/ppapi/proxy/interface_list.cc +++ b/ppapi/proxy/interface_list.cc @@ -19,6 +19,7 @@ #include "ppapi/c/dev/ppb_keyboard_input_event_dev.h" #include "ppapi/c/dev/ppb_memory_dev.h" #include "ppapi/c/dev/ppb_message_loop_dev.h" +#include "ppapi/c/dev/ppb_opengles2ext_dev.h" #include "ppapi/c/dev/ppb_resource_array_dev.h" #include "ppapi/c/dev/ppb_testing_dev.h" #include "ppapi/c/dev/ppb_text_input_dev.h" @@ -180,6 +181,16 @@ InterfaceList::InterfaceList() { PPB_MessageLoop_Proxy::GetInterface()); AddPPB(PPB_OPENGLES2_INTERFACE_1_0, API_ID_NONE, PPB_OpenGLES2_Shared::GetInterface()); + AddPPB(PPB_OPENGLES2_INSTANCEDARRAYS_DEV_INTERFACE_1_0, API_ID_NONE, + PPB_OpenGLES2_Shared::GetInstancedArraysInterface()); + AddPPB(PPB_OPENGLES2_FRAMEBUFFERBLIT_DEV_INTERFACE_1_0, API_ID_NONE, + PPB_OpenGLES2_Shared::GetFramebufferBlitInterface()); + AddPPB(PPB_OPENGLES2_FRAMEBUFFERMULTISAMPLE_DEV_INTERFACE_1_0, API_ID_NONE, + PPB_OpenGLES2_Shared::GetFramebufferMultisampleInterface()); + AddPPB(PPB_OPENGLES2_CHROMIUMENABLEFEATURE_DEV_INTERFACE_1_0, API_ID_NONE, + PPB_OpenGLES2_Shared::GetChromiumEnableFeatureInterface()); + AddPPB(PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE_1_0, API_ID_NONE, + PPB_OpenGLES2_Shared::GetChromiumMapSubInterface()); AddPPB(PPB_VAR_ARRAY_BUFFER_INTERFACE_1_0, API_ID_NONE, PPB_Var_Shared::GetVarArrayBufferInterface1_0()); AddPPB(PPB_VAR_INTERFACE_1_1, API_ID_NONE, diff --git a/ppapi/shared_impl/ppb_opengles2_shared.cc b/ppapi/shared_impl/ppb_opengles2_shared.cc index 635ea41..52a297f 100644 --- a/ppapi/shared_impl/ppb_opengles2_shared.cc +++ b/ppapi/shared_impl/ppb_opengles2_shared.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -743,156 +743,258 @@ void Viewport( GetGLES(context_id)->Viewport(x, y, width, height); } +void BlitFramebufferEXT( + PP_Resource context_id, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, + GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, + GLenum filter) { + GetGLES( + context_id)->BlitFramebufferEXT( + srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, + filter); +} -const struct PPB_OpenGLES2 ppb_opengles2 = { - &ActiveTexture, - &AttachShader, - &BindAttribLocation, - &BindBuffer, - &BindFramebuffer, - &BindRenderbuffer, - &BindTexture, - &BlendColor, - &BlendEquation, - &BlendEquationSeparate, - &BlendFunc, - &BlendFuncSeparate, - &BufferData, - &BufferSubData, - &CheckFramebufferStatus, - &Clear, - &ClearColor, - &ClearDepthf, - &ClearStencil, - &ColorMask, - &CompileShader, - &CompressedTexImage2D, - &CompressedTexSubImage2D, - &CopyTexImage2D, - &CopyTexSubImage2D, - &CreateProgram, - &CreateShader, - &CullFace, - &DeleteBuffers, - &DeleteFramebuffers, - &DeleteProgram, - &DeleteRenderbuffers, - &DeleteShader, - &DeleteTextures, - &DepthFunc, - &DepthMask, - &DepthRangef, - &DetachShader, - &Disable, - &DisableVertexAttribArray, - &DrawArrays, - &DrawElements, - &Enable, - &EnableVertexAttribArray, - &Finish, - &Flush, - &FramebufferRenderbuffer, - &FramebufferTexture2D, - &FrontFace, - &GenBuffers, - &GenerateMipmap, - &GenFramebuffers, - &GenRenderbuffers, - &GenTextures, - &GetActiveAttrib, - &GetActiveUniform, - &GetAttachedShaders, - &GetAttribLocation, - &GetBooleanv, - &GetBufferParameteriv, - &GetError, - &GetFloatv, - &GetFramebufferAttachmentParameteriv, - &GetIntegerv, - &GetProgramiv, - &GetProgramInfoLog, - &GetRenderbufferParameteriv, - &GetShaderiv, - &GetShaderInfoLog, - &GetShaderPrecisionFormat, - &GetShaderSource, - &GetString, - &GetTexParameterfv, - &GetTexParameteriv, - &GetUniformfv, - &GetUniformiv, - &GetUniformLocation, - &GetVertexAttribfv, - &GetVertexAttribiv, - &GetVertexAttribPointerv, - &Hint, - &IsBuffer, - &IsEnabled, - &IsFramebuffer, - &IsProgram, - &IsRenderbuffer, - &IsShader, - &IsTexture, - &LineWidth, - &LinkProgram, - &PixelStorei, - &PolygonOffset, - &ReadPixels, - &ReleaseShaderCompiler, - &RenderbufferStorage, - &SampleCoverage, - &Scissor, - &ShaderBinary, - &ShaderSource, - &StencilFunc, - &StencilFuncSeparate, - &StencilMask, - &StencilMaskSeparate, - &StencilOp, - &StencilOpSeparate, - &TexImage2D, - &TexParameterf, - &TexParameterfv, - &TexParameteri, - &TexParameteriv, - &TexSubImage2D, - &Uniform1f, - &Uniform1fv, - &Uniform1i, - &Uniform1iv, - &Uniform2f, - &Uniform2fv, - &Uniform2i, - &Uniform2iv, - &Uniform3f, - &Uniform3fv, - &Uniform3i, - &Uniform3iv, - &Uniform4f, - &Uniform4fv, - &Uniform4i, - &Uniform4iv, - &UniformMatrix2fv, - &UniformMatrix3fv, - &UniformMatrix4fv, - &UseProgram, - &ValidateProgram, - &VertexAttrib1f, - &VertexAttrib1fv, - &VertexAttrib2f, - &VertexAttrib2fv, - &VertexAttrib3f, - &VertexAttrib3fv, - &VertexAttrib4f, - &VertexAttrib4fv, - &VertexAttribPointer, - &Viewport -}; +void RenderbufferStorageMultisampleEXT( + PP_Resource context_id, GLenum target, GLsizei samples, + GLenum internalformat, GLsizei width, GLsizei height) { + GetGLES( + context_id)->RenderbufferStorageMultisampleEXT( + target, samples, internalformat, width, height); +} -} // namespace +GLboolean EnableFeatureCHROMIUM(PP_Resource context_id, const char* feature) { + return GetGLES(context_id)->EnableFeatureCHROMIUM(feature); +} + +void* MapBufferSubDataCHROMIUM( + PP_Resource context_id, GLuint target, GLintptr offset, GLsizeiptr size, + GLenum access) { + return GetGLES( + context_id)->MapBufferSubDataCHROMIUM(target, offset, size, access); +} + +void UnmapBufferSubDataCHROMIUM(PP_Resource context_id, const void* mem) { + GetGLES(context_id)->UnmapBufferSubDataCHROMIUM(mem); +} + +void* MapTexSubImage2DCHROMIUM( + PP_Resource context_id, GLenum target, GLint level, GLint xoffset, + GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, + GLenum access) { + return GetGLES( + context_id)->MapTexSubImage2DCHROMIUM( + target, level, xoffset, yoffset, width, height, format, type, + access); +} + +void UnmapTexSubImage2DCHROMIUM(PP_Resource context_id, const void* mem) { + GetGLES(context_id)->UnmapTexSubImage2DCHROMIUM(mem); +} + +void DrawArraysInstancedANGLE( + PP_Resource context_id, GLenum mode, GLint first, GLsizei count, + GLsizei primcount) { + GetGLES(context_id)->DrawArraysInstancedANGLE(mode, first, count, primcount); +} +void DrawElementsInstancedANGLE( + PP_Resource context_id, GLenum mode, GLsizei count, GLenum type, + const void* indices, GLsizei primcount) { + GetGLES( + context_id)->DrawElementsInstancedANGLE( + mode, count, type, indices, primcount); +} + +void VertexAttribDivisorANGLE( + PP_Resource context_id, GLuint index, GLuint divisor) { + GetGLES(context_id)->VertexAttribDivisorANGLE(index, divisor); +} + +} // namespace const PPB_OpenGLES2* PPB_OpenGLES2_Shared::GetInterface() { + static const struct PPB_OpenGLES2 ppb_opengles2 = { + &ActiveTexture, + &AttachShader, + &BindAttribLocation, + &BindBuffer, + &BindFramebuffer, + &BindRenderbuffer, + &BindTexture, + &BlendColor, + &BlendEquation, + &BlendEquationSeparate, + &BlendFunc, + &BlendFuncSeparate, + &BufferData, + &BufferSubData, + &CheckFramebufferStatus, + &Clear, + &ClearColor, + &ClearDepthf, + &ClearStencil, + &ColorMask, + &CompileShader, + &CompressedTexImage2D, + &CompressedTexSubImage2D, + &CopyTexImage2D, + &CopyTexSubImage2D, + &CreateProgram, + &CreateShader, + &CullFace, + &DeleteBuffers, + &DeleteFramebuffers, + &DeleteProgram, + &DeleteRenderbuffers, + &DeleteShader, + &DeleteTextures, + &DepthFunc, + &DepthMask, + &DepthRangef, + &DetachShader, + &Disable, + &DisableVertexAttribArray, + &DrawArrays, + &DrawElements, + &Enable, + &EnableVertexAttribArray, + &Finish, + &Flush, + &FramebufferRenderbuffer, + &FramebufferTexture2D, + &FrontFace, + &GenBuffers, + &GenerateMipmap, + &GenFramebuffers, + &GenRenderbuffers, + &GenTextures, + &GetActiveAttrib, + &GetActiveUniform, + &GetAttachedShaders, + &GetAttribLocation, + &GetBooleanv, + &GetBufferParameteriv, + &GetError, + &GetFloatv, + &GetFramebufferAttachmentParameteriv, + &GetIntegerv, + &GetProgramiv, + &GetProgramInfoLog, + &GetRenderbufferParameteriv, + &GetShaderiv, + &GetShaderInfoLog, + &GetShaderPrecisionFormat, + &GetShaderSource, + &GetString, + &GetTexParameterfv, + &GetTexParameteriv, + &GetUniformfv, + &GetUniformiv, + &GetUniformLocation, + &GetVertexAttribfv, + &GetVertexAttribiv, + &GetVertexAttribPointerv, + &Hint, + &IsBuffer, + &IsEnabled, + &IsFramebuffer, + &IsProgram, + &IsRenderbuffer, + &IsShader, + &IsTexture, + &LineWidth, + &LinkProgram, + &PixelStorei, + &PolygonOffset, + &ReadPixels, + &ReleaseShaderCompiler, + &RenderbufferStorage, + &SampleCoverage, + &Scissor, + &ShaderBinary, + &ShaderSource, + &StencilFunc, + &StencilFuncSeparate, + &StencilMask, + &StencilMaskSeparate, + &StencilOp, + &StencilOpSeparate, + &TexImage2D, + &TexParameterf, + &TexParameterfv, + &TexParameteri, + &TexParameteriv, + &TexSubImage2D, + &Uniform1f, + &Uniform1fv, + &Uniform1i, + &Uniform1iv, + &Uniform2f, + &Uniform2fv, + &Uniform2i, + &Uniform2iv, + &Uniform3f, + &Uniform3fv, + &Uniform3i, + &Uniform3iv, + &Uniform4f, + &Uniform4fv, + &Uniform4i, + &Uniform4iv, + &UniformMatrix2fv, + &UniformMatrix3fv, + &UniformMatrix4fv, + &UseProgram, + &ValidateProgram, + &VertexAttrib1f, + &VertexAttrib1fv, + &VertexAttrib2f, + &VertexAttrib2fv, + &VertexAttrib3f, + &VertexAttrib3fv, + &VertexAttrib4f, + &VertexAttrib4fv, + &VertexAttribPointer, + &Viewport + }; + return &ppb_opengles2; +} +const PPB_OpenGLES2InstancedArrays_Dev* + PPB_OpenGLES2_Shared::GetInstancedArraysInterface() { + static const struct PPB_OpenGLES2InstancedArrays_Dev ppb_opengles2 = { + &DrawArraysInstancedANGLE, + &DrawElementsInstancedANGLE, + &VertexAttribDivisorANGLE + }; + return &ppb_opengles2; +} +const PPB_OpenGLES2FramebufferBlit_Dev* + PPB_OpenGLES2_Shared::GetFramebufferBlitInterface() { + static const struct PPB_OpenGLES2FramebufferBlit_Dev ppb_opengles2 = { + &BlitFramebufferEXT + }; + return &ppb_opengles2; +} +const PPB_OpenGLES2FramebufferMultisample_Dev* + PPB_OpenGLES2_Shared::GetFramebufferMultisampleInterface() { + static const struct PPB_OpenGLES2FramebufferMultisample_Dev ppb_opengles2 = { + &RenderbufferStorageMultisampleEXT + }; + return &ppb_opengles2; +} +const PPB_OpenGLES2ChromiumEnableFeature_Dev* + PPB_OpenGLES2_Shared::GetChromiumEnableFeatureInterface() { + static const struct PPB_OpenGLES2ChromiumEnableFeature_Dev ppb_opengles2 = { + &EnableFeatureCHROMIUM + }; + return &ppb_opengles2; +} +const PPB_OpenGLES2ChromiumMapSub_Dev* + PPB_OpenGLES2_Shared::GetChromiumMapSubInterface() { + static const struct PPB_OpenGLES2ChromiumMapSub_Dev ppb_opengles2 = { + &MapBufferSubDataCHROMIUM, + &UnmapBufferSubDataCHROMIUM, + &MapTexSubImage2DCHROMIUM, + &UnmapTexSubImage2DCHROMIUM + }; return &ppb_opengles2; } - } // namespace ppapi diff --git a/ppapi/shared_impl/ppb_opengles2_shared.h b/ppapi/shared_impl/ppb_opengles2_shared.h index 2b4c9f9..672133c 100644 --- a/ppapi/shared_impl/ppb_opengles2_shared.h +++ b/ppapi/shared_impl/ppb_opengles2_shared.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -6,6 +6,7 @@ #define PPAPI_SHARED_IMPL_PPB_OPENGLES2_SHARED_H_ #include "ppapi/c/ppb_opengles2.h" +#include "ppapi/c/dev/ppb_opengles2ext_dev.h" #include "ppapi/shared_impl/ppapi_shared_export.h" namespace ppapi { @@ -13,6 +14,13 @@ namespace ppapi { class PPAPI_SHARED_EXPORT PPB_OpenGLES2_Shared { public: static const PPB_OpenGLES2* GetInterface(); + static const PPB_OpenGLES2InstancedArrays_Dev* GetInstancedArraysInterface(); + static const PPB_OpenGLES2FramebufferBlit_Dev* GetFramebufferBlitInterface(); + static const PPB_OpenGLES2FramebufferMultisample_Dev* + GetFramebufferMultisampleInterface(); + static const PPB_OpenGLES2ChromiumEnableFeature_Dev* + GetChromiumEnableFeatureInterface(); + static const PPB_OpenGLES2ChromiumMapSub_Dev* GetChromiumMapSubInterface(); }; } // namespace ppapi |