Refactor pixel storage modes.
Change-Id: Ida0a270c1e0ab0900109b7d3bce90dfee9a01960
Reviewed-on: https://swiftshader-review.googlesource.com/17091
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/common/Image.cpp b/src/OpenGL/common/Image.cpp
index 33b523f..ef5e93b 100644
--- a/src/OpenGL/common/Image.cpp
+++ b/src/OpenGL/common/Image.cpp
@@ -1013,10 +1013,10 @@
return (rawPitch + alignment - 1) & ~(alignment - 1);
}
- size_t ComputePackingOffset(GLenum format, GLenum type, GLsizei width, GLsizei height, GLint alignment, GLint skipImages, GLint skipRows, GLint skipPixels)
+ size_t ComputePackingOffset(GLenum format, GLenum type, GLsizei width, GLsizei height, const PixelStorageModes &storageModes)
{
- GLsizei pitchB = ComputePitch(width, format, type, alignment);
- return (skipImages * height + skipRows) * pitchB + skipPixels * ComputePixelSize(format, type);
+ GLsizei pitchB = ComputePitch(width, format, type, storageModes.alignment);
+ return (storageModes.skipImages * height + storageModes.skipRows) * pitchB + storageModes.skipPixels * ComputePixelSize(format, type);
}
inline GLsizei ComputeCompressedPitch(GLsizei width, GLenum format)
@@ -1200,7 +1200,7 @@
return parentTexture == parent;
}
- void Image::loadImageData(Context *context, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const UnpackInfo& unpackInfo, const void *input)
+ void Image::loadImageData(Context *context, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const PixelStorageModes &unpackParameters, const void *pixels)
{
sw::Format uploadFormat = SelectInternalFormat(format, type);
if(uploadFormat == sw::FORMAT_NULL)
@@ -1208,10 +1208,10 @@
return;
}
- GLsizei inputWidth = (unpackInfo.rowLength == 0) ? width : unpackInfo.rowLength;
- GLsizei inputPitch = ComputePitch(inputWidth, format, type, unpackInfo.alignment);
- GLsizei inputHeight = (unpackInfo.imageHeight == 0) ? height : unpackInfo.imageHeight;
- input = ((char*)input) + ComputePackingOffset(format, type, inputWidth, inputHeight, unpackInfo.alignment, unpackInfo.skipImages, unpackInfo.skipRows, unpackInfo.skipPixels);
+ GLsizei inputWidth = (unpackParameters.rowLength == 0) ? width : unpackParameters.rowLength;
+ GLsizei inputPitch = ComputePitch(inputWidth, format, type, unpackParameters.alignment);
+ GLsizei inputHeight = (unpackParameters.imageHeight == 0) ? height : unpackParameters.imageHeight;
+ char *input = ((char*)pixels) + ComputePackingOffset(format, type, inputWidth, inputHeight, unpackParameters);
if(uploadFormat == internalFormat ||
(uploadFormat == sw::FORMAT_A8B8G8R8 && internalFormat == sw::FORMAT_SRGB8_A8) ||
@@ -1423,7 +1423,7 @@
}
else
{
- sw::Surface *source = sw::Surface::create(width, height, depth, ConvertFormatType(format, type), const_cast<void*>(input), inputPitch, inputPitch * inputHeight);
+ sw::Surface *source = sw::Surface::create(width, height, depth, ConvertFormatType(format, type), input, inputPitch, inputPitch * inputHeight);
sw::Rect sourceRect(0, 0, width, height);
sw::Rect destRect(xoffset, yoffset, xoffset + width, yoffset + height);
context->blit(source, sourceRect, this, destRect);
diff --git a/src/OpenGL/common/Image.hpp b/src/OpenGL/common/Image.hpp
index 88b2d89..ff09da8 100644
--- a/src/OpenGL/common/Image.hpp
+++ b/src/OpenGL/common/Image.hpp
@@ -41,11 +41,21 @@
class Context;
+struct PixelStorageModes
+{
+ GLint rowLength = 0;
+ GLint skipRows = 0;
+ GLint skipPixels = 0;
+ GLint alignment = 4;
+ GLint imageHeight = 0;
+ GLint skipImages = 0;
+};
+
sw::Format ConvertFormatType(GLenum format, GLenum type);
sw::Format SelectInternalFormat(GLenum format, GLenum type);
GLsizei ComputePitch(GLsizei width, GLenum format, GLenum type, GLint alignment);
GLsizei ComputeCompressedSize(GLsizei width, GLsizei height, GLenum format);
-size_t ComputePackingOffset(GLenum format, GLenum type, GLsizei width, GLsizei height, GLint alignment, GLint skipImages, GLint skipRows, GLint skipPixels);
+size_t ComputePackingOffset(GLenum format, GLenum type, GLsizei width, GLsizei height, const PixelStorageModes &storageModes);
class [[clang::lto_visibility_public]] Image : public sw::Surface, public gl::Object
{
@@ -170,19 +180,7 @@
void *lockInternal(int x, int y, int z, sw::Lock lock, sw::Accessor client) override = 0;
void unlockInternal() override = 0;
- struct UnpackInfo
- {
- UnpackInfo() : alignment(4), rowLength(0), imageHeight(0), skipPixels(0), skipRows(0), skipImages(0) {}
-
- GLint alignment;
- GLint rowLength;
- GLint imageHeight;
- GLint skipPixels;
- GLint skipRows;
- GLint skipImages;
- };
-
- void loadImageData(Context *context, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const UnpackInfo& unpackInfo, const void *input);
+ void loadImageData(Context *context, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const PixelStorageModes &unpackParameters, const void *pixels);
void loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels);
void release() override = 0;
diff --git a/src/OpenGL/libGLES_CM/Texture.cpp b/src/OpenGL/libGLES_CM/Texture.cpp
index 4b03dc2..6f223a6 100644
--- a/src/OpenGL/libGLES_CM/Texture.cpp
+++ b/src/OpenGL/libGLES_CM/Texture.cpp
@@ -231,9 +231,9 @@
{
if(pixels && image)
{
- egl::Image::UnpackInfo unpackInfo;
- unpackInfo.alignment = unpackAlignment;
- image->loadImageData(context, 0, 0, 0, image->getWidth(), image->getHeight(), 1, format, type, unpackInfo, pixels);
+ egl::Image::PixelStorageModes unpackParameters;
+ unpackParameters.alignment = unpackAlignment;
+ image->loadImageData(context, 0, 0, 0, image->getWidth(), image->getHeight(), 1, format, type, unpackParameters, pixels);
}
}
@@ -269,9 +269,9 @@
if(pixels)
{
- egl::Image::UnpackInfo unpackInfo;
- unpackInfo.alignment = unpackAlignment;
- image->loadImageData(context, xoffset, yoffset, 0, width, height, 1, format, type, unpackInfo, pixels);
+ egl::Image::PixelStorageModes unpackParameters;
+ unpackParameters.alignment = unpackAlignment;
+ image->loadImageData(context, xoffset, yoffset, 0, width, height, 1, format, type, unpackParameters, pixels);
}
}
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 8e43645..6140e8b 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -159,19 +159,6 @@
mState.currentProgram = 0;
- mState.packAlignment = 4;
- mState.unpackInfo.alignment = 4;
- mState.packRowLength = 0;
- mState.packImageHeight = 0;
- mState.packSkipPixels = 0;
- mState.packSkipRows = 0;
- mState.packSkipImages = 0;
- mState.unpackInfo.rowLength = 0;
- mState.unpackInfo.imageHeight = 0;
- mState.unpackInfo.skipPixels = 0;
- mState.unpackInfo.skipRows = 0;
- mState.unpackInfo.skipImages = 0;
-
mVertexDataManager = nullptr;
mIndexDataManager = nullptr;
@@ -847,67 +834,57 @@
void Context::setPackAlignment(GLint alignment)
{
- mState.packAlignment = alignment;
+ mState.packParameters.alignment = alignment;
}
void Context::setUnpackAlignment(GLint alignment)
{
- mState.unpackInfo.alignment = alignment;
+ mState.unpackParameters.alignment = alignment;
}
-const egl::Image::UnpackInfo& Context::getUnpackInfo() const
+const egl::PixelStorageModes &Context::getUnpackParameters() const
{
- return mState.unpackInfo;
+ return mState.unpackParameters;
}
void Context::setPackRowLength(GLint rowLength)
{
- mState.packRowLength = rowLength;
-}
-
-void Context::setPackImageHeight(GLint imageHeight)
-{
- mState.packImageHeight = imageHeight;
+ mState.packParameters.rowLength = rowLength;
}
void Context::setPackSkipPixels(GLint skipPixels)
{
- mState.packSkipPixels = skipPixels;
+ mState.packParameters.skipPixels = skipPixels;
}
void Context::setPackSkipRows(GLint skipRows)
{
- mState.packSkipRows = skipRows;
-}
-
-void Context::setPackSkipImages(GLint skipImages)
-{
- mState.packSkipImages = skipImages;
+ mState.packParameters.skipRows = skipRows;
}
void Context::setUnpackRowLength(GLint rowLength)
{
- mState.unpackInfo.rowLength = rowLength;
+ mState.unpackParameters.rowLength = rowLength;
}
void Context::setUnpackImageHeight(GLint imageHeight)
{
- mState.unpackInfo.imageHeight = imageHeight;
+ mState.unpackParameters.imageHeight = imageHeight;
}
void Context::setUnpackSkipPixels(GLint skipPixels)
{
- mState.unpackInfo.skipPixels = skipPixels;
+ mState.unpackParameters.skipPixels = skipPixels;
}
void Context::setUnpackSkipRows(GLint skipRows)
{
- mState.unpackInfo.skipRows = skipRows;
+ mState.unpackParameters.skipRows = skipRows;
}
void Context::setUnpackSkipImages(GLint skipImages)
{
- mState.unpackInfo.skipImages = skipImages;
+ mState.unpackParameters.skipImages = skipImages;
}
GLuint Context::createBuffer()
@@ -1590,9 +1567,9 @@
GLsizei Context::getRequiredBufferSize(GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type) const
{
- GLsizei inputWidth = (mState.unpackInfo.rowLength == 0) ? width : mState.unpackInfo.rowLength;
- GLsizei inputPitch = egl::ComputePitch(inputWidth, format, type, mState.unpackInfo.alignment);
- GLsizei inputHeight = (mState.unpackInfo.imageHeight == 0) ? height : mState.unpackInfo.imageHeight;
+ GLsizei inputWidth = (mState.unpackParameters.rowLength == 0) ? width : mState.unpackParameters.rowLength;
+ GLsizei inputPitch = egl::ComputePitch(inputWidth, format, type, mState.unpackParameters.alignment);
+ GLsizei inputHeight = (mState.unpackParameters.imageHeight == 0) ? height : mState.unpackParameters.imageHeight;
return inputPitch * inputHeight * depth;
}
@@ -1963,8 +1940,8 @@
case GL_READ_FRAMEBUFFER_BINDING: *params = mState.readFramebuffer; return true;
case GL_RENDERBUFFER_BINDING: *params = mState.renderbuffer.name(); return true;
case GL_CURRENT_PROGRAM: *params = mState.currentProgram; return true;
- case GL_PACK_ALIGNMENT: *params = mState.packAlignment; return true;
- case GL_UNPACK_ALIGNMENT: *params = mState.unpackInfo.alignment; return true;
+ case GL_PACK_ALIGNMENT: *params = mState.packParameters.alignment; return true;
+ case GL_UNPACK_ALIGNMENT: *params = mState.unpackParameters.alignment; return true;
case GL_GENERATE_MIPMAP_HINT: *params = mState.generateMipmapHint; return true;
case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: *params = mState.fragmentShaderDerivativeHint; return true;
case GL_TEXTURE_FILTERING_HINT_CHROMIUM: *params = mState.textureFilteringHint; return true;
@@ -2321,13 +2298,13 @@
*params = NUM_PROGRAM_BINARY_FORMATS;
return true;
case GL_PACK_ROW_LENGTH:
- *params = mState.packRowLength;
+ *params = mState.packParameters.rowLength;
return true;
case GL_PACK_SKIP_PIXELS:
- *params = mState.packSkipPixels;
+ *params = mState.packParameters.skipPixels;
return true;
case GL_PACK_SKIP_ROWS:
- *params = mState.packSkipRows;
+ *params = mState.packParameters.skipRows;
return true;
case GL_PIXEL_PACK_BUFFER_BINDING:
*params = mState.pixelPackBuffer.name();
@@ -2358,19 +2335,19 @@
*params = static_cast<T>(mState.genericUniformBuffer->offset());
return true;
case GL_UNPACK_IMAGE_HEIGHT:
- *params = mState.unpackInfo.imageHeight;
+ *params = mState.unpackParameters.imageHeight;
return true;
case GL_UNPACK_ROW_LENGTH:
- *params = mState.unpackInfo.rowLength;
+ *params = mState.unpackParameters.rowLength;
return true;
case GL_UNPACK_SKIP_IMAGES:
- *params = mState.unpackInfo.skipImages;
+ *params = mState.unpackParameters.skipImages;
return true;
case GL_UNPACK_SKIP_PIXELS:
- *params = mState.unpackInfo.skipPixels;
+ *params = mState.unpackParameters.skipPixels;
return true;
case GL_UNPACK_SKIP_ROWS:
- *params = mState.unpackInfo.skipRows;
+ *params = mState.unpackParameters.skipRows;
return true;
case GL_VERTEX_ARRAY_BINDING:
*params = getCurrentVertexArray()->name;
@@ -3337,11 +3314,11 @@
return error(GL_INVALID_OPERATION);
}
- GLsizei outputWidth = (mState.packRowLength > 0) ? mState.packRowLength : width;
- GLsizei outputPitch = egl::ComputePitch(outputWidth, format, type, mState.packAlignment);
- GLsizei outputHeight = (mState.packImageHeight == 0) ? height : mState.packImageHeight;
+ GLsizei outputWidth = (mState.packParameters.rowLength > 0) ? mState.packParameters.rowLength : width;
+ GLsizei outputPitch = egl::ComputePitch(outputWidth, format, type, mState.packParameters.alignment);
+ GLsizei outputHeight = (mState.packParameters.imageHeight == 0) ? height : mState.packParameters.imageHeight;
pixels = getPixelPackBuffer() ? (unsigned char*)getPixelPackBuffer()->data() + (ptrdiff_t)pixels : (unsigned char*)pixels;
- pixels = ((char*)pixels) + egl::ComputePackingOffset(format, type, outputWidth, outputHeight, mState.packAlignment, mState.packSkipImages, mState.packSkipRows, mState.packSkipPixels);
+ pixels = ((char*)pixels) + egl::ComputePackingOffset(format, type, outputWidth, outputHeight, mState.packParameters);
// Sized query sanity check
if(bufSize)
diff --git a/src/OpenGL/libGLESv2/Context.h b/src/OpenGL/libGLESv2/Context.h
index 0d71c68..c99143d 100644
--- a/src/OpenGL/libGLESv2/Context.h
+++ b/src/OpenGL/libGLESv2/Context.h
@@ -422,13 +422,8 @@
gl::BindingPointer<Texture> samplerTexture[TEXTURE_TYPE_COUNT][MAX_COMBINED_TEXTURE_IMAGE_UNITS];
gl::BindingPointer<Query> activeQuery[QUERY_TYPE_COUNT];
- egl::Image::UnpackInfo unpackInfo;
- GLint packAlignment;
- GLint packRowLength;
- GLint packImageHeight;
- GLint packSkipPixels;
- GLint packSkipRows;
- GLint packSkipImages;
+ egl::PixelStorageModes unpackParameters;
+ egl::PixelStorageModes packParameters;
};
class [[clang::lto_visibility_public]] Context : public egl::Context
@@ -538,14 +533,12 @@
void setUnpackSkipPixels(GLint skipPixels);
void setUnpackSkipRows(GLint skipRows);
void setUnpackSkipImages(GLint skipImages);
- const egl::Image::UnpackInfo& getUnpackInfo() const;
+ const egl::PixelStorageModes &getUnpackParameters() const;
void setPackAlignment(GLint alignment);
void setPackRowLength(GLint rowLength);
- void setPackImageHeight(GLint imageHeight);
void setPackSkipPixels(GLint skipPixels);
void setPackSkipRows(GLint skipRows);
- void setPackSkipImages(GLint skipImages);
// These create and destroy methods are merely pass-throughs to
// ResourceManager, which owns these object types
diff --git a/src/OpenGL/libGLESv2/Texture.cpp b/src/OpenGL/libGLESv2/Texture.cpp
index 7f3a2a5..302320f 100644
--- a/src/OpenGL/libGLESv2/Texture.cpp
+++ b/src/OpenGL/libGLESv2/Texture.cpp
@@ -333,12 +333,12 @@
return image;
}
-void Texture::setImage(egl::Context *context, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image)
+void Texture::setImage(egl::Context *context, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels, egl::Image *image)
{
if(pixels && image)
{
GLsizei depth = (getTarget() == GL_TEXTURE_3D_OES || getTarget() == GL_TEXTURE_2D_ARRAY) ? image->getDepth() : 1;
- image->loadImageData(context, 0, 0, 0, image->getWidth(), image->getHeight(), depth, format, type, unpackInfo, pixels);
+ image->loadImageData(context, 0, 0, 0, image->getWidth(), image->getHeight(), depth, format, type, unpackParameters, pixels);
}
}
@@ -351,7 +351,7 @@
}
}
-void Texture::subImage(egl::Context *context, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image)
+void Texture::subImage(egl::Context *context, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels, egl::Image *image)
{
if(!image)
{
@@ -360,7 +360,7 @@
if(pixels && width > 0 && height > 0 && depth > 0)
{
- image->loadImageData(context, xoffset, yoffset, zoffset, width, height, depth, format, type, unpackInfo, pixels);
+ image->loadImageData(context, xoffset, yoffset, zoffset, width, height, depth, format, type, unpackParameters, pixels);
}
}
@@ -534,7 +534,7 @@
return level - 1;
}
-void Texture2D::setImage(egl::Context *context, GLint level, GLsizei width, GLsizei height, GLint internalformat, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels)
+void Texture2D::setImage(egl::Context *context, GLint level, GLsizei width, GLsizei height, GLint internalformat, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels)
{
if(image[level])
{
@@ -548,7 +548,7 @@
return error(GL_OUT_OF_MEMORY);
}
- Texture::setImage(context, format, type, unpackInfo, pixels, image[level]);
+ Texture::setImage(context, format, type, unpackParameters, pixels, image[level]);
}
void Texture2D::bindTexImage(gl::Surface *surface)
@@ -610,9 +610,9 @@
Texture::setCompressedImage(imageSize, pixels, image[level]);
}
-void Texture2D::subImage(egl::Context *context, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels)
+void Texture2D::subImage(egl::Context *context, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels)
{
- Texture::subImage(context, xoffset, yoffset, 0, width, height, 1, format, type, unpackInfo, pixels, image[level]);
+ Texture::subImage(context, xoffset, yoffset, 0, width, height, 1, format, type, unpackParameters, pixels, image[level]);
}
void Texture2D::subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels)
@@ -1037,9 +1037,9 @@
Texture::setCompressedImage(imageSize, pixels, image[face][level]);
}
-void TextureCubeMap::subImage(egl::Context *context, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels)
+void TextureCubeMap::subImage(egl::Context *context, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels)
{
- Texture::subImage(context, xoffset, yoffset, 0, width, height, 1, format, type, unpackInfo, pixels, image[CubeFaceIndex(target)][level]);
+ Texture::subImage(context, xoffset, yoffset, 0, width, height, 1, format, type, unpackParameters, pixels, image[CubeFaceIndex(target)][level]);
}
void TextureCubeMap::subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels)
@@ -1230,7 +1230,7 @@
UNREACHABLE(0); // Cube maps cannot have an EGL surface bound as an image
}
-void TextureCubeMap::setImage(egl::Context *context, GLenum target, GLint level, GLsizei width, GLsizei height, GLint internalformat, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels)
+void TextureCubeMap::setImage(egl::Context *context, GLenum target, GLint level, GLsizei width, GLsizei height, GLint internalformat, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels)
{
int face = CubeFaceIndex(target);
@@ -1247,7 +1247,7 @@
return error(GL_OUT_OF_MEMORY);
}
- Texture::setImage(context, format, type, unpackInfo, pixels, image[face][level]);
+ Texture::setImage(context, format, type, unpackParameters, pixels, image[face][level]);
}
void TextureCubeMap::copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Renderbuffer *source)
@@ -1539,7 +1539,7 @@
return level - 1;
}
-void Texture3D::setImage(egl::Context *context, GLint level, GLsizei width, GLsizei height, GLsizei depth, GLint internalformat, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels)
+void Texture3D::setImage(egl::Context *context, GLint level, GLsizei width, GLsizei height, GLsizei depth, GLint internalformat, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels)
{
if(image[level])
{
@@ -1553,7 +1553,7 @@
return error(GL_OUT_OF_MEMORY);
}
- Texture::setImage(context, format, type, unpackInfo, pixels, image[level]);
+ Texture::setImage(context, format, type, unpackParameters, pixels, image[level]);
}
void Texture3D::releaseTexImage()
@@ -1579,9 +1579,9 @@
Texture::setCompressedImage(imageSize, pixels, image[level]);
}
-void Texture3D::subImage(egl::Context *context, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels)
+void Texture3D::subImage(egl::Context *context, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels)
{
- Texture::subImage(context, xoffset, yoffset, zoffset, width, height, depth, format, type, unpackInfo, pixels, image[level]);
+ Texture::subImage(context, xoffset, yoffset, zoffset, width, height, depth, format, type, unpackParameters, pixels, image[level]);
}
void Texture3D::subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels)
diff --git a/src/OpenGL/libGLESv2/Texture.h b/src/OpenGL/libGLESv2/Texture.h
index 86f158a..246affe 100644
--- a/src/OpenGL/libGLESv2/Texture.h
+++ b/src/OpenGL/libGLESv2/Texture.h
@@ -112,8 +112,8 @@
protected:
~Texture() override;
- void setImage(egl::Context *context, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image);
- void subImage(egl::Context *context, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels, egl::Image *image);
+ void setImage(egl::Context *context, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels, egl::Image *image);
+ void subImage(egl::Context *context, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels, egl::Image *image);
void setCompressedImage(GLsizei imageSize, const void *pixels, egl::Image *image);
void subImageCompressed(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels, egl::Image *image);
@@ -160,9 +160,9 @@
GLenum getType(GLenum target, GLint level) const override;
int getTopLevel() const override;
- void setImage(egl::Context *context, GLint level, GLsizei width, GLsizei height, GLint internalformat, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
+ void setImage(egl::Context *context, GLint level, GLsizei width, GLsizei height, GLint internalformat, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels);
void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
- void subImage(egl::Context *context, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
+ void subImage(egl::Context *context, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels);
void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
void copyImage(GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Renderbuffer *source);
void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Renderbuffer *source) override;
@@ -226,10 +226,10 @@
GLenum getType(GLenum target, GLint level) const override;
int getTopLevel() const override;
- void setImage(egl::Context *context, GLenum target, GLint level, GLsizei width, GLsizei height, GLint internalformat, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
+ void setImage(egl::Context *context, GLenum target, GLint level, GLsizei width, GLsizei height, GLint internalformat, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels);
void setCompressedImage(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
- void subImage(egl::Context *context, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
+ void subImage(egl::Context *context, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels);
void subImageCompressed(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *pixels);
void copyImage(GLenum target, GLint level, GLenum format, GLint x, GLint y, GLsizei width, GLsizei height, Renderbuffer *source);
void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Renderbuffer *source) override;
@@ -288,9 +288,9 @@
GLenum getType(GLenum target, GLint level) const override;
int getTopLevel() const override;
- void setImage(egl::Context *context, GLint level, GLsizei width, GLsizei height, GLsizei depth, GLint internalformat, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
+ void setImage(egl::Context *context, GLint level, GLsizei width, GLsizei height, GLsizei depth, GLint internalformat, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels);
void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels);
- void subImage(egl::Context *context, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::Image::UnpackInfo& unpackInfo, const void *pixels);
+ void subImage(egl::Context *context, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const egl::PixelStorageModes &unpackParameters, const void *pixels);
void subImageCompressed(GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *pixels);
void copyImage(GLint level, GLenum format, GLint x, GLint y, GLint z, GLsizei width, GLsizei height, GLsizei depth, Renderbuffer *source);
void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, Renderbuffer *source);
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index abe655f..90fd752 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -5021,7 +5021,7 @@
return error(GL_INVALID_OPERATION);
}
- texture->setImage(context, level, width, height, sizedInternalFormat, format, type, context->getUnpackInfo(), data);
+ texture->setImage(context, level, width, height, sizedInternalFormat, format, type, context->getUnpackParameters(), data);
}
else
{
@@ -5032,7 +5032,7 @@
return error(GL_INVALID_OPERATION);
}
- texture->setImage(context, target, level, width, height, sizedInternalFormat, format, type, context->getUnpackInfo(), data);
+ texture->setImage(context, target, level, width, height, sizedInternalFormat, format, type, context->getUnpackParameters(), data);
}
}
}
@@ -5389,7 +5389,7 @@
return error(validationError);
}
- texture->subImage(context, level, xoffset, yoffset, width, height, format, type, context->getUnpackInfo(), data);
+ texture->subImage(context, level, xoffset, yoffset, width, height, format, type, context->getUnpackParameters(), data);
}
else if(es2::IsCubemapTextureTarget(target))
{
@@ -5407,7 +5407,7 @@
return error(validationError);
}
- texture->subImage(context, target, level, xoffset, yoffset, width, height, format, type, context->getUnpackInfo(), data);
+ texture->subImage(context, target, level, xoffset, yoffset, width, height, format, type, context->getUnpackParameters(), data);
}
else UNREACHABLE(target);
}
@@ -6250,7 +6250,7 @@
}
GLenum sizedInternalFormat = GetSizedInternalFormat(internalformat, type);
- texture->setImage(context, level, width, height, depth, sizedInternalFormat, format, type, context->getUnpackInfo(), data);
+ texture->setImage(context, level, width, height, depth, sizedInternalFormat, format, type, context->getUnpackParameters(), data);
}
}
@@ -6302,7 +6302,7 @@
return error(validationError);
}
- texture->subImage(context, level, xoffset, yoffset, zoffset, width, height, depth, format, type, context->getUnpackInfo(), data);
+ texture->subImage(context, level, xoffset, yoffset, zoffset, width, height, depth, format, type, context->getUnpackParameters(), data);
}
}
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index 0526254..0af7b65 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -633,7 +633,7 @@
}
GLenum sizedInternalFormat = GetSizedInternalFormat(internalformat, type);
- texture->setImage(context, level, width, height, depth, sizedInternalFormat, format, type, context->getUnpackInfo(), data);
+ texture->setImage(context, level, width, height, depth, sizedInternalFormat, format, type, context->getUnpackParameters(), data);
}
}
@@ -686,7 +686,7 @@
return error(validationError);
}
- texture->subImage(context, level, xoffset, yoffset, zoffset, width, height, depth, format, type, context->getUnpackInfo(), data);
+ texture->subImage(context, level, xoffset, yoffset, zoffset, width, height, depth, format, type, context->getUnpackParameters(), data);
}
}
@@ -3869,41 +3869,41 @@
{
case GL_TEXTURE_2D:
case GL_TEXTURE_RECTANGLE_ARB:
- {
- es2::Texture2D *texture = context->getTexture2D(target);
- if(!texture || texture->name == 0 || texture->getImmutableFormat() == GL_TRUE)
{
- return error(GL_INVALID_OPERATION);
- }
-
+ es2::Texture2D *texture = context->getTexture2D(target);
+ if(!texture || texture->name == 0 || texture->getImmutableFormat() == GL_TRUE)
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+
for(int level = 0; level < levels; level++)
- {
- texture->setImage(context, level, width, height, sizedInternalFormat, sizedInternalFormat, type, context->getUnpackInfo(), nullptr);
- width = std::max(1, (width / 2));
- height = std::max(1, (height / 2));
+ {
+ texture->setImage(context, level, width, height, sizedInternalFormat, sizedInternalFormat, type, context->getUnpackParameters(), nullptr);
+ width = std::max(1, (width / 2));
+ height = std::max(1, (height / 2));
+ }
+ texture->makeImmutable(levels);
}
- texture->makeImmutable(levels);
- }
break;
case GL_TEXTURE_CUBE_MAP:
- {
- es2::TextureCubeMap *texture = context->getTextureCubeMap();
- if(!texture || texture->name == 0 || texture->getImmutableFormat())
{
- return error(GL_INVALID_OPERATION);
- }
-
- for(int level = 0; level < levels; level++)
- {
- for(int face = GL_TEXTURE_CUBE_MAP_POSITIVE_X; face <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; face++)
+ es2::TextureCubeMap *texture = context->getTextureCubeMap();
+ if(!texture || texture->name == 0 || texture->getImmutableFormat())
{
- texture->setImage(context, face, level, width, height, sizedInternalFormat, sizedInternalFormat, type, context->getUnpackInfo(), nullptr);
+ return error(GL_INVALID_OPERATION);
}
- width = std::max(1, (width / 2));
- height = std::max(1, (height / 2));
+
+ for(int level = 0; level < levels; level++)
+ {
+ for(int face = GL_TEXTURE_CUBE_MAP_POSITIVE_X; face <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; face++)
+ {
+ texture->setImage(context, face, level, width, height, sizedInternalFormat, sizedInternalFormat, type, context->getUnpackParameters(), nullptr);
+ }
+ width = std::max(1, (width / 2));
+ height = std::max(1, (height / 2));
+ }
+ texture->makeImmutable(levels);
}
- texture->makeImmutable(levels);
- }
break;
default:
return error(GL_INVALID_ENUM);
@@ -3935,52 +3935,52 @@
switch(target)
{
case GL_TEXTURE_3D:
- {
- if(levels > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS || levels > (log2(std::max(std::max(width, height), depth)) + 1))
{
- return error(GL_INVALID_OPERATION);
- }
-
- es2::Texture3D *texture = context->getTexture3D();
- if(!texture || texture->name == 0 || texture->getImmutableFormat() == GL_TRUE)
- {
- return error(GL_INVALID_OPERATION);
- }
-
+ if(levels > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS || levels > (log2(std::max(std::max(width, height), depth)) + 1))
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+
+ es2::Texture3D *texture = context->getTexture3D();
+ if(!texture || texture->name == 0 || texture->getImmutableFormat() == GL_TRUE)
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+
for(int level = 0; level < levels; level++)
- {
- texture->setImage(context, level, width, height, depth, sizedInternalFormat, sizedInternalFormat, type, context->getUnpackInfo(), nullptr);
- width = std::max(1, (width / 2));
- height = std::max(1, (height / 2));
- depth = std::max(1, (depth / 2));
+ {
+ texture->setImage(context, level, width, height, depth, sizedInternalFormat, sizedInternalFormat, type, context->getUnpackParameters(), nullptr);
+ width = std::max(1, (width / 2));
+ height = std::max(1, (height / 2));
+ depth = std::max(1, (depth / 2));
+ }
+ texture->makeImmutable(levels);
}
- texture->makeImmutable(levels);
- }
break;
case GL_TEXTURE_2D_ARRAY:
- {
- if(levels > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS || levels > (log2(std::max(width, height)) + 1))
{
- return error(GL_INVALID_OPERATION);
- }
-
- es2::Texture3D *texture = context->getTexture2DArray();
- if(!texture || texture->name == 0 || texture->getImmutableFormat())
- {
- return error(GL_INVALID_OPERATION);
- }
-
- for(int level = 0; level < levels; level++)
- {
- for(int face = GL_TEXTURE_CUBE_MAP_POSITIVE_X; face <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; face++)
+ if(levels > es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS || levels > (log2(std::max(width, height)) + 1))
{
- texture->setImage(context, level, width, height, depth, sizedInternalFormat, sizedInternalFormat, type, context->getUnpackInfo(), nullptr);
+ return error(GL_INVALID_OPERATION);
}
- width = std::max(1, (width / 2));
- height = std::max(1, (height / 2));
+
+ es2::Texture3D *texture = context->getTexture2DArray();
+ if(!texture || texture->name == 0 || texture->getImmutableFormat())
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+
+ for(int level = 0; level < levels; level++)
+ {
+ for(int face = GL_TEXTURE_CUBE_MAP_POSITIVE_X; face <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z; face++)
+ {
+ texture->setImage(context, level, width, height, depth, sizedInternalFormat, sizedInternalFormat, type, context->getUnpackParameters(), nullptr);
+ }
+ width = std::max(1, (width / 2));
+ height = std::max(1, (height / 2));
+ }
+ texture->makeImmutable(levels);
}
- texture->makeImmutable(levels);
- }
break;
default:
return error(GL_INVALID_ENUM);