[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47262] branches/soc-2012-swiss_cheese: WITH_GPU_SAFETY is an advanced CMake option for adding a lot of checks to help debug the graphics API .

Jason Wilkins Jason.A.Wilkins at gmail.com
Thu May 31 11:18:00 CEST 2012


Revision: 47262
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47262
Author:   jwilkins
Date:     2012-05-31 09:18:00 +0000 (Thu, 31 May 2012)
Log Message:
-----------
WITH_GPU_SAFETY is an advanced CMake option for adding a lot of checks to help debug the graphics API.

Currently only covers usage of gpuImmediate.  It is off by default.  It interacts with WITH_ASSERT_ABORT in that if WITH_ASSERT_ABORT is enabled then errors cause the program to abort, otherwise they just print to the console.

BLI_utildefines.h implicitly relied on an upstream include for stdio.h, so I conditionally added it.

No scons option yet.

Modified Paths:
--------------
    branches/soc-2012-swiss_cheese/CMakeLists.txt
    branches/soc-2012-swiss_cheese/source/blender/blenlib/BLI_utildefines.h
    branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_deprecated.h
    branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_immediate.c
    branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_immediate.h
    branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_immediate_gl11.c
    branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_immediate_inline.h
    branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_immediate_internal.h

Modified: branches/soc-2012-swiss_cheese/CMakeLists.txt
===================================================================
--- branches/soc-2012-swiss_cheese/CMakeLists.txt	2012-05-31 09:08:09 UTC (rev 47261)
+++ branches/soc-2012-swiss_cheese/CMakeLists.txt	2012-05-31 09:18:00 UTC (rev 47262)
@@ -260,8 +260,9 @@
 option(WITH_ASSERT_ABORT "Call abort() when raising an assertion through BLI_assert()" OFF)
 mark_as_advanced(WITH_ASSERT_ABORT)
 
+option(WITH_GPU_SAFETY "Perform extensive runtime tests to catch certain graphics API usage errors (degrades performance)" OFF)
+mark_as_advanced(WITH_GPU_SAFETY)
 
-
 option(WITH_ANDROID "Compiles Blender for Android" OFF)
 mark_as_advanced(WITH_ANDROID)
 
@@ -1781,7 +1782,8 @@
 #-------------------------------------------------------------------------------
 # Global Defines
 
-# better not set includes here but this debugging option is off by default.
+# better not set includes here but these debugging options are off by default.
+
 if(WITH_CXX_GUARDEDALLOC)
 	include_directories(${CMAKE_SOURCE_DIR}/intern/guardedalloc)
 endif()
@@ -1790,6 +1792,10 @@
 	add_definitions(-DWITH_ASSERT_ABORT)
 endif()
 
+if(WITH_GPU_SAFETY)
+	add_definitions(-DWITH_GPU_SAFETY)
+endif()
+
 # message(STATUS "Using CFLAGS: ${CMAKE_C_FLAGS}")
 # message(STATUS "Using CXXFLAGS: ${CMAKE_CXX_FLAGS}")
 

Modified: branches/soc-2012-swiss_cheese/source/blender/blenlib/BLI_utildefines.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/blenlib/BLI_utildefines.h	2012-05-31 09:08:09 UTC (rev 47261)
+++ branches/soc-2012-swiss_cheese/source/blender/blenlib/BLI_utildefines.h	2012-05-31 09:18:00 UTC (rev 47262)
@@ -32,6 +32,12 @@
  *  \ingroup bli
  */
 
+
+#ifndef NDEBUG /* for BLI_assert */
+#include <stdio.h>
+#endif
+
+
 #ifndef FALSE
 #  define FALSE 0
 #endif

Modified: branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_deprecated.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_deprecated.h	2012-05-31 09:08:09 UTC (rev 47261)
+++ branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_deprecated.h	2012-05-31 09:18:00 UTC (rev 47262)
@@ -357,6 +357,71 @@
 #undef glMultiTexcoord4sv
 #define glMultiTexcoord4sv DO_NOT_USE_glMultiTexCoord4sv
 
