From b4b025979d9d278da47623defacfbc6f45e12fd7 Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Mon, 6 Mar 2023 17:05:43 +0100 Subject: [PATCH] Refactored DeviceManager_DX12 members for better diffing with orig Donut sample --- neo/renderer/NVRHI/Image_NVRHI.cpp | 2 +- neo/sys/DeviceManager.cpp | 18 +--- neo/sys/DeviceManager.h | 66 +++++------- neo/sys/DeviceManager_DX12.cpp | 156 ++++++++++++++--------------- neo/sys/DeviceManager_VK.cpp | 82 +++++++-------- neo/sys/win32/win_glimp.cpp | 28 +++--- 6 files changed, 164 insertions(+), 188 deletions(-) diff --git a/neo/renderer/NVRHI/Image_NVRHI.cpp b/neo/renderer/NVRHI/Image_NVRHI.cpp index 76ebf549..be615b60 100644 --- a/neo/renderer/NVRHI/Image_NVRHI.cpp +++ b/neo/renderer/NVRHI/Image_NVRHI.cpp @@ -363,7 +363,7 @@ void idImage::AllocImage() case FMT_DEPTH_STENCIL: // SRS - Check if D24S8 is supported, otherwise fall back to D32S8 - if( deviceManager->deviceParms.enableImageFormatD24S8 ) + if( deviceManager->m_DeviceParams.enableImageFormatD24S8 ) { format = nvrhi::Format::D24S8; } diff --git a/neo/sys/DeviceManager.cpp b/neo/sys/DeviceManager.cpp index 2dfd6eeb..a62a00ba 100644 --- a/neo/sys/DeviceManager.cpp +++ b/neo/sys/DeviceManager.cpp @@ -30,8 +30,8 @@ DeviceManager* DeviceManager::Create( nvrhi::GraphicsAPI api ) void DeviceManager::GetWindowDimensions( int& width, int& height ) { - width = deviceParms.backBufferWidth; - height = deviceParms.backBufferHeight; + width = m_DeviceParams.backBufferWidth; + height = m_DeviceParams.backBufferHeight; } void DeviceManager::BackBufferResizing() @@ -49,7 +49,7 @@ void DeviceManager::BackBufferResized() const DeviceCreationParameters& DeviceManager::GetDeviceParams() { - return deviceParms; + return m_DeviceParams; } nvrhi::IFramebuffer* DeviceManager::GetCurrentFramebuffer() @@ -67,18 +67,6 @@ nvrhi::IFramebuffer* DeviceManager::GetFramebuffer( uint32_t index ) return nullptr; } -void DeviceManager::AddRenderPassToBack( IRenderPass* pRenderPass ) -{ - renderPasses.Remove( pRenderPass ); - renderPasses.Append( pRenderPass ); - - pRenderPass->BackBufferResizing(); - pRenderPass->BackBufferResized( - deviceParms.backBufferWidth, - deviceParms.backBufferHeight, - deviceParms.swapChainSampleCount ); -} - DeviceManager* DeviceManager::CreateD3D11() { return nullptr; diff --git a/neo/sys/DeviceManager.h b/neo/sys/DeviceManager.h index 60e1e90b..348ff37c 100644 --- a/neo/sys/DeviceManager.h +++ b/neo/sys/DeviceManager.h @@ -1,30 +1,23 @@ /* -=========================================================================== - -Doom 3 BFG Edition GPL Source Code -Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company. -Copyright (C) 2022 Stephen Pridham - -This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code"). - -Doom 3 BFG Edition Source Code is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -Doom 3 BFG Edition Source Code is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Doom 3 BFG Edition Source Code. If not, see . - -In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below. - -If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. - -=========================================================================== +* Copyright (c) 2014-2021, NVIDIA CORPORATION. All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining a +* copy of this software and associated documentation files (the "Software"), +* to deal in the Software without restriction, including without limitation +* the rights to use, copy, modify, merge, publish, distribute, sublicense, +* and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +* DEALINGS IN THE SOFTWARE. */ #ifndef SYS_DEVICE_MANAGER_H_ @@ -122,7 +115,6 @@ struct DefaultMessageCallback : public nvrhi::IMessageCallback void message( nvrhi::MessageSeverity severity, const char* messageText ) override; }; -class IRenderPass; class idRenderBackend; @@ -145,8 +137,8 @@ public: // returns the screen coordinate to pixel coordinate scale factor void GetDPIScaleInfo( float& x, float& y ) const { - x = dpiScaleFactorX; - y = dpiScaleFactorY; + x = m_DPIScaleFactorX; + y = m_DPIScaleFactorY; } void UpdateWindowSize( const glimpParms_t& params ); @@ -157,19 +149,17 @@ protected: void* windowInstance; void* windowHandle; - bool windowVisible = false; + bool m_windowVisible = false; bool isNvidia = false; - DeviceCreationParameters deviceParms; + DeviceCreationParameters m_DeviceParams; - float dpiScaleFactorX = 1.f; - float dpiScaleFactorY = 1.f; - bool requestedVSync = false; + float m_DPIScaleFactorX = 1.f; + float m_DPIScaleFactorY = 1.f; + bool m_RequestedVSync = false; uint32_t m_FrameIndex = 0; - idList renderPasses; - DeviceManager() = default; void BackBufferResizing(); @@ -191,7 +181,7 @@ public: const DeviceCreationParameters& GetDeviceParams(); virtual void SetVsyncEnabled( bool enabled ) { - requestedVSync = enabled; /* will be processed later */ + m_RequestedVSync = enabled; /* will be processed later */ } virtual void ReportLiveObjects() {} @@ -208,8 +198,6 @@ public: nvrhi::IFramebuffer* GetCurrentFramebuffer(); nvrhi::IFramebuffer* GetFramebuffer( uint32_t index ); - void AddRenderPassToBack( IRenderPass* pRenderPass ); - void Shutdown(); virtual ~DeviceManager() = default; diff --git a/neo/sys/DeviceManager_DX12.cpp b/neo/sys/DeviceManager_DX12.cpp index 0be4f182..062d8f4c 100644 --- a/neo/sys/DeviceManager_DX12.cpp +++ b/neo/sys/DeviceManager_DX12.cpp @@ -53,7 +53,7 @@ class DeviceManager_DX12 : public DeviceManager RefCountPtr m_CopyQueue; RefCountPtr m_SwapChain; DXGI_SWAP_CHAIN_DESC1 m_SwapChainDesc{}; - DXGI_SWAP_CHAIN_FULLSCREEN_DESC fullScreenDesc{}; + DXGI_SWAP_CHAIN_FULLSCREEN_DESC m_FullScreenDesc{}; RefCountPtr m_DxgiAdapter; bool m_TearingSupported = false; @@ -64,19 +64,19 @@ class DeviceManager_DX12 : public DeviceManager UINT64 m_FrameCount = 1; - nvrhi::DeviceHandle nvrhiDevice; + nvrhi::DeviceHandle m_NvrhiDevice; - std::string renderString; + std::string m_RendererString; public: const char* GetRendererString() const override { - return renderString.c_str(); + return m_RendererString.c_str(); } nvrhi::IDevice* GetDevice() const override { - return nvrhiDevice; + return m_NvrhiDevice; } void ReportLiveObjects() override; @@ -224,9 +224,9 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() { RefCountPtr targetAdapter; - if( deviceParms.adapter ) + if( m_DeviceParams.adapter ) { - targetAdapter = deviceParms.adapter; + targetAdapter = m_DeviceParams.adapter; } else { @@ -237,12 +237,12 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() } else { - targetAdapter = FindAdapter( deviceParms.adapterNameSubstring ); + targetAdapter = FindAdapter( m_DeviceParams.adapterNameSubstring ); } if( !targetAdapter ) { - std::wstring adapterNameStr( deviceParms.adapterNameSubstring.begin(), deviceParms.adapterNameSubstring.end() ); + std::wstring adapterNameStr( m_DeviceParams.adapterNameSubstring.begin(), m_DeviceParams.adapterNameSubstring.end() ); common->FatalError( "Could not find an adapter matching %s\n", adapterNameStr.c_str() ); return false; } @@ -261,7 +261,7 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() { ss << wss.narrow( c, '?' ); } - renderString = ss.str(); + m_RendererString = ss.str(); isNvidia = IsNvDeviceID( aDesc.VendorId ); } @@ -269,18 +269,18 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() // SRS - Don't center window here for DX12 only, instead use portable initialization in CreateWindowDeviceAndSwapChain() within win_glimp.cpp // - Also, calling SetWindowPos() triggers a window mgr event that overwrites r_windowX / r_windowY, which may be undesirable to the user - UINT windowStyle = deviceParms.startFullscreen + UINT windowStyle = m_DeviceParams.startFullscreen ? ( WS_POPUP | WS_SYSMENU | WS_VISIBLE ) - : deviceParms.startMaximized + : m_DeviceParams.startMaximized ? ( WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MAXIMIZE ) : ( WS_OVERLAPPEDWINDOW | WS_VISIBLE ); - RECT rect = { 0, 0, LONG( deviceParms.backBufferWidth ), LONG( deviceParms.backBufferHeight ) }; + RECT rect = { 0, 0, LONG( m_DeviceParams.backBufferWidth ), LONG( m_DeviceParams.backBufferHeight ) }; AdjustWindowRect( &rect, windowStyle, FALSE ); if( MoveWindowOntoAdapter( targetAdapter, rect ) ) { - SetWindowPos( ( HWND )windowHandle, deviceParms.startFullscreen ? HWND_TOPMOST : HWND_NOTOPMOST, + SetWindowPos( ( HWND )windowHandle, m_DeviceParams.startFullscreen ? HWND_TOPMOST : HWND_NOTOPMOST, rect.left, rect.top, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE ); } */ @@ -294,17 +294,17 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() ZeroMemory( &m_SwapChainDesc, sizeof( m_SwapChainDesc ) ); m_SwapChainDesc.Width = width; m_SwapChainDesc.Height = height; - m_SwapChainDesc.SampleDesc.Count = deviceParms.swapChainSampleCount; + m_SwapChainDesc.SampleDesc.Count = m_DeviceParams.swapChainSampleCount; m_SwapChainDesc.SampleDesc.Quality = 0; - m_SwapChainDesc.BufferUsage = deviceParms.swapChainUsage; - m_SwapChainDesc.BufferCount = deviceParms.swapChainBufferCount; + m_SwapChainDesc.BufferUsage = m_DeviceParams.swapChainUsage; + m_SwapChainDesc.BufferCount = m_DeviceParams.swapChainBufferCount; m_SwapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; - m_SwapChainDesc.Flags = deviceParms.allowModeSwitch ? DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH : 0; + m_SwapChainDesc.Flags = m_DeviceParams.allowModeSwitch ? DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH : 0; // Special processing for sRGB swap chain formats. // DXGI will not create a swap chain with an sRGB format, but its contents will be interpreted as sRGB. // So we need to use a non-sRGB format here, but store the true sRGB format for later framebuffer creation. - switch( deviceParms.swapChainFormat ) // NOLINT(clang-diagnostic-switch-enum) + switch( m_DeviceParams.swapChainFormat ) // NOLINT(clang-diagnostic-switch-enum) { case nvrhi::Format::SRGBA8_UNORM: m_SwapChainDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; @@ -313,11 +313,11 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() m_SwapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; break; default: - m_SwapChainDesc.Format = nvrhi::d3d12::convertFormat( deviceParms.swapChainFormat ); + m_SwapChainDesc.Format = nvrhi::d3d12::convertFormat( m_DeviceParams.swapChainFormat ); break; } - if( deviceParms.enableDebugRuntime ) + if( m_DeviceParams.enableDebugRuntime ) { RefCountPtr pDebug; hr = D3D12GetDebugInterface( IID_PPV_ARGS( &pDebug ) ); @@ -326,7 +326,7 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() } RefCountPtr pDxgiFactory; - UINT dxgiFactoryFlags = deviceParms.enableDebugRuntime ? DXGI_CREATE_FACTORY_DEBUG : 0; + UINT dxgiFactoryFlags = m_DeviceParams.enableDebugRuntime ? DXGI_CREATE_FACTORY_DEBUG : 0; hr = CreateDXGIFactory2( dxgiFactoryFlags, IID_PPV_ARGS( &pDxgiFactory ) ); HR_RETURN( hr ); @@ -347,11 +347,11 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() hr = D3D12CreateDevice( targetAdapter, - deviceParms.featureLevel, + m_DeviceParams.featureLevel, IID_PPV_ARGS( &m_Device12 ) ); HR_RETURN( hr ); - if( deviceParms.enableDebugRuntime ) + if( m_DeviceParams.enableDebugRuntime ) { RefCountPtr pInfoQueue; m_Device12->QueryInterface( &pInfoQueue ); @@ -387,7 +387,7 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() HR_RETURN( hr ); m_GraphicsQueue->SetName( L"Graphics Queue" ); - if( deviceParms.enableComputeQueue ) + if( m_DeviceParams.enableComputeQueue ) { queueDesc.Type = D3D12_COMMAND_LIST_TYPE_COMPUTE; hr = m_Device12->CreateCommandQueue( &queueDesc, IID_PPV_ARGS( &m_ComputeQueue ) ); @@ -395,7 +395,7 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() m_ComputeQueue->SetName( L"Compute Queue" ); } - if( deviceParms.enableCopyQueue ) + if( m_DeviceParams.enableCopyQueue ) { queueDesc.Type = D3D12_COMMAND_LIST_TYPE_COPY; hr = m_Device12->CreateCommandQueue( &queueDesc, IID_PPV_ARGS( &m_CopyQueue ) ); @@ -403,15 +403,15 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() m_CopyQueue->SetName( L"Copy Queue" ); } - fullScreenDesc = {}; - fullScreenDesc.RefreshRate.Numerator = deviceParms.refreshRate; - fullScreenDesc.RefreshRate.Denominator = 1; - fullScreenDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; - fullScreenDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; - fullScreenDesc.Windowed = !deviceParms.startFullscreen; + m_FullScreenDesc = {}; + m_FullScreenDesc.RefreshRate.Numerator = m_DeviceParams.refreshRate; + m_FullScreenDesc.RefreshRate.Denominator = 1; + m_FullScreenDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; + m_FullScreenDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; + m_FullScreenDesc.Windowed = !m_DeviceParams.startFullscreen; RefCountPtr pSwapChain1; - hr = pDxgiFactory->CreateSwapChainForHwnd( m_GraphicsQueue, ( HWND )windowHandle, &m_SwapChainDesc, &fullScreenDesc, nullptr, &pSwapChain1 ); + hr = pDxgiFactory->CreateSwapChainForHwnd( m_GraphicsQueue, ( HWND )windowHandle, &m_SwapChainDesc, &m_FullScreenDesc, nullptr, &pSwapChain1 ); HR_RETURN( hr ); hr = pSwapChain1->QueryInterface( IID_PPV_ARGS( &m_SwapChain ) ); @@ -424,14 +424,14 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() deviceDesc.pComputeCommandQueue = m_ComputeQueue; deviceDesc.pCopyCommandQueue = m_CopyQueue; - nvrhiDevice = nvrhi::d3d12::createDevice( deviceDesc ); + m_NvrhiDevice = nvrhi::d3d12::createDevice( deviceDesc ); - deviceParms.enableNvrhiValidationLayer = r_useValidationLayers.GetInteger() > 0; - deviceParms.enableDebugRuntime = r_useValidationLayers.GetInteger() > 1; + m_DeviceParams.enableNvrhiValidationLayer = r_useValidationLayers.GetInteger() > 0; + m_DeviceParams.enableDebugRuntime = r_useValidationLayers.GetInteger() > 1; - if( deviceParms.enableNvrhiValidationLayer ) + if( m_DeviceParams.enableNvrhiValidationLayer ) { - nvrhiDevice = nvrhi::validation::createValidationLayer( nvrhiDevice ); + m_NvrhiDevice = nvrhi::validation::createValidationLayer( m_NvrhiDevice ); } if( !CreateRenderTargets() ) @@ -453,11 +453,11 @@ bool DeviceManager_DX12::CreateDeviceAndSwapChain() void DeviceManager_DX12::DestroyDeviceAndSwapChain() { m_RhiSwapChainBuffers.clear(); - renderString.clear(); + m_RendererString.clear(); ReleaseRenderTargets(); - nvrhiDevice = nullptr; + m_NvrhiDevice = nullptr; for( auto fenceEvent : m_FrameFenceEvents ) { @@ -494,18 +494,18 @@ bool DeviceManager_DX12::CreateRenderTargets() HR_RETURN( hr ); nvrhi::TextureDesc textureDesc; - textureDesc.width = deviceParms.backBufferWidth; - textureDesc.height = deviceParms.backBufferHeight; - textureDesc.sampleCount = deviceParms.swapChainSampleCount; - textureDesc.sampleQuality = deviceParms.swapChainSampleQuality; - textureDesc.format = deviceParms.swapChainFormat; + textureDesc.width = m_DeviceParams.backBufferWidth; + textureDesc.height = m_DeviceParams.backBufferHeight; + textureDesc.sampleCount = m_DeviceParams.swapChainSampleCount; + textureDesc.sampleQuality = m_DeviceParams.swapChainSampleQuality; + textureDesc.format = m_DeviceParams.swapChainFormat; textureDesc.debugName = "SwapChainBuffer"; textureDesc.isRenderTarget = true; textureDesc.isUAV = false; textureDesc.initialState = nvrhi::ResourceStates::Present; textureDesc.keepInitialState = true; - m_RhiSwapChainBuffers[n] = nvrhiDevice->createHandleForNativeTexture( nvrhi::ObjectTypes::D3D12_Resource, nvrhi::Object( m_SwapChainBuffers[n] ), textureDesc ); + m_RhiSwapChainBuffers[n] = m_NvrhiDevice->createHandleForNativeTexture( nvrhi::ObjectTypes::D3D12_Resource, nvrhi::Object( m_SwapChainBuffers[n] ), textureDesc ); } return true; @@ -513,16 +513,16 @@ bool DeviceManager_DX12::CreateRenderTargets() void DeviceManager_DX12::ReleaseRenderTargets() { - if( !nvrhiDevice ) + if( !m_NvrhiDevice ) { return; } // Make sure that all frames have finished rendering - nvrhiDevice->waitForIdle(); + m_NvrhiDevice->waitForIdle(); // Release all in-flight references to the render targets - nvrhiDevice->runGarbageCollection(); + m_NvrhiDevice->runGarbageCollection(); // Set the events so that WaitForSingleObject in OneFrame will not hang later for( auto e : m_FrameFenceEvents ) @@ -539,7 +539,7 @@ void DeviceManager_DX12::ResizeSwapChain() { ReleaseRenderTargets(); - if( !nvrhiDevice ) + if( !m_NvrhiDevice ) { return; } @@ -549,9 +549,9 @@ void DeviceManager_DX12::ResizeSwapChain() return; } - const HRESULT hr = m_SwapChain->ResizeBuffers( deviceParms.swapChainBufferCount, - deviceParms.backBufferWidth, - deviceParms.backBufferHeight, + const HRESULT hr = m_SwapChain->ResizeBuffers( m_DeviceParams.swapChainBufferCount, + m_DeviceParams.backBufferWidth, + m_DeviceParams.backBufferHeight, m_SwapChainDesc.Format, m_SwapChainDesc.Flags ); @@ -569,31 +569,31 @@ void DeviceManager_DX12::ResizeSwapChain() void DeviceManager_DX12::BeginFrame() { - /* SRS - This code not needed: framebuffer/swapchain resizing & fullscreen are handled by idRenderBackend::ResizeImages() and DeviceManager::UpdateWindowSize() - - DXGI_SWAP_CHAIN_DESC1 newSwapChainDesc; - DXGI_SWAP_CHAIN_FULLSCREEN_DESC newFullScreenDesc; - if( SUCCEEDED( m_SwapChain->GetDesc1( &newSwapChainDesc ) ) && SUCCEEDED( m_SwapChain->GetFullscreenDesc( &newFullScreenDesc ) ) ) + //SRS - This code not needed: framebuffer/swapchain resizing & fullscreen are handled by idRenderBackend::ResizeImages() and DeviceManager::UpdateWindowSize() +#if 0 + DXGI_SWAP_CHAIN_DESC1 newSwapChainDesc; + DXGI_SWAP_CHAIN_FULLSCREEN_DESC newFullScreenDesc; + if( SUCCEEDED( m_SwapChain->GetDesc1( &newSwapChainDesc ) ) && SUCCEEDED( m_SwapChain->GetFullscreenDesc( &newFullScreenDesc ) ) ) + { + if( m_FullScreenDesc.Windowed != newFullScreenDesc.Windowed ) { - if( fullScreenDesc.Windowed != newFullScreenDesc.Windowed ) + BackBufferResizing(); + + m_FullScreenDesc = newFullScreenDesc; + m_SwapChainDesc = newSwapChainDesc; + m_DeviceParams.backBufferWidth = newSwapChainDesc.Width; + m_DeviceParams.backBufferHeight = newSwapChainDesc.Height; + + if( newFullScreenDesc.Windowed ) { - BackBufferResizing(); - - fullScreenDesc = newFullScreenDesc; - m_SwapChainDesc = newSwapChainDesc; - deviceParms.backBufferWidth = newSwapChainDesc.Width; - deviceParms.backBufferHeight = newSwapChainDesc.Height; - - if( newFullScreenDesc.Windowed ) - { - //glfwSetWindowMonitor( m_Window, nullptr, 50, 50, newSwapChainDesc.Width, newSwapChainDesc.Height, 0 ); - } - - ResizeSwapChain(); - BackBufferResized(); + //glfwSetWindowMonitor( m_Window, nullptr, 50, 50, newSwapChainDesc.Width, newSwapChainDesc.Height, 0 ); } + + ResizeSwapChain(); + BackBufferResized(); } - */ + } +#endif auto bufferIndex = m_SwapChain->GetCurrentBackBufferIndex(); WaitForSingleObject( m_FrameFenceEvents[bufferIndex], INFINITE ); @@ -630,7 +630,7 @@ void DeviceManager_DX12::EndFrame() void DeviceManager_DX12::Present() { - if( !windowVisible ) + if( !m_windowVisible ) { return; } @@ -640,13 +640,13 @@ void DeviceManager_DX12::Present() UINT presentFlags = 0; // SRS - DXGI docs say fullscreen must be disabled for unlocked fps/tear, but this does not seem to be true - if( !deviceParms.vsyncEnabled && m_TearingSupported ) //&& !glConfig.isFullscreen ) + if( !m_DeviceParams.vsyncEnabled && m_TearingSupported ) //&& !glConfig.isFullscreen ) { presentFlags |= DXGI_PRESENT_ALLOW_TEARING; } - // SRS - Don't change deviceParms.vsyncEnabled here, simply test for vsync mode 2 to set DXGI SyncInterval - m_SwapChain->Present( deviceParms.vsyncEnabled && r_swapInterval.GetInteger() == 2 ? 1 : 0, presentFlags ); + // SRS - Don't change m_DeviceParams.vsyncEnabled here, simply test for vsync mode 2 to set DXGI SyncInterval + m_SwapChain->Present( m_DeviceParams.vsyncEnabled && r_swapInterval.GetInteger() == 2 ? 1 : 0, presentFlags ); m_FrameFence->SetEventOnCompletion( m_FrameCount, m_FrameFenceEvents[bufferIndex] ); m_GraphicsQueue->Signal( m_FrameFence, m_FrameCount ); diff --git a/neo/sys/DeviceManager_VK.cpp b/neo/sys/DeviceManager_VK.cpp index 9b760356..77c10bae 100644 --- a/neo/sys/DeviceManager_VK.cpp +++ b/neo/sys/DeviceManager_VK.cpp @@ -294,7 +294,7 @@ private: if( manager ) { - const auto& ignored = manager->deviceParms.ignoredVulkanValidationMessageLocations; + const auto& ignored = manager->m_DeviceParams.ignoredVulkanValidationMessageLocations; const auto found = std::find( ignored.begin(), ignored.end(), location ); if( found != ignored.end() ) { @@ -365,21 +365,21 @@ bool DeviceManager_VK::createInstance() #endif // add instance extensions requested by the user - for( const std::string& name : deviceParms.requiredVulkanInstanceExtensions ) + for( const std::string& name : m_DeviceParams.requiredVulkanInstanceExtensions ) { enabledExtensions.instance.insert( name ); } - for( const std::string& name : deviceParms.optionalVulkanInstanceExtensions ) + for( const std::string& name : m_DeviceParams.optionalVulkanInstanceExtensions ) { optionalExtensions.instance.insert( name ); } // add layers requested by the user - for( const std::string& name : deviceParms.requiredVulkanLayers ) + for( const std::string& name : m_DeviceParams.requiredVulkanLayers ) { enabledExtensions.layers.insert( name ); } - for( const std::string& name : deviceParms.optionalVulkanLayers ) + for( const std::string& name : m_DeviceParams.optionalVulkanLayers ) { optionalExtensions.layers.insert( name ); } @@ -498,8 +498,8 @@ void DeviceManager_VK::installDebugCallback() bool DeviceManager_VK::pickPhysicalDevice() { - vk::Format requestedFormat = nvrhi::vulkan::convertFormat( deviceParms.swapChainFormat ); - vk::Extent2D requestedExtent( deviceParms.backBufferWidth, deviceParms.backBufferHeight ); + vk::Format requestedFormat = nvrhi::vulkan::convertFormat( m_DeviceParams.swapChainFormat ); + vk::Extent2D requestedExtent( m_DeviceParams.backBufferWidth, m_DeviceParams.backBufferHeight ); auto devices = m_VulkanInstance.enumeratePhysicalDevices(); @@ -554,11 +554,11 @@ bool DeviceManager_VK::pickPhysicalDevice() auto surfaceFmts = dev.getSurfaceFormatsKHR( m_WindowSurface ); auto surfacePModes = dev.getSurfacePresentModesKHR( m_WindowSurface ); - if( surfaceCaps.minImageCount > deviceParms.swapChainBufferCount || - ( surfaceCaps.maxImageCount < deviceParms.swapChainBufferCount && surfaceCaps.maxImageCount > 0 ) ) + if( surfaceCaps.minImageCount > m_DeviceParams.swapChainBufferCount || + ( surfaceCaps.maxImageCount < m_DeviceParams.swapChainBufferCount && surfaceCaps.maxImageCount > 0 ) ) { errorStream << std::endl << " - cannot support the requested swap chain image count:"; - errorStream << " requested " << deviceParms.swapChainBufferCount << ", available " << surfaceCaps.minImageCount << " - " << surfaceCaps.maxImageCount; + errorStream << " requested " << m_DeviceParams.swapChainBufferCount << ", available " << surfaceCaps.minImageCount << " - " << surfaceCaps.maxImageCount; deviceIsGood = false; } @@ -702,8 +702,8 @@ bool DeviceManager_VK::findQueueFamilies( vk::PhysicalDevice physicalDevice, vk: if( m_GraphicsQueueFamily == -1 || m_PresentQueueFamily == -1 || - ( m_ComputeQueueFamily == -1 && deviceParms.enableComputeQueue ) || - ( m_TransferQueueFamily == -1 && deviceParms.enableCopyQueue ) ) + ( m_ComputeQueueFamily == -1 && m_DeviceParams.enableComputeQueue ) || + ( m_TransferQueueFamily == -1 && m_DeviceParams.enableCopyQueue ) ) { return false; } @@ -723,7 +723,7 @@ bool DeviceManager_VK::createDevice() enabledExtensions.device.insert( name ); } - if( deviceParms.enableRayTracingExtensions && m_RayTracingExtensions.find( name ) != m_RayTracingExtensions.end() ) + if( m_DeviceParams.enableRayTracingExtensions && m_RayTracingExtensions.find( name ) != m_RayTracingExtensions.end() ) { enabledExtensions.device.insert( name ); } @@ -779,12 +779,12 @@ bool DeviceManager_VK::createDevice() m_PresentQueueFamily }; - if( deviceParms.enableComputeQueue ) + if( m_DeviceParams.enableComputeQueue ) { uniqueQueueFamilies.insert( m_ComputeQueueFamily ); } - if( deviceParms.enableCopyQueue ) + if( m_DeviceParams.enableCopyQueue ) { uniqueQueueFamilies.insert( m_TransferQueueFamily ); } @@ -881,11 +881,11 @@ bool DeviceManager_VK::createDevice() } m_VulkanDevice.getQueue( m_GraphicsQueueFamily, 0, &m_GraphicsQueue ); - if( deviceParms.enableComputeQueue ) + if( m_DeviceParams.enableComputeQueue ) { m_VulkanDevice.getQueue( m_ComputeQueueFamily, 0, &m_ComputeQueue ); } - if( deviceParms.enableCopyQueue ) + if( m_DeviceParams.enableCopyQueue ) { m_VulkanDevice.getQueue( m_TransferQueueFamily, 0, &m_TransferQueue ); } @@ -901,7 +901,7 @@ bool DeviceManager_VK::createDevice() vk::ImageUsageFlags( vk::ImageUsageFlagBits::eDepthStencilAttachment ), vk::ImageCreateFlags( 0 ), &imageFormatProperties ); - deviceParms.enableImageFormatD24S8 = ( ret == vk::Result::eSuccess ); + m_DeviceParams.enableImageFormatD24S8 = ( ret == vk::Result::eSuccess ); // SRS - Determine if "smart" (r_swapInterval = 1) vsync mode eFifoRelaxed is supported by device and surface auto surfacePModes = m_VulkanPhysicalDevice.getSurfacePresentModesKHR( m_WindowSurface ); @@ -989,11 +989,11 @@ bool DeviceManager_VK::createSwapChain() { m_SwapChainFormat = { - vk::Format( nvrhi::vulkan::convertFormat( deviceParms.swapChainFormat ) ), + vk::Format( nvrhi::vulkan::convertFormat( m_DeviceParams.swapChainFormat ) ), vk::ColorSpaceKHR::eSrgbNonlinear }; - vk::Extent2D extent = vk::Extent2D( deviceParms.backBufferWidth, deviceParms.backBufferHeight ); + vk::Extent2D extent = vk::Extent2D( m_DeviceParams.backBufferWidth, m_DeviceParams.backBufferHeight ); std::unordered_set uniqueQueues = { @@ -1007,7 +1007,7 @@ bool DeviceManager_VK::createSwapChain() auto desc = vk::SwapchainCreateInfoKHR() .setSurface( m_WindowSurface ) - .setMinImageCount( deviceParms.swapChainBufferCount ) + .setMinImageCount( m_DeviceParams.swapChainBufferCount ) .setImageFormat( m_SwapChainFormat.format ) .setImageColorSpace( m_SwapChainFormat.colorSpace ) .setImageExtent( extent ) @@ -1018,7 +1018,7 @@ bool DeviceManager_VK::createSwapChain() .setPQueueFamilyIndices( enableSwapChainSharing ? queues.data() : nullptr ) .setPreTransform( vk::SurfaceTransformFlagBitsKHR::eIdentity ) .setCompositeAlpha( vk::CompositeAlphaFlagBitsKHR::eOpaque ) - .setPresentMode( deviceParms.vsyncEnabled ? ( r_swapInterval.GetInteger() == 2 || !enablePModeFifoRelaxed ? vk::PresentModeKHR::eFifo : vk::PresentModeKHR::eFifoRelaxed ) : vk::PresentModeKHR::eImmediate ) + .setPresentMode( m_DeviceParams.vsyncEnabled ? ( r_swapInterval.GetInteger() == 2 || !enablePModeFifoRelaxed ? vk::PresentModeKHR::eFifo : vk::PresentModeKHR::eFifoRelaxed ) : vk::PresentModeKHR::eImmediate ) .setClipped( true ) .setOldSwapchain( nullptr ); @@ -1037,9 +1037,9 @@ bool DeviceManager_VK::createSwapChain() sci.image = image; nvrhi::TextureDesc textureDesc; - textureDesc.width = deviceParms.backBufferWidth; - textureDesc.height = deviceParms.backBufferHeight; - textureDesc.format = deviceParms.swapChainFormat; + textureDesc.width = m_DeviceParams.backBufferWidth; + textureDesc.height = m_DeviceParams.backBufferHeight; + textureDesc.format = m_DeviceParams.swapChainFormat; textureDesc.debugName = "Swap chain image"; textureDesc.initialState = nvrhi::ResourceStates::Present; textureDesc.keepInitialState = true; @@ -1057,10 +1057,10 @@ bool DeviceManager_VK::createSwapChain() bool DeviceManager_VK::CreateDeviceAndSwapChain() { // RB: control these through the cmdline - deviceParms.enableNvrhiValidationLayer = r_useValidationLayers.GetInteger() > 0; - deviceParms.enableDebugRuntime = r_useValidationLayers.GetInteger() > 1; + m_DeviceParams.enableNvrhiValidationLayer = r_useValidationLayers.GetInteger() > 0; + m_DeviceParams.enableDebugRuntime = r_useValidationLayers.GetInteger() > 1; - if( deviceParms.enableDebugRuntime ) + if( m_DeviceParams.enableDebugRuntime ) { enabledExtensions.instance.insert( VK_EXT_DEBUG_REPORT_EXTENSION_NAME ); #if defined(__APPLE__) && defined( USE_MoltenVK ) @@ -1084,26 +1084,26 @@ bool DeviceManager_VK::CreateDeviceAndSwapChain() CHECK( createInstance() ); - if( deviceParms.enableDebugRuntime ) + if( m_DeviceParams.enableDebugRuntime ) { installDebugCallback(); } - if( deviceParms.swapChainFormat == nvrhi::Format::SRGBA8_UNORM ) + if( m_DeviceParams.swapChainFormat == nvrhi::Format::SRGBA8_UNORM ) { - deviceParms.swapChainFormat = nvrhi::Format::SBGRA8_UNORM; + m_DeviceParams.swapChainFormat = nvrhi::Format::SBGRA8_UNORM; } - else if( deviceParms.swapChainFormat == nvrhi::Format::RGBA8_UNORM ) + else if( m_DeviceParams.swapChainFormat == nvrhi::Format::RGBA8_UNORM ) { - deviceParms.swapChainFormat = nvrhi::Format::BGRA8_UNORM; + m_DeviceParams.swapChainFormat = nvrhi::Format::BGRA8_UNORM; } // add device extensions requested by the user - for( const std::string& name : deviceParms.requiredVulkanDeviceExtensions ) + for( const std::string& name : m_DeviceParams.requiredVulkanDeviceExtensions ) { enabledExtensions.device.insert( name ); } - for( const std::string& name : deviceParms.optionalVulkanDeviceExtensions ) + for( const std::string& name : m_DeviceParams.optionalVulkanDeviceExtensions ) { optionalExtensions.device.insert( name ); } @@ -1154,12 +1154,12 @@ bool DeviceManager_VK::CreateDeviceAndSwapChain() deviceDesc.device = m_VulkanDevice; deviceDesc.graphicsQueue = m_GraphicsQueue; deviceDesc.graphicsQueueIndex = m_GraphicsQueueFamily; - if( deviceParms.enableComputeQueue ) + if( m_DeviceParams.enableComputeQueue ) { deviceDesc.computeQueue = m_ComputeQueue; deviceDesc.computeQueueIndex = m_ComputeQueueFamily; } - if( deviceParms.enableCopyQueue ) + if( m_DeviceParams.enableCopyQueue ) { deviceDesc.transferQueue = m_TransferQueue; deviceDesc.transferQueueIndex = m_TransferQueueFamily; @@ -1171,7 +1171,7 @@ bool DeviceManager_VK::CreateDeviceAndSwapChain() m_NvrhiDevice = nvrhi::vulkan::createDevice( deviceDesc ); - if( deviceParms.enableNvrhiValidationLayer ) + if( m_DeviceParams.enableNvrhiValidationLayer ) { m_ValidationLayer = nvrhi::validation::createValidationLayer( m_NvrhiDevice ); } @@ -1286,7 +1286,7 @@ void DeviceManager_VK::Present() const vk::Result res = m_PresentQueue.presentKHR( &info ); assert( res == vk::Result::eSuccess || res == vk::Result::eErrorOutOfDateKHR || res == vk::Result::eSuboptimalKHR ); - if( deviceParms.enableDebugRuntime ) + if( m_DeviceParams.enableDebugRuntime ) { // according to vulkan-tutorial.com, "the validation layer implementation expects // the application to explicitly synchronize with the GPU" @@ -1295,13 +1295,13 @@ void DeviceManager_VK::Present() else { #ifndef _WIN32 - if( deviceParms.vsyncEnabled ) + if( m_DeviceParams.vsyncEnabled ) { m_PresentQueue.waitIdle(); } #endif - while( m_FramesInFlight.size() > deviceParms.maxFramesInFlight ) + while( m_FramesInFlight.size() > m_DeviceParams.maxFramesInFlight ) { auto query = m_FramesInFlight.front(); m_FramesInFlight.pop(); diff --git a/neo/sys/win32/win_glimp.cpp b/neo/sys/win32/win_glimp.cpp index b97a7000..0bf7d58e 100644 --- a/neo/sys/win32/win_glimp.cpp +++ b/neo/sys/win32/win_glimp.cpp @@ -1110,10 +1110,10 @@ bool DeviceManager::CreateWindowDeviceAndSwapChain( const glimpParms_t& parms, c } // RB - deviceParms.backBufferWidth = parms.width; - deviceParms.backBufferHeight = parms.height; - deviceParms.backBufferSampleCount = parms.multiSamples; - deviceParms.vsyncEnabled = requestedVSync; + m_DeviceParams.backBufferWidth = parms.width; + m_DeviceParams.backBufferHeight = parms.height; + m_DeviceParams.backBufferSampleCount = parms.multiSamples; + m_DeviceParams.vsyncEnabled = m_RequestedVSync; if( !CreateDeviceAndSwapChain() ) { @@ -1128,30 +1128,30 @@ bool DeviceManager::CreateWindowDeviceAndSwapChain( const glimpParms_t& parms, c void DeviceManager::UpdateWindowSize( const glimpParms_t& parms ) { - windowVisible = true; + m_windowVisible = true; - if( int( deviceParms.backBufferWidth ) != parms.width || - int( deviceParms.backBufferHeight ) != parms.height || + if( int( m_DeviceParams.backBufferWidth ) != parms.width || + int( m_DeviceParams.backBufferHeight ) != parms.height || #if ID_MSAA - int( deviceParms.backBufferSampleCount ) != parms.multiSamples || + int( m_DeviceParams.backBufferSampleCount ) != parms.multiSamples || #endif - ( deviceParms.vsyncEnabled != requestedVSync && GetGraphicsAPI() == nvrhi::GraphicsAPI::VULKAN ) ) + ( m_DeviceParams.vsyncEnabled != m_RequestedVSync && GetGraphicsAPI() == nvrhi::GraphicsAPI::VULKAN ) ) { // window is not minimized, and the size has changed BackBufferResizing(); - deviceParms.backBufferWidth = parms.width; - deviceParms.backBufferHeight = parms.height; - deviceParms.backBufferSampleCount = parms.multiSamples; - deviceParms.vsyncEnabled = requestedVSync; + m_DeviceParams.backBufferWidth = parms.width; + m_DeviceParams.backBufferHeight = parms.height; + m_DeviceParams.backBufferSampleCount = parms.multiSamples; + m_DeviceParams.vsyncEnabled = m_RequestedVSync; ResizeSwapChain(); BackBufferResized(); } else { - deviceParms.vsyncEnabled = requestedVSync; + m_DeviceParams.vsyncEnabled = m_RequestedVSync; } }