aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/webglrenderingcontext.rs41
-rw-r--r--tests/wpt/webgl/meta/conformance/textures/misc/copy-tex-image-2d-formats.html.ini11
2 files changed, 41 insertions, 11 deletions
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 354f918a0dd..fb4c13b321e 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -1928,6 +1928,47 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
Err(_) => return,
};
+ let framebuffer_format = match self.bound_framebuffer.get() {
+ Some(fb) => match fb.attachment(constants::COLOR_ATTACHMENT0) {
+ Some(WebGLFramebufferAttachmentRoot::Renderbuffer(rb)) => {
+ TexFormat::from_gl_constant(rb.internal_format())
+ },
+ Some(WebGLFramebufferAttachmentRoot::Texture(texture)) => {
+ texture.image_info_for_target(&target, 0).internal_format()
+ },
+ None => None,
+ },
+ None => {
+ let attrs = self.GetContextAttributes().unwrap();
+ Some(if attrs.alpha {
+ TexFormat::RGBA
+ } else {
+ TexFormat::RGB
+ })
+ },
+ };
+
+ let framebuffer_format = match framebuffer_format {
+ Some(f) => f,
+ None => {
+ self.webgl_error(InvalidOperation);
+ return;
+ },
+ };
+
+ match (framebuffer_format, internal_format) {
+ (a, b) if a == b => (),
+ (TexFormat::RGBA, TexFormat::RGB) => (),
+ (TexFormat::RGBA, TexFormat::Alpha) => (),
+ (TexFormat::RGBA, TexFormat::Luminance) => (),
+ (TexFormat::RGBA, TexFormat::LuminanceAlpha) => (),
+ (TexFormat::RGB, TexFormat::Luminance) => (),
+ _ => {
+ self.webgl_error(InvalidOperation);
+ return;
+ },
+ }
+
// NB: TexImage2D depth is always equal to 1
handle_potential_webgl_error!(
self,
diff --git a/tests/wpt/webgl/meta/conformance/textures/misc/copy-tex-image-2d-formats.html.ini b/tests/wpt/webgl/meta/conformance/textures/misc/copy-tex-image-2d-formats.html.ini
deleted file mode 100644
index a4bd32b2816..00000000000
--- a/tests/wpt/webgl/meta/conformance/textures/misc/copy-tex-image-2d-formats.html.ini
+++ /dev/null
@@ -1,11 +0,0 @@
-[copy-tex-image-2d-formats.html]
- bug: https://github.com/servo/servo/issues/20595
- [WebGL test #32: getError expected: INVALID_OPERATION. Was NO_ERROR : should not be able to copyTexImage2D ALPHA from RGB]
- expected: FAIL
-
- [WebGL test #40: getError expected: INVALID_OPERATION. Was NO_ERROR : should not be able to copyTexImage2D RGBA from RGB]
- expected: FAIL
-
- [WebGL test #36: getError expected: INVALID_OPERATION. Was NO_ERROR : should not be able to copyTexImage2D LUMINANCE_ALPHA from RGB]
- expected: FAIL
-