From 4c59978dba3d2d1b43fd5f57eadaba24669c205c Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 25 Jun 2008 01:27:05 -0400 Subject: [PATCH] Use local parameters, not environment params, in the arb1/nv2 profiles. This matches the GLSL concept of "uniforms" better, but also seems to have a significantly higher upper limit of available resources on Mac OS X (1024 vs 256 on a ATI X1600 in Mac OS X 10.5.3, for example). --HG-- branch : trunk --- mojoshader.c | 6 +++--- mojoshader_opengl.c | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mojoshader.c b/mojoshader.c index a6e3ec4b..fcf9edb9 100644 --- a/mojoshader.c +++ b/mojoshader.c @@ -3782,7 +3782,7 @@ static void emit_ARB1_relative(Context *ctx, int size) { const char *varname = get_ARB1_const_array_varname(ctx); push_output(ctx, &ctx->globals); - output_line(ctx, "PARAM %s[%d] = { program.env[0..%d] };", varname, + output_line(ctx, "PARAM %s[%d] = { program.local[0..%d] };", varname, size, size - 1); pop_output(ctx); } // emit_ARB1_relative @@ -3800,7 +3800,7 @@ static void emit_ARB1_uniform(Context *ctx, RegisterType regtype, int regnum) // This works everywhere. // !!! FIXME: does this eat more resources? - output_line(ctx, "PARAM %s = program.env[%d];", varname, regnum); + output_line(ctx, "PARAM %s = program.local[%d];", varname, regnum); } // if else { @@ -3808,7 +3808,7 @@ static void emit_ARB1_uniform(Context *ctx, RegisterType regtype, int regnum) if (regtype != REG_TYPE_CONST) fail(ctx, "BUG: non-float uniforms not supported in arb1 at the moment"); else - output_line(ctx, "PARAM %s = program.env[%d];", varname, regnum); + output_line(ctx, "PARAM %s = program.local[%d];", varname, regnum); } // else pop_output(ctx); diff --git a/mojoshader_opengl.c b/mojoshader_opengl.c index e5abd1f7..ffde283e 100644 --- a/mojoshader_opengl.c +++ b/mojoshader_opengl.c @@ -185,7 +185,7 @@ struct MOJOSHADER_glContext PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointer; PFNGLGETPROGRAMIVARBPROC glGetProgramivARB; PFNGLGETPROGRAMSTRINGARBPROC glGetProgramStringARB; - PFNGLPROGRAMENVPARAMETER4FVARBPROC glProgramEnvParameter4fvARB; + PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB; PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB; PFNGLGENPROGRAMSARBPROC glGenProgramsARB; PFNGLBINDPROGRAMARBPROC glBindProgramARB; @@ -343,7 +343,7 @@ static void lookup_entry_points(void *(*lookup)(const char *fnname)) DO_LOOKUP(GL_ARB_vertex_program, PFNGLVERTEXATTRIBPOINTERARBPROC, glVertexAttribPointer); DO_LOOKUP(GL_ARB_vertex_program, PFNGLGETPROGRAMIVARBPROC, glGetProgramivARB); DO_LOOKUP(GL_ARB_vertex_program, PFNGLGETPROGRAMSTRINGARBPROC, glGetProgramStringARB); - DO_LOOKUP(GL_ARB_vertex_program, PFNGLPROGRAMENVPARAMETER4FVARBPROC, glProgramEnvParameter4fvARB); + DO_LOOKUP(GL_ARB_vertex_program, PFNGLPROGRAMLOCALPARAMETER4FVARBPROC, glProgramLocalParameter4fvARB); DO_LOOKUP(GL_ARB_vertex_program, PFNGLDELETEPROGRAMSARBPROC, glDeleteProgramsARB); DO_LOOKUP(GL_ARB_vertex_program, PFNGLGENPROGRAMSARBPROC, glGenProgramsARB); DO_LOOKUP(GL_ARB_vertex_program, PFNGLBINDPROGRAMARBPROC, glBindProgramARB); @@ -1421,7 +1421,7 @@ static void impl_ARB1_Uniform4fv(const MOJOSHADER_parseData *pd, GLint loc, int i; const GLenum shader_type = arb1_shader_type(pd->shader_type); for (i = 0; i < siz; i++, v += 4) - ctx->glProgramEnvParameter4fvARB(shader_type, loc + i, v); + ctx->glProgramLocalParameter4fvARB(shader_type, loc + i, v); } // impl_ARB1_Uniform4fv static void impl_ARB1_Uniform4iv(const MOJOSHADER_parseData *pd, GLint loc, @@ -1434,7 +1434,7 @@ static void impl_ARB1_Uniform4iv(const MOJOSHADER_parseData *pd, GLint loc, GLfloat f[4] = { (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3] }; - ctx->glProgramEnvParameter4fvARB(shader_type, loc + i, f); + ctx->glProgramLocalParameter4fvARB(shader_type, loc + i, f); } // for } // impl_ARB1_Uniform4iv @@ -1444,7 +1444,7 @@ static void impl_ARB1_Uniform1i(const MOJOSHADER_parseData *pd, GLint loc, const GLenum shader_type = arb1_shader_type(pd->shader_type); const GLfloat v = (GLfloat) _v; GLfloat f[4] = { v, v, v, v }; - ctx->glProgramEnvParameter4fvARB(shader_type, loc, f); + ctx->glProgramLocalParameter4fvARB(shader_type, loc, f); } // impl_ARB1_Uniform1i static void impl_ARB1_SetSampler(GLint loc, GLuint sampler)