[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