Commit 9f4583dd by Jiawei-Shao Committed by Commit Bot

Add Platform Detection and Tighten the workarounds on Intel GPU

This patch intends to add platform detection to ANGLE and tighten the driver bug workarounds on Intel GPU. BUG=angleproject:1548 Change-Id: I1ea57e174f688a175da8b658de4337295037fcab Reviewed-on: https://chromium-review.googlesource.com/399914 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 13389b66
...@@ -248,17 +248,6 @@ using ResourceMap = std::unordered_map<GLuint, ResourceT *>; ...@@ -248,17 +248,6 @@ using ResourceMap = std::unordered_map<GLuint, ResourceT *>;
namespace rx namespace rx
{ {
enum VendorID : uint32_t
{
VENDOR_ID_UNKNOWN = 0x0,
VENDOR_ID_AMD = 0x1002,
VENDOR_ID_INTEL = 0x8086,
VENDOR_ID_NVIDIA = 0x10DE,
// This is Qualcomm PCI Vendor ID.
// Android doesn't have a PCI bus, but all we need is a unique id.
VENDOR_ID_QUALCOMM = 0x5143,
};
// A macro that determines whether an object has a given runtime type. // A macro that determines whether an object has a given runtime type.
#if defined(__clang__) #if defined(__clang__)
#if __has_feature(cxx_rtti) #if __has_feature(cxx_rtti)
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h" #include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h" #include "libANGLE/renderer/d3d/FramebufferD3D.h"
#include "libANGLE/renderer/d3d/WorkaroundsD3D.h" #include "libANGLE/renderer/d3d/WorkaroundsD3D.h"
#include "libANGLE/renderer/driver_utils.h"
namespace rx namespace rx
{ {
...@@ -1829,7 +1830,7 @@ WorkaroundsD3D GenerateWorkarounds(const Renderer11DeviceCaps &deviceCaps, ...@@ -1829,7 +1830,7 @@ WorkaroundsD3D GenerateWorkarounds(const Renderer11DeviceCaps &deviceCaps,
workarounds.useInstancedPointSpriteEmulation = is9_3; workarounds.useInstancedPointSpriteEmulation = is9_3;
// TODO(jmadill): Narrow problematic driver range. // TODO(jmadill): Narrow problematic driver range.
if (adapterDesc.VendorId == VENDOR_ID_NVIDIA) if (IsNvidia(adapterDesc.VendorId))
{ {
if (deviceCaps.driverVersion.valid()) if (deviceCaps.driverVersion.valid())
{ {
...@@ -1848,16 +1849,19 @@ WorkaroundsD3D GenerateWorkarounds(const Renderer11DeviceCaps &deviceCaps, ...@@ -1848,16 +1849,19 @@ WorkaroundsD3D GenerateWorkarounds(const Renderer11DeviceCaps &deviceCaps,
// TODO(jmadill): Disable workaround when we have a fixed compiler DLL. // TODO(jmadill): Disable workaround when we have a fixed compiler DLL.
workarounds.expandIntegerPowExpressions = true; workarounds.expandIntegerPowExpressions = true;
workarounds.flushAfterEndingTransformFeedback = (adapterDesc.VendorId == VENDOR_ID_NVIDIA); workarounds.flushAfterEndingTransformFeedback = IsNvidia(adapterDesc.VendorId);
workarounds.getDimensionsIgnoresBaseLevel = (adapterDesc.VendorId == VENDOR_ID_NVIDIA); workarounds.getDimensionsIgnoresBaseLevel = IsNvidia(adapterDesc.VendorId);
workarounds.preAddTexelFetchOffsets = (adapterDesc.VendorId == VENDOR_ID_INTEL); workarounds.preAddTexelFetchOffsets = IsIntel(adapterDesc.VendorId);
workarounds.disableB5G6R5Support = (adapterDesc.VendorId == VENDOR_ID_INTEL); workarounds.disableB5G6R5Support = IsIntel(adapterDesc.VendorId);
workarounds.rewriteUnaryMinusOperator = (adapterDesc.VendorId == VENDOR_ID_INTEL); workarounds.rewriteUnaryMinusOperator =
workarounds.emulateIsnanFloat = (adapterDesc.VendorId == VENDOR_ID_INTEL); IsIntel(adapterDesc.VendorId) &&
(IsBroadwell(adapterDesc.DeviceId) || IsHaswell(adapterDesc.DeviceId));
workarounds.emulateIsnanFloat =
IsIntel(adapterDesc.VendorId) && IsSkylake(adapterDesc.DeviceId);
// TODO(jmadill): Disable when we have a fixed driver version. // TODO(jmadill): Disable when we have a fixed driver version.
workarounds.emulateTinyStencilTextures = (adapterDesc.VendorId == VENDOR_ID_AMD); workarounds.emulateTinyStencilTextures = IsAMD(adapterDesc.VendorId);
// The tiny stencil texture workaround involves using CopySubresource or UpdateSubresource on a // The tiny stencil texture workaround involves using CopySubresource or UpdateSubresource on a
// depth stencil texture. This is not allowed until feature level 10.1 but since it is not // depth stencil texture. This is not allowed until feature level 10.1 but since it is not
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "libANGLE/renderer/d3d/d3d9/ShaderCache.h" #include "libANGLE/renderer/d3d/d3d9/ShaderCache.h"
#include "libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.h" #include "libANGLE/renderer/d3d/d3d9/VertexDeclarationCache.h"
#include "libANGLE/renderer/d3d/d3d9/StateManager9.h" #include "libANGLE/renderer/d3d/d3d9/StateManager9.h"
#include "libANGLE/renderer/driver_utils.h"
namespace gl namespace gl
{ {
......
...@@ -70,7 +70,7 @@ StateManager9::~StateManager9() ...@@ -70,7 +70,7 @@ StateManager9::~StateManager9()
void StateManager9::initialize() void StateManager9::initialize()
{ {
mUsingZeroColorMaskWorkaround = mRenderer9->getVendorId() == VENDOR_ID_AMD; mUsingZeroColorMaskWorkaround = IsAMD(mRenderer9->getVendorId());
} }
void StateManager9::forceSetBlendState() void StateManager9::forceSetBlendState()
......
...@@ -191,7 +191,7 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI ...@@ -191,7 +191,7 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI
// //
// Some non-switchable AMD GPUs / drivers do not respect the source rectangle to Present. Therefore, when the vendor ID // Some non-switchable AMD GPUs / drivers do not respect the source rectangle to Present. Therefore, when the vendor ID
// is not Intel, the back buffer width must be exactly the same width as the window or horizontal scaling will occur. // is not Intel, the back buffer width must be exactly the same width as the window or horizontal scaling will occur.
if (mRenderer->getVendorId() == VENDOR_ID_INTEL) if (IsIntel(mRenderer->getVendorId()))
{ {
presentParameters.BackBufferWidth = (presentParameters.BackBufferWidth + 63) / 64 * 64; presentParameters.BackBufferWidth = (presentParameters.BackBufferWidth + 63) / 64 * 64;
} }
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "libANGLE/renderer/d3d/d3d9/RenderTarget9.h" #include "libANGLE/renderer/d3d/d3d9/RenderTarget9.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h" #include "libANGLE/renderer/d3d/FramebufferD3D.h"
#include "libANGLE/renderer/d3d/WorkaroundsD3D.h" #include "libANGLE/renderer/d3d/WorkaroundsD3D.h"
#include "libANGLE/renderer/driver_utils.h"
#include "third_party/systeminfo/SystemInfo.h" #include "third_party/systeminfo/SystemInfo.h"
...@@ -540,12 +541,12 @@ void GenerateCaps(IDirect3D9 *d3d9, ...@@ -540,12 +541,12 @@ void GenerateCaps(IDirect3D9 *d3d9,
{ {
// ATI cards on XP have problems with non-power-of-two textures. // ATI cards on XP have problems with non-power-of-two textures.
extensions->textureNPOT = !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_POW2) && extensions->textureNPOT = !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_POW2) &&
!(deviceCaps.TextureCaps & D3DPTEXTURECAPS_CUBEMAP_POW2) && !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_CUBEMAP_POW2) &&
!(deviceCaps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) && !(deviceCaps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) &&
!(!isWindowsVistaOrGreater() && adapterId.VendorId == VENDOR_ID_AMD); !(!isWindowsVistaOrGreater() && IsAMD(adapterId.VendorId));
// Disable depth texture support on AMD cards (See ANGLE issue 839) // Disable depth texture support on AMD cards (See ANGLE issue 839)
if (adapterId.VendorId == VENDOR_ID_AMD) if (IsAMD(adapterId.VendorId))
{ {
extensions->depthTextures = false; extensions->depthTextures = false;
} }
......
//
// Copyright (c) 2016 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.
//
// driver_utils.h : provides more information about current driver.
#include <algorithm>
#include "libANGLE/renderer/driver_utils.h"
namespace rx
{
// Intel
// Referenced from https://cgit.freedesktop.org/vaapi/intel-driver/tree/src/i965_pciids.h
namespace
{
// gen7
const uint32_t Haswell[] = {
0x0402, 0x0406, 0x040A, 0x040B, 0x040E, 0x0C02, 0x0C06, 0x0C0A, 0x0C0B, 0x0C0E,
0x0A02, 0x0A06, 0x0A0A, 0x0A0B, 0x0A0E, 0x0D02, 0x0D06, 0x0D0A, 0x0D0B, 0x0D0E, // hsw_gt1
0x0412, 0x0416, 0x041A, 0x041B, 0x041E, 0x0C12, 0x0C16, 0x0C1A, 0x0C1B, 0x0C1E,
0x0A12, 0x0A16, 0x0A1A, 0x0A1B, 0x0A1E, 0x0D12, 0x0D16, 0x0D1A, 0x0D1B, 0x0D1E, // hsw_gt2
0x0422, 0x0426, 0x042A, 0x042B, 0x042E, 0x0C22, 0x0C26, 0x0C2A, 0x0C2B, 0x0C2E,
0x0A22, 0x0A26, 0x0A2A, 0x0A2B, 0x0A2E, 0x0D22, 0x0D26, 0x0D2A, 0x0D2B, 0x0D2E // hsw_gt3
};
// gen8
const uint32_t Broadwell[] = {0x1602, 0x1606, 0x160A, 0x160B, 0x160D, 0x160E,
0x1612, 0x1616, 0x161A, 0x161B, 0x161D, 0x161E,
0x1622, 0x1626, 0x162A, 0x162B, 0x162D, 0x162E};
const uint32_t CherryView[] = {0x22B0, 0x22B1, 0x22B2, 0x22B3};
// gen9
const uint32_t Skylake[] = {0x1902, 0x1906, 0x190A, 0x190B, 0x190E, 0x1912, 0x1913, 0x1915, 0x1916,
0x1917, 0x191A, 0x191B, 0x191D, 0x191E, 0x1921, 0x1923, 0x1926, 0x1927,
0x192A, 0x192B, 0x192D, 0x1932, 0x193A, 0x193B, 0x193D};
const uint32_t Broxton[] = {0x0A84, 0x1A84, 0x1A85, 0x5A84, 0x5A85};
// gen9p5
const uint32_t Kabylake[] = {0x5916, 0x5913, 0x5906, 0x5926, 0x5921, 0x5915, 0x590E,
0x591E, 0x5912, 0x5917, 0x5902, 0x591B, 0x593B, 0x590B,
0x591A, 0x590A, 0x591D, 0x5908, 0x5923, 0x5927};
} // anonymous namespace
bool IsHaswell(uint32_t DeviceId)
{
return std::find(std::begin(Haswell), std::end(Haswell), DeviceId) != std::end(Haswell);
}
bool IsBroadwell(uint32_t DeviceId)
{
return std::find(std::begin(Broadwell), std::end(Broadwell), DeviceId) != std::end(Broadwell);
}
bool IsCherryView(uint32_t DeviceId)
{
return std::find(std::begin(CherryView), std::end(CherryView), DeviceId) !=
std::end(CherryView);
}
bool IsSkylake(uint32_t DeviceId)
{
return std::find(std::begin(Skylake), std::end(Skylake), DeviceId) != std::end(Skylake);
}
bool IsBroxton(uint32_t DeviceId)
{
return std::find(std::begin(Broxton), std::end(Broxton), DeviceId) != std::end(Broxton);
}
bool IsKabylake(uint32_t DeviceId)
{
return std::find(std::begin(Kabylake), std::end(Kabylake), DeviceId) != std::end(Kabylake);
}
} // namespace rx
\ No newline at end of file
//
// Copyright (c) 2016 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.
//
// driver_utils.h : provides more information about current driver.
#ifndef LIBANGLE_RENDERER_DRIVER_UTILS_H_
#define LIBANGLE_RENDERER_DRIVER_UTILS_H_
#include "libANGLE/angletypes.h"
namespace rx
{
enum VendorID : uint32_t
{
VENDOR_ID_UNKNOWN = 0x0,
VENDOR_ID_AMD = 0x1002,
VENDOR_ID_INTEL = 0x8086,
VENDOR_ID_NVIDIA = 0x10DE,
// This is Qualcomm PCI Vendor ID.
// Android doesn't have a PCI bus, but all we need is a unique id.
VENDOR_ID_QUALCOMM = 0x5143,
};
inline bool IsAMD(uint32_t vendor_id)
{
return vendor_id == VENDOR_ID_AMD;
}
inline bool IsIntel(uint32_t vendor_id)
{
return vendor_id == VENDOR_ID_INTEL;
}
inline bool IsNvidia(uint32_t vendor_id)
{
return vendor_id == VENDOR_ID_NVIDIA;
}
inline bool IsQualcomm(uint32_t vendor_id)
{
return vendor_id == VENDOR_ID_QUALCOMM;
}
// Intel
bool IsHaswell(uint32_t DeviceId);
bool IsBroadwell(uint32_t DeviceId);
bool IsCherryView(uint32_t DeviceId);
bool IsSkylake(uint32_t DeviceId);
bool IsBroxton(uint32_t DeviceId);
bool IsKabylake(uint32_t DeviceId);
} // namespace rx
#endif // LIBANGLE_RENDERER_DRIVER_UTILS_H_
\ No newline at end of file
...@@ -350,7 +350,7 @@ egl::Error DisplayGLX::initialize(egl::Display *display) ...@@ -350,7 +350,7 @@ egl::Error DisplayGLX::initialize(egl::Display *display)
bool isOpenGLES = bool isOpenGLES =
eglAttributes.get(EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE) == eglAttributes.get(EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE) ==
EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE; EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE;
if (isOpenGLES && (vendor == VENDOR_ID_INTEL || vendor == VENDOR_ID_NVIDIA)) if (isOpenGLES && (IsIntel(vendor) || IsNvidia(vendor)))
{ {
return egl::Error(EGL_NOT_INITIALIZED, "Intel or NVIDIA OpenGL ES drivers are not supported."); return egl::Error(EGL_NOT_INITIALIZED, "Intel or NVIDIA OpenGL ES drivers are not supported.");
} }
......
...@@ -877,8 +877,7 @@ void GenerateCaps(const FunctionsGL *functions, gl::Caps *caps, gl::TextureCapsM ...@@ -877,8 +877,7 @@ void GenerateCaps(const FunctionsGL *functions, gl::Caps *caps, gl::TextureCapsM
#if defined(ANGLE_PLATFORM_APPLE) #if defined(ANGLE_PLATFORM_APPLE)
VendorID vendor = GetVendorID(functions); VendorID vendor = GetVendorID(functions);
if ((vendor == VENDOR_ID_AMD || vendor == VENDOR_ID_INTEL) && if ((IsAMD(vendor) || IsIntel(vendor)) && *maxSupportedESVersion >= gl::Version(3, 0))
*maxSupportedESVersion >= gl::Version(3, 0))
{ {
// Apple Intel/AMD drivers do not correctly use the TEXTURE_SRGB_DECODE property of sampler // Apple Intel/AMD drivers do not correctly use the TEXTURE_SRGB_DECODE property of sampler
// states. Disable this extension when we would advertise any ES version that has samplers. // states. Disable this extension when we would advertise any ES version that has samplers.
...@@ -893,21 +892,19 @@ void GenerateWorkarounds(const FunctionsGL *functions, WorkaroundsGL *workaround ...@@ -893,21 +892,19 @@ void GenerateWorkarounds(const FunctionsGL *functions, WorkaroundsGL *workaround
// Don't use 1-bit alpha formats on desktop GL with AMD or Intel drivers. // Don't use 1-bit alpha formats on desktop GL with AMD or Intel drivers.
workarounds->avoid1BitAlphaTextureFormats = workarounds->avoid1BitAlphaTextureFormats =
functions->standard == STANDARD_GL_DESKTOP && functions->standard == STANDARD_GL_DESKTOP && (IsAMD(vendor) || IsIntel(vendor));
(vendor == VENDOR_ID_AMD || vendor == VENDOR_ID_INTEL);
workarounds->rgba4IsNotSupportedForColorRendering = workarounds->rgba4IsNotSupportedForColorRendering =
functions->standard == STANDARD_GL_DESKTOP && vendor == VENDOR_ID_INTEL; functions->standard == STANDARD_GL_DESKTOP && IsIntel(vendor);
workarounds->emulateAbsIntFunction = vendor == VENDOR_ID_INTEL; workarounds->emulateAbsIntFunction = IsIntel(vendor);
workarounds->addAndTrueToLoopCondition = vendor == VENDOR_ID_INTEL; workarounds->addAndTrueToLoopCondition = IsIntel(vendor);
workarounds->emulateIsnanFloat = vendor == VENDOR_ID_INTEL; workarounds->emulateIsnanFloat = IsIntel(vendor);
workarounds->doesSRGBClearsOnLinearFramebufferAttachments = workarounds->doesSRGBClearsOnLinearFramebufferAttachments =
functions->standard == STANDARD_GL_DESKTOP && functions->standard == STANDARD_GL_DESKTOP && (IsIntel(vendor) || IsAMD(vendor));
(vendor == VENDOR_ID_INTEL || vendor == VENDOR_ID_AMD);
#if defined(ANGLE_PLATFORM_APPLE) #if defined(ANGLE_PLATFORM_APPLE)
workarounds->doWhileGLSLCausesGPUHang = true; workarounds->doWhileGLSLCausesGPUHang = true;
...@@ -915,22 +912,22 @@ void GenerateWorkarounds(const FunctionsGL *functions, WorkaroundsGL *workaround ...@@ -915,22 +912,22 @@ void GenerateWorkarounds(const FunctionsGL *functions, WorkaroundsGL *workaround
#endif #endif
workarounds->finishDoesNotCauseQueriesToBeAvailable = workarounds->finishDoesNotCauseQueriesToBeAvailable =
functions->standard == STANDARD_GL_DESKTOP && vendor == VENDOR_ID_NVIDIA; functions->standard == STANDARD_GL_DESKTOP && IsNvidia(vendor);
// TODO(cwallez): Disable this workaround for MacOSX versions 10.9 or later. // TODO(cwallez): Disable this workaround for MacOSX versions 10.9 or later.
workarounds->alwaysCallUseProgramAfterLink = true; workarounds->alwaysCallUseProgramAfterLink = true;
workarounds->unpackOverlappingRowsSeparatelyUnpackBuffer = vendor == VENDOR_ID_NVIDIA; workarounds->unpackOverlappingRowsSeparatelyUnpackBuffer = IsNvidia(vendor);
workarounds->packOverlappingRowsSeparatelyPackBuffer = vendor == VENDOR_ID_NVIDIA; workarounds->packOverlappingRowsSeparatelyPackBuffer = IsNvidia(vendor);
workarounds->initializeCurrentVertexAttributes = vendor == VENDOR_ID_NVIDIA; workarounds->initializeCurrentVertexAttributes = IsNvidia(vendor);
#if defined(ANGLE_PLATFORM_APPLE) #if defined(ANGLE_PLATFORM_APPLE)
workarounds->unpackLastRowSeparatelyForPaddingInclusion = true; workarounds->unpackLastRowSeparatelyForPaddingInclusion = true;
workarounds->packLastRowSeparatelyForPaddingInclusion = true; workarounds->packLastRowSeparatelyForPaddingInclusion = true;
#else #else
workarounds->unpackLastRowSeparatelyForPaddingInclusion = vendor == VENDOR_ID_NVIDIA; workarounds->unpackLastRowSeparatelyForPaddingInclusion = IsNvidia(vendor);
workarounds->packLastRowSeparatelyForPaddingInclusion = vendor == VENDOR_ID_NVIDIA; workarounds->packLastRowSeparatelyForPaddingInclusion = IsNvidia(vendor);
#endif #endif
} }
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "libANGLE/angletypes.h" #include "libANGLE/angletypes.h"
#include "libANGLE/Error.h" #include "libANGLE/Error.h"
#include "libANGLE/renderer/driver_utils.h"
#include "libANGLE/renderer/gl/functionsgl_typedefs.h" #include "libANGLE/renderer/gl/functionsgl_typedefs.h"
#include <string> #include <string>
......
...@@ -352,7 +352,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display) ...@@ -352,7 +352,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display)
// Intel OpenGL ES drivers are not currently supported due to bugs in the driver and ANGLE // Intel OpenGL ES drivers are not currently supported due to bugs in the driver and ANGLE
VendorID vendor = GetVendorID(mFunctionsGL); VendorID vendor = GetVendorID(mFunctionsGL);
if (requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE && vendor == VENDOR_ID_INTEL) if (requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE && IsIntel(vendor))
{ {
return egl::Error(EGL_NOT_INITIALIZED, "Intel OpenGL ES drivers are not supported."); return egl::Error(EGL_NOT_INITIALIZED, "Intel OpenGL ES drivers are not supported.");
} }
...@@ -368,7 +368,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display) ...@@ -368,7 +368,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display)
GetWindowThreadProcessId(nativeWindow, &windowProcessId); GetWindowThreadProcessId(nativeWindow, &windowProcessId);
// AMD drivers advertise the WGL_NV_DX_interop and WGL_NV_DX_interop2 extensions but fail // AMD drivers advertise the WGL_NV_DX_interop and WGL_NV_DX_interop2 extensions but fail
mUseDXGISwapChains = vendor != VENDOR_ID_AMD && (currentProcessId != windowProcessId); mUseDXGISwapChains = !IsAMD(vendor) && (currentProcessId != windowProcessId);
} }
else else
{ {
......
...@@ -165,6 +165,8 @@ ...@@ -165,6 +165,8 @@
'libANGLE/renderer/CompilerImpl.h', 'libANGLE/renderer/CompilerImpl.h',
'libANGLE/renderer/ContextImpl.cpp', 'libANGLE/renderer/ContextImpl.cpp',
'libANGLE/renderer/ContextImpl.h', 'libANGLE/renderer/ContextImpl.h',
'libANGLE/renderer/driver_utils.cpp',
'libANGLE/renderer/driver_utils.h',
'libANGLE/renderer/DeviceImpl.cpp', 'libANGLE/renderer/DeviceImpl.cpp',
'libANGLE/renderer/DeviceImpl.h', 'libANGLE/renderer/DeviceImpl.h',
'libANGLE/renderer/DisplayImpl.cpp', 'libANGLE/renderer/DisplayImpl.cpp',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment