// Check that copyTexSubImage3D does not set a destination pixel when // the corresponding source pixel is outside the framebuffer. TEST_P(WebGL2ReadOutsideFramebufferTest, CopyTexSubImage3D) { // Robust CopyTexSubImage3D behaviour is not implemented on OpenGL. ANGLE_SKIP_TEST_IF(IsDesktopOpenGL() || IsOpenGLES()); Main3D(&WebGLReadOutsideFramebufferTest::TestCopyTexSubImage3D, false); }
// Check that copyTexImage2D sets (0,0,0,0) for pixels outside the framebuffer. TEST_P(WebGLReadOutsideFramebufferTest, CopyTexImage2D) { Main2D(&WebGLReadOutsideFramebufferTest::TestCopyTexImage2D, true); #ifdef _WIN64 // TODO(fjhenigman): Figure out this failure. // Cube map skipped on 64-bit Windows with D3D FL 9.3 ANGLE_SKIP_TEST_IF(GetParam() == ES2_D3D11_FL9_3()); #endif Main2D(&WebGLReadOutsideFramebufferTest::TestCopyTexImageCube, true); }
// Tests what happens when we make a PBuffer that isn't shader-readable. TEST_P(D3DTextureTest, NonReadablePBuffer) { ANGLE_SKIP_TEST_IF(!valid() || !IsD3D11()); constexpr size_t bufferSize = 32; EGLSurface pbuffer = createD3D11PBuffer(bufferSize, bufferSize, EGL_TEXTURE_RGBA, EGL_TEXTURE_2D, 1, 0, D3D11_BIND_RENDER_TARGET, DXGI_FORMAT_R8G8B8A8_UNORM); ASSERT_EGL_SUCCESS(); ASSERT_NE(pbuffer, EGL_NO_SURFACE); EGLWindow *window = getEGLWindow(); EGLDisplay display = window->getDisplay(); eglMakeCurrent(display, pbuffer, pbuffer, window->getContext()); ASSERT_EGL_SUCCESS(); glViewport(0, 0, static_cast<GLsizei>(bufferSize), static_cast<GLsizei>(bufferSize)); // Clear to green. glClearColor(0.0f, 1.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); ASSERT_GL_NO_ERROR(); EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green); // Copy the green color to a texture. GLTexture tex; glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, bufferSize, bufferSize, 0); ASSERT_GL_NO_ERROR(); // Clear to red. glClearColor(1.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); ASSERT_GL_NO_ERROR(); EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::red); // Draw with the texture and expect green. draw2DTexturedQuad(0.5f, 1.0f, false); EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::green); // Make current with fixture EGL to ensure the Surface can be released immediately. getEGLWindow()->makeCurrent(); eglDestroySurface(display, pbuffer); }
// Test creating pbuffer from textures with several // different DXGI formats. TEST_P(D3DTextureTest, TestD3D11SupportedFormats) { ANGLE_SKIP_TEST_IF(!valid() || !IsD3D11()); const DXGI_FORMAT formats[] = {DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM_SRGB}; for (size_t i = 0; i < 4; ++i) { EGLSurface pbuffer = createD3D11PBuffer(32, 32, EGL_TEXTURE_RGBA, EGL_TEXTURE_2D, 1, 0, D3D11_BIND_RENDER_TARGET, formats[i]); ASSERT_EGL_SUCCESS(); ASSERT_NE(pbuffer, EGL_NO_SURFACE); EGLWindow *window = getEGLWindow(); EGLDisplay display = window->getDisplay(); eglMakeCurrent(display, pbuffer, pbuffer, window->getContext()); ASSERT_EGL_SUCCESS(); window->makeCurrent(); eglDestroySurface(display, pbuffer); } }