Commit 894858a5 by Nicolas Capens Committed by Nicolas Capens

Don't upload array texture images six times.

Change-Id: I5be0cc629477b6cfb3ede6b4484f067d1c30b0ec Reviewed-on: https://swiftshader-review.googlesource.com/17929Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 16a2a922
...@@ -4249,7 +4249,7 @@ void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, ...@@ -4249,7 +4249,7 @@ void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width,
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
GLenum sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type); GLint sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type);
es1::Context *context = es1::getContext(); es1::Context *context = es1::getContext();
......
...@@ -925,7 +925,7 @@ void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, ...@@ -925,7 +925,7 @@ void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x,
{ {
return error(GL_INVALID_VALUE); return error(GL_INVALID_VALUE);
} }
// Fall through // Fall through to GL_TEXTURE_2D case.
case GL_TEXTURE_2D: case GL_TEXTURE_2D:
if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) || if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level)) height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
...@@ -3463,24 +3463,24 @@ const GLubyte* GetString(GLenum name) ...@@ -3463,24 +3463,24 @@ const GLubyte* GetString(GLenum name)
case GL_RENDERER: case GL_RENDERER:
return (GLubyte*)"Google SwiftShader"; return (GLubyte*)"Google SwiftShader";
case GL_VERSION: case GL_VERSION:
{ {
es2::Context *context = es2::getContext(); es2::Context *context = es2::getContext();
return (context && (context->getClientVersion() >= 3)) ? return (context && (context->getClientVersion() >= 3)) ?
(GLubyte*)"OpenGL ES 3.0 SwiftShader " VERSION_STRING : (GLubyte*)"OpenGL ES 3.0 SwiftShader " VERSION_STRING :
(GLubyte*)"OpenGL ES 2.0 SwiftShader " VERSION_STRING; (GLubyte*)"OpenGL ES 2.0 SwiftShader " VERSION_STRING;
} }
case GL_SHADING_LANGUAGE_VERSION: case GL_SHADING_LANGUAGE_VERSION:
{ {
es2::Context *context = es2::getContext(); es2::Context *context = es2::getContext();
return (context && (context->getClientVersion() >= 3)) ? return (context && (context->getClientVersion() >= 3)) ?
(GLubyte*)"OpenGL ES GLSL ES 3.00 SwiftShader " VERSION_STRING : (GLubyte*)"OpenGL ES GLSL ES 3.00 SwiftShader " VERSION_STRING :
(GLubyte*)"OpenGL ES GLSL ES 1.00 SwiftShader " VERSION_STRING; (GLubyte*)"OpenGL ES GLSL ES 1.00 SwiftShader " VERSION_STRING;
} }
case GL_EXTENSIONS: case GL_EXTENSIONS:
{ {
es2::Context *context = es2::getContext(); es2::Context *context = es2::getContext();
return context ? context->getExtensions(GL_INVALID_INDEX) : (GLubyte*)nullptr; return context ? context->getExtensions(GL_INVALID_INDEX) : (GLubyte*)nullptr;
} }
default: default:
return error(GL_INVALID_ENUM, (GLubyte*)nullptr); return error(GL_INVALID_ENUM, (GLubyte*)nullptr);
} }
...@@ -4971,7 +4971,7 @@ void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, ...@@ -4971,7 +4971,7 @@ void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width,
} }
} }
GLenum validationError = ValidateTextureFormatType(format, type, internalformat, target, context->getClientVersion()); GLenum validationError = ValidateTextureFormatType(format, type, internalformat, target, clientVersion);
if(validationError != GL_NO_ERROR) if(validationError != GL_NO_ERROR)
{ {
return error(validationError); return error(validationError);
...@@ -4989,7 +4989,7 @@ void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, ...@@ -4989,7 +4989,7 @@ void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width,
{ {
return error(GL_INVALID_VALUE); // Defining level other than 0 is not allowed return error(GL_INVALID_VALUE); // Defining level other than 0 is not allowed
} }
// Fall through // Fall through to GL_TEXTURE_2D case.
case GL_TEXTURE_2D: case GL_TEXTURE_2D:
if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) || if(width > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level) ||
height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level)) height > (es2::IMPLEMENTATION_MAX_TEXTURE_SIZE >> level))
...@@ -5018,14 +5018,14 @@ void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, ...@@ -5018,14 +5018,14 @@ void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width,
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
GLenum sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type);
validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, 1, format, type)); validationError = context->getPixels(&data, type, context->getRequiredBufferSize(width, height, 1, format, type));
if(validationError != GL_NO_ERROR) if(validationError != GL_NO_ERROR)
{ {
return error(validationError); return error(validationError);
} }
GLint sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type);
if(target == GL_TEXTURE_2D || target == GL_TEXTURE_RECTANGLE_ARB) if(target == GL_TEXTURE_2D || target == GL_TEXTURE_RECTANGLE_ARB)
{ {
es2::Texture2D *texture = context->getTexture2D(target); es2::Texture2D *texture = context->getTexture2D(target);
...@@ -6267,7 +6267,7 @@ void TexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei wi ...@@ -6267,7 +6267,7 @@ void TexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei wi
return error(validationError); return error(validationError);
} }
GLenum sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type); GLint sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type);
texture->setImage(level, width, height, depth, sizedInternalFormat, format, type, context->getUnpackParameters(), data); texture->setImage(level, width, height, depth, sizedInternalFormat, format, type, context->getUnpackParameters(), data);
} }
} }
......
...@@ -264,18 +264,18 @@ GL_APICALL void GL_APIENTRY glReadBuffer(GLenum src) ...@@ -264,18 +264,18 @@ GL_APICALL void GL_APIENTRY glReadBuffer(GLenum src)
case GL_COLOR_ATTACHMENT29: case GL_COLOR_ATTACHMENT29:
case GL_COLOR_ATTACHMENT30: case GL_COLOR_ATTACHMENT30:
case GL_COLOR_ATTACHMENT31: case GL_COLOR_ATTACHMENT31:
{
GLuint index = (src - GL_COLOR_ATTACHMENT0);
if(index >= MAX_COLOR_ATTACHMENTS)
{ {
return error(GL_INVALID_OPERATION); GLuint index = (src - GL_COLOR_ATTACHMENT0);
} if(index >= MAX_COLOR_ATTACHMENTS)
if(readFramebufferName == 0) {
{ return error(GL_INVALID_OPERATION);
return error(GL_INVALID_OPERATION); }
if(readFramebufferName == 0)
{
return error(GL_INVALID_OPERATION);
}
context->setFramebufferReadBuffer(src);
} }
context->setFramebufferReadBuffer(src);
}
break; break;
default: default:
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
...@@ -387,7 +387,7 @@ GL_APICALL void GL_APIENTRY glTexImage3D(GLenum target, GLint level, GLint inter ...@@ -387,7 +387,7 @@ GL_APICALL void GL_APIENTRY glTexImage3D(GLenum target, GLint level, GLint inter
return error(validationError); return error(validationError);
} }
GLenum sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type); GLint sizedInternalFormat = gl::GetSizedInternalFormat(internalformat, type);
texture->setImage(level, width, height, depth, sizedInternalFormat, format, type, context->getUnpackParameters(), data); texture->setImage(level, width, height, depth, sizedInternalFormat, format, type, context->getUnpackParameters(), data);
} }
} }
...@@ -3621,6 +3621,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum ...@@ -3621,6 +3621,7 @@ GL_APICALL void GL_APIENTRY glTexStorage2D(GLenum target, GLsizei levels, GLenum
{ {
return error(GL_INVALID_ENUM); return error(GL_INVALID_ENUM);
} }
// Fall through to GL_TEXTURE_2D case.
case GL_TEXTURE_2D: case GL_TEXTURE_2D:
{ {
if((width > es2::IMPLEMENTATION_MAX_TEXTURE_SIZE) || if((width > es2::IMPLEMENTATION_MAX_TEXTURE_SIZE) ||
...@@ -3735,10 +3736,8 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum ...@@ -3735,10 +3736,8 @@ GL_APICALL void GL_APIENTRY glTexStorage3D(GLenum target, GLsizei levels, GLenum
for(int level = 0; level < levels; level++) 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(level, width, height, depth, internalformat, GL_NONE, GL_NONE, context->getUnpackParameters(), nullptr);
{
texture->setImage(level, width, height, depth, internalformat, GL_NONE, GL_NONE, context->getUnpackParameters(), nullptr);
}
width = std::max(1, (width / 2)); width = std::max(1, (width / 2));
height = std::max(1, (height / 2)); height = std::max(1, (height / 2));
} }
......
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