+#undef glMultiTexCoord1dARB
+#define glMultiTexCoord1dARB DO_NOT_USE_glMultiTexCoord1dARB
+#undef glMultiTexCoord1dvARB
+#define glMultiTexCoord1dvARB DO_NOT_USE_glMultiTexCoord1dvARB
+#undef glMultiTexCoord1fARB
+#define glMultiTexCoord1fARB DO_NOT_USE_glMultiTexCoord1fARB
+#undef glMultiTexCoord1fvARB
+#define glMultiTexCoord1fvARB DO_NOT_USE_glMultiTexCoord1fvARB
+#undef glMultiTexCoord1iARB
+#define glMultiTexCoord1iARB DO_NOT_USE_glMultiTexCoord1iARB
+#undef glMultiTexCoord1ivARB
+#define glMultiTexCoord1ivARB DO_NOT_USE_glMultiTexCoord1ivARB
+#undef glMultiTexCoord1sARB
+#define glMultiTexCoord1sARB DO_NOT_USE_glMultiTexCoord1sARB
+#undef glMultiTexCoord1svARB
+#define glMultiTexCoord1svARB DO_NOT_USE_glMultiTexCoord1svARB
+#undef glMultiTexCoord2dARB
+#define glMultiTexCoord2dARB DO_NOT_USE_glMultiTexCoord2dARB
+#undef glMultiTexCoord2dvARB
+#define glMultiTexCoord2dvARB DO_NOT_USE_glMultiTexCoord2dvARB
+#undef glMultiTexCoord2fARB
+#define glMultiTexCoord2fARB DO_NOT_USE_glMultiTexCoord2fARB
+#undef glMultiTexCoord2fvARB
+#define glMultiTexCoord2fvARB DO_NOT_USE_glMultiTexCoord2fvARB
+#undef glMultiTexCoord2iARB
+#define glMultiTexCoord2iARB DO_NOT_USE_glMultiTexCoord2iARB
+#undef glMultiTexCoord2ivARB
+#define glMultiTexCoord2ivARB DO_NOT_USE_glMultiTexCoord2ivARB
+#undef glMultiTexCoord2sARB
+#define glMultiTexCoord2sARB DO_NOT_USE_glMultiTexCoord2sARB
+#undef glMultiTexCoord2svARB
+#define glMultiTexCoord2svARB DO_NOT_USE_glMultiTexCoord2svARB
+#undef glMultiTexCoord3dARB
+#define glMultiTexCoord3dARB DO_NOT_USE_glMultiTexCoord3dARB
+#undef glMultiTexCoord3dvARB
+#define glMultiTexCoord3dvARB DO_NOT_USE_glMultiTexCoord3dvARB
+#undef glMultiTexCoord3fARB
+#define glMultiTexCoord3fARB DO_NOT_USE_glMultiTexCoord3fARB
+#undef glMultiTexCoord3fvARB
+#define glMultiTexCoord3fvARB DO_NOT_USE_glMultiTexCoord3fvARB
+#undef glMultiTexCoord3iARB
+#define glMultiTexCoord3iARB DO_NOT_USE_glMultiTexCoord3iARB
+#undef glMultiTexCoord3ivARB
+#define glMultiTexCoord3ivARB DO_NOT_USE_glMultiTexCoord3ivARB
+#undef glMultiTexCoord3sARB
+#define glMultiTexCoord3sARB DO_NOT_USE_glMultiTexCoord3sARB
+#undef glMultiTexCoord3svARB
+#define glMultiTexCoord3svARB DO_NOT_USE_glMultiTexCoord3svARB
+#undef glMultiTexCoord4dARB
+#define glMultiTexCoord4dARB DO_NOT_USE_glMultiTexCoord4dARB
+#undef glMultiTexCoord4dvARB
+#define glMultiTexCoord4dvARB DO_NOT_USE_glMultiTexCoord4dvARB
+#undef glMultiTexCoord4fARB
+#define glMultiTexCoord4fARB DO_NOT_USE_glMultiTexCoord4fARB
+#undef glMultiTexCoord4fvARB
+#define glMultiTexCoord4fvARB DO_NOT_USE_glMultiTexCoord4fvARB
+#undef glMultiTexCoord4iARB
+#define glMultiTexCoord4iARB DO_NOT_USE_glMultiTexCoord4iARB
+#undef glMultiTexCoord4ivARB
+#define glMultiTexCoord4ivARB DO_NOT_USE_glMultiTexCoord4ivARB
+#undef glMultiTexCoord4sARB
+#define glMultiTexCoord4sARB DO_NOT_USE_glMultiTexCoord4sARB
+#undef glMultiTexcoord4svARB
+#define glMultiTexcoord4svARB DO_NOT_USE_glMultiTexCoord4svARB
+
 #undef glFogCoordd
 #define glFogCoordd DO_NOT_USE_glFogCoordd
 #undef glFogCoorddv

