0
Files
src/ui/gl/gl_image_dxgi_unittest.cc
Xiaohan Wang c3772d7f28 ui: Replace uses of ComPtr::GetAddressOf() with ComPtr::operator&
Microsoft::WRL::ComPtr<T>::GetAddressOf() is banned due to the ease
of causing memory leaks.

Also replace CopyTo(foo.GetAddressOf()) with As(&foo) since CopyTo(&foo)
does not work if we are copying to different interfaces.

Also replace QueryInterface(foo.GetAddressOf()) with
QueryInterface(IID_PPV_ARGS(&foo)).

NOPRESUBMIT=true

Bug: 914910
Change-Id: Ib574cb4d93ec9e6b1134d2916058fa792aaec862
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2271525
Reviewed-by: Nico Weber <thakis@chromium.org>
Auto-Submit: Xiaohan Wang <xhwang@chromium.org>
Commit-Queue: Xiaohan Wang <xhwang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#785863}
2020-07-07 18:07:19 +00:00

115 lines
3.9 KiB
C++

// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stddef.h>
#include <stdint.h>
#include <wrl.h>
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gl/gl_angle_util_win.h"
#include "ui/gl/gl_image_dxgi.h"
#include "ui/gl/test/gl_image_bind_test_template.h"
#include "ui/gl/test/gl_image_test_template.h"
#include "ui/gl/test/gl_image_zero_initialize_test_template.h"
namespace gl {
namespace {
const uint8_t kRGBImageColor[] = {0x30, 0x40, 0x10, 0xFF};
template <gfx::BufferFormat format>
class GLImageDXGITestDelegate : public GLImageTestDelegateBase {
public:
scoped_refptr<GLImage> CreateSolidColorImage(const gfx::Size& size,
const uint8_t color[4]) const {
D3D11_TEXTURE2D_DESC desc;
desc.Width = size.width();
desc.Height = size.height();
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
desc.CPUAccessFlags = 0;
desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_NTHANDLE |
D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX;
std::vector<unsigned char> originalData(size.width() * size.height() * 4);
for (int x = 0; x < size.width(); ++x) {
for (int y = 0; y < size.height(); ++y) {
for (int i = 0; i < 4; ++i) {
originalData[(x + y * size.width()) * 4 + i] = color[i];
}
}
}
D3D11_SUBRESOURCE_DATA initial_data = {};
initial_data.pSysMem = originalData.data();
initial_data.SysMemPitch = size.width() * 4;
Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device =
QueryD3D11DeviceObjectFromANGLE();
Microsoft::WRL::ComPtr<ID3D11Texture2D> texture;
HRESULT hr = d3d11_device->CreateTexture2D(&desc, &initial_data, &texture);
EXPECT_HRESULT_SUCCEEDED(hr);
Microsoft::WRL::ComPtr<IDXGIResource1> dxgi_resource;
hr = texture.As(&dxgi_resource);
EXPECT_HRESULT_SUCCEEDED(hr);
HANDLE handle = nullptr;
hr = dxgi_resource->CreateSharedHandle(
nullptr, DXGI_SHARED_RESOURCE_READ | DXGI_SHARED_RESOURCE_WRITE,
nullptr, &handle);
EXPECT_HRESULT_SUCCEEDED(hr);
scoped_refptr<GLImageDXGI> image(new GLImageDXGI(size, nullptr));
bool rv =
image->InitializeHandle(base::win::ScopedHandle(handle), 0, format);
EXPECT_TRUE(rv);
return image;
}
scoped_refptr<GLImage> CreateImage(const gfx::Size& size) const {
const uint8_t color[4] = {0, 0, 0, 0};
return CreateSolidColorImage(size, color);
}
unsigned GetTextureTarget() const { return GL_TEXTURE_2D; }
const uint8_t* GetImageColor() { return kRGBImageColor; }
int GetAdmissibleError() const { return 0; }
};
using GLImageTestTypes =
testing::Types<GLImageDXGITestDelegate<gfx::BufferFormat::RGBA_8888>,
GLImageDXGITestDelegate<gfx::BufferFormat::RGBX_8888>>;
// Disabled by default as it requires DX11.
INSTANTIATE_TYPED_TEST_SUITE_P(DISABLED_GLImageDXGIHandle,
GLImageTest,
GLImageTestTypes);
using GLImageRGBTestTypes =
testing::Types<GLImageDXGITestDelegate<gfx::BufferFormat::RGBA_8888>,
GLImageDXGITestDelegate<gfx::BufferFormat::RGBX_8888>>;
// Disabled by default as it requires DX11.
INSTANTIATE_TYPED_TEST_SUITE_P(DISABLED_GLImageDXGIHandle,
GLImageZeroInitializeTest,
GLImageRGBTestTypes);
// Disabled by default as it requires DX11.
INSTANTIATE_TYPED_TEST_SUITE_P(
DISABLED_GLImageDXGIHandle,
GLImageBindTest,
GLImageDXGITestDelegate<gfx::BufferFormat::RGBA_8888>);
} // namespace
} // namespace gl