1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-03 22:24:13 +01:00

[dxvk] Remove conditional rendering from backend

Was disabled anyway due to being broken on various drivers,
so let's get rid of it.
This commit is contained in:
Philip Rebohle 2020-11-30 19:16:12 +01:00
parent 34e730fe41
commit 0ce5dd8b03
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
6 changed files with 2 additions and 174 deletions

View File

@ -226,8 +226,6 @@ namespace dxvk {
|| !required.ext4444Formats.formatA4R4G4B4) || !required.ext4444Formats.formatA4R4G4B4)
&& (m_deviceFeatures.ext4444Formats.formatA4B4G4R4 && (m_deviceFeatures.ext4444Formats.formatA4B4G4R4
|| !required.ext4444Formats.formatA4B4G4R4) || !required.ext4444Formats.formatA4B4G4R4)
&& (m_deviceFeatures.extConditionalRendering.conditionalRendering
|| !required.extConditionalRendering.conditionalRendering)
&& (m_deviceFeatures.extCustomBorderColor.customBorderColors && (m_deviceFeatures.extCustomBorderColor.customBorderColors
|| !required.extCustomBorderColor.customBorderColors) || !required.extCustomBorderColor.customBorderColors)
&& (m_deviceFeatures.extCustomBorderColor.customBorderColorWithoutFormat && (m_deviceFeatures.extCustomBorderColor.customBorderColorWithoutFormat
@ -265,11 +263,10 @@ namespace dxvk {
DxvkDeviceFeatures enabledFeatures) { DxvkDeviceFeatures enabledFeatures) {
DxvkDeviceExtensions devExtensions; DxvkDeviceExtensions devExtensions;
std::array<DxvkExt*, 24> devExtensionList = {{ std::array<DxvkExt*, 23> devExtensionList = {{
&devExtensions.amdMemoryOverallocationBehaviour, &devExtensions.amdMemoryOverallocationBehaviour,
&devExtensions.amdShaderFragmentMask, &devExtensions.amdShaderFragmentMask,
&devExtensions.ext4444Formats, &devExtensions.ext4444Formats,
&devExtensions.extConditionalRendering,
&devExtensions.extCustomBorderColor, &devExtensions.extCustomBorderColor,
&devExtensions.extDepthClipEnable, &devExtensions.extDepthClipEnable,
&devExtensions.extExtendedDynamicState, &devExtensions.extExtendedDynamicState,
@ -333,11 +330,6 @@ namespace dxvk {
enabledFeatures.ext4444Formats.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.ext4444Formats); 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) { if (devExtensions.extCustomBorderColor) {
enabledFeatures.extCustomBorderColor.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT; enabledFeatures.extCustomBorderColor.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT;
enabledFeatures.extCustomBorderColor.pNext = std::exchange(enabledFeatures.core.pNext, &enabledFeatures.extCustomBorderColor); 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); 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)) { 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.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT;
m_deviceFeatures.extCustomBorderColor.pNext = std::exchange(m_deviceFeatures.core.pNext, &m_deviceFeatures.extCustomBorderColor); 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 shaderFloat64 : ", features.core.features.shaderFloat64 ? "1" : "0",
"\n shaderInt64 : ", features.core.features.shaderInt64 ? "1" : "0", "\n shaderInt64 : ", features.core.features.shaderInt64 ? "1" : "0",
"\n variableMultisampleRate : ", features.core.features.variableMultisampleRate ? "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", VK_EXT_4444_FORMATS_EXTENSION_NAME,
"\n formatA4R4G4B4 : ", features.ext4444Formats.formatA4R4G4B4 ? "1" : "0", "\n formatA4R4G4B4 : ", features.ext4444Formats.formatA4R4G4B4 ? "1" : "0",
"\n formatA4B4G4R4 : ", features.ext4444Formats.formatA4B4G4R4 ? "1" : "0", "\n formatA4B4G4R4 : ", features.ext4444Formats.formatA4B4G4R4 ? "1" : "0",

View File

@ -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) { void DxvkContext::setBarrierControl(DxvkBarrierControlFlags control) {
m_barrierControl = control; m_barrierControl = control;
} }
@ -2387,21 +2365,6 @@ namespace dxvk {
} }
void DxvkContext::writePredicate(
const DxvkBufferSlice& predicate,
const Rc<DxvkGpuQuery>& 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<DxvkAccess::Write>(predicate.buffer());
}
void DxvkContext::writeTimestamp(const Rc<DxvkGpuQuery>& query) { void DxvkContext::writeTimestamp(const Rc<DxvkGpuQuery>& query) {
m_queryManager.writeTimestamp(m_cmd, 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() { void DxvkContext::startRenderPass() {
if (!m_flags.test(DxvkContextFlag::GpRenderPassBound)) { if (!m_flags.test(DxvkContextFlag::GpRenderPassBound)) {
this->flushClears(true); this->flushClears(true);
@ -3466,7 +3405,6 @@ namespace dxvk {
m_gfxBarriers.reset(); m_gfxBarriers.reset();
this->unbindGraphicsPipeline(); this->unbindGraphicsPipeline();
this->commitPredicateUpdates();
m_flags.clr(DxvkContextFlag::GpDirtyXfbCounters); m_flags.clr(DxvkContextFlag::GpDirtyXfbCounters);
} else if (flushClears) { } 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() { void DxvkContext::startTransformFeedback() {
if (!m_flags.test(DxvkContextFlag::GpXfbActive)) { if (!m_flags.test(DxvkContextFlag::GpXfbActive)) {
m_flags.set(DxvkContextFlag::GpXfbActive); m_flags.set(DxvkContextFlag::GpXfbActive);
@ -3719,8 +3630,7 @@ namespace dxvk {
DxvkContextFlag::GpDirtyStencilRef, DxvkContextFlag::GpDirtyStencilRef,
DxvkContextFlag::GpDirtyViewport, DxvkContextFlag::GpDirtyViewport,
DxvkContextFlag::GpDirtyDepthBias, DxvkContextFlag::GpDirtyDepthBias,
DxvkContextFlag::GpDirtyDepthBounds, DxvkContextFlag::GpDirtyDepthBounds);
DxvkContextFlag::GpDirtyPredicate);
m_gpActivePipeline = VK_NULL_HANDLE; 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() { void DxvkContext::updateDynamicState() {
if (!m_gpActivePipeline) if (!m_gpActivePipeline)
return; return;
@ -4325,9 +4225,6 @@ namespace dxvk {
if (m_state.gp.flags.test(DxvkGraphicsPipelineFlag::HasTransformFeedback)) if (m_state.gp.flags.test(DxvkGraphicsPipelineFlag::HasTransformFeedback))
this->updateTransformFeedbackState(); this->updateTransformFeedbackState();
if (m_flags.test(DxvkContextFlag::GpDirtyPredicate))
this->updateConditionalRendering();
if (m_flags.any( if (m_flags.any(
DxvkContextFlag::GpDirtyViewport, DxvkContextFlag::GpDirtyViewport,
DxvkContextFlag::GpDirtyBlendConstants, DxvkContextFlag::GpDirtyBlendConstants,

View File

@ -936,21 +936,6 @@ namespace dxvk {
uint32_t index, uint32_t index,
uint32_t value); 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 * \brief Sets barrier control flags
* *
@ -968,18 +953,6 @@ namespace dxvk {
void signalGpuEvent( void signalGpuEvent(
const Rc<DxvkGpuEvent>& event); const Rc<DxvkGpuEvent>& 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<DxvkGpuQuery>& query);
/** /**
* \brief Writes to a timestamp query * \brief Writes to a timestamp query
* \param [in] query The timestamp query * \param [in] query The timestamp query
@ -1048,11 +1021,6 @@ namespace dxvk {
std::array<DxvkGraphicsPipeline*, 4096> m_gpLookupCache = { }; std::array<DxvkGraphicsPipeline*, 4096> m_gpLookupCache = { };
std::array<DxvkComputePipeline*, 256> m_cpLookupCache = { }; std::array<DxvkComputePipeline*, 256> m_cpLookupCache = { };
std::unordered_map<
DxvkBufferSliceHandle,
DxvkGpuQueryHandle,
DxvkHash, DxvkEq> m_predicateWrites;
void blitImageFb( void blitImageFb(
const Rc<DxvkImage>& dstImage, const Rc<DxvkImage>& dstImage,
const Rc<DxvkImage>& srcImage, const Rc<DxvkImage>& srcImage,
@ -1131,12 +1099,6 @@ namespace dxvk {
void flushClears( void flushClears(
bool useRenderPass); bool useRenderPass);
void updatePredicate(
const DxvkBufferSliceHandle& predicate,
const DxvkGpuQueryHandle& query);
void commitPredicateUpdates();
void startRenderPass(); void startRenderPass();
void spillRenderPass(bool flushClears = true); void spillRenderPass(bool flushClears = true);
@ -1152,9 +1114,6 @@ namespace dxvk {
const DxvkRenderTargets& renderTargets, const DxvkRenderTargets& renderTargets,
DxvkRenderPassOps& renderPassOps); DxvkRenderPassOps& renderPassOps);
void startConditionalRendering();
void pauseConditionalRendering();
void startTransformFeedback(); void startTransformFeedback();
void pauseTransformFeedback(); void pauseTransformFeedback();
@ -1186,8 +1145,6 @@ namespace dxvk {
void updateTransformFeedbackBuffers(); void updateTransformFeedbackBuffers();
void updateTransformFeedbackState(); void updateTransformFeedbackState();
void updateConditionalRendering();
void updateDynamicState(); void updateDynamicState();
template<VkPipelineBindPoint BindPoint> template<VkPipelineBindPoint BindPoint>

View File

@ -22,7 +22,6 @@ namespace dxvk {
*/ */
enum class DxvkContextFlag : uint32_t { enum class DxvkContextFlag : uint32_t {
GpRenderPassBound, ///< Render pass is currently bound GpRenderPassBound, ///< Render pass is currently bound
GpCondActive, ///< Conditional rendering is enabled
GpXfbActive, ///< Transform feedback is enabled GpXfbActive, ///< Transform feedback is enabled
GpDirtyFramebuffer, ///< Framebuffer binding is out of date GpDirtyFramebuffer, ///< Framebuffer binding is out of date
GpDirtyPipeline, ///< Graphics pipeline binding is out of date GpDirtyPipeline, ///< Graphics pipeline binding is out of date
@ -38,7 +37,6 @@ namespace dxvk {
GpDirtyDepthBounds, ///< Depth bounds have changed GpDirtyDepthBounds, ///< Depth bounds have changed
GpDirtyStencilRef, ///< Stencil reference has changed GpDirtyStencilRef, ///< Stencil reference has changed
GpDirtyViewport, ///< Viewport state has changed GpDirtyViewport, ///< Viewport state has changed
GpDirtyPredicate, ///< Predicate has changed
GpDynamicBlendConstants, ///< Blend constants are dynamic GpDynamicBlendConstants, ///< Blend constants are dynamic
GpDynamicDepthBias, ///< Depth bias is dynamic GpDynamicDepthBias, ///< Depth bias is dynamic
GpDynamicDepthBounds, ///< Depth bounds are dynamic GpDynamicDepthBounds, ///< Depth bounds are dynamic
@ -144,12 +142,6 @@ namespace dxvk {
}; };
struct DxvkCondRenderState {
DxvkBufferSlice predicate;
VkConditionalRenderingFlagsEXT flags;
};
struct DxvkDeferredClear { struct DxvkDeferredClear {
Rc<DxvkImageView> imageView; Rc<DxvkImageView> imageView;
VkImageAspectFlags clearAspects; VkImageAspectFlags clearAspects;
@ -171,7 +163,6 @@ namespace dxvk {
DxvkPushConstantState pc; DxvkPushConstantState pc;
DxvkXfbState xfb; DxvkXfbState xfb;
DxvkDynamicState dyn; DxvkDynamicState dyn;
DxvkCondRenderState cond;
DxvkGraphicsPipelineState gp; DxvkGraphicsPipelineState gp;
DxvkComputePipelineState cp; DxvkComputePipelineState cp;

View File

@ -36,7 +36,6 @@ namespace dxvk {
VkPhysicalDeviceFeatures2 core; VkPhysicalDeviceFeatures2 core;
VkPhysicalDeviceShaderDrawParametersFeatures shaderDrawParameters; VkPhysicalDeviceShaderDrawParametersFeatures shaderDrawParameters;
VkPhysicalDevice4444FormatsFeaturesEXT ext4444Formats; VkPhysicalDevice4444FormatsFeaturesEXT ext4444Formats;
VkPhysicalDeviceConditionalRenderingFeaturesEXT extConditionalRendering;
VkPhysicalDeviceCustomBorderColorFeaturesEXT extCustomBorderColor; VkPhysicalDeviceCustomBorderColorFeaturesEXT extCustomBorderColor;
VkPhysicalDeviceDepthClipEnableFeaturesEXT extDepthClipEnable; VkPhysicalDeviceDepthClipEnableFeaturesEXT extDepthClipEnable;
VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extExtendedDynamicState; VkPhysicalDeviceExtendedDynamicStateFeaturesEXT extExtendedDynamicState;

View File

@ -261,7 +261,6 @@ namespace dxvk {
DxvkExt amdMemoryOverallocationBehaviour = { VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME, DxvkExtMode::Optional }; DxvkExt amdMemoryOverallocationBehaviour = { VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt amdShaderFragmentMask = { VK_AMD_SHADER_FRAGMENT_MASK_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 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 extCustomBorderColor = { VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME, DxvkExtMode::Optional };
DxvkExt extDepthClipEnable = { VK_EXT_DEPTH_CLIP_ENABLE_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 }; DxvkExt extExtendedDynamicState = { VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME, DxvkExtMode::Optional };