diff --git a/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp b/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp index 1210bb8d60..123128377f 100644 --- a/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp +++ b/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp @@ -39,7 +39,7 @@ namespace dawn_native { namespace d3d12 { } // anonymous namespace NativeSwapChainImpl::NativeSwapChainImpl(Device* device, HWND window) - : mWindow(window), mDevice(device) { + : mWindow(window), mDevice(device), mInterval(1) { } NativeSwapChainImpl::~NativeSwapChainImpl() { @@ -59,6 +59,8 @@ namespace dawn_native { namespace d3d12 { ComPtr factory = mDevice->GetFactory(); ComPtr queue = mDevice->GetCommandQueue(); + mInterval = mDevice->IsToggleEnabled(Toggle::TurnOffVsync) == true ? 0 : 1; + // Create the D3D12 swapchain, assuming only two buffers for now DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {}; swapChainDesc.Width = width; @@ -103,7 +105,7 @@ namespace dawn_native { namespace d3d12 { DawnSwapChainError NativeSwapChainImpl::Present() { // This assumes the texture has already been transition to the PRESENT state. - ASSERT_SUCCESS(mSwapChain->Present(1, 0)); + ASSERT_SUCCESS(mSwapChain->Present(mInterval, 0)); // TODO(cwallez@chromium.org): Make the serial ticking implicit. ASSERT(mDevice->NextSerial().IsSuccess()); diff --git a/src/dawn_native/d3d12/NativeSwapChainImplD3D12.h b/src/dawn_native/d3d12/NativeSwapChainImplD3D12.h index 223f5ef6b9..294a8a2476 100644 --- a/src/dawn_native/d3d12/NativeSwapChainImplD3D12.h +++ b/src/dawn_native/d3d12/NativeSwapChainImplD3D12.h @@ -46,6 +46,7 @@ namespace dawn_native { namespace d3d12 { private: HWND mWindow = nullptr; Device* mDevice = nullptr; + UINT mInterval; ComPtr mSwapChain = nullptr; std::vector> mBuffers;