Skip to content

Commit

Permalink
Revert "Use DComp surface handle for Swap Chain management."
Browse files Browse the repository at this point in the history
This reverts commit 30b8335.
  • Loading branch information
zadjii-msft committed Apr 20, 2021
1 parent 69f22a7 commit c113b65
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 31 deletions.
4 changes: 2 additions & 2 deletions src/cascadia/TerminalControl/ControlCore.cpp
Expand Up @@ -1192,9 +1192,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation
}
}

HANDLE ControlCore::GetSwapChainHandle() const
IDXGISwapChain1* ControlCore::GetSwapChain() const
{
return _renderEngine->GetSwapChainHandle();
return _renderEngine->GetSwapChain().Get();
}

void ControlCore::_rendererWarning(const HRESULT hr)
Expand Down
2 changes: 1 addition & 1 deletion src/cascadia/TerminalControl/ControlCore.h
Expand Up @@ -49,7 +49,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
void UpdateAppearance(IControlAppearance newAppearance);
void SizeChanged(const double width, const double height);
void ScaleChanged(const double scaleX, const double scaleY);
HANDLE GetSwapChainHandle() const;
IDXGISwapChain1* GetSwapChain() const;

void AdjustFontSize(int fontSizeDelta);
void ResetFontSize();
Expand Down
12 changes: 6 additions & 6 deletions src/cascadia/TerminalControl/TermControl.cpp
Expand Up @@ -572,14 +572,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation
// This event is only registered during terminal initialization,
// so we don't need to check _initializedTerminal.
// We also don't lock for things that come back from the renderer.
auto chainHandle = _core->GetSwapChainHandle();
auto chain = _core->GetSwapChain();
auto weakThis{ get_weak() };

co_await winrt::resume_foreground(Dispatcher());

if (auto control{ weakThis.get() })
{
_AttachDxgiSwapChainToXaml(chainHandle);
_AttachDxgiSwapChainToXaml(chain);
}
}

Expand Down Expand Up @@ -625,10 +625,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation
}
}

void TermControl::_AttachDxgiSwapChainToXaml(HANDLE swapChainHandle)
void TermControl::_AttachDxgiSwapChainToXaml(IDXGISwapChain1* swapChain)
{
auto nativePanel = SwapChainPanel().as<ISwapChainPanelNative2>();
nativePanel->SetSwapChainHandle(swapChainHandle);
auto nativePanel = SwapChainPanel().as<ISwapChainPanelNative>();
nativePanel->SetSwapChain(swapChain);
}

bool TermControl::_InitializeTerminal()
Expand Down Expand Up @@ -667,7 +667,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
}
_interactivity->Initialize();

_AttachDxgiSwapChainToXaml(_core->GetSwapChainHandle());
_AttachDxgiSwapChainToXaml(_core->GetSwapChain());

// Tell the DX Engine to notify us when the swap chain changes. We do
// this after we initially set the swapchain so as to avoid unnecessary
Expand Down
3 changes: 2 additions & 1 deletion src/cascadia/TerminalControl/TermControl.h
Expand Up @@ -66,8 +66,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation
void ToggleShaderEffects();

winrt::fire_and_forget RenderEngineSwapChainChanged(const IInspectable& sender, const IInspectable& args);
void _AttachDxgiSwapChainToXaml(HANDLE swapChainHandle);
void _AttachDxgiSwapChainToXaml(IDXGISwapChain1* swapChain);
winrt::fire_and_forget _RendererEnteredErrorState(const IInspectable& sender, const IInspectable& args);

void _RenderRetryButton_Click(IInspectable const& button, IInspectable const& args);
winrt::fire_and_forget _RendererWarning(const IInspectable& sender,
const Control::RendererWarningArgs& args);
Expand Down
2 changes: 1 addition & 1 deletion src/common.build.post.props
Expand Up @@ -13,7 +13,7 @@
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>onecoreuap_apiset.lib;d3dcompiler.lib;dwmapi.lib;uxtheme.lib;shlwapi.lib;ntdll.lib;dcomp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>onecoreuap_apiset.lib;d3dcompiler.lib;dwmapi.lib;uxtheme.lib;shlwapi.lib;ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>

