Implement GL_OES_fbo_render_mipmap.
This enables binding any texture mipmap level as a framebuffer
attachment.
Bug swiftshader:104
Change-Id: I3d4ea637ddd38bb62ca1363fe2c69c569eea36e9
Reviewed-on: https://swiftshader-review.googlesource.com/18008
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Lingfeng Yang <lfy@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index 1577569..4be1261 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -6006,11 +6006,6 @@
return error(GL_INVALID_OPERATION);
}
- if(tex->isCompressed(textarget, level))
- {
- return error(GL_INVALID_OPERATION);
- }
-
switch(textarget)
{
case GL_TEXTURE_3D:
@@ -6023,10 +6018,15 @@
return error(GL_INVALID_ENUM);
}
- if(level != 0)
+ if((level < 0) || (level >= es2::IMPLEMENTATION_MAX_TEXTURE_LEVELS))
{
return error(GL_INVALID_VALUE);
}
+
+ if(tex->isCompressed(textarget, level))
+ {
+ return error(GL_INVALID_OPERATION);
+ }
}
es2::Framebuffer *framebuffer = nullptr;
@@ -6049,14 +6049,14 @@
switch(attachment)
{
- case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture); break;
- case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture); break;
+ case GL_DEPTH_ATTACHMENT: framebuffer->setDepthbuffer(textarget, texture, level); break;
+ case GL_STENCIL_ATTACHMENT: framebuffer->setStencilbuffer(textarget, texture, level); break;
default:
if((attachment - GL_COLOR_ATTACHMENT0) >= MAX_COLOR_ATTACHMENTS)
{
return error(GL_INVALID_ENUM);
}
- framebuffer->setColorbuffer(textarget, texture, attachment - GL_COLOR_ATTACHMENT0);
+ framebuffer->setColorbuffer(textarget, texture, attachment - GL_COLOR_ATTACHMENT0, level);
break;
}
}