mesa: added nopfrag/nopvert options for MESA_GLSL
authorBrian Paul <brianp@vmware.com>
Tue, 29 Sep 2009 16:22:32 +0000 (10:22 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 29 Sep 2009 16:38:02 +0000 (10:38 -0600)
These options can be used to force vertex/fragment shaders to be no-op
shaders (actually, simple pass-through shaders).  For debug/test purposes.

src/mesa/main/mtypes.h
src/mesa/shader/shader_api.c
src/mesa/shader/slang/slang_compile.c

index d7bf7689f3c20692042ee51e4e6562ceeff77724..d005064645418e52a711a42f4463b19deff4a292 100644 (file)
@@ -2066,6 +2066,8 @@ struct gl_shader_program
 #define GLSL_OPT       0x4  /**< Force optimizations (override pragmas) */
 #define GLSL_NO_OPT    0x8  /**< Force no optimizations (override pragmas) */
 #define GLSL_UNIFORMS 0x10  /**< Print glUniform calls */
+#define GLSL_NOP_VERT 0x20  /**< Force no-op vertex shaders */
+#define GLSL_NOP_FRAG 0x40  /**< Force no-op fragment shaders */
 
 
 /**
index 178b7d0dbafb273d0f14c9d773c3de63622f44c8..6b19b4c46b3a494f50d62809502b9d270320280d 100644 (file)
@@ -380,6 +380,10 @@ get_shader_flags(void)
          flags |= GLSL_DUMP;
       if (_mesa_strstr(env, "log"))
          flags |= GLSL_LOG;
+      if (_mesa_strstr(env, "nopvert"))
+         flags |= GLSL_NOP_VERT;
+      if (_mesa_strstr(env, "nopfrag"))
+         flags |= GLSL_NOP_FRAG;
       if (_mesa_strstr(env, "nopt"))
          flags |= GLSL_NO_OPT;
       else if (_mesa_strstr(env, "opt"))
index c1b97c7cb708efdb2a7a8a4e7c8e5520469656f7..a2708884437a906ccd4918837599859c485906f3 100644 (file)
@@ -2814,6 +2814,16 @@ _slang_compile(GLcontext *ctx, struct gl_shader *shader)
           (ctx->Shader.Flags & GLSL_NO_OPT) == 0) {
          _mesa_optimize_program(ctx, shader->Program);
       }
+      if ((ctx->Shader.Flags & GLSL_NOP_VERT) &&
+          shader->Program->Target == GL_VERTEX_PROGRAM_ARB) {
+         _mesa_nop_vertex_program(ctx,
+                                  (struct gl_vertex_program *) shader->Program);
+      }
+      if ((ctx->Shader.Flags & GLSL_NOP_FRAG) &&
+          shader->Program->Target == GL_FRAGMENT_PROGRAM_ARB) {
+         _mesa_nop_fragment_program(ctx,
+                                (struct gl_fragment_program *) shader->Program);
+      }
    }
 
    if (ctx->Shader.Flags & GLSL_LOG) {