mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-03 12:08:06 +02:00
glsl: make shader substitution a little better
This commit is contained in:
parent
41892e9b17
commit
c89f5b6ac8
1 changed files with 16 additions and 3 deletions
|
|
@ -26,6 +26,12 @@
|
|||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "shaders.h"
|
||||
#include "shader/shader_api.h"
|
||||
|
||||
|
||||
/** Define this to enable shader substitution (see below) */
|
||||
#define SHADER_SUBST 0
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -404,7 +410,6 @@ _mesa_read_shader(const char *fname)
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Called via glShaderSource() and glShaderSourceARB() API functions.
|
||||
* Basically, concatenate the source code strings into one long string
|
||||
|
|
@ -418,6 +423,7 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count,
|
|||
GLint *offsets;
|
||||
GLsizei i, totalLength;
|
||||
GLcharARB *source;
|
||||
GLuint checksum;
|
||||
|
||||
if (!shaderObj || string == NULL) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "glShaderSourceARB");
|
||||
|
|
@ -469,15 +475,16 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count,
|
|||
source[totalLength - 1] = '\0';
|
||||
source[totalLength - 2] = '\0';
|
||||
|
||||
if (0) {
|
||||
if (SHADER_SUBST) {
|
||||
/* Compute the shader's source code checksum then try to open a file
|
||||
* named newshader_<CHECKSUM>. If it exists, use it in place of the
|
||||
* original shader source code. For debugging.
|
||||
*/
|
||||
const GLuint checksum = _mesa_str_checksum(source);
|
||||
char filename[100];
|
||||
GLcharARB *newSource;
|
||||
|
||||
checksum = _mesa_str_checksum(source);
|
||||
|
||||
sprintf(filename, "newshader_%d", checksum);
|
||||
|
||||
newSource = _mesa_read_shader(filename);
|
||||
|
|
@ -491,6 +498,12 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count,
|
|||
|
||||
ctx->Driver.ShaderSource(ctx, shaderObj, source);
|
||||
|
||||
if (SHADER_SUBST) {
|
||||
struct gl_shader *sh = _mesa_lookup_shader(ctx, shaderObj);
|
||||
if (sh)
|
||||
sh->SourceChecksum = checksum; /* save original checksum */
|
||||
}
|
||||
|
||||
_mesa_free(offsets);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue