Open ITotalJustice opened 5 years ago
Mmmm, that backtrace is useless unfortunatly. It will be difficult to track down the issue :(
Maybe run it with valgrind, if you can? It may gives a bit more detail on what is going wrong.
In fact, I think it would be easier to use BOX86_LOG=DEBUG
to have the function beeing called. That would probably be enough to understand in what function it crash.
8776|0x883f75b: Calling strlen(0x88a102a("ycshaders/anim2d_glsl_vsh39")) => return 0x0000001B
8776|0x883f782: Calling strlen(0x88a1046("ycshaders/anim2d_glsl_psh1")) => return 0x0000001A
8776|0x883fa35: Calling glCreateProgram (B63C933E, 00000003, B6B639AC...) => return 0x00000001
8776|0x883fa4b: Calling glCreateShader (00008B31, 00000003, B6B639AC...) => return 0x00000002
8776|0x883fa74: Calling glShaderSource (00000002, 00000001, 089E6BCC...) =>Segmentation fault
Ah, glShaderSource? Damn, that's a simple function. Strange.
In the gl4es sources, can you un comment line 11 of src/gl/shader.c
to have debug info on shader operations, and launch again (no Box86 log needed this time) ?
So i uncommented the define debug, re-compiled however the output is the same. I checked the usage page, in case i was supposed to pass args when running but i couldn't see anything there either.
That's strange, it should printf each glShader function used, with parameters.
Maybe the game is redirecting output somewhere? For box86 trace, did you used BOX86_TRACE_FILE=XXX
?
I didn't use BOX86_TRACE_FILE=
though i did just try it and its the same output (only now in a file). For getting the trace i was just using > log.txt
to save it to a file.
Ok.
Still strange, it should printf the glCreateShader(...)
and glShaderSource(...)
details.
Yeah. It does work for many other games that i have been testing, it prints out all the information, just not with shovelknight hmm.
I guess it redirect stdout
to some log file then.
Maybe I should rewrite the printf
to fprintf(stderr, ...)
then?
Sorry i've been away past few days. Here's the log:
LIBGL: Error while compiling shader 462. Original source is:
#version 120
vec4 ps_r0;
vec4 ps_t0 = gl_TexCoord[0];
uniform sampler2D ps_s0;
#define ps_v0 gl_Color
#define ps_oC0 gl_FragColor
void main()
{
ps_t0 = texture2D(ps_s0, ps_t0.xy);
ps_r0 = ps_v0 * ps_t0;
ps_oC0 = ps_r0;
}
=======
ShaderConv Source is:
#version 100
precision highp float;
precision highp int;
varying lowp vec4 _gl4es_FrontColor;
varying mediump vec4 _gl4es_TexCoord[1];
vec4 ps_r0;
vec4 ps_t0 = _gl4es_TexCoord[0];
uniform sampler2D ps_s0;
#define ps_v0 _gl4es_FrontColor
#define ps_oC0 gl_FragColor
void main()
{
ps_t0 = texture2D(ps_s0, ps_t0.xy);
ps_r0 = ps_v0 * ps_t0;
ps_oC0 = ps_r0;
}
=======
Compiler message is
0:7(14): error: initializer of global variable `ps_t0' must be a constant expression
LIBGL: End of Error log
Failed to compile a pixel shader!
'0:7(14): error: initializer of global variable `ps_t0' must be a constant expression
'
Wrote shader in question to badshader.bin
ERROR: Assert in /home/icculus/projects/psychonauts/Source/CommonLibs/DFGraphics/OpenGLGraphics.cpp, line 2127
pD3DShader != NULL
Encountered Error:
Psychonauts has encountered an error
/home/icculus/projects/psychonauts/Source/CommonLibs/DFGraphics/OpenGLGraphics.cpp, line 2127
pD3DShader != NULL
Please contact technical support at http://www.doublefine.com.
Unsupported Int 3 call
LIBGL: Shuting down
Did you want me to upload the full log output?
No, it's ok, I can see the hack is not triggering here for some reason. I'll find why.
Using the command
LIBGL_ES=2 LIBGL_GL=21 LIBGL_DIBGL_FBOFORCETEX=1 LD_LIBRARY_PATH=~/monolibs BOX86_LD_LIBRARY_PATH=lib:./lib:fmod/lib/:/lib:x86:lib32:/usr/i686-linux-gnu/lib:/usr/lib/arm-linux-gnueabihf box86 ShovelKnight
results in a seg fault and the game failing to boot. The game can boot fine when not using gl4es.the bt full is:
Let me know if you need more information.