Modified: branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_immediate.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_immediate.c	2012-05-31 09:08:09 UTC (rev 47261)
+++ branches/soc-2012-swiss_cheese/source/blender/gpu/intern/gpu_immediate.c	2012-05-31 09:18:00 UTC (rev 47262)
@@ -96,14 +96,10 @@
 
 void gpuImmediateLock(void)
 {
-	GPU_CHECK_NO_BEGIN();
+	GPU_CHECK_CAN_LOCK();
 
 	if (GPU_IMMEDIATE->lockCount == 0) {
-		assert(GPU_IMMEDIATE->lockBuffer);
-
-		if (GPU_IMMEDIATE->lockBuffer) {
-			GPU_IMMEDIATE->lockBuffer();
-		}
+		GPU_IMMEDIATE->lockBuffer();
 	}
 
 	GPU_IMMEDIATE->lockCount++;
@@ -111,38 +107,26 @@
 
 
 
-static void reset(void)
-{
-	memset(&(GPU_IMMEDIATE->format), 0, sizeof(GPU_IMMEDIATE->format));
-	GPU_IMMEDIATE->format.vertexSize = 3;
-}
-
-
-
 void gpuImmediateUnlock(void)
 {
-	GPU_CHECK_NO_BEGIN();
+	GPU_CHECK_CAN_UNLOCK();
 
-	assert(GPU_IMMEDIATE->lockCount > 0);
+	GPU_IMMEDIATE->lockCount--;
 
-	if (GPU_IMMEDIATE->lockCount == 1) {
-		assert(GPU_IMMEDIATE->unlockBuffer);
+	if (GPU_IMMEDIATE->lockCount == 0) {
+		GPU_IMMEDIATE->unlockBuffer();
 
-		if (GPU_IMMEDIATE->unlockBuffer) {
-			GPU_IMMEDIATE->unlockBuffer();
-		}
-
-		reset();
+		/* reset vertex format */
+		memset(&(GPU_IMMEDIATE->format), 0, sizeof(GPU_IMMEDIATE->format));
+		GPU_IMMEDIATE->format.vertexSize = 3;
 	}
-
-	GPU_IMMEDIATE->lockCount--;
 }
 
 
 
 GLint gpuImmediateLockCount(void)
 {
-	assert(GPU_IMMEDIATE);
+	BLI_assert(GPU_IMMEDIATE);
 
 	if (!GPU_IMMEDIATE) {
 		return GL_FALSE;
@@ -153,6 +137,7 @@
 
 
 
+#if GPU_SAFETY
 static void calc_last_texture(GPUimmediate* immediate)
 {
 	GLint maxTextureCoords = 1;
@@ -173,6 +158,7 @@
 	immediate->lastTexture =
 		GL_TEXTURE0 + MAX2(maxTextureCoords, maxCombinedTextureImageUnits) - 1;
 }
+#endif
 
 
 
@@ -181,7 +167,7 @@
 	GPUimmediate *restrict immediate =
 		MEM_callocN(sizeof(GPUimmediate), "GPUimmediate");
 
-	assert(immediate);
+	BLI_assert(immediate);
 
 	immediate->format.vertexSize = 3;
 
@@ -200,7 +186,9 @@
 		immediate->shutdownBuffer = gpu_shutdown_buffer_gl11;
 	//}
 
+#if GPU_SAFETY
 	calc_last_texture(immediate);
+#endif
 
 	return immediate;
 }
@@ -216,13 +204,13 @@
 
 void gpuDeleteImmediate(GPUimmediate *restrict immediate)
 {
-	assert(immediate);
+	BLI_assert(immediate);
 
 	if (!immediate) {
 		return;
 	}
 
-	assert(!(immediate->buffer));
+	BLI_assert(!(immediate->buffer));
 
 	if (immediate->buffer) {
 		SWAP(GPUimmediate*, immediate, GPU_IMMEDIATE);
@@ -234,180 +222,68 @@
 		gpuImmediateMakeCurrent(NULL);
 	}
 
-	assert(immediate->shutdownBuffer);
+	BLI_assert(immediate->shutdownBuffer);
 
-	if (immediate->shutdownBuffer) {
-		immediate->shutdownBuffer(immediate);
-	}
+	immediate->shutdownBuffer(immediate);
 
 	MEM_freeN(immediate);
 }
 
 
 
-#ifdef GPU_LEGACY_INTEROP
-
-/* For legacy source compatibility.
-   Copies the current OpenGL state into the GPU_IMMEDIATE */
-void gpu_legacy_get_state(void)
-{
-	size_t i;
-
-	GPU_CHECK_NO_BEGIN();
-
-	if (GPU_IMMEDIATE->format.colorSize != 0) {
-		GLfloat color[4];
-		glGetFloatv(GL_CURRENT_COLOR, color);
-		GPU_IMMEDIATE->color[0] = (GLubyte)(255.0f * color[0]);
-		GPU_IMMEDIATE->color[1] = (GLubyte)(255.0f * color[1]);
-		GPU_IMMEDIATE->color[2] = (GLubyte)(255.0f * color[2]);
-		GPU_IMMEDIATE->color[3] = (GLubyte)(255.0f * color[3]);
-	}
-
-	if (GPU_IMMEDIATE->format.normalSize != 0) {
-		glGetFloatv(GL_CURRENT_NORMAL, GPU_IMMEDIATE->normal);
-	}
-
-	if (GPU_IMMEDIATE->format.textureUnitCount == 1) {
-		glGetFloatv(GL_CURRENT_TEXTURE_COORDS, GPU_IMMEDIATE->texCoord[0]);
-	}
-	else if (GPU_IMMEDIATE->format.textureUnitCount > 1) {
-		for (i = 0; i < GPU_IMMEDIATE->format.textureUnitCount; i++) {
-			glClientActiveTexture(GPU_IMMEDIATE->format.textureUnitMap[i]);
-			glGetFloatv(GL_CURRENT_TEXTURE_COORDS, GPU_IMMEDIATE->texCoord[i]);
-		}
-
-		glClientActiveTexture(GL_TEXTURE0);
-	}
-
-	for (i = 0; i < GPU_IMMEDIATE->format.attribCount_f; i++) {
-		glGetVertexAttribfv(
-			GPU_IMMEDIATE->format.attribIndexMap_f[i],
-			GL_CURRENT_VERTEX_ATTRIB,
-			GPU_IMMEDIATE->attrib_f[i]);
-	}
-
-	for (i = 0; i < GPU_IMMEDIATE->format.attribCount_ub; i++) {
-		GLfloat attrib[4];
-
-		glGetVertexAttribfv(
-			GPU_IMMEDIATE->format.attribIndexMap_ub[i],
-			GL_CURRENT_VERTEX_ATTRIB,
-			attrib);
-
-		GPU_IMMEDIATE->attrib_ub[i][0] = (GLubyte)(255.0f * attrib[0]);
-		GPU_IMMEDIATE->attrib_ub[i][1] = (GLubyte)(255.0f * attrib[1]);
-		GPU_IMMEDIATE->attrib_ub[i][2] = (GLubyte)(255.0f * attrib[2]);
-		GPU_IMMEDIATE->attrib_ub[i][3] = (GLubyte)(255.0f * attrib[3]);
-	}
-}
-
-
-
-/* For legacy source compatibility.
-   Copies GPU_IMMEDIATE state back into the current OpenGL context */
-void gpu_legacy_put_state(void)
-{
-	size_t i;
-
-	GPU_CHECK_NO_BEGIN();
-
-	if (GPU_IMMEDIATE->format.colorSize != 0) {
-		glColor4ubv(GPU_IMMEDIATE->color);
-	}
-
-	if (GPU_IMMEDIATE->format.normalSize != 0) {
-		glNormal3fv(GPU_IMMEDIATE->normal);
-	}
-
-	if (GPU_IMMEDIATE->format.textureUnitCount == 1) {
-		glTexCoord4fv(GPU_IMMEDIATE->texCoord[0]);
-	}

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list