Expand Down
23 changes: 7 additions & 16 deletions src/renderer/dx/DxRenderer.cpp
Expand Up @@ -79,7 +79,6 @@ DxEngine::DxEngine() :
_backgroundColor{ 0 },
_selectionBackground{},
_haveDeviceResources{ false },
_swapChainHandle{ INVALID_HANDLE_VALUE },
_swapChainDesc{ 0 },
_swapChainFrameLatencyWaitableObject{ INVALID_HANDLE_VALUE },
_recreateDeviceRequested{ false },
Expand Down Expand Up @@ -619,13 +618,6 @@ try
}
case SwapChainMode::ForComposition:
{
if (!_swapChainHandle)
{
RETURN_IF_FAILED(DCompositionCreateSurfaceHandle(GENERIC_ALL, nullptr, &_swapChainHandle));
}

RETURN_IF_FAILED(_dxgiFactory2.As(&_dxgiFactoryMedia));

// Use the given target size for compositions.
_swapChainDesc.Width = _displaySizePixels.width<UINT>();
_swapChainDesc.Height = _displaySizePixels.height<UINT>();
Expand All @@ -635,11 +627,10 @@ try
// It's 100% required to use scaling mode stretch for composition. There is no other choice.
_swapChainDesc.Scaling = DXGI_SCALING_STRETCH;

RETURN_IF_FAILED(_dxgiFactoryMedia->CreateSwapChainForCompositionSurfaceHandle(_d3dDevice.Get(),
_swapChainHandle.get(),
&_swapChainDesc,
nullptr,
&_dxgiSwapChain));
RETURN_IF_FAILED(_dxgiFactory2->CreateSwapChainForComposition(_d3dDevice.Get(),
&_swapChainDesc,
nullptr,
&_dxgiSwapChain));
break;
}
default:
Expand Down Expand Up @@ -1012,14 +1003,14 @@ try
}
CATCH_LOG()

HANDLE DxEngine::GetSwapChainHandle()
Microsoft::WRL::ComPtr<IDXGISwapChain1> DxEngine::GetSwapChain()
{
if (!_swapChainHandle)
if (_dxgiSwapChain.Get() == nullptr)
{
THROW_IF_FAILED(_CreateDeviceResources(true));
}

return _swapChainHandle.get();
return _dxgiSwapChain;
}

void DxEngine::_InvalidateRectangle(const til::rectangle& rc)
Expand Down
3 changes: 1 addition & 2 deletions src/renderer/dx/DxRenderer.hpp
Expand Up @@ -70,7 +70,7 @@ namespace Microsoft::Console::Render

void SetSoftwareRendering(bool enable) noexcept;

HANDLE GetSwapChainHandle();
::Microsoft::WRL::ComPtr<IDXGISwapChain1> GetSwapChain();

// IRenderEngine Members
[[nodiscard]] HRESULT Invalidate(const SMALL_RECT* const psrRegion) noexcept override;
Expand Down Expand Up @@ -212,7 +212,6 @@ namespace Microsoft::Console::Render
::Microsoft::WRL::ComPtr<ID2D1SolidColorBrush> _d2dBrushBackground;

::Microsoft::WRL::ComPtr<IDXGIFactory2> _dxgiFactory2;
::Microsoft::WRL::ComPtr<IDXGIFactoryMedia> _dxgiFactoryMedia;
::Microsoft::WRL::ComPtr<IDXGIDevice> _dxgiDevice;
::Microsoft::WRL::ComPtr<IDXGISurface> _dxgiSurface;

Expand Down
2 changes: 0 additions & 2 deletions src/renderer/dx/precomp.h
Expand Up @@ -21,8 +21,6 @@
#include <typeinfo>
#include <stdexcept>

#include <dcomp.h>

#include <dxgi.h>
#include <dxgi1_2.h>
#include <dxgi1_3.h>
Expand Down

0 comments on commit c113b65

Please sign in to comment.