summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp')
-rw-r--r--gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp326
1 files changed, 0 insertions, 326 deletions
diff --git a/gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp b/gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp
deleted file mode 100644
index 028b24a81..000000000
--- a/gfx/angle/src/tests/gl_tests/D3DTextureTest.cpp
+++ /dev/null
@@ -1,326 +0,0 @@
-//
-// Copyright 2015 The ANGLE Project Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// D3DTextureTest:
-// Tests of the EGL_ANGLE_d3d_texture_client_buffer extension
-
-#include "test_utils/ANGLETest.h"
-
-#include <d3d11.h>
-#include <windows.h>
-
-#include "com_utils.h"
-
-namespace angle
-{
-
-class D3DTextureTest : public ANGLETest
-{
- protected:
- D3DTextureTest()
- {
- setWindowWidth(128);
- setWindowHeight(128);
- setConfigRedBits(8);
- setConfigGreenBits(8);
- setConfigBlueBits(8);
- setConfigAlphaBits(8);
- }
-
- void SetUp() override
- {
- ANGLETest::SetUp();
-
- // clang-format off
- const std::string vsSource = SHADER_SOURCE
- (
- precision highp float;
- attribute vec4 position;
- varying vec2 texcoord;
-
- void main()
- {
- gl_Position = position;
- texcoord = (position.xy * 0.5) + 0.5;
- texcoord.y = 1.0 - texcoord.y;
- }
- );
-
- const std::string textureFSSource = SHADER_SOURCE
- (
- precision highp float;
- uniform sampler2D tex;
- varying vec2 texcoord;
-
- void main()
- {
- gl_FragColor = texture2D(tex, texcoord);
- }
- );
- // clang-format on
-
- mTextureProgram = CompileProgram(vsSource, textureFSSource);
- ASSERT_NE(0u, mTextureProgram) << "shader compilation failed.";
-
- mTextureUniformLocation = glGetUniformLocation(mTextureProgram, "tex");
- ASSERT_NE(-1, mTextureUniformLocation);
-
- mD3D11Module = LoadLibrary(TEXT("d3d11.dll"));
- ASSERT_NE(nullptr, mD3D11Module);
-
- PFN_D3D11_CREATE_DEVICE createDeviceFunc = reinterpret_cast<PFN_D3D11_CREATE_DEVICE>(
- GetProcAddress(mD3D11Module, "D3D11CreateDevice"));
-
- EGLWindow *window = getEGLWindow();
- EGLDisplay display = window->getDisplay();
- if (eglDisplayExtensionEnabled(display, "EGL_EXT_device_query"))
- {
- PFNEGLQUERYDISPLAYATTRIBEXTPROC eglQueryDisplayAttribEXT =
- reinterpret_cast<PFNEGLQUERYDISPLAYATTRIBEXTPROC>(
- eglGetProcAddress("eglQueryDisplayAttribEXT"));
- PFNEGLQUERYDEVICEATTRIBEXTPROC eglQueryDeviceAttribEXT =
- reinterpret_cast<PFNEGLQUERYDEVICEATTRIBEXTPROC>(
- eglGetProcAddress("eglQueryDeviceAttribEXT"));
-
- EGLDeviceEXT device = 0;
- {
- EGLAttrib result = 0;
- EXPECT_EGL_TRUE(eglQueryDisplayAttribEXT(display, EGL_DEVICE_EXT, &result));
- device = reinterpret_cast<EGLDeviceEXT>(result);
- }
-
- if (eglDeviceExtensionEnabled(device, "EGL_ANGLE_device_d3d"))
- {
- EGLAttrib result = 0;
- if (eglQueryDeviceAttribEXT(device, EGL_D3D11_DEVICE_ANGLE, &result))
- {
- mD3D11Device = reinterpret_cast<ID3D11Device *>(result);
- mD3D11Device->AddRef();
- }
- else if (eglQueryDeviceAttribEXT(device, EGL_D3D9_DEVICE_ANGLE, &result))
- {
- mD3D9Device = reinterpret_cast<IDirect3DDevice9 *>(result);
- mD3D9Device->AddRef();
- }
- }
- }
- else
- {
- ASSERT_TRUE(
- SUCCEEDED(createDeviceFunc(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0, nullptr,
- 0, D3D11_SDK_VERSION, &mD3D11Device, nullptr, nullptr)));
- }
- }
-
- void TearDown() override
- {
- glDeleteProgram(mTextureProgram);
-
- if (mD3D11Device)
- {
- mD3D11Device->Release();
- mD3D11Device = nullptr;
- }
-
- FreeLibrary(mD3D11Module);
- mD3D11Module = nullptr;
-
- if (mD3D9Device)
- {
- mD3D9Device->Release();
- mD3D9Device = nullptr;
- }
-
- ANGLETest::TearDown();
- }
-
- EGLSurface createPBuffer(size_t width,
- size_t height,
- EGLint eglTextureFormat,
- EGLint eglTextureTarget)
- {
- EGLWindow *window = getEGLWindow();
- EGLDisplay display = window->getDisplay();
- EGLConfig config = window->getConfig();
-
- EGLint attribs[] = {
- EGL_TEXTURE_FORMAT, eglTextureFormat, EGL_TEXTURE_TARGET,
- eglTextureTarget, EGL_NONE, EGL_NONE,
- };
-
- if (mD3D11Device)
- {
- ID3D11Texture2D *texture = nullptr;
- CD3D11_TEXTURE2D_DESC desc(DXGI_FORMAT_R8G8B8A8_UNORM, static_cast<UINT>(width),
- static_cast<UINT>(height), 1, 1,
- D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET);
- EXPECT_TRUE(SUCCEEDED(mD3D11Device->CreateTexture2D(&desc, nullptr, &texture)));
-
- EGLSurface pbuffer = eglCreatePbufferFromClientBuffer(display, EGL_D3D_TEXTURE_ANGLE,
- texture, config, attribs);
-
- texture->Release();
-
- return pbuffer;
- }
- else if (mD3D9Device)
- {
- IDirect3DTexture9 *texture = nullptr;
- EXPECT_TRUE(SUCCEEDED(mD3D9Device->CreateTexture(
- static_cast<UINT>(width), static_cast<UINT>(height), 1, D3DUSAGE_RENDERTARGET,
- D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture, nullptr)));
-
- EGLSurface pbuffer = eglCreatePbufferFromClientBuffer(display, EGL_D3D_TEXTURE_ANGLE,
- texture, config, attribs);
-
- texture->Release();
-
- return pbuffer;
- }
- else
- {
- return EGL_NO_SURFACE;
- }
- }
-
- bool valid() const
- {
- EGLWindow *window = getEGLWindow();
- EGLDisplay display = window->getDisplay();
- if (!eglDisplayExtensionEnabled(display, "EGL_ANGLE_d3d_texture_client_buffer"))
- {
- std::cout << "Test skipped due to missing EGL_ANGLE_d3d_texture_client_buffer"
- << std::endl;
- return false;
- }
-
- if (!mD3D11Device && !mD3D9Device)
- {
- std::cout << "Test skipped due to no D3D devices being available." << std::endl;
- return false;
- }
-
- if (IsWindows() && IsAMD() && IsOpenGL())
- {
- std::cout << "Test skipped on Windows AMD OpenGL." << std::endl;
- return false;
- }
-
- if (IsWindows() && IsIntel() && IsOpenGL())
- {
- std::cout << "Test skipped on Windows Intel OpenGL." << std::endl;
- return false;
- }
- return true;
- }
-
- GLuint mTextureProgram;
- GLint mTextureUniformLocation;
-
- HMODULE mD3D11Module = nullptr;
- ID3D11Device *mD3D11Device = nullptr;
-
- IDirect3DDevice9 *mD3D9Device = nullptr;
-};
-
-// Test creating a pbuffer from a d3d surface and clearing it
-TEST_P(D3DTextureTest, Clear)
-{
- if (!valid())
- {
- return;
- }
-
- EGLWindow *window = getEGLWindow();
- EGLDisplay display = window->getDisplay();
-
- const size_t bufferSize = 32;
-
- EGLSurface pbuffer = createPBuffer(bufferSize, bufferSize, EGL_NO_TEXTURE, EGL_NO_TEXTURE);
- ASSERT_EGL_SUCCESS();
- ASSERT_NE(pbuffer, EGL_NO_SURFACE);
-
- // Apply the Pbuffer and clear it to purple and verify
- eglMakeCurrent(display, pbuffer, pbuffer, window->getContext());
- ASSERT_EGL_SUCCESS();
-
- glViewport(0, 0, static_cast<GLsizei>(bufferSize), static_cast<GLsizei>(bufferSize));
- glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- ASSERT_GL_NO_ERROR();
- EXPECT_PIXEL_EQ(static_cast<GLint>(bufferSize) / 2, static_cast<GLint>(bufferSize) / 2, 255, 0,
- 255, 255);
-
- eglDestroySurface(display, pbuffer);
-}
-
-// Test creating a pbuffer from a d3d surface and binding it to a texture
-TEST_P(D3DTextureTest, BindTexImage)
-{
- if (!valid())
- {
- return;
- }
-
- EGLWindow *window = getEGLWindow();
-
- const size_t bufferSize = 32;
-
- EGLSurface pbuffer = createPBuffer(bufferSize, bufferSize, EGL_TEXTURE_RGBA, EGL_TEXTURE_2D);
- ASSERT_EGL_SUCCESS();
- ASSERT_NE(pbuffer, EGL_NO_SURFACE);
-
- // Apply the Pbuffer and clear it to purple
- eglMakeCurrent(window->getDisplay(), pbuffer, pbuffer, window->getContext());
- ASSERT_EGL_SUCCESS();
-
- glViewport(0, 0, static_cast<GLsizei>(bufferSize), static_cast<GLsizei>(bufferSize));
- glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- ASSERT_GL_NO_ERROR();
-
- EXPECT_PIXEL_EQ(static_cast<GLint>(bufferSize) / 2, static_cast<GLint>(bufferSize) / 2, 255, 0,
- 255, 255);
-
- // Apply the window surface
- eglMakeCurrent(window->getDisplay(), window->getSurface(), window->getSurface(),
- window->getContext());
-
- // Create a texture and bind the Pbuffer to it
- GLuint texture = 0;
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- EXPECT_GL_NO_ERROR();
-
- eglBindTexImage(window->getDisplay(), pbuffer, EGL_BACK_BUFFER);
- glViewport(0, 0, getWindowWidth(), getWindowHeight());
- ASSERT_EGL_SUCCESS();
-
- // Draw a quad and verify that it is purple
- glUseProgram(mTextureProgram);
- glUniform1i(mTextureUniformLocation, 0);
-
- drawQuad(mTextureProgram, "position", 0.5f);
- EXPECT_GL_NO_ERROR();
-
- // Unbind the texture
- eglReleaseTexImage(window->getDisplay(), pbuffer, EGL_BACK_BUFFER);
- ASSERT_EGL_SUCCESS();
-
- // Verify that purple was drawn
- EXPECT_PIXEL_EQ(getWindowWidth() / 2, getWindowHeight() / 2, 255, 0, 255, 255);
-
- glDeleteTextures(1, &texture);
-}
-
-// Use this to select which configurations (e.g. which renderer, which GLES major version) these
-// tests should be run against.
-ANGLE_INSTANTIATE_TEST(D3DTextureTest, ES2_D3D9(), ES2_D3D11(), ES2_OPENGL());
-
-} // namespace