Revision: 16612 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16612 Author: blendix Date: 2008-09-19 18:09:26 +0200 (Fri, 19 Sep 2008)
Log Message: ----------- Fix again for the NVidia driver bug. This time I'm just giving up using linking together the precompiled library shader code and material code and recompiling it all again for each material even if it gives a performance hit, since the previous workaround only worked on some driver versions still. Modified Paths: -------------- trunk/blender/source/blender/gpu/GPU_extensions.h trunk/blender/source/blender/gpu/intern/gpu_codegen.c trunk/blender/source/blender/gpu/intern/gpu_extensions.c Modified: trunk/blender/source/blender/gpu/GPU_extensions.h =================================================================== --- trunk/blender/source/blender/gpu/GPU_extensions.h 2008-09-19 16:01:22 UTC (rev 16611) +++ trunk/blender/source/blender/gpu/GPU_extensions.h 2008-09-19 16:09:26 UTC (rev 16612) @@ -108,8 +108,8 @@ - only for fragment shaders now - must call texture bind before setting a texture as uniform! */ -GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, GPUShader *lib); -GPUShader *GPU_shader_create_lib(const char *code); +GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, const char *libcode); /*GPUShader *lib);*/ +/*GPUShader *GPU_shader_create_lib(const char *code);*/ void GPU_shader_free(GPUShader *shader); void GPU_shader_bind(GPUShader *shader); Modified: trunk/blender/source/blender/gpu/intern/gpu_codegen.c =================================================================== --- trunk/blender/source/blender/gpu/intern/gpu_codegen.c 2008-09-19 16:01:22 UTC (rev 16611) +++ trunk/blender/source/blender/gpu/intern/gpu_codegen.c 2008-09-19 16:09:26 UTC (rev 16612) @@ -188,8 +188,8 @@ * These are stored in a hash for lookup when creating a material. */ static GHash *FUNCTION_HASH= NULL; -static char *FUNCTION_PROTOTYPES= NULL; -static GPUShader *FUNCTION_LIB= NULL; +/*static char *FUNCTION_PROTOTYPES= NULL; +static GPUShader *FUNCTION_LIB= NULL;*/ static int gpu_str_prefix(char *str, char *prefix) { @@ -299,6 +299,7 @@ } } +#if 0 static char *gpu_generate_function_prototyps(GHash *hash) { DynStr *ds = BLI_dynstr_new(); @@ -346,14 +347,15 @@ return prototypes; } +#endif GPUFunction *GPU_lookup_function(char *name) { if(!FUNCTION_HASH) { FUNCTION_HASH = BLI_ghash_new(BLI_ghashutil_strhash, BLI_ghashutil_strcmp); gpu_parse_functions_string(FUNCTION_HASH, datatoc_gpu_shader_material_glsl); - FUNCTION_PROTOTYPES = gpu_generate_function_prototyps(FUNCTION_HASH); - FUNCTION_LIB = GPU_shader_create_lib(datatoc_gpu_shader_material_glsl); + /*FUNCTION_PROTOTYPES = gpu_generate_function_prototyps(FUNCTION_HASH); + FUNCTION_LIB = GPU_shader_create_lib(datatoc_gpu_shader_material_glsl);*/ } return (GPUFunction*)BLI_ghash_lookup(FUNCTION_HASH, name); @@ -370,14 +372,14 @@ BLI_ghash_free(FUNCTION_HASH, NULL, (GHashValFreeFP)MEM_freeN); FUNCTION_HASH = NULL; } - if(FUNCTION_PROTOTYPES) { + /*if(FUNCTION_PROTOTYPES) { MEM_freeN(FUNCTION_PROTOTYPES); FUNCTION_PROTOTYPES = NULL; - } - if(FUNCTION_LIB) { + }*/ + /*if(FUNCTION_LIB) { GPU_shader_free(FUNCTION_LIB); FUNCTION_LIB = NULL; - } + }*/ } /* GLSL code generation */ @@ -688,7 +690,7 @@ DynStr *ds = BLI_dynstr_new(); char *code; - BLI_dynstr_append(ds, FUNCTION_PROTOTYPES); + /*BLI_dynstr_append(ds, FUNCTION_PROTOTYPES);*/ codegen_set_unique_ids(nodes); codegen_print_uniforms_functions(ds, nodes); @@ -1393,10 +1395,10 @@ GPUPass *pass; char *vertexcode, *fragmentcode; - if(!FUNCTION_LIB) { + /*if(!FUNCTION_LIB) { GPU_nodes_free(nodes); return NULL; - } + }*/ /* prune unused nodes */ gpu_nodes_prune(nodes, outlink); @@ -1407,7 +1409,7 @@ /* generate code and compile with opengl */ fragmentcode = code_generate_fragment(nodes, outlink->output, name); vertexcode = code_generate_vertex(nodes); - shader = GPU_shader_create(vertexcode, fragmentcode, FUNCTION_LIB); + shader = GPU_shader_create(vertexcode, fragmentcode, datatoc_gpu_shader_material_glsl); /*FUNCTION_LIB);*/ MEM_freeN(fragmentcode); MEM_freeN(vertexcode); Modified: trunk/blender/source/blender/gpu/intern/gpu_extensions.c =================================================================== --- trunk/blender/source/blender/gpu/intern/gpu_extensions.c 2008-09-19 16:01:22 UTC (rev 16611) +++ trunk/blender/source/blender/gpu/intern/gpu_extensions.c 2008-09-19 16:09:26 UTC (rev 16612) @@ -669,11 +669,13 @@ fprintf(stderr, "%s\n", log); } -GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, GPUShader *lib) +GPUShader *GPU_shader_create(const char *vertexcode, const char *fragcode, /*GPUShader *lib,*/ const char *libcode) { GLint status; GLcharARB log[5000]; + const char *fragsource[2]; GLsizei length = 0; + GLint count; GPUShader *shader; if (!GLEW_ARB_vertex_shader || !GLEW_ARB_fragment_shader) @@ -712,8 +714,12 @@ } if(fragcode) { + count = 0; + if(libcode) fragsource[count++] = libcode; + if(fragcode) fragsource[count++] = fragcode; + glAttachObjectARB(shader->object, shader->fragment); - glShaderSourceARB(shader->fragment, 1, (const char**)&fragcode, NULL); + glShaderSourceARB(shader->fragment, count, fragsource, NULL); glCompileShaderARB(shader->fragment); glGetObjectParameterivARB(shader->fragment, GL_OBJECT_COMPILE_STATUS_ARB, &status); @@ -727,8 +733,8 @@ } } - if(lib && lib->lib) - glAttachObjectARB(shader->object, lib->lib); + /*if(lib && lib->lib) + glAttachObjectARB(shader->object, lib->lib);*/ glLinkProgramARB(shader->object); glGetObjectParameterivARB(shader->object, GL_OBJECT_LINK_STATUS_ARB, &status); @@ -743,6 +749,7 @@ return shader; } +#if 0 GPUShader *GPU_shader_create_lib(const char *code) { GLint status; @@ -778,6 +785,7 @@ return shader; } +#endif void GPU_shader_bind(GPUShader *shader) { _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs