Browse Source

[vulkan] Add InvalidateState for old topology draw

vkexperiments1
CamilleLaVey 6 days ago
parent
commit
4a7aa1618a
  1. 5
      src/video_core/renderer_vulkan/vk_scheduler.cpp
  2. 15
      src/video_core/renderer_vulkan/vk_state_tracker.h

5
src/video_core/renderer_vulkan/vk_scheduler.cpp

@ -168,6 +168,11 @@ bool Scheduler::UpdateGraphicsPipeline(GraphicsPipeline* pipeline) {
return true; return true;
} }
if (pipeline->UsesExtendedDynamicState() || pipeline->UsesExtendedDynamicState2() ||
pipeline->UsesExtendedDynamicState2LogicOp()) {
state_tracker.InvalidateExtendedDynamicStates();
}
if (!pipeline->UsesExtendedDynamicState()) { if (!pipeline->UsesExtendedDynamicState()) {
state.needs_state_enable_refresh = true; state.needs_state_enable_refresh = true;
} else if (state.needs_state_enable_refresh) { } else if (state.needs_state_enable_refresh) {

15
src/video_core/renderer_vulkan/vk_state_tracker.h

@ -94,6 +94,21 @@ public:
(*flags)[Dirty::StateEnable] = true; (*flags)[Dirty::StateEnable] = true;
} }
void InvalidateExtendedDynamicStates() {
(*flags)[Dirty::Viewports] = true;
(*flags)[Dirty::Scissors] = true;
(*flags)[Dirty::CullMode] = true;
(*flags)[Dirty::DepthCompareOp] = true;
(*flags)[Dirty::FrontFace] = true;
(*flags)[Dirty::StencilOp] = true;
(*flags)[Dirty::StateEnable] = true;
(*flags)[Dirty::PrimitiveRestartEnable] = true;
(*flags)[Dirty::RasterizerDiscardEnable] = true;
(*flags)[Dirty::DepthBiasEnable] = true;
(*flags)[Dirty::LogicOp] = true;
current_topology = INVALID_TOPOLOGY;
}
bool TouchViewports() { bool TouchViewports() {
const bool dirty_viewports = Exchange(Dirty::Viewports, false); const bool dirty_viewports = Exchange(Dirty::Viewports, false);
const bool rescale_viewports = Exchange(VideoCommon::Dirty::RescaleViewports, false); const bool rescale_viewports = Exchange(VideoCommon::Dirty::RescaleViewports, false);

Loading…
Cancel
Save