mesa: Branch 'glsl-compiler-1' - 8 commits
Brian Paul
brianp at kemper.freedesktop.org
Tue Feb 27 01:08:29 UTC 2007
src/mesa/main/shaders.c | 2 +
src/mesa/shader/slang/slang_codegen.c | 28 ++++++------------
src/mesa/shader/slang/slang_compile.c | 37 ++++++++++++++----------
src/mesa/shader/slang/slang_compile_operation.c | 4 --
src/mesa/shader/slang/slang_log.c | 7 +++-
src/mesa/shader/slang/slang_log.h | 3 +
src/mesa/shader/slang/slang_typeinfo.c | 2 -
src/mesa/shader/slang/slang_utility.c | 14 +++++----
8 files changed, 49 insertions(+), 48 deletions(-)
New commits:
diff-tree 4f26a52908d14b753199a529fd4c24da608ead29 (from 553fe132d4dec3283afd59f81357ebb3c2b94c06)
Author: Brian <brian at yutani.localnet.net>
Date: Mon Feb 26 18:08:09 2007 -0700
re-enable var scope destruct in slang_operation_destruct()
diff --git a/src/mesa/shader/slang/slang_compile_operation.c b/src/mesa/shader/slang/slang_compile_operation.c
index 288de2d..aa66be8 100644
--- a/src/mesa/shader/slang/slang_compile_operation.c
+++ b/src/mesa/shader/slang/slang_compile_operation.c
@@ -60,12 +60,8 @@ slang_operation_destruct(slang_operation
for (i = 0; i < oper->num_children; i++)
slang_operation_destruct(oper->children + i);
slang_alloc_free(oper->children);
- /*#define FREE_MEMORY*/
-#ifdef FREE_MEMORY
- /* XXX revisit and fix memory coruption here ! */
slang_variable_scope_destruct(oper->locals);
slang_alloc_free(oper->locals);
-#endif
oper->children = NULL;
oper->num_children = 0;
oper->locals = NULL;
diff-tree 553fe132d4dec3283afd59f81357ebb3c2b94c06 (from aa6f4241f8d9e301e056968a1eb85bb27b7fa55a)
Author: Brian <brian at yutani.localnet.net>
Date: Mon Feb 26 18:07:26 2007 -0700
Fix a few bugs in slang_operation variable scoping. Seems to fix a double-free.
diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c
index efd3301..26be14a 100644
--- a/src/mesa/shader/slang/slang_codegen.c
+++ b/src/mesa/shader/slang/slang_codegen.c
@@ -457,7 +457,6 @@ new_float_literal(const float v[4])
* Conditional jump.
* \param zeroOrOne indicates if the jump is to be taken on zero, or non-zero
* condition code state.
- * XXX maybe pass an IR node as second param to indicate the jump target???
*/
static slang_ir_node *
new_cjump(slang_label *dest, GLuint zeroOrOne)
@@ -470,7 +469,6 @@ new_cjump(slang_label *dest, GLuint zero
/**
* Unconditional jump.
- * XXX maybe pass an IR node as second param to indicate the jump target???
*/
static slang_ir_node *
new_jump(slang_label *dest)
@@ -641,12 +639,7 @@ slang_inline_asm_function(slang_assemble
inlined->a_id = fun->body->children[0].a_id;
inlined->num_children = numArgs;
inlined->children = slang_operation_new(numArgs);
-#if 0
- inlined->locals = slang_variable_scope_copy(oper->locals);
-#else
- assert(inlined->locals);
inlined->locals->outer_scope = oper->locals->outer_scope;
-#endif
for (i = 0; i < numArgs; i++) {
slang_operation_copy(inlined->children + i, args + i);
@@ -747,17 +740,19 @@ slang_substitute(slang_assemble_ctx *A,
blockOper = slang_operation_new(1);
blockOper->type = SLANG_OPER_BLOCK_NO_NEW_SCOPE;
blockOper->num_children = 2;
+ blockOper->locals->outer_scope = oper->locals->outer_scope;
blockOper->children = slang_operation_new(2);
assignOper = blockOper->children + 0;
returnOper = blockOper->children + 1;
assignOper->type = SLANG_OPER_ASSIGN;
assignOper->num_children = 2;
+ assignOper->locals->outer_scope = blockOper->locals;
assignOper->children = slang_operation_new(2);
assignOper->children[0].type = SLANG_OPER_IDENTIFIER;
assignOper->children[0].a_id = slang_atom_pool_atom(A->atoms, "__retVal");
- assignOper->children[0].locals->outer_scope = oper->locals;
- assignOper->locals = oper->locals;
+ assignOper->children[0].locals->outer_scope = assignOper->locals;
+
slang_operation_copy(&assignOper->children[1],
&oper->children[0]);
@@ -872,11 +867,10 @@ slang_inline_function_call(slang_assembl
declOper = &commaSeq->children[0];
declOper->type = SLANG_OPER_VARIABLE_DECL;
declOper->a_id = resultVar->a_name;
- declOper->locals->outer_scope = commaSeq->locals; /*** ??? **/
+ declOper->locals->outer_scope = commaSeq->locals;
/* child[1] = function body */
inlined = &commaSeq->children[1];
- /* XXXX this may be inappropriate!!!!: */
inlined->locals->outer_scope = commaSeq->locals;
/* child[2] = __resultTmp reference */
@@ -884,7 +878,6 @@ slang_inline_function_call(slang_assembl
returnOper->type = SLANG_OPER_IDENTIFIER;
returnOper->a_id = resultVar->a_name;
returnOper->locals->outer_scope = commaSeq->locals;
- declOper->locals->outer_scope = commaSeq->locals;
top = commaSeq;
}
@@ -993,7 +986,7 @@ slang_inline_function_call(slang_assembl
*/
decl->type = SLANG_OPER_VARIABLE_DECL;
assert(decl->locals);
- decl->locals = fun->parameters;
+ decl->locals->outer_scope = inlined->locals;
decl->a_id = p->a_name;
decl->num_children = 1;
decl->children = slang_operation_new(1);
@@ -1027,13 +1020,12 @@ slang_inline_function_call(slang_assembl
inlined->num_children);
ass->type = SLANG_OPER_ASSIGN;
ass->num_children = 2;
- ass->locals = _slang_variable_scope_new(inlined->locals);
- assert(ass->locals);
+ ass->locals->outer_scope = inlined->locals;
ass->children = slang_operation_new(2);
ass->children[0] = args[i]; /*XXX copy */
ass->children[1].type = SLANG_OPER_IDENTIFIER;
ass->children[1].a_id = p->a_name;
- ass->children[1].locals = _slang_variable_scope_new(ass->locals);
+ ass->children[1].locals->outer_scope = ass->locals;
}
}
@@ -1753,10 +1745,10 @@ _slang_gen_return(slang_assemble_ctx * A
block = slang_operation_new(1);
block->type = SLANG_OPER_BLOCK_NO_NEW_SCOPE;
- block->num_children = 2;
- block->children = slang_operation_new(2);
assert(block->locals);
block->locals->outer_scope = oper->locals->outer_scope;
+ block->num_children = 2;
+ block->children = slang_operation_new(2);
/* child[0]: __retVal = expr; */
assign = &block->children[0];
diff-tree aa6f4241f8d9e301e056968a1eb85bb27b7fa55a (from b58ea057feb7a00329fe92fe41e1d408e7c76065)
Author: Brian <brian at yutani.localnet.net>
Date: Mon Feb 26 17:32:45 2007 -0700
formatting fixes
diff --git a/src/mesa/shader/slang/slang_utility.c b/src/mesa/shader/slang/slang_utility.c
index 9b98a2c..0fbfcc5 100644
--- a/src/mesa/shader/slang/slang_utility.c
+++ b/src/mesa/shader/slang/slang_utility.c
@@ -31,11 +31,13 @@
#include "imports.h"
#include "slang_utility.h"
-char *slang_string_concat (char *dst, const char *src)
+char *
+slang_string_concat (char *dst, const char *src)
{
- return _mesa_strcpy (dst + _mesa_strlen (dst), src);
+ return _mesa_strcpy (dst + _mesa_strlen (dst), src);
}
+
/* slang_string */
GLvoid
@@ -156,8 +158,8 @@ slang_atom_pool_destruct (slang_atom_poo
slang_alloc_free(entry->id);
slang_alloc_free(entry);
entry = next;
- }
- }
+ }
+ }
}
/*
@@ -211,11 +213,11 @@ slang_atom_pool_atom(slang_atom_pool * p
return (slang_atom) (**entry).id;
}
-/*
+/**
* Return the name of a given atom.
*/
const char *
slang_atom_pool_id(slang_atom_pool * pool, slang_atom atom)
{
- return (const char *) (atom);
+ return (const char *) (atom);
}
diff-tree b58ea057feb7a00329fe92fe41e1d408e7c76065 (from 4b8d75e2e6ba72bbf772a75d7167c537c6e630f7)
Author: Brian <brian at yutani.localnet.net>
Date: Mon Feb 26 17:00:06 2007 -0700
fix mem leak in _mesa_ShaderSourceARB()
diff --git a/src/mesa/main/shaders.c b/src/mesa/main/shaders.c
index 73f27ed..5bd4a3f 100644
--- a/src/mesa/main/shaders.c
+++ b/src/mesa/main/shaders.c
@@ -422,6 +422,8 @@ _mesa_ShaderSourceARB(GLhandleARB shader
source[offsets[count - 1]] = '\0';
ctx->Driver.ShaderSource(ctx, shaderObj, source);
+
+ _mesa_free(offsets);
}
diff-tree 4b8d75e2e6ba72bbf772a75d7167c537c6e630f7 (from f446e58e45d7317173497eddbd8b26ea6c28fcb4)
Author: Brian <brian at yutani.localnet.net>
Date: Mon Feb 26 16:32:00 2007 -0700
fix logic for reporting errors
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index dc2e680..4609de6 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -1898,6 +1898,17 @@ compile_with_grammar(grammar id, const c
grammar_get_last_error((byte *) (buf), sizeof(buf), &pos);
slang_info_log_error(infolog, buf);
/* syntax error (possibly in library code) */
+#if 0
+ {
+ int line, col;
+ char *s;
+ s = (char *) _mesa_find_line_column((const GLubyte *) source,
+ (const GLubyte *) source + pos,
+ &line, &col);
+ printf("Error on line %d, col %d: %s\n", line, col, s);
+ }
+#endif
+ return GL_FALSE;
}
slang_string_free(&preprocessed);
@@ -2070,16 +2081,19 @@ _slang_compile(GLcontext *ctx, struct gl
success = compile_shader(ctx, &obj, type, &info_log, shader);
- if (!success || info_log.error_flag) {
- success = GL_FALSE;
+ /* free shader's prev info log */
+ if (shader->InfoLog) {
+ _mesa_free(shader->InfoLog);
+ shader->InfoLog = NULL;
+ }
+
+ if (info_log.text) {
/* copy info-log string to shader object */
- if (info_log.text) {
- if (shader->InfoLog) {
- free(shader->InfoLog);
- shader->InfoLog = NULL;
- }
- shader->InfoLog = strdup(info_log.text);
- }
+ shader->InfoLog = _mesa_strdup(info_log.text);
+ }
+
+ if (info_log.error_flag) {
+ success = GL_FALSE;
}
slang_info_log_destruct(&info_log);
diff-tree f446e58e45d7317173497eddbd8b26ea6c28fcb4 (from 6817407d498ff0c5074321b965673f6efdaaeb21)
Author: Brian <brian at yutani.localnet.net>
Date: Mon Feb 26 15:13:34 2007 -0700
disable execute bit
diff --git a/src/mesa/shader/grammar/grammar_crt.c b/src/mesa/shader/grammar/grammar_crt.c
old mode 100755
new mode 100644
diff --git a/src/mesa/shader/grammar/grammar_crt.h b/src/mesa/shader/grammar/grammar_crt.h
old mode 100755
new mode 100644
diff-tree 6817407d498ff0c5074321b965673f6efdaaeb21 (from 365f8fb0dd19a8fa43b1de8e89793059095981db)
Author: Brian <brian at yutani.localnet.net>
Date: Mon Feb 26 15:06:56 2007 -0700
fix error flagging
diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c
index 1a4c7d3..dc2e680 100644
--- a/src/mesa/shader/slang/slang_compile.c
+++ b/src/mesa/shader/slang/slang_compile.c
@@ -2070,16 +2070,9 @@ _slang_compile(GLcontext *ctx, struct gl
success = compile_shader(ctx, &obj, type, &info_log, shader);
- if (success && !info_log.text) {
-#if 0
- slang_create_uniforms(&object->expdata, shader);
- _mesa_print_program(program);
- _mesa_print_program_parameters(ctx, program);
-#endif
- }
- else {
+ if (!success || info_log.error_flag) {
success = GL_FALSE;
- /* XXX more work on info log needed here */
+ /* copy info-log string to shader object */
if (info_log.text) {
if (shader->InfoLog) {
free(shader->InfoLog);
diff --git a/src/mesa/shader/slang/slang_log.c b/src/mesa/shader/slang/slang_log.c
index b6545b2..e838744 100644
--- a/src/mesa/shader/slang/slang_log.c
+++ b/src/mesa/shader/slang/slang_log.c
@@ -34,7 +34,8 @@ void
slang_info_log_construct(slang_info_log * log)
{
log->text = NULL;
- log->dont_free_text = 0;
+ log->dont_free_text = GL_FALSE;
+ log->error_flag = GL_FALSE;
}
void
@@ -97,6 +98,7 @@ slang_info_log_error(slang_info_log * lo
va_start(va, msg);
_mesa_vsprintf(buf, msg, va);
va_end(va);
+ log->error_flag = GL_TRUE;
if (slang_info_log_message(log, "Error", buf))
return 1;
slang_info_log_memory(log);
@@ -122,7 +124,8 @@ void
slang_info_log_memory(slang_info_log * log)
{
if (!slang_info_log_message(log, "Error", "Out of memory.")) {
- log->dont_free_text = 1;
+ log->dont_free_text = GL_TRUE;
+ log->error_flag = GL_TRUE;
log->text = out_of_memory;
}
}
diff --git a/src/mesa/shader/slang/slang_log.h b/src/mesa/shader/slang/slang_log.h
index e4ca3a2..dcaba02 100644
--- a/src/mesa/shader/slang/slang_log.h
+++ b/src/mesa/shader/slang/slang_log.h
@@ -30,7 +30,8 @@
typedef struct slang_info_log_
{
char *text;
- int dont_free_text;
+ GLboolean dont_free_text;
+ GLboolean error_flag;
} slang_info_log;
diff-tree 365f8fb0dd19a8fa43b1de8e89793059095981db (from ed0ae62ad746d10fe546c900a42e55af5d05c227)
Author: Brian <brian at yutani.localnet.net>
Date: Mon Feb 26 15:02:36 2007 -0700
re-enable some code
diff --git a/src/mesa/shader/slang/slang_typeinfo.c b/src/mesa/shader/slang/slang_typeinfo.c
index fe38349..07ec514 100644
--- a/src/mesa/shader/slang/slang_typeinfo.c
+++ b/src/mesa/shader/slang/slang_typeinfo.c
@@ -605,13 +605,11 @@ _slang_typeof_operation_(const slang_ope
slang_type_specifier_type base;
/* determine the swizzle of the field expression */
-#if 000 /*XXX re-enable? */
if (!_slang_type_is_vector(_ti.spec.type)) {
slang_typeinfo_destruct(&_ti);
slang_info_log_error(log, "Can't swizzle scalar expression");
return GL_FALSE;
}
-#endif
rows = _slang_type_dim(_ti.spec.type);
swizzle = slang_atom_pool_id(atoms, op->a_id);
if (!_slang_is_swizzle(swizzle, rows, &ti->swz)) {
More information about the mesa-commit
mailing list