Quellcode durchsuchen

Revert "[ VK/DX12] Bring setScissor on par with the other renderers (#2239)"

This reverts commit fbd7e9efd69c1e6c6c52af4155d2c0afc9b2a219.
Бранимир Караџић vor 5 Jahren
Ursprung
Commit
f20fd61e4f
2 geänderte Dateien mit 17 neuen und 9 gelöschten Zeilen
  1. 10 5
      src/renderer_d3d12.cpp
  2. 7 4
      src/renderer_vk.cpp

+ 10 - 5
src/renderer_d3d12.cpp

@@ -5893,7 +5893,7 @@ namespace bgfx { namespace d3d12
 
 		bool wasCompute = false;
 		bool viewHasScissor = false;
-		bool scissorEnabled = false;
+		bool restoreScissor = false;
 		Rect viewScissorRect;
 		viewScissorRect.clear();
 
@@ -6033,6 +6033,7 @@ namespace bgfx { namespace d3d12
 					rc.right  = viewScissorRect.m_x + viewScissorRect.m_width;
 					rc.bottom = viewScissorRect.m_y + viewScissorRect.m_height;
 					m_commandList->RSSetScissorRects(1, &rc);
+					restoreScissor = false;
 
 					Clear& clr = _render->m_view[view].m_clear;
 					if (BGFX_CLEAR_NONE != clr.m_flags)
@@ -6529,9 +6530,10 @@ namespace bgfx { namespace d3d12
 
 						if (UINT16_MAX == scissor)
 						{
-							scissorEnabled = viewHasScissor;
-							if (viewHasScissor)
+							if (restoreScissor
+							||  viewHasScissor)
 							{
+								restoreScissor = false;
 								D3D12_RECT rc;
 								rc.left   = viewScissorRect.m_x;
 								rc.top    = viewScissorRect.m_y;
@@ -6542,11 +6544,14 @@ namespace bgfx { namespace d3d12
 						}
 						else
 						{
-							
+							restoreScissor = true;
 							Rect scissorRect;
 							scissorRect.setIntersect(viewScissorRect, _render->m_frameCache.m_rectCache.m_cache[scissor]);
+							if (scissorRect.isZeroArea() )
+							{
+								continue;
+							}
 
-							scissorEnabled = true;
 							D3D12_RECT rc;
 							rc.left   = scissorRect.m_x;
 							rc.top    = scissorRect.m_y;

+ 7 - 4
src/renderer_vk.cpp

@@ -5944,7 +5944,7 @@ VK_DESTROY
 
 		bool wasCompute     = false;
 		bool viewHasScissor = false;
-		bool scissorEnabled = false;
+		bool restoreScissor = false;
 		Rect viewScissorRect;
 		viewScissorRect.clear();
 
@@ -6097,6 +6097,8 @@ VK_DESTROY
 						rc.extent.height = viewScissorRect.m_height;
 						vkCmdSetScissor(m_commandBuffer, 0, 1, &rc);
 
+						restoreScissor = false;
+
 						Clear& clr = _render->m_view[view].m_clear;
 						if (BGFX_CLEAR_NONE != clr.m_flags)
 						{
@@ -6394,9 +6396,10 @@ VK_DESTROY
 
 						if (UINT16_MAX == scissor)
 						{
-							scissorEnabled = viewHasScissor;
-							if (viewHasScissor)
+							if (restoreScissor
+							||  viewHasScissor)
 							{
+								restoreScissor = false;
 								VkRect2D rc;
 								rc.offset.x      = viewScissorRect.m_x;
 								rc.offset.y      = viewScissorRect.m_y;
@@ -6407,10 +6410,10 @@ VK_DESTROY
 						}
 						else
 						{
+							restoreScissor = true;
 							Rect scissorRect;
 							scissorRect.setIntersect(viewScissorRect, _render->m_frameCache.m_rectCache.m_cache[scissor]);
 
-							scissorEnabled = true;
 							VkRect2D rc;
 							rc.offset.x      = scissorRect.m_x;
 							rc.offset.y      = scissorRect.m_y;