[Bf-blender-cvs] [81283b1c81e] master: DRW: Fix rasterizer discard messing with clear commands

Clément Foucault noreply at git.blender.org
Tue Mar 5 17:24:41 CET 2019


Commit: 81283b1c81e30623a2c7d97763bfe264c93a0d28
Author: Clément Foucault
Date:   Tue Mar 5 16:42:18 2019 +0100
Branches: master
https://developer.blender.org/rB81283b1c81e30623a2c7d97763bfe264c93a0d28

DRW: Fix rasterizer discard messing with clear commands

Fixes T62179 Viewport Ghosting on rigs

===================================================================

M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager_exec.c

===================================================================

diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index d79b7caf5e7..dee686e270e 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -306,6 +306,8 @@ typedef enum {
 	DRW_STATE_STENCIL_NEQUAL         = (1 << 31),
 } DRWState;
 #define DRW_STATE_DEFAULT (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL)
+#define DRW_STATE_RASTERIZER_ENABLED (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_STENCIL | \
+                                      DRW_STATE_WRITE_STENCIL_SHADOW_PASS | DRW_STATE_WRITE_STENCIL_SHADOW_FAIL)
 
 typedef enum {
 	DRW_ATTR_INT,
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 352ce913fb7..56b0fb1faf2 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -97,15 +97,9 @@ void drw_state_set(DRWState state)
 
 	/* Raster Discard */
 	{
-		if (CHANGED_ANY(DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR |
-		                DRW_STATE_WRITE_STENCIL |
-		                DRW_STATE_WRITE_STENCIL_SHADOW_PASS |
-		                DRW_STATE_WRITE_STENCIL_SHADOW_FAIL))
+		if (CHANGED_ANY(DRW_STATE_RASTERIZER_ENABLED))
 		{
-			if ((state & (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR |
-			              DRW_STATE_WRITE_STENCIL | DRW_STATE_WRITE_STENCIL_SHADOW_PASS |
-			              DRW_STATE_WRITE_STENCIL_SHADOW_FAIL)) != 0)
-			{
+			if ((state & DRW_STATE_RASTERIZER_ENABLED) != 0) {
 				glDisable(GL_RASTERIZER_DISCARD);
 			}
 			else {
@@ -1355,6 +1349,13 @@ static void drw_draw_pass_ex(DRWPass *pass, DRWShadingGroup *start_group, DRWSha
 		DST.shader = NULL;
 	}
 
+	/* HACK: Rasterized discard can affect clear commands which are not
+	 * part of a DRWPass (as of now). So disable rasterized discard here
+	 * if it has been enabled. */
+	if ((DST.state & DRW_STATE_RASTERIZER_ENABLED) == 0) {
+		drw_state_set((DST.state & ~DRW_STATE_RASTERIZER_ENABLED) | DRW_STATE_DEFAULT);
+	}
+
 	DRW_stats_query_end();
 }



More information about the Bf-blender-cvs mailing list