Jason Green : wined3d: Add function to print the infolog of a GLSL shader on errors.
Module: wine Branch: refs/heads/master Commit: a67488a26ea3ad4001cf947f12b3779a92ee2631 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=a67488a26ea3ad4001cf947f... Author: Jason Green <jave27(a)gmail.com> Date: Tue May 23 18:22:13 2006 -0400 wined3d: Add function to print the infolog of a GLSL shader on errors. With assistance from H. Verbeet. --- dlls/wined3d/baseshader.c | 21 +++++++++++++++++++++ dlls/wined3d/wined3d_private.h | 4 ++++ 2 files changed, 25 insertions(+), 0 deletions(-) diff --git a/dlls/wined3d/baseshader.c b/dlls/wined3d/baseshader.c index 4cc89ea..360c507 100644 --- a/dlls/wined3d/baseshader.c +++ b/dlls/wined3d/baseshader.c @@ -29,6 +29,7 @@ #include "wined3d_private.h" WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader); #define GLNAME_REQUIRE_GLSL ((const char *)1) +#define GLINFO_LOCATION (*gl_info) typedef struct shader_reg_maps { DWORD texcoord; @@ -675,6 +676,26 @@ void generate_base_shader( } } +/** Prints the GLSL info log which will contain error messages if they exist */ +void print_glsl_info_log( + WineD3D_GL_Info *gl_info, + GLhandleARB obj) +{ + int infologLength = 0; + char *infoLog; + + GL_EXTCALL(glGetObjectParameterivARB(obj, + GL_OBJECT_INFO_LOG_LENGTH_ARB, + &infologLength)); + + if (infologLength > 0) + { + infoLog = (char *)HeapAlloc(GetProcessHeap(), 0, infologLength); + GL_EXTCALL(glGetInfoLogARB(obj, infologLength, NULL, infoLog)); + FIXME("Error received from GLSL shader #%i: %s", obj, debugstr_a(infoLog)); + HeapFree(GetProcessHeap(), 0, infoLog); + } +} void shader_dump_ins_modifiers(const DWORD output) { diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index d73fb4f..61892b2 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1388,6 +1388,10 @@ extern int shader_skip_unrecognized( IWineD3DBaseShader* iface, const DWORD* pToken); +extern void print_glsl_info_log( + WineD3D_GL_Info *gl_info, + GLhandleARB obj); + inline static int shader_get_regtype(const DWORD param) { return (((param & D3DSP_REGTYPE_MASK) >> D3DSP_REGTYPE_SHIFT) | ((param & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2));
participants (1)
-
Alexandre Julliard