From 0ce5dd8b03d0fb747bb85a9fd1d081c3df391125 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 30 Nov 2020 19:16:12 +0100 Subject: [PATCH] [dxvk] Remove conditional rendering from backend Was disabled anyway due to being broken on various drivers, so let's get rid of it. --- src/dxvk/dxvk_adapter.cpp | 17 +----- src/dxvk/dxvk_context.cpp | 105 +--------------------------------- src/dxvk/dxvk_context.h | 43 -------------- src/dxvk/dxvk_context_state.h | 9 --- src/dxvk/dxvk_device_info.h | 1 - src/dxvk/dxvk_extensions.h | 1 - 6 files changed, 2 insertions(+), 174 deletions(-) diff --git a/src/dxvk/dxvk_adapter.cpp b/src/dxvk/dxvk_adapter.cpp index 37e5c2012..21347c9dc 100644 --- a/src/dxvk/dxvk_adapter.cpp +++ b/src/dxvk/dxvk_adapter.cpp @@ -226,8 +226,6 @@ namespace dxvk { || !required.ext4444Formats.formatA4R4G4B4) && (m_deviceFeatures.ext4444Formats.formatA4B4G4R4 || !required.ext4444Formats.formatA4B4G4R4) - && (m_deviceFeatures.extConditionalRendering.conditionalRendering - || !required.extConditionalRendering.conditionalRendering) && (m_deviceFeatures.extCustomBorderColor.customBorderColors || !required.extCustomBorderColor.customBorderColors) && (m_deviceFeatures.extCustomBorderColor.customBorderColorWithoutFormat @@ -265,11 +263,10 @@ namespace dxvk { DxvkDeviceFeatures enabledFeatures) { DxvkDeviceExtensions devExtensions; - std::array devExtensionList = {{ + std::array devExtensionList = {{ &devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdShaderFragmentMask, &devExtensions.ext4444Formats, - &devExtensions.extConditionalRendering, &devExtensions.extCustomBorderColor, &devExtensions.extDepthClipEnable, &devExtensions.extExtendedDynamicState, @@ -333,11 +330,6 @@ namespace dxvk { enabledFeatures.ext4444Formats.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.ext4444Formats); } - if (devExtensions.extConditionalRendering) { - enabledFeatures.extConditionalRendering.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT; - enabledFeatures.extConditionalRendering.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extConditionalRendering); - } - if (devExtensions.extCustomBorderColor) { enabledFeatures.extCustomBorderColor.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT; enabledFeatures.extCustomBorderColor.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extCustomBorderColor); @@ -584,11 +576,6 @@ namespace dxvk { m_deviceFeatures.ext4444Formats.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.ext4444Formats); } - if (m_deviceExtensions.supports(VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME)) { - m_deviceFeatures.extConditionalRendering.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT; - m_deviceFeatures.extConditionalRendering.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extConditionalRendering); - } - if (m_deviceExtensions.supports(VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME)) { m_deviceFeatures.extCustomBorderColor.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT; m_deviceFeatures.extCustomBorderColor.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extCustomBorderColor); @@ -700,8 +687,6 @@ namespace dxvk { "\n shaderFloat64 : ", features.core.features.shaderFloat64 ? "1" : "0", "\n shaderInt64 : ", features.core.features.shaderInt64 ? "1" : "0", "\n variableMultisampleRate : ", features.core.features.variableMultisampleRate ? "1" : "0", - "\n", VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, - "\n conditionalRendering : ", features.extConditionalRendering.conditionalRendering ? "1" : "0", "\n", VK_EXT_4444_FORMATS_EXTENSION_NAME, "\n formatA4R4G4B4 : ", features.ext4444Formats.formatA4R4G4B4 ? "1" : "0", "\n formatA4B4G4R4 : ", features.ext4444Formats.formatA4B4G4R4 ? "1" : "0", diff --git a/src/dxvk/dxvk_context.cpp b/src/dxvk/dxvk_context.cpp index 4fcd5d7d0..851be08fe 100644 --- a/src/dxvk/dxvk_context.cpp +++ b/src/dxvk/dxvk_context.cpp @@ -2347,28 +2347,6 @@ namespace dxvk { } - void DxvkContext::setPredicate( - const DxvkBufferSlice& predicate, - VkConditionalRenderingFlagsEXT flags) { - if (!m_state.cond.predicate.matches(predicate)) { - m_state.cond.predicate = predicate; - - if (m_predicateWrites.find(predicate.getSliceHandle()) - != m_predicateWrites.end()) { - spillRenderPass(); - commitPredicateUpdates(); - } - - m_flags.set(DxvkContextFlag::GpDirtyPredicate); - } - - if (m_state.cond.flags != flags) { - m_state.cond.flags = flags; - m_flags.set(DxvkContextFlag::GpDirtyPredicate); - } - } - - void DxvkContext::setBarrierControl(DxvkBarrierControlFlags control) { m_barrierControl = control; } @@ -2387,21 +2365,6 @@ namespace dxvk { } - void DxvkContext::writePredicate( - const DxvkBufferSlice& predicate, - const Rc& query) { - DxvkBufferSliceHandle predicateHandle = predicate.getSliceHandle(); - DxvkGpuQueryHandle queryHandle = query->handle(); - - if (m_flags.test(DxvkContextFlag::GpRenderPassBound)) - m_predicateWrites.insert({ predicateHandle, queryHandle }); - else - updatePredicate(predicateHandle, queryHandle); - - m_cmd->trackResource(predicate.buffer()); - } - - void DxvkContext::writeTimestamp(const Rc& query) { m_queryManager.writeTimestamp(m_cmd, query); } @@ -3400,30 +3363,6 @@ namespace dxvk { } - void DxvkContext::updatePredicate( - const DxvkBufferSliceHandle& predicate, - const DxvkGpuQueryHandle& query) { - m_cmd->cmdCopyQueryPoolResults( - query.queryPool, query.queryId, 1, - predicate.handle, predicate.offset, sizeof(uint32_t), - VK_QUERY_RESULT_WAIT_BIT); - - m_execBarriers.accessBuffer(predicate, - VK_PIPELINE_STAGE_TRANSFER_BIT, - VK_ACCESS_TRANSFER_WRITE_BIT, - VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT, - VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT); - } - - - void DxvkContext::commitPredicateUpdates() { - for (const auto& update : m_predicateWrites) - updatePredicate(update.first, update.second); - - m_predicateWrites.clear(); - } - - void DxvkContext::startRenderPass() { if (!m_flags.test(DxvkContextFlag::GpRenderPassBound)) { this->flushClears(true); @@ -3466,7 +3405,6 @@ namespace dxvk { m_gfxBarriers.reset(); this->unbindGraphicsPipeline(); - this->commitPredicateUpdates(); m_flags.clr(DxvkContextFlag::GpDirtyXfbCounters); } else if (flushClears) { @@ -3577,33 +3515,6 @@ namespace dxvk { } - void DxvkContext::startConditionalRendering() { - if (!m_flags.test(DxvkContextFlag::GpCondActive)) { - m_flags.set(DxvkContextFlag::GpCondActive); - - auto predicateSlice = m_state.cond.predicate.getSliceHandle(); - - VkConditionalRenderingBeginInfoEXT info; - info.sType = VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT; - info.pNext = nullptr; - info.buffer = predicateSlice.handle; - info.offset = predicateSlice.offset; - info.flags = m_state.cond.flags; - - m_cmd->cmdBeginConditionalRendering(&info); - } - } - - - void DxvkContext::pauseConditionalRendering() { - if (m_flags.test(DxvkContextFlag::GpCondActive)) { - m_flags.clr(DxvkContextFlag::GpCondActive); - - m_cmd->cmdEndConditionalRendering(); - } - } - - void DxvkContext::startTransformFeedback() { if (!m_flags.test(DxvkContextFlag::GpXfbActive)) { m_flags.set(DxvkContextFlag::GpXfbActive); @@ -3719,8 +3630,7 @@ namespace dxvk { DxvkContextFlag::GpDirtyStencilRef, DxvkContextFlag::GpDirtyViewport, DxvkContextFlag::GpDirtyDepthBias, - DxvkContextFlag::GpDirtyDepthBounds, - DxvkContextFlag::GpDirtyPredicate); + DxvkContextFlag::GpDirtyDepthBounds); m_gpActivePipeline = VK_NULL_HANDLE; } @@ -4178,16 +4088,6 @@ namespace dxvk { } - void DxvkContext::updateConditionalRendering() { - m_flags.clr(DxvkContextFlag::GpDirtyPredicate); - - pauseConditionalRendering(); - - if (m_state.cond.predicate.defined()) - startConditionalRendering(); - } - - void DxvkContext::updateDynamicState() { if (!m_gpActivePipeline) return; @@ -4325,9 +4225,6 @@ namespace dxvk { if (m_state.gp.flags.test(DxvkGraphicsPipelineFlag::HasTransformFeedback)) this->updateTransformFeedbackState(); - if (m_flags.test(DxvkContextFlag::GpDirtyPredicate)) - this->updateConditionalRendering(); - if (m_flags.any( DxvkContextFlag::GpDirtyViewport, DxvkContextFlag::GpDirtyBlendConstants, diff --git a/src/dxvk/dxvk_context.h b/src/dxvk/dxvk_context.h index dec399b06..275c67e0b 100644 --- a/src/dxvk/dxvk_context.h +++ b/src/dxvk/dxvk_context.h @@ -936,21 +936,6 @@ namespace dxvk { uint32_t index, uint32_t value); - /** - * \brief Sets predicate - * - * Enables or disables conditional rendering, - * depending on whether the given buffer slice - * is defined or not. Draw calls and render - * target clear commands will get discarded if - * the predicate value is either zero or non-zero. - * \param [in] predicate The predicate buffer - * \param [in] flags Conditional rendering mode - */ - void setPredicate( - const DxvkBufferSlice& predicate, - VkConditionalRenderingFlagsEXT flags); - /** * \brief Sets barrier control flags * @@ -968,18 +953,6 @@ namespace dxvk { void signalGpuEvent( const Rc& event); - /** - * \brief Copies query data to predicate buffer - * - * The given buffer slice can then be passed - * to \c setPredicate to enable predication. - * \param [in] predicate Predicate buffer - * \param [in] query Source query - */ - void writePredicate( - const DxvkBufferSlice& predicate, - const Rc& query); - /** * \brief Writes to a timestamp query * \param [in] query The timestamp query @@ -1048,11 +1021,6 @@ namespace dxvk { std::array m_gpLookupCache = { }; std::array m_cpLookupCache = { }; - std::unordered_map< - DxvkBufferSliceHandle, - DxvkGpuQueryHandle, - DxvkHash, DxvkEq> m_predicateWrites; - void blitImageFb( const Rc& dstImage, const Rc& srcImage, @@ -1131,12 +1099,6 @@ namespace dxvk { void flushClears( bool useRenderPass); - void updatePredicate( - const DxvkBufferSliceHandle& predicate, - const DxvkGpuQueryHandle& query); - - void commitPredicateUpdates(); - void startRenderPass(); void spillRenderPass(bool flushClears = true); @@ -1152,9 +1114,6 @@ namespace dxvk { const DxvkRenderTargets& renderTargets, DxvkRenderPassOps& renderPassOps); - void startConditionalRendering(); - void pauseConditionalRendering(); - void startTransformFeedback(); void pauseTransformFeedback(); @@ -1186,8 +1145,6 @@ namespace dxvk { void updateTransformFeedbackBuffers(); void updateTransformFeedbackState(); - void updateConditionalRendering(); - void updateDynamicState(); template diff --git a/src/dxvk/dxvk_context_state.h b/src/dxvk/dxvk_context_state.h index fbffcbd9d..48ddf0d22 100644 --- a/src/dxvk/dxvk_context_state.h +++ b/src/dxvk/dxvk_context_state.h @@ -22,7 +22,6 @@ namespace dxvk { */ enum class DxvkContextFlag : uint32_t { GpRenderPassBound, ///< Render pass is currently bound - GpCondActive, ///< Conditional rendering is enabled GpXfbActive, ///< Transform feedback is enabled GpDirtyFramebuffer, ///< Framebuffer binding is out of date GpDirtyPipeline, ///< Graphics pipeline binding is out of date @@ -38,7 +37,6 @@ namespace dxvk { GpDirtyDepthBounds, ///< Depth bounds have changed GpDirtyStencilRef, ///< Stencil reference has changed GpDirtyViewport, ///< Viewport state has changed - GpDirtyPredicate, ///< Predicate has changed GpDynamicBlendConstants, ///< Blend constants are dynamic GpDynamicDepthBias, ///< Depth bias is dynamic GpDynamicDepthBounds, ///< Depth bounds are dynamic @@ -144,12 +142,6 @@ namespace dxvk { }; - struct DxvkCondRenderState { - DxvkBufferSlice predicate; - VkConditionalRenderingFlagsEXT flags; - }; - - struct DxvkDeferredClear { Rc imageView; VkImageAspectFlags clearAspects; @@ -171,7 +163,6 @@ namespace dxvk { DxvkPushConstantState pc; DxvkXfbState xfb; DxvkDynamicState dyn; - DxvkCondRenderState cond; DxvkGraphicsPipelineState gp; DxvkComputePipelineState cp; diff --git a/src/dxvk/dxvk_device_info.h b/src/dxvk/dxvk_device_info.h index 9aff0ea18..16f4ce24c 100644 --- a/src/dxvk/dxvk_device_info.h +++ b/src/dxvk/dxvk_device_info.h @@ -36,7 +36,6 @@ namespace dxvk { VkPhysicalDeviceFeatures2 core; VkPhysicalDeviceShaderDrawParametersFeatures shaderDrawParameters; VkPhysicalDevice4444FormatsFeaturesEXT ext4444Formats; - VkPhysicalDeviceConditionalRenderingFeaturesEXT extConditionalRendering; VkPhysicalDeviceCustomBorderColorFeaturesEXT extCustomBorderColor; VkPhysicalDeviceDepthClipEnableFeaturesEXT extDepthClipEnable; VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extExtendedDynamicState; diff --git a/src/dxvk/dxvk_extensions.h b/src/dxvk/dxvk_extensions.h index c6a4af56b..1a169828b 100644 --- a/src/dxvk/dxvk_extensions.h +++ b/src/dxvk/dxvk_extensions.h @@ -261,7 +261,6 @@ namespace dxvk { DxvkExt amdMemoryOverallocationBehaviour = { VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt amdShaderFragmentMask = { VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt ext4444Formats = { VK_EXT_4444_FORMATS_EXTENSION_NAME, DxvkExtMode::Optional }; - DxvkExt extConditionalRendering = { VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, DxvkExtMode::Disabled }; DxvkExt extCustomBorderColor = { VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extDepthClipEnable = { VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt extExtendedDynamicState = { VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, DxvkExtMode::Optional };