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 @@
<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\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\VertexBuffer11.h"/>
</ItemGroup>
......@@ -521,6 +522,7 @@
<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\TextureStorage11.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.cpp"/>
<ClCompile Include="..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.cpp"/>
<ClCompile Include="..\..\src\common\win32\NativeWindow.cpp"/>
</ItemGroup>
......
......@@ -3535,6 +3535,36 @@
<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\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">
<UniqueIdentifier>{2F5FD094-EF52-77F7-7AA8-4327A01BF747}</UniqueIdentifier>
</Filter>
......@@ -4416,6 +4446,12 @@
<ClInclude Include="..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</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">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClInclude>
......
......@@ -511,6 +511,7 @@
<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\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\VertexBuffer11.h"/>
<ClInclude Include="..\..\..\..\src\common\winrt\SwapChainPanelNativeWindow.h"/>
......@@ -601,6 +602,7 @@
<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\TextureStorage11.cpp"/>
<ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\Trim11.cpp"/>
<ClCompile Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\VertexBuffer11.cpp"/>
<ClCompile Include="..\..\..\..\src\common\winrt\SwapChainPanelNativeWindow.cpp"/>
<ClCompile Include="..\..\..\..\src\common\winrt\CoreWindowNativeWindow.cpp"/>
......
......@@ -2965,6 +2965,36 @@
<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\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">
<UniqueIdentifier>{2F5FD094-EF52-77F7-7AA8-4327A01BF747}</UniqueIdentifier>
</Filter>
......@@ -3783,6 +3813,12 @@
<ClInclude Include="..\..\..\..\src\libGLESv2\renderer\d3d\d3d11\TextureStorage11.h">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</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">
<Filter>src\libGLESv2\renderer\d3d\d3d11</Filter>
</ClInclude>
......
......@@ -321,6 +321,8 @@
'libGLESv2/renderer/d3d/d3d11/SwapChain11.h',
'libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp',
'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/VertexBuffer11.cpp',
'libGLESv2/renderer/d3d/d3d11/VertexBuffer11.h',
......
......@@ -33,6 +33,7 @@
#include "libGLESv2/renderer/d3d/d3d11/Fence11.h"
#include "libGLESv2/renderer/d3d/d3d11/Blit11.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/VertexArray11.h"
#include "libGLESv2/renderer/d3d/d3d11/Buffer11.h"
......@@ -110,6 +111,8 @@ Renderer11::Renderer11(egl::Display *display, EGLNativeDisplayType hDc, const eg
mClear = NULL;
mTrim = NULL;
mSyncQuery = NULL;
mD3d11Module = NULL;
......@@ -346,6 +349,9 @@ void Renderer11::initializeDevice()
ASSERT(!mClear);
mClear = new Clear11(this);
ASSERT(!mTrim);
mTrim = new Trim11(this);
ASSERT(!mPixelTransfer);
mPixelTransfer = new PixelTransfer11(this);
......@@ -1729,6 +1735,7 @@ void Renderer11::releaseDeviceResources()
SafeDelete(mTriangleFanIB);
SafeDelete(mBlit);
SafeDelete(mClear);
SafeDelete(mTrim);
SafeDelete(mPixelTransfer);
SafeRelease(mDriverConstantBufferVS);
......@@ -3342,5 +3349,4 @@ void Renderer11::setShaderResource(gl::SamplerType shaderType, UINT resourceSlot
currentSRVs[resourceSlot] = srv;
}
}
}
......@@ -36,6 +36,7 @@ class Blit11;
class Clear11;
class PixelTransfer11;
class RenderTarget11;
class Trim11;
struct PackPixelsParams;
enum
......@@ -345,6 +346,9 @@ class Renderer11 : public RendererD3D
// Masked clear resources
Clear11 *mClear;
// Perform trim for D3D resources
Trim11 *mTrim;
// Sync query
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