summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-06 02:11:17 +0000
committerjbauman@chromium.org <jbauman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-06 02:11:17 +0000
commit3a9ac0a9aaf69b3cfc09d5194b83bb2a2130cac9 (patch)
treea8e04fa7a2f06a5fdf997ba1a9d93c7ced95f212
parentbc23425942484265dab5e2540a9c2844851f0703 (diff)
downloadchromium_src-3a9ac0a9aaf69b3cfc09d5194b83bb2a2130cac9.zip
chromium_src-3a9ac0a9aaf69b3cfc09d5194b83bb2a2130cac9.tar.gz
chromium_src-3a9ac0a9aaf69b3cfc09d5194b83bb2a2130cac9.tar.bz2
Add new PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0 pepper interface.
This allows applications to draw to multiple render targets at the same time. BUG=318019 Review URL: https://codereview.chromium.org/182213003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@255222 0039d316-1c4b-4281-b951-d872f2087c98
-rwxr-xr-xgpu/command_buffer/build_gles2_cmd_buffer.py2
-rw-r--r--ppapi/c/dev/ppb_opengles2ext_dev.h11
-rw-r--r--ppapi/lib/gl/gles2/gl2ext_ppapi.c11
-rw-r--r--ppapi/lib/gl/gles2/gl2ext_ppapi.h2
-rw-r--r--ppapi/lib/gl/gles2/gles2.c7
-rw-r--r--ppapi/proxy/interface_list.cc6
-rw-r--r--ppapi/shared_impl/ppb_opengles2_shared.cc13
-rw-r--r--ppapi/shared_impl/ppb_opengles2_shared.h1
-rw-r--r--ppapi/thunk/interfaces_legacy.h2
-rw-r--r--tools/metrics/histograms/histograms.xml1
10 files changed, 55 insertions, 1 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 0acd6a3..caf2837 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -1182,6 +1182,7 @@ _PEPPER_INTERFACES = [
{'name': 'ChromiumEnableFeature', 'dev': False},
{'name': 'ChromiumMapSub', 'dev': False},
{'name': 'Query', 'dev': False},
+ {'name': 'DrawBuffers', 'dev': True},
]
# This table specifies types and other special data for the commands that
@@ -2289,6 +2290,7 @@ _FUNCTION_INFO = {
'client_test': False,
'unit_test': False,
'extension': True,
+ 'pepper_interface': 'DrawBuffers',
},
'DrawElementsInstancedANGLE': {
'type': 'Manual',
diff --git a/ppapi/c/dev/ppb_opengles2ext_dev.h b/ppapi/c/dev/ppb_opengles2ext_dev.h
index 56f4101..11ef1b6 100644
--- a/ppapi/c/dev/ppb_opengles2ext_dev.h
+++ b/ppapi/c/dev/ppb_opengles2ext_dev.h
@@ -15,4 +15,15 @@
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/ppb_opengles2.h"
+#define PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0 \
+ "PPB_OpenGLES2DrawBuffers(Dev);1.0"
+#define PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE \
+ PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0 // NOLINT
+
+struct PPB_OpenGLES2DrawBuffers_Dev {
+ void (*DrawBuffersEXT)(PP_Resource context,
+ GLsizei count,
+ const GLenum* bufs);
+};
+
#endif // PPAPI_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 a310114..e5872b5 100644
--- a/ppapi/lib/gl/gles2/gl2ext_ppapi.c
+++ b/ppapi/lib/gl/gles2/gl2ext_ppapi.c
@@ -38,6 +38,8 @@ static const struct PPB_OpenGLES2ChromiumMapSub*
g_gles2_chromium_map_sub_interface = NULL;
static const struct PPB_OpenGLES2Query*
g_gles2_query_interface = NULL;
+static const struct PPB_OpenGLES2DrawBuffers_Dev*
+ g_gles2_draw_buffers_interface = NULL;
// TODO(alokp): Make sure PP_TLS works on all supported platforms.
static PP_TLS PP_Resource g_current_context = 0;
@@ -73,6 +75,10 @@ GLboolean GL_APIENTRY glInitializePPAPI(
g_gles2_query_interface =
get_browser_interface(PPB_OPENGLES2_QUERY_INTERFACE);
}
+ if (!g_gles2_draw_buffers_interface) {
+ g_gles2_draw_buffers_interface =
+ get_browser_interface(PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE);
+ }
return g_gles2_interface ? GL_TRUE : GL_FALSE;
}
@@ -122,3 +128,8 @@ const struct PPB_OpenGLES2Query* GL_APIENTRY
glGetQueryInterfacePPAPI(void) {
return g_gles2_query_interface;
}
+
+const struct PPB_OpenGLES2DrawBuffers_Dev* GL_APIENTRY
+ glGetDrawBuffersInterfacePPAPI(void) {
+ return g_gles2_draw_buffers_interface;
+}
diff --git a/ppapi/lib/gl/gles2/gl2ext_ppapi.h b/ppapi/lib/gl/gles2/gl2ext_ppapi.h
index 146d914..ff593c2 100644
--- a/ppapi/lib/gl/gles2/gl2ext_ppapi.h
+++ b/ppapi/lib/gl/gles2/gl2ext_ppapi.h
@@ -49,6 +49,8 @@ GL_APICALL const struct PPB_OpenGLES2ChromiumMapSub* GL_APIENTRY
glGetChromiumMapSubInterfacePPAPI(void);
GL_APICALL const struct PPB_OpenGLES2Query* GL_APIENTRY
glGetQueryInterfacePPAPI(void);
+GL_APICALL const struct PPB_OpenGLES2DrawBuffers_Dev* GL_APIENTRY
+ glGetDrawBuffersInterfacePPAPI(void);
#ifdef __cplusplus
}
diff --git a/ppapi/lib/gl/gles2/gles2.c b/ppapi/lib/gl/gles2/gles2.c
index dabb20c..3e9732d 100644
--- a/ppapi/lib/gl/gles2/gles2.c
+++ b/ppapi/lib/gl/gles2/gles2.c
@@ -1055,3 +1055,10 @@ void GL_APIENTRY glVertexAttribDivisorANGLE(GLuint index, GLuint divisor) {
if (ext)
ext->VertexAttribDivisorANGLE(glGetCurrentContextPPAPI(), index, divisor);
}
+void GL_APIENTRY glDrawBuffersEXT(GLsizei count, const GLenum* bufs) {
+ const struct PPB_OpenGLES2DrawBuffers_Dev* ext =
+ glGetDrawBuffersInterfacePPAPI();
+ if (ext)
+ ext->DrawBuffersEXT(glGetCurrentContextPPAPI(), count, bufs);
+}
+
diff --git a/ppapi/proxy/interface_list.cc b/ppapi/proxy/interface_list.cc
index 14a9947..8b00e66 100644
--- a/ppapi/proxy/interface_list.cc
+++ b/ppapi/proxy/interface_list.cc
@@ -239,8 +239,12 @@ InterfaceList::InterfaceList() {
PPB_OpenGLES2_Shared::GetChromiumMapSubInterface(), PERMISSION_NONE);
AddPPB(PPB_OPENGLES2_QUERY_INTERFACE_1_0,
PPB_OpenGLES2_Shared::GetQueryInterface(), PERMISSION_NONE);
+ AddPPB(PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE_1_0,
+ PPB_OpenGLES2_Shared::GetDrawBuffersInterface(),
+ PERMISSION_DEV);
AddPPB(PPB_VAR_ARRAY_BUFFER_INTERFACE_1_0,
- PPB_Var_Shared::GetVarArrayBufferInterface1_0(), PERMISSION_NONE);
+ PPB_Var_Shared::GetVarArrayBufferInterface1_0(),
+ PERMISSION_NONE);
AddPPB(PPB_VAR_INTERFACE_1_2,
PPB_Var_Shared::GetVarInterface1_2(), PERMISSION_NONE);
AddPPB(PPB_VAR_INTERFACE_1_1,
diff --git a/ppapi/shared_impl/ppb_opengles2_shared.cc b/ppapi/shared_impl/ppb_opengles2_shared.cc
index 6d291c4..aa335df 100644
--- a/ppapi/shared_impl/ppb_opengles2_shared.cc
+++ b/ppapi/shared_impl/ppb_opengles2_shared.cc
@@ -1566,6 +1566,13 @@ void VertexAttribDivisorANGLE(PP_Resource context_id,
}
}
+void DrawBuffersEXT(PP_Resource context_id, GLsizei count, const GLenum* bufs) {
+ Enter3D enter(context_id, true);
+ if (enter.succeeded()) {
+ ToGles2Impl(&enter)->DrawBuffersEXT(count, bufs);
+ }
+}
+
} // namespace
const PPB_OpenGLES2* PPB_OpenGLES2_Shared::GetInterface() {
static const struct PPB_OpenGLES2 ppb_opengles2 = {
@@ -1680,4 +1687,10 @@ const PPB_OpenGLES2Query* PPB_OpenGLES2_Shared::GetQueryInterface() {
&EndQueryEXT, &GetQueryivEXT, &GetQueryObjectuivEXT};
return &ppb_opengles2;
}
+const PPB_OpenGLES2DrawBuffers_Dev*
+PPB_OpenGLES2_Shared::GetDrawBuffersInterface() { // NOLINT
+ static const struct PPB_OpenGLES2DrawBuffers_Dev ppb_opengles2 = {
+ &DrawBuffersEXT};
+ return &ppb_opengles2;
+}
} // namespace ppapi
diff --git a/ppapi/shared_impl/ppb_opengles2_shared.h b/ppapi/shared_impl/ppb_opengles2_shared.h
index 4148571..63a272d 100644
--- a/ppapi/shared_impl/ppb_opengles2_shared.h
+++ b/ppapi/shared_impl/ppb_opengles2_shared.h
@@ -22,6 +22,7 @@ class PPAPI_SHARED_EXPORT PPB_OpenGLES2_Shared {
GetChromiumEnableFeatureInterface();
static const PPB_OpenGLES2ChromiumMapSub* GetChromiumMapSubInterface();
static const PPB_OpenGLES2Query* GetQueryInterface();
+ static const PPB_OpenGLES2DrawBuffers_Dev* GetDrawBuffersInterface();
};
} // namespace ppapi
diff --git a/ppapi/thunk/interfaces_legacy.h b/ppapi/thunk/interfaces_legacy.h
index 79cc758..db47fae 100644
--- a/ppapi/thunk/interfaces_legacy.h
+++ b/ppapi/thunk/interfaces_legacy.h
@@ -27,6 +27,8 @@ LEGACY_IFACE(PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE_1_0,
::ppapi::PPB_OpenGLES2_Shared::GetChromiumMapSubInterface())
LEGACY_IFACE(PPB_OPENGLES2_QUERY_INTERFACE,
::ppapi::PPB_OpenGLES2_Shared::GetQueryInterface())
+LEGACY_IFACE(PPB_OPENGLES2_DRAWBUFFERS_DEV_INTERFACE,
+ ::ppapi::PPB_OpenGLES2_Shared::GetDrawBuffersInterface())
LEGACY_IFACE(PPB_PROXY_PRIVATE_INTERFACE, PPB_Proxy_Impl::GetInterface())
LEGACY_IFACE(PPB_VAR_DEPRECATED_INTERFACE,
PPB_Var_Deprecated_Impl::GetVarDeprecatedInterface())
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 6280817..06d7c9c 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -32085,6 +32085,7 @@ other types of suffix sets.
<int value="910782902" label="PPB_AudioFrame;0.1"/>
<int value="913922409" label="PPB_NetworkProxy;1.0"/>
<int value="916446405" label="PPB_URLUtil(Dev);0.6"/>
+ <int value="930528031" label="PPB_OpenGLES2DrawBuffers(Dev);1.0"/>
<int value="930786862" label="PPB_Flash_Clipboard;5.0"/>
<int value="941275733" label="PPB_Flash;12.6"/>
<int value="944161065" label="PPB_Flash_DRM;1.1"/>