1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-02 10:24:12 +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)
&& (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<DxvkExt*, 24> devExtensionList = {{
std::array<DxvkExt*, 23> 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",

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) {
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) {
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,

View File

@ -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<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
* \param [in] query The timestamp query
@ -1048,11 +1021,6 @@ namespace dxvk {
std::array<DxvkGraphicsPipeline*, 4096> m_gpLookupCache = { };
std::array<DxvkComputePipeline*, 256> m_cpLookupCache = { };
std::unordered_map<
DxvkBufferSliceHandle,
DxvkGpuQueryHandle,
DxvkHash, DxvkEq> m_predicateWrites;
void blitImageFb(
const Rc<DxvkImage>& dstImage,
const Rc<DxvkImage>& 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<VkPipelineBindPoint BindPoint>

View File

@ -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<DxvkImageView> imageView;
VkImageAspectFlags clearAspects;
@ -171,7 +163,6 @@ namespace dxvk {
DxvkPushConstantState pc;
DxvkXfbState xfb;
DxvkDynamicState dyn;
DxvkCondRenderState cond;
DxvkGraphicsPipelineState gp;
DxvkComputePipelineState cp;

View File

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

View File

@ -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 };