diff --git a/src/dxgi/dxgi_presenter.cpp b/src/dxgi/dxgi_presenter.cpp index 308f26ba0..619a8b4a8 100644 --- a/src/dxgi/dxgi_presenter.cpp +++ b/src/dxgi/dxgi_presenter.cpp @@ -7,7 +7,7 @@ namespace dxvk { - DxgiPresenter::DxgiPresenter( + DxgiVkPresenter::DxgiVkPresenter( const Rc& device, HWND window) : m_device (device), @@ -28,16 +28,16 @@ namespace dxvk { // Samplers for presentation. We'll create one with point sampling that will // be used when the back buffer resolution matches the output resolution, and // one with linar sampling that will be used when the image will be scaled. - m_samplerFitting = this->createSampler(VK_FILTER_NEAREST, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); - m_samplerScaling = this->createSampler(VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); + m_samplerFitting = CreateSampler(VK_FILTER_NEAREST, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); + m_samplerScaling = CreateSampler(VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER); // Create objects required for the gamma ramp. This is implemented partially // with an UBO, which stores global parameters, and a lookup texture, which // stores the actual gamma ramp and can be sampled with a linear filter. - m_gammaUbo = this->createGammaUbo(); - m_gammaSampler = this->createSampler(VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); - m_gammaTexture = this->createGammaTexture(); - m_gammaTextureView = this->createGammaTextureView(); + m_gammaUbo = CreateGammaUbo(); + m_gammaSampler = CreateSampler(VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE); + m_gammaTexture = CreateGammaTexture(); + m_gammaTextureView = CreateGammaTextureView(); // Set up context state. The shader bindings and the // constant state objects will never be modified. @@ -108,33 +108,33 @@ namespace dxvk { m_context->bindShader( VK_SHADER_STAGE_VERTEX_BIT, - this->createVertexShader()); + CreateVertexShader()); m_context->bindShader( VK_SHADER_STAGE_FRAGMENT_BIT, - this->createFragmentShader()); + CreateFragmentShader()); m_hud = hud::Hud::createHud(m_device); } - DxgiPresenter::~DxgiPresenter() { + DxgiVkPresenter::~DxgiVkPresenter() { m_device->waitForIdle(); } - void DxgiPresenter::initBackBuffer(const Rc& image) { + void DxgiVkPresenter::InitBackBuffer(const Rc& Image) { m_context->beginRecording( m_device->createCommandList()); VkImageSubresourceRange sr; sr.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; sr.baseMipLevel = 0; - sr.levelCount = image->info().mipLevels; + sr.levelCount = Image->info().mipLevels; sr.baseArrayLayer = 0; - sr.layerCount = image->info().numLayers; + sr.layerCount = Image->info().numLayers; - m_context->initImage(image, sr); + m_context->initImage(Image, sr); m_device->submitCommandList( m_context->endRecording(), @@ -142,7 +142,7 @@ namespace dxvk { } - void DxgiPresenter::presentImage() { + void DxgiVkPresenter::PresentImage() { if (m_hud != nullptr) { m_hud->render({ m_options.preferredBufferSize.width, @@ -222,22 +222,22 @@ namespace dxvk { } - void DxgiPresenter::updateBackBuffer(const Rc& image) { + void DxgiVkPresenter::UpdateBackBuffer(const Rc& Image) { // Explicitly destroy the old stuff - m_backBuffer = image; + m_backBuffer = Image; m_backBufferResolve = nullptr; m_backBufferView = nullptr; // If a multisampled back buffer was requested, we also need to // create a resolve image with otherwise identical properties. // Multisample images cannot be sampled from. - if (image->info().sampleCount != VK_SAMPLE_COUNT_1_BIT) { + if (Image->info().sampleCount != VK_SAMPLE_COUNT_1_BIT) { DxvkImageCreateInfo resolveInfo; resolveInfo.type = VK_IMAGE_TYPE_2D; - resolveInfo.format = image->info().format; + resolveInfo.format = Image->info().format; resolveInfo.flags = 0; resolveInfo.sampleCount = VK_SAMPLE_COUNT_1_BIT; - resolveInfo.extent = image->info().extent; + resolveInfo.extent = Image->info().extent; resolveInfo.numLayers = 1; resolveInfo.mipLevels = 1; resolveInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT @@ -257,7 +257,7 @@ namespace dxvk { // image to be bound as a shader resource. DxvkImageViewCreateInfo viewInfo; viewInfo.type = VK_IMAGE_VIEW_TYPE_2D; - viewInfo.format = image->info().format; + viewInfo.format = Image->info().format; viewInfo.aspect = VK_IMAGE_ASPECT_COLOR_BIT; viewInfo.minLevel = 0; viewInfo.numLevels = 1; @@ -270,41 +270,39 @@ namespace dxvk { : m_backBuffer, viewInfo); - this->initBackBuffer(m_backBuffer); + InitBackBuffer(m_backBuffer); } - void DxgiPresenter::recreateSwapchain(const DxvkSwapchainProperties& options) { + void DxgiVkPresenter::RecreateSwapchain(const DxvkSwapchainProperties* pOptions) { const bool doRecreate = - options.preferredSurfaceFormat.format != m_options.preferredSurfaceFormat.format - || options.preferredSurfaceFormat.colorSpace != m_options.preferredSurfaceFormat.colorSpace - || options.preferredPresentMode != m_options.preferredPresentMode - || options.preferredBufferSize.width != m_options.preferredBufferSize.width - || options.preferredBufferSize.height != m_options.preferredBufferSize.height; + pOptions->preferredSurfaceFormat.format != m_options.preferredSurfaceFormat.format + || pOptions->preferredSurfaceFormat.colorSpace != m_options.preferredSurfaceFormat.colorSpace + || pOptions->preferredPresentMode != m_options.preferredPresentMode + || pOptions->preferredBufferSize.width != m_options.preferredBufferSize.width + || pOptions->preferredBufferSize.height != m_options.preferredBufferSize.height; if (doRecreate) { Logger::info(str::format( - "DxgiPresenter: Recreating swap chain: ", - "\n Format: ", options.preferredSurfaceFormat.format, - "\n Present mode: ", options.preferredPresentMode, - "\n Buffer size: ", options.preferredBufferSize.width, "x", options.preferredBufferSize.height)); + "DxgiVkPresenter: Recreating swap chain: ", + "\n Format: ", pOptions->preferredSurfaceFormat.format, + "\n Present mode: ", pOptions->preferredPresentMode, + "\n Buffer size: ", pOptions->preferredBufferSize.width, "x", pOptions->preferredBufferSize.height)); - m_options = options; + if (m_swapchain == nullptr) + m_swapchain = m_device->createSwapchain(m_surface, *pOptions); + else + m_swapchain->changeProperties(*pOptions); - if (m_swapchain == nullptr) { - m_swapchain = m_device->createSwapchain( - m_surface, options); - } else { - m_swapchain->changeProperties(options); - } + m_options = *pOptions; } } - VkSurfaceFormatKHR DxgiPresenter::pickSurfaceFormat(DXGI_FORMAT fmt) const { + VkSurfaceFormatKHR DxgiVkPresenter::PickSurfaceFormat(DXGI_FORMAT Fmt) const { std::vector formats; - switch (fmt) { + switch (Fmt) { case DXGI_FORMAT_R8G8B8A8_UNORM: case DXGI_FORMAT_B8G8R8A8_UNORM: { formats.push_back({ VK_FORMAT_R8G8B8A8_UNORM, VK_COLOR_SPACE_SRGB_NONLINEAR_KHR }); @@ -327,7 +325,7 @@ namespace dxvk { } break; default: - Logger::warn(str::format("DxgiPresenter: Unknown format: ", fmt)); + Logger::warn(str::format("DxgiVkPresenter: Unknown format: ", Fmt)); } return m_surface->pickSurfaceFormat( @@ -335,12 +333,12 @@ namespace dxvk { } - VkPresentModeKHR DxgiPresenter::pickPresentMode(VkPresentModeKHR preferred) const { - return m_surface->pickPresentMode(1, &preferred); + VkPresentModeKHR DxgiVkPresenter::PickPresentMode(VkPresentModeKHR Preferred) const { + return m_surface->pickPresentMode(1, &Preferred); } - void DxgiPresenter::setGammaControl( + void DxgiVkPresenter::SetGammaControl( const DXGI_VK_GAMMA_INPUT_CONTROL* pGammaControl, const DXGI_VK_GAMMA_CURVE* pGammaCurve) { m_context->beginRecording( @@ -362,21 +360,21 @@ namespace dxvk { } - Rc DxgiPresenter::createSampler( - VkFilter filter, - VkSamplerAddressMode addressMode) { + Rc DxgiVkPresenter::CreateSampler( + VkFilter Filter, + VkSamplerAddressMode AddressMode) { DxvkSamplerCreateInfo samplerInfo; - samplerInfo.magFilter = filter; - samplerInfo.minFilter = filter; + samplerInfo.magFilter = Filter; + samplerInfo.minFilter = Filter; samplerInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; samplerInfo.mipmapLodBias = 0.0f; samplerInfo.mipmapLodMin = 0.0f; samplerInfo.mipmapLodMax = 0.0f; samplerInfo.useAnisotropy = VK_FALSE; samplerInfo.maxAnisotropy = 1.0f; - samplerInfo.addressModeU = addressMode; - samplerInfo.addressModeV = addressMode; - samplerInfo.addressModeW = addressMode; + samplerInfo.addressModeU = AddressMode; + samplerInfo.addressModeV = AddressMode; + samplerInfo.addressModeW = AddressMode; samplerInfo.compareToDepth = VK_FALSE; samplerInfo.compareOp = VK_COMPARE_OP_ALWAYS; samplerInfo.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK; @@ -385,7 +383,7 @@ namespace dxvk { } - Rc DxgiPresenter::createGammaUbo() { + Rc DxgiVkPresenter::CreateGammaUbo() { DxvkBufferCreateInfo info; info.size = sizeof(DXGI_VK_GAMMA_INPUT_CONTROL); info.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT @@ -398,7 +396,7 @@ namespace dxvk { } - Rc DxgiPresenter::createGammaTexture() { + Rc DxgiVkPresenter::CreateGammaTexture() { DxvkImageCreateInfo info; info.type = VK_IMAGE_TYPE_1D; info.format = VK_FORMAT_R16G16B16A16_UNORM; @@ -419,7 +417,7 @@ namespace dxvk { } - Rc DxgiPresenter::createGammaTextureView() { + Rc DxgiVkPresenter::CreateGammaTextureView() { DxvkImageViewCreateInfo info; info.type = VK_IMAGE_VIEW_TYPE_1D; info.format = VK_FORMAT_R16G16B16A16_UNORM; @@ -432,7 +430,7 @@ namespace dxvk { } - Rc DxgiPresenter::createVertexShader() { + Rc DxgiVkPresenter::CreateVertexShader() { const SpirvCodeBuffer codeBuffer(dxgi_presenter_vert); return m_device->createShader( @@ -442,7 +440,7 @@ namespace dxvk { } - Rc DxgiPresenter::createFragmentShader() { + Rc DxgiVkPresenter::CreateFragmentShader() { const SpirvCodeBuffer codeBuffer(dxgi_presenter_frag); // Shader resource slots diff --git a/src/dxgi/dxgi_presenter.h b/src/dxgi/dxgi_presenter.h index bdbbf66a4..87b9aea45 100644 --- a/src/dxgi/dxgi_presenter.h +++ b/src/dxgi/dxgi_presenter.h @@ -84,27 +84,26 @@ namespace dxvk { * \ref DxgiSwapChain to the Vulkan * swap chain. */ - class DxgiPresenter : public RcObject { + class DxgiVkPresenter : public RcObject { public: - DxgiPresenter( + DxgiVkPresenter( const Rc& device, HWND window); - ~DxgiPresenter(); + ~DxgiVkPresenter(); /** * \brief Initializes back buffer image * \param [in] image Back buffer image */ - void initBackBuffer( - const Rc& image); + void InitBackBuffer(const Rc& Image); /** * \brief Renders back buffer to the screen */ - void presentImage(); + void PresentImage(); /** * \brief Sets new back buffer @@ -113,8 +112,7 @@ namespace dxvk { * the back buffer image was replaced. * \param [in] image Back buffer image */ - void updateBackBuffer( - const Rc& image); + void UpdateBackBuffer(const Rc& Image); /** * \brief Recreats Vulkan swap chain @@ -124,8 +122,8 @@ namespace dxvk { * properties have changed, this is a no-op. * \param [in] options New swap chain options */ - void recreateSwapchain( - const DxvkSwapchainProperties& options); + void RecreateSwapchain( + const DxvkSwapchainProperties* pOptions); /** * \brief Picks a surface format based on a DXGI format @@ -135,7 +133,7 @@ namespace dxvk { * \param [in] fmt The DXGI format * \returns The Vulkan format */ - VkSurfaceFormatKHR pickSurfaceFormat(DXGI_FORMAT fmt) const; + VkSurfaceFormatKHR PickSurfaceFormat(DXGI_FORMAT Fmt) const; /** * \brief Picks a supported present mode @@ -143,7 +141,7 @@ namespace dxvk { * \param [in] preferred Preferred present mode * \returns An actually supported present mode */ - VkPresentModeKHR pickPresentMode(VkPresentModeKHR preferred) const; + VkPresentModeKHR PickPresentMode(VkPresentModeKHR Preferred) const; /** * \brief Sets gamma curve @@ -152,7 +150,7 @@ namespace dxvk { * \param [in] pGammaControl Input parameters * \param [in] pGammaCurve Gamma curve */ - void setGammaControl( + void SetGammaControl( const DXGI_VK_GAMMA_INPUT_CONTROL* pGammaControl, const DXGI_VK_GAMMA_CURVE* pGammaCurve); @@ -189,16 +187,16 @@ namespace dxvk { DxvkBlendMode m_blendMode; DxvkSwapchainProperties m_options; - Rc createSampler( - VkFilter filter, - VkSamplerAddressMode addressMode); + Rc CreateSampler( + VkFilter Filter, + VkSamplerAddressMode AddressMode); - Rc createGammaUbo(); - Rc createGammaTexture(); - Rc createGammaTextureView(); + Rc CreateGammaUbo(); + Rc CreateGammaTexture(); + Rc CreateGammaTextureView(); - Rc createVertexShader(); - Rc createFragmentShader(); + Rc CreateVertexShader(); + Rc CreateFragmentShader(); }; diff --git a/src/dxgi/dxgi_swapchain.cpp b/src/dxgi/dxgi_swapchain.cpp index 2e7e004cd..10cf2e98e 100644 --- a/src/dxgi/dxgi_swapchain.cpp +++ b/src/dxgi/dxgi_swapchain.cpp @@ -199,14 +199,14 @@ namespace dxvk { // Vulkan swap chain itself remains valid. DxvkSwapchainProperties swapchainProps; swapchainProps.preferredSurfaceFormat - = m_presenter->pickSurfaceFormat(m_desc.BufferDesc.Format); + = m_presenter->PickSurfaceFormat(m_desc.BufferDesc.Format); swapchainProps.preferredPresentMode = SyncInterval == 0 - ? m_presenter->pickPresentMode(VK_PRESENT_MODE_IMMEDIATE_KHR) - : m_presenter->pickPresentMode(VK_PRESENT_MODE_FIFO_KHR); + ? m_presenter->PickPresentMode(VK_PRESENT_MODE_IMMEDIATE_KHR) + : m_presenter->PickPresentMode(VK_PRESENT_MODE_FIFO_KHR); swapchainProps.preferredBufferSize = GetWindowSize(); - m_presenter->recreateSwapchain(swapchainProps); - m_presenter->presentImage(); + m_presenter->RecreateSwapchain(&swapchainProps); + m_presenter->PresentImage(); return S_OK; } catch (const DxvkError& err) { Logger::err(err.message()); @@ -301,7 +301,7 @@ namespace dxvk { curve.ControlPoints[i].A = 0; } - m_presenter->setGammaControl(&control, &curve); + m_presenter->SetGammaControl(&control, &curve); return S_OK; } @@ -321,14 +321,14 @@ namespace dxvk { curve.ControlPoints[i] = { value, value, value, 0 }; } - m_presenter->setGammaControl(&control, &curve); + m_presenter->SetGammaControl(&control, &curve); return S_OK; } HRESULT DxgiSwapChain::CreatePresenter() { try { - m_presenter = new DxgiPresenter( + m_presenter = new DxgiVkPresenter( m_device->GetDXVKDevice(), m_desc.OutputWindow); return S_OK; @@ -357,7 +357,7 @@ namespace dxvk { } try { - m_presenter->updateBackBuffer(m_backBuffer->GetDXVKImage()); + m_presenter->UpdateBackBuffer(m_backBuffer->GetDXVKImage()); return S_OK; } catch (const DxvkError& e) { Logger::err(e.message()); diff --git a/src/dxgi/dxgi_swapchain.h b/src/dxgi/dxgi_swapchain.h index e3d8a55e1..849a8d0f3 100644 --- a/src/dxgi/dxgi_swapchain.h +++ b/src/dxgi/dxgi_swapchain.h @@ -104,7 +104,7 @@ namespace dxvk { DXGI_SWAP_CHAIN_DESC m_desc; DXGI_FRAME_STATISTICS m_stats; - Rc m_presenter; + Rc m_presenter; Com m_backBuffer; HMONITOR m_monitor;