Bug 1048747 - WebGL2 - GL symbols for GetIntegeri_v and GetInteger64i_v.; r=jgilbert

--HG--
extra : rebase_source : d4c5a1a6e4a5c6f772a4f69c2ff3edab50d0d6e4
extra : source : 9929d6519682ca1b0dac4e7390349a2254d711c5
This commit is contained in:
Dan Glastonbury 2014-05-27 20:21:30 +10:00
parent 5ba334c43f
commit 3f6740fe9b
4 changed files with 66 additions and 2 deletions

View File

@ -105,6 +105,7 @@ static const char *sExtensionNames[] = {
"GL_EXT_color_buffer_half_float",
"GL_EXT_copy_texture",
"GL_EXT_draw_buffers",
"GL_EXT_draw_buffers2",
"GL_EXT_draw_instanced",
"GL_EXT_draw_range_elements",
"GL_EXT_frag_depth",
@ -964,7 +965,6 @@ GLContext::InitWithPrefix(const char *prefix, bool trygl)
{ (PRFuncPtr*) &mSymbols.fGetTransformFeedbackVarying, { "GetTransformFeedbackVarying", nullptr } },
{ (PRFuncPtr*) &mSymbols.fPauseTransformFeedback, { "PauseTransformFeedback", nullptr } },
{ (PRFuncPtr*) &mSymbols.fResumeTransformFeedback, { "ResumeTransformFeedback", nullptr } },
{ (PRFuncPtr*) &mSymbols.fGetIntegeri_v, { "GetIntegeri_v", nullptr } },
END_SYMBOLS
};
@ -980,7 +980,6 @@ GLContext::InitWithPrefix(const char *prefix, bool trygl)
{ (PRFuncPtr*) &mSymbols.fGetTransformFeedbackVarying, { "GetTransformFeedbackVaryingEXT", "GetTransformFeedbackVaryingNV", nullptr } },
{ (PRFuncPtr*) &mSymbols.fPauseTransformFeedback, { "PauseTransformFeedbackNV", nullptr } },
{ (PRFuncPtr*) &mSymbols.fResumeTransformFeedback, { "ResumeTransformFeedbackNV", nullptr } },
{ (PRFuncPtr*) &mSymbols.fGetIntegeri_v, { "GetIntegerIndexedvEXT", "GetIntegerIndexedvNV", nullptr } },
END_SYMBOLS
};
@ -1149,6 +1148,41 @@ GLContext::InitWithPrefix(const char *prefix, bool trygl)
}
}
if (IsSupported(GLFeature::get_integer_indexed)) {
SymLoadStruct coreSymbols[] = {
{ (PRFuncPtr*) &mSymbols.fGetIntegeri_v, { "GetIntegeri_v", nullptr } },
END_SYMBOLS
};
SymLoadStruct extSymbols[] ={
{ (PRFuncPtr*) &mSymbols.fGetIntegeri_v, { "GetIntegerIndexedvEXT", nullptr } },
END_SYMBOLS
};
bool useCore = IsFeatureProvidedByCoreSymbols(GLFeature::get_integer_indexed);
if (!LoadSymbols(useCore ? coreSymbols : extSymbols, trygl, prefix)) {
NS_ERROR("GL supports get_integer_indexed without supplying its functions.");
MarkUnsupported(GLFeature::get_integer_indexed);
ClearSymbols(coreSymbols);
}
}
if (IsSupported(GLFeature::get_integer64_indexed)) {
SymLoadStruct coreSymbols[] = {
{ (PRFuncPtr*) &mSymbols.fGetInteger64i_v, { "GetInteger64i_v", nullptr } },
END_SYMBOLS
};
if (!LoadSymbols(coreSymbols, trygl, prefix)) {
NS_ERROR("GL supports get_integer64_indexed without supplying its functions.");
MarkUnsupported(GLFeature::get_integer64_indexed);
ClearSymbols(coreSymbols);
}
}
if (IsSupported(GLFeature::gpu_shader4)) {
SymLoadStruct gpuShader4Symbols[] = {
{ (PRFuncPtr*) &mSymbols.fVertexAttribI4i, { "VertexAttribI4i", "VertexAttribI4iEXT", nullptr } },

View File

@ -94,6 +94,8 @@ MOZ_BEGIN_ENUM_CLASS(GLFeature)
framebuffer_blit,
framebuffer_multisample,
framebuffer_object,
get_integer_indexed,
get_integer64_indexed,
get_query_object_iv,
gpu_shader4,
instanced_arrays,
@ -385,6 +387,7 @@ public:
EXT_color_buffer_half_float,
EXT_copy_texture,
EXT_draw_buffers,
EXT_draw_buffers2,
EXT_draw_instanced,
EXT_draw_range_elements,
EXT_frag_depth,
@ -2788,6 +2791,12 @@ public:
AFTER_GL_CALL;
}
void fGetInteger64i_v(GLenum target, GLuint index, GLint64* data) {
ASSERT_SYMBOL_PRESENT(fGetInteger64i_v);
BEFORE_GL_CALL;
mSymbols.fGetInteger64i_v(target, index, data);
AFTER_GL_CALL;
}
// -----------------------------------------------------------------------------
// Package XXX_vertex_array_object

View File

@ -219,6 +219,25 @@ static const FeatureInfo sFeatureInfoArr[] = {
GLContext::Extensions_End
}
},
{
"get_integer_indexed",
300, // OpenGL version
300, // OpenGL ES version
GLContext::Extension_None,
{
GLContext::EXT_draw_buffers2,
GLContext::Extensions_End
}
},
{
"get_integer64_indexed",
320, // OpenGL version
300, // OpenGL ES version
GLContext::Extension_None,
{
GLContext::Extensions_End
}
},
{
"get_query_object_iv",
200, // OpenGL version

View File

@ -503,6 +503,8 @@ struct GLContextSymbols
typedef void (GLAPIENTRY * PFNGLGETINTEGERI_V) (GLenum param, GLuint index, GLint* values);
PFNGLGETINTEGERI_V fGetIntegeri_v;
typedef void (GLAPIENTRY * PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64* data);
PFNGLGETINTEGER64I_VPROC fGetInteger64i_v;
// EXT_transform_feedback only
typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSET) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);