Commit e9bdeb25 by Cooper Partin Committed by Geoff Lang

Added Trim support for Windows Store application certification requirement

Change-Id: Iff58863bf4af756d77521aadb1ccbaa977f0b78a Reviewed-on: https://chromium-review.googlesource.com/227530Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 21203702
...@@ -419,6 +419,7 @@ ...@@ -419,6 +419,7 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\swizzleui3dps.h"/> <ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\swizzleui3dps.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\SwapChain11.h"/> <ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\SwapChain11.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h"/> <ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexArray11.h"/> <ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexArray11.h"/>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.h"/> <ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.h"/>
</ItemGroup> </ItemGroup>
...@@ -521,6 +522,7 @@ ...@@ -521,6 +522,7 @@
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\ShaderExecutable11.cpp"/> <ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\ShaderExecutable11.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\SwapChain11.cpp"/> <ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\SwapChain11.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.cpp"/> <ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.cpp"/> <ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.cpp"/>
<ClCompile Include="..\..\src\common\win32\NativeWindow.cpp"/> <ClCompile Include="..\..\src\common\win32\NativeWindow.cpp"/>
</ItemGroup> </ItemGroup>
......
...@@ -3535,6 +3535,36 @@ ...@@ -3535,6 +3535,36 @@
<Filter Include="src"> <Filter Include="src">
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier> <UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="src\libGLESv2">
<UniqueIdentifier>{A62A9415-2E9D-A6D2-631D-1F25A5CD626F}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer">
<UniqueIdentifier>{AC4EF684-2900-10EA-3D11-A6DF0901358C}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer\d3d">
<UniqueIdentifier>{3AC19AE3-A12C-4021-D645-4CEA5BC956DB}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer\d3d\d3d11">
<UniqueIdentifier>{10FB1414-88D2-B512-6D76-522749905268}</UniqueIdentifier>
</Filter>
<Filter Include="src">
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2">
<UniqueIdentifier>{A62A9415-2E9D-A6D2-631D-1F25A5CD626F}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer">
<UniqueIdentifier>{AC4EF684-2900-10EA-3D11-A6DF0901358C}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer\d3d">
<UniqueIdentifier>{3AC19AE3-A12C-4021-D645-4CEA5BC956DB}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer\d3d\d3d11">
<UniqueIdentifier>{10FB1414-88D2-B512-6D76-522749905268}</UniqueIdentifier>
</Filter>
<Filter Include="src">
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
</Filter>
<Filter Include="src\common"> <Filter Include="src\common">
<UniqueIdentifier>{2F5FD094-EF52-77F7-7AA8-4327A01BF747}</UniqueIdentifier> <UniqueIdentifier>{2F5FD094-EF52-77F7-7AA8-4327A01BF747}</UniqueIdentifier>
</Filter> </Filter>
...@@ -4416,6 +4446,12 @@ ...@@ -4416,6 +4446,12 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h"> <ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter> <Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClInclude> </ClInclude>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.cpp">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClCompile>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClInclude>
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexArray11.h"> <ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexArray11.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter> <Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClInclude> </ClInclude>
......
...@@ -511,6 +511,7 @@ ...@@ -511,6 +511,7 @@
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\swizzleui3dps.h"/> <ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\shaders\compiled\swizzleui3dps.h"/>
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\SwapChain11.h"/> <ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\SwapChain11.h"/>
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h"/> <ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h"/>
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.h"/>
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexArray11.h"/> <ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexArray11.h"/>
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.h"/> <ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.h"/>
<ClInclude Include="..\..\..\..\src\common\winrt\SwapChainPanelNativeWindow.h"/> <ClInclude Include="..\..\..\..\src\common\winrt\SwapChainPanelNativeWindow.h"/>
...@@ -601,6 +602,7 @@ ...@@ -601,6 +602,7 @@
<ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\ShaderExecutable11.cpp"/> <ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\ShaderExecutable11.cpp"/>
<ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\SwapChain11.cpp"/> <ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\SwapChain11.cpp"/>
<ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.cpp"/> <ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.cpp"/>
<ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.cpp"/>
<ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.cpp"/> <ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.cpp"/>
<ClCompile Include="..\..\..\..\src\common\winrt\SwapChainPanelNativeWindow.cpp"/> <ClCompile Include="..\..\..\..\src\common\winrt\SwapChainPanelNativeWindow.cpp"/>
<ClCompile Include="..\..\..\..\src\common\winrt\CoreWindowNativeWindow.cpp"/> <ClCompile Include="..\..\..\..\src\common\winrt\CoreWindowNativeWindow.cpp"/>
......
...@@ -2965,6 +2965,36 @@ ...@@ -2965,6 +2965,36 @@
<Filter Include="src"> <Filter Include="src">
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier> <UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="src\libGLESv2">
<UniqueIdentifier>{A62A9415-2E9D-A6D2-631D-1F25A5CD626F}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer">
<UniqueIdentifier>{AC4EF684-2900-10EA-3D11-A6DF0901358C}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer\d3d">
<UniqueIdentifier>{3AC19AE3-A12C-4021-D645-4CEA5BC956DB}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer\d3d\d3d11">
<UniqueIdentifier>{10FB1414-88D2-B512-6D76-522749905268}</UniqueIdentifier>
</Filter>
<Filter Include="src">
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2">
<UniqueIdentifier>{A62A9415-2E9D-A6D2-631D-1F25A5CD626F}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer">
<UniqueIdentifier>{AC4EF684-2900-10EA-3D11-A6DF0901358C}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer\d3d">
<UniqueIdentifier>{3AC19AE3-A12C-4021-D645-4CEA5BC956DB}</UniqueIdentifier>
</Filter>
<Filter Include="src\libGLESv2\renderer\d3d\d3d11">
<UniqueIdentifier>{10FB1414-88D2-B512-6D76-522749905268}</UniqueIdentifier>
</Filter>
<Filter Include="src">
<UniqueIdentifier>{8CDEE807-BC53-E450-C8B8-4DEBB66742D4}</UniqueIdentifier>
</Filter>
<Filter Include="src\common"> <Filter Include="src\common">
<UniqueIdentifier>{2F5FD094-EF52-77F7-7AA8-4327A01BF747}</UniqueIdentifier> <UniqueIdentifier>{2F5FD094-EF52-77F7-7AA8-4327A01BF747}</UniqueIdentifier>
</Filter> </Filter>
...@@ -3783,6 +3813,12 @@ ...@@ -3783,6 +3813,12 @@
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h"> <ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter> <Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClInclude> </ClInclude>
<ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.cpp">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClCompile>
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexArray11.h"> <ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexArray11.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter> <Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClInclude> </ClInclude>
......
...@@ -321,6 +321,8 @@ ...@@ -321,6 +321,8 @@
'libGLESv2/renderer/d3d/d3d11/SwapChain11.h', 'libGLESv2/renderer/d3d/d3d11/SwapChain11.h',
'libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp', 'libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp',
'libGLESv2/renderer/d3d/d3d11/TextureStorage11.h', 'libGLESv2/renderer/d3d/d3d11/TextureStorage11.h',
'libGLESv2/renderer/d3d/d3d11/Trim11.cpp',
'libGLESv2/renderer/d3d/d3d11/Trim11.h',
'libGLESv2/renderer/d3d/d3d11/VertexArray11.h', 'libGLESv2/renderer/d3d/d3d11/VertexArray11.h',
'libGLESv2/renderer/d3d/d3d11/VertexBuffer11.cpp', 'libGLESv2/renderer/d3d/d3d11/VertexBuffer11.cpp',
'libGLESv2/renderer/d3d/d3d11/VertexBuffer11.h', 'libGLESv2/renderer/d3d/d3d11/VertexBuffer11.h',
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "libGLESv2/renderer/d3d/d3d11/Fence11.h" #include "libGLESv2/renderer/d3d/d3d11/Fence11.h"
#include "libGLESv2/renderer/d3d/d3d11/Blit11.h" #include "libGLESv2/renderer/d3d/d3d11/Blit11.h"
#include "libGLESv2/renderer/d3d/d3d11/Clear11.h" #include "libGLESv2/renderer/d3d/d3d11/Clear11.h"
#include "libGLESv2/renderer/d3d/d3d11/Trim11.h"
#include "libGLESv2/renderer/d3d/d3d11/PixelTransfer11.h" #include "libGLESv2/renderer/d3d/d3d11/PixelTransfer11.h"
#include "libGLESv2/renderer/d3d/d3d11/VertexArray11.h" #include "libGLESv2/renderer/d3d/d3d11/VertexArray11.h"
#include "libGLESv2/renderer/d3d/d3d11/Buffer11.h" #include "libGLESv2/renderer/d3d/d3d11/Buffer11.h"
...@@ -110,6 +111,8 @@ Renderer11::Renderer11(egl::Display *display, EGLNativeDisplayType hDc, const eg ...@@ -110,6 +111,8 @@ Renderer11::Renderer11(egl::Display *display, EGLNativeDisplayType hDc, const eg
mClear = NULL; mClear = NULL;
mTrim = NULL;
mSyncQuery = NULL; mSyncQuery = NULL;
mD3d11Module = NULL; mD3d11Module = NULL;
...@@ -346,6 +349,9 @@ void Renderer11::initializeDevice() ...@@ -346,6 +349,9 @@ void Renderer11::initializeDevice()
ASSERT(!mClear); ASSERT(!mClear);
mClear = new Clear11(this); mClear = new Clear11(this);
ASSERT(!mTrim);
mTrim = new Trim11(this);
ASSERT(!mPixelTransfer); ASSERT(!mPixelTransfer);
mPixelTransfer = new PixelTransfer11(this); mPixelTransfer = new PixelTransfer11(this);
...@@ -1729,6 +1735,7 @@ void Renderer11::releaseDeviceResources() ...@@ -1729,6 +1735,7 @@ void Renderer11::releaseDeviceResources()
SafeDelete(mTriangleFanIB); SafeDelete(mTriangleFanIB);
SafeDelete(mBlit); SafeDelete(mBlit);
SafeDelete(mClear); SafeDelete(mClear);
SafeDelete(mTrim);
SafeDelete(mPixelTransfer); SafeDelete(mPixelTransfer);
SafeRelease(mDriverConstantBufferVS); SafeRelease(mDriverConstantBufferVS);
...@@ -3342,5 +3349,4 @@ void Renderer11::setShaderResource(gl::SamplerType shaderType, UINT resourceSlot ...@@ -3342,5 +3349,4 @@ void Renderer11::setShaderResource(gl::SamplerType shaderType, UINT resourceSlot
currentSRVs[resourceSlot] = srv; currentSRVs[resourceSlot] = srv;
} }
} }
} }
...@@ -36,6 +36,7 @@ class Blit11; ...@@ -36,6 +36,7 @@ class Blit11;
class Clear11; class Clear11;
class PixelTransfer11; class PixelTransfer11;
class RenderTarget11; class RenderTarget11;
class Trim11;
struct PackPixelsParams; struct PackPixelsParams;
enum enum
...@@ -345,6 +346,9 @@ class Renderer11 : public RendererD3D ...@@ -345,6 +346,9 @@ class Renderer11 : public RendererD3D
// Masked clear resources // Masked clear resources
Clear11 *mClear; Clear11 *mClear;
// Perform trim for D3D resources
Trim11 *mTrim;
// Sync query // Sync query
ID3D11Query *mSyncQuery; ID3D11Query *mSyncQuery;
......
//
// Copyright (c) 2014 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.
//
// Trim11.cpp: Trim support utility class.
#include "libGLESv2/renderer/d3d/d3d11/Trim11.h"
#include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
#include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
#if defined (ANGLE_ENABLE_WINDOWS_STORE)
using namespace ABI::Windows::Foundation;
using namespace ABI::Windows::ApplicationModel;
using namespace ABI::Windows::ApplicationModel::Core;
#endif
namespace rx
{
Trim11::Trim11(rx::Renderer11 *renderer)
: mRenderer(renderer)
{
bool result = true;
result = registerForRendererTrimRequest();
ASSERT(result);
}
Trim11::~Trim11()
{
unregisterForRendererTrimRequest();
}
void Trim11::trim()
{
if (!mRenderer)
{
return;
}
#if defined (ANGLE_ENABLE_WINDOWS_STORE)
ID3D11Device* device = mRenderer->getDevice();
// IDXGIDevice3 is only supported on Windows 8.1 and Windows Phone 8.1 and above.
IDXGIDevice3 *dxgiDevice3 = d3d11::DynamicCastComObject<IDXGIDevice3>(device);
if (dxgiDevice3)
{
dxgiDevice3->Trim();
}
SafeRelease(dxgiDevice3);
#endif
}
bool Trim11::registerForRendererTrimRequest()
{
#if defined (ANGLE_ENABLE_WINDOWS_STORE)
ICoreApplication* coreApplication = nullptr;
HRESULT result = GetActivationFactory(HStringReference(RuntimeClass_Windows_ApplicationModel_Core_CoreApplication).Get(), &coreApplication);
if (SUCCEEDED(result))
{
auto suspendHandler = Callback<IEventHandler<SuspendingEventArgs*>>(
[this](IInspectable*, ISuspendingEventArgs*) -> HRESULT
{
trim();
return S_OK;
});
result = coreApplication->add_Suspending(suspendHandler.Get(), &mApplicationSuspendedEventToken);
}
SafeRelease(coreApplication);
if (FAILED(result))
{
return false;
}
#endif
return true;
}
void Trim11::unregisterForRendererTrimRequest()
{
#if defined (ANGLE_ENABLE_WINDOWS_STORE)
if (mApplicationSuspendedEventToken.value != 0)
{
ICoreApplication* coreApplication = nullptr;
if (SUCCEEDED(GetActivationFactory(HStringReference(RuntimeClass_Windows_ApplicationModel_Core_CoreApplication).Get(), &coreApplication)))
{
coreApplication->remove_Suspending(mApplicationSuspendedEventToken);
}
mApplicationSuspendedEventToken.value = 0;
SafeRelease(coreApplication);
}
#endif
}
}
//
// Copyright (c) 2014 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.
//
// Trim11.h: Trim support utility class.
#ifndef LIBGLESV2_TRIM11_H_
#define LIBGLESV2_TRIM11_H_
#include "common/angleutils.h"
#include "libGLESv2/angletypes.h"
#include "libGLESv2/Error.h"
#if !defined(ANGLE_ENABLE_WINDOWS_STORE)
typedef void* EventRegistrationToken;
#else
#include <EventToken.h>
#endif
namespace rx
{
class Renderer11;
class Trim11
{
public:
explicit Trim11(Renderer11 *renderer);
~Trim11();
private:
Renderer11 *mRenderer;
EventRegistrationToken mApplicationSuspendedEventToken;
void trim();
bool registerForRendererTrimRequest();
void unregisterForRendererTrimRequest();
DISALLOW_COPY_AND_ASSIGN(Trim11);
};
}
#endif // LIBGLESV2_TRIM11_H_
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