A place to discuss everything related to Newton Dynamics.
Moderators: Sascha Willems, walaber
by Dave Gravel » Sun Feb 03, 2019 3:14 pm
I use glsl with only the normal gl debug.
It can debug simple error from shader load and it say the line.
I don't have test about if I can print peronal debug from the shader.
Maybe it can help for the matrix.
I have already read somewhere old gl is limited about array size.
I'm not sure if it depend from the video card or from the shader in self.
https://www.opengl.org/discussion_board ... ent-shader
-
Dave Gravel
-
- Posts: 800
- Joined: Sat Apr 01, 2006 9:31 pm
- Location: Quebec in Canada.
-
by JoeJ » Sun Feb 03, 2019 4:10 pm
Julio Jerez wrote:I cant believe there is not a glsl debugger available or a lest I have no fond any.
There are several tools, i think this is most common for GL:
https://github.com/baldurk/renderdocBut there is nothing where you can step into shader code, AFAIK.
So what i do is using a shader storage buffer (hope i remember the name correctly - just a buffer of main GPU RAM), and i give this buffer to each shader as long as i work on it.
In the shader i put numbers into the buffer, and i display them at runtime on screen. So some kind of logging but no strings.
It's some work to setup. If skinning is all you want to add, it's likely not worth it.
-
JoeJ
-
- Posts: 1453
- Joined: Tue Dec 21, 2010 6:18 pm
by Julio Jerez » Sun Feb 03, 2019 4:12 pm
woohoo!!
I found the bug, it was the matrix transpose at rendering time, I was transpose then when build teh display list, by then when rendering I was not, by making teh transpose calculation a function solve the problem. now it look like this
- Code: Select all
void DemoSkinMesh::Render (DemoEntityManager* const scene)
{
#if 1
dMatrix* const bindMatrix = dAlloca(dMatrix, m_nodeCount);
int count = CalculateMatrixPalette(bindMatrix);
GLfloat* const glMatrixPallete = dAlloca(GLfloat, 16 * count);
ConvertToGlMatrix(count, bindMatrix, glMatrixPallete);
glUseProgram(m_shader);
int matrixPalette = glGetUniformLocation(m_shader, "matrixPallete");
glUniformMatrix4fv(matrixPalette, count, FALSE, glMatrixPallete);
glCallList(m_mesh->m_optimizedOpaqueDiplayList);
and I get 2600 fps in release.
teh one last problem is to make use of instance array, so that the box stack and the high count is no affected, but I think I can stop here and move to the IK system now.
can you check it out and see if is good for you?
-
Julio Jerez
- Moderator
-
- Posts: 12249
- Joined: Sun Sep 14, 2003 2:18 pm
- Location: Los Angeles
-
by JoeJ » Sun Feb 03, 2019 4:18 pm
Dave Gravel wrote:I have already read somewhere old gl is limited about array size.
I'm not sure if it depend from the video card or from the shader in self.
I assume if you load stuff into uniforms, they aim to go into small constant RAM on the CUs, not into main memory. So the size limit might be 64 KB or something.
For more you likely want to use shader storage buffers instead.
(I really forgot all about GFX - wrote a skinning shader 20 years ago...)
-
JoeJ
-
- Posts: 1453
- Joined: Tue Dec 21, 2010 6:18 pm
by Julio Jerez » Sun Feb 03, 2019 4:29 pm
When I query the max number of uniforms, I get 16000 floats, or not and 4096 vectors, that's 64 k, yes
In matrices is about 1024, more than enough.
But Dave is right, older shader versions only used to support up to 256 vectors, which is 64 matrices.
I remember in the Xbox and ps3 having to right tools to splits mesh in segments that do not use more than 40 or 50 unique bones.
Did you tested Joe, can you check it out to see if it works in your system?
-
Julio Jerez
- Moderator
-
- Posts: 12249
- Joined: Sun Sep 14, 2003 2:18 pm
- Location: Los Angeles
-
by JoeJ » Sun Feb 03, 2019 4:31 pm
I'll give it a try...
-
JoeJ
-
- Posts: 1453
- Joined: Tue Dec 21, 2010 6:18 pm
by JoeJ » Sun Feb 03, 2019 4:37 pm
Seems to work! I see a breathing guy in holding gun pose. Skinning works.
Dbg: 1000 fps, Rel.: 1400 fps
GPU is AMD FuryX
-
JoeJ
-
- Posts: 1453
- Joined: Tue Dec 21, 2010 6:18 pm
by Dave Gravel » Sun Feb 03, 2019 4:45 pm
Edited:
Here the animation don't work with mode #1 shadered version.
I get only the animation with the direct render #0 mode.
https://www.youtube.com/watch?v=JZy-lWnfSQ0--
I get the same fps with the shadered version if I compare with the test before but the character stay at /|\ position.
Maybe it depend on the video card I get 1500 1600 fps in debug and 4000 fps or a bit more in release.
Last edited by
Dave Gravel on Sun Feb 03, 2019 5:07 pm, edited 2 times in total.
-
Dave Gravel
-
- Posts: 800
- Joined: Sat Apr 01, 2006 9:31 pm
- Location: Quebec in Canada.
-
by JoeJ » Sun Feb 03, 2019 4:59 pm
For me it does work with both:
- Code: Select all
void DemoSkinMesh::Render (DemoEntityManager* const scene)
{
#if 0
Setting to 0 i only get 500 fps in release, but it looks the same.
Edit: My lower FPS surely come from API overhead on slow CPU.
-
JoeJ
-
- Posts: 1453
- Joined: Tue Dec 21, 2010 6:18 pm
by Julio Jerez » Sun Feb 03, 2019 5:50 pm
oh no I get the about 600 and Dave get similar fps, the overhead come for doing the vertex weight in teh CPU. the mesh has 12400 points, doing the weigh is not big deal by uploading teh data is wht kills the performance.
Dave is does work because in your system it fail to compile this shade
...\applications\media\shaders\SkinningDirectionalDiffuse.vs
the funtion that compile the shader is this
GLuint ShaderPrograms::CreateShaderEffect (const char* const vertexShaderName, const char* const pixelShaderName)
I do not know how to set glCompileShader(vertexShader); so that is tell what error happens.
I have to find out.
I am quite disappointed the GLSL is so limited, No debugger, no Errors,
it does seem liek is made any progress in 15 years.
-
Julio Jerez
- Moderator
-
- Posts: 12249
- Joined: Sun Sep 14, 2003 2:18 pm
- Location: Los Angeles
-
by Julio Jerez » Sun Feb 03, 2019 6:02 pm
Dave I added erro log info now, can you sync again?
set a break point in these line 101 and 116 in file ...\toolBox\ShaderPrograms.cpp
- Code: Select all
glGetShaderInfoLog(vertexShader, sizeof (buffer), &length, errorLog);
dTrace ((errorLog));
maybe you can get some error info from the shader compiler.
-
Julio Jerez
- Moderator
-
- Posts: 12249
- Joined: Sun Sep 14, 2003 2:18 pm
- Location: Los Angeles
-
by Julio Jerez » Sun Feb 03, 2019 6:11 pm
are you sure that's the erro log? It seem from some othe stuff.
if I add a erro to teh shader I get something like this
Vertex shader failed to compile with the following errors:
ERROR: 0:27: error(#132) Syntax error: "vec4" parse error
ERROR: error(#273) 1 compilation errors. No code generated
-
Julio Jerez
- Moderator
-
- Posts: 12249
- Joined: Sun Sep 14, 2003 2:18 pm
- Location: Los Angeles
-
by Dave Gravel » Sun Feb 03, 2019 6:18 pm
No it's not the error log hehe.
It is the code that I use here in my engine for enable the opengl debug.
And I use the error info in shader the same in your demo.
I don't get error message from your demo, but the animation don't work.
-
Dave Gravel
-
- Posts: 800
- Joined: Sat Apr 01, 2006 9:31 pm
- Location: Quebec in Canada.
-
by Julio Jerez » Sun Feb 03, 2019 6:23 pm
but I saw the assert in the youtube video, is it returning an erro status.
can you break when the assert happens?
btw I added a stress test, 100 models and I get from 280 to 300 fps.
I would expect a little better but I take it because the CPU skinning is around form 7 to 8
-
Julio Jerez
- Moderator
-
- Posts: 12249
- Joined: Sun Sep 14, 2003 2:18 pm
- Location: Los Angeles
-
Return to General Discussion
Who is online
Users browsing this forum: No registered users and 41 guests