Commit 000dab88 by Geoff Lang Committed by Commit Bot

Make pack and unpack image extensions enableable.

BUG=angleproject:1523 Change-Id: Ic728a777ad7e05373de03ee98e9b0a17101cd45d Reviewed-on: https://chromium-review.googlesource.com/688102Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
parent 63c5a597
......@@ -652,7 +652,7 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_ANGLE_framebuffer_blit"] = esOnlyExtension(&Extensions::framebufferBlit);
map["GL_ANGLE_framebuffer_multisample"] = enableableExtension(&Extensions::framebufferMultisample);
map["GL_ANGLE_instanced_arrays"] = enableableExtension(&Extensions::instancedArrays);
map["GL_ANGLE_pack_reverse_row_order"] = esOnlyExtension(&Extensions::packReverseRowOrder);
map["GL_ANGLE_pack_reverse_row_order"] = enableableExtension(&Extensions::packReverseRowOrder);
map["GL_OES_standard_derivatives"] = enableableExtension(&Extensions::standardDerivatives);
map["GL_EXT_shader_texture_lod"] = enableableExtension(&Extensions::shaderTextureLOD);
map["GL_EXT_frag_depth"] = enableableExtension(&Extensions::fragDepth);
......@@ -666,8 +666,8 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_OES_EGL_image_external"] = esOnlyExtension(&Extensions::eglImageExternal);
map["GL_OES_EGL_image_external_essl3"] = esOnlyExtension(&Extensions::eglImageExternalEssl3);
map["GL_NV_EGL_stream_consumer_external"] = esOnlyExtension(&Extensions::eglStreamConsumerExternal);
map["GL_EXT_unpack_subimage"] = esOnlyExtension(&Extensions::unpackSubimage);
map["GL_NV_pack_subimage"] = esOnlyExtension(&Extensions::packSubimage);
map["GL_EXT_unpack_subimage"] = enableableExtension(&Extensions::unpackSubimage);
map["GL_NV_pack_subimage"] = enableableExtension(&Extensions::packSubimage);
map["GL_EXT_color_buffer_float"] = enableableExtension(&Extensions::colorBufferFloat);
map["GL_OES_vertex_array_object"] = esOnlyExtension(&Extensions::vertexArrayObject);
map["GL_KHR_debug"] = esOnlyExtension(&Extensions::debug);
......
......@@ -183,7 +183,6 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
case GL_RENDERBUFFER_BINDING:
case GL_CURRENT_PROGRAM:
case GL_PACK_ALIGNMENT:
case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
case GL_UNPACK_ALIGNMENT:
case GL_GENERATE_MIPMAP_HINT:
case GL_RED_BITS:
......@@ -234,6 +233,16 @@ bool ValidationContext::getQueryParameterInfo(GLenum pname, GLenum *type, unsign
*numParams = 1;
return true;
}
case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
{
if (!getExtensions().packReverseRowOrder)
{
return false;
}
*type = GL_INT;
*numParams = 1;
return true;
}
case GL_MAX_RECTANGLE_TEXTURE_SIZE_ANGLE:
case GL_TEXTURE_BINDING_RECTANGLE_ANGLE:
{
......
......@@ -5374,6 +5374,12 @@ bool ValidatePixelStorei(ValidationContext *context, GLenum pname, GLint param)
break;
case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
if (!context->getExtensions().packReverseRowOrder)
{
ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
}
break;
case GL_UNPACK_ROW_LENGTH:
case GL_UNPACK_IMAGE_HEIGHT:
case GL_UNPACK_SKIP_IMAGES:
......
......@@ -698,6 +698,121 @@ TEST_P(WebGLCompatibilityTest, EnableInstancedArraysExtension)
}
}
// Test enabling the GL_ANGLE_pack_reverse_row_order extension
TEST_P(WebGLCompatibilityTest, EnablePackReverseRowOrderExtension)
{
EXPECT_FALSE(extensionEnabled("GL_ANGLE_pack_reverse_row_order"));
GLint result = 0;
glGetIntegerv(GL_PACK_REVERSE_ROW_ORDER_ANGLE, &result);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
glPixelStorei(GL_PACK_REVERSE_ROW_ORDER_ANGLE, GL_TRUE);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
if (extensionRequestable("GL_ANGLE_pack_reverse_row_order"))
{
glRequestExtensionANGLE("GL_ANGLE_pack_reverse_row_order");
EXPECT_GL_NO_ERROR();
glGetIntegerv(GL_PACK_REVERSE_ROW_ORDER_ANGLE, &result);
glPixelStorei(GL_PACK_REVERSE_ROW_ORDER_ANGLE, GL_TRUE);
EXPECT_GL_NO_ERROR();
}
}
// Test enabling the GL_EXT_unpack_subimage extension
TEST_P(WebGLCompatibilityTest, EnablePackUnpackSubImageExtension)
{
EXPECT_FALSE(extensionEnabled("GL_EXT_unpack_subimage"));
// This extensions become core in in ES3/WebGL2.
ANGLE_SKIP_TEST_IF(getClientMajorVersion() >= 3);
constexpr GLenum parameters[] = {
GL_UNPACK_ROW_LENGTH_EXT, GL_UNPACK_SKIP_ROWS_EXT, GL_UNPACK_SKIP_PIXELS_EXT,
};
for (GLenum param : parameters)
{
GLint resultI = 0;
glGetIntegerv(param, &resultI);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
GLfloat resultF = 0.0f;
glGetFloatv(param, &resultF);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
glPixelStorei(param, 0);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
}
if (extensionRequestable("GL_EXT_unpack_subimage"))
{
glRequestExtensionANGLE("GL_EXT_unpack_subimage");
EXPECT_GL_NO_ERROR();
for (GLenum param : parameters)
{
GLint resultI = 0;
glGetIntegerv(param, &resultI);
GLfloat resultF = 0.0f;
glGetFloatv(param, &resultF);
glPixelStorei(param, 0);
EXPECT_GL_NO_ERROR();
}
}
}
// Test enabling the GL_NV_pack_subimage extension
TEST_P(WebGLCompatibilityTest, EnablePackPackSubImageExtension)
{
EXPECT_FALSE(extensionEnabled("GL_NV_pack_subimage"));
// This extensions become core in in ES3/WebGL2.
ANGLE_SKIP_TEST_IF(getClientMajorVersion() >= 3);
constexpr GLenum parameters[] = {
GL_PACK_ROW_LENGTH, GL_PACK_SKIP_ROWS, GL_PACK_SKIP_PIXELS,
};
for (GLenum param : parameters)
{
GLint resultI = 0;
glGetIntegerv(param, &resultI);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
GLfloat resultF = 0.0f;
glGetFloatv(param, &resultF);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
glPixelStorei(param, 0);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
}
if (extensionRequestable("GL_NV_pack_subimage"))
{
glRequestExtensionANGLE("GL_NV_pack_subimage");
EXPECT_GL_NO_ERROR();
for (GLenum param : parameters)
{
GLint resultI = 0;
glGetIntegerv(param, &resultI);
GLfloat resultF = 0.0f;
glGetFloatv(param, &resultF);
glPixelStorei(param, 0);
EXPECT_GL_NO_ERROR();
}
}
}
// Verify that the context generates the correct error when the framebuffer attachments are
// different sizes
TEST_P(WebGLCompatibilityTest, FramebufferAttachmentSizeMissmatch)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment