Sto scrivendo uno shader GLSL vertice per un iMac con un'AMD Radeon HD 6970M scheda grafica 2048 MB:Qual è il numero effettivo di componenti di vertice per lo shader GLSL sulla scheda grafica ATI?
GL_MAX_VERTEX_ATTRIBS: 16
GL_MAX_VERTEX_UNIFORM_COMPONENTS: 4096
GL_VERSION: 2.1 ATI-7.12.9
GL_SHADING_LANGUAGE_VERSION: 1.20
Nel mio Shader vorrei avere una vasta gamma di mat4s uniformi:
uniform mat4 T[65]
ma se provo ad avere 65 di questi il mio shader (segretamente) passa alla modalità Renderer Software Apple. Se invece uso 64:
uniform mat4 T[64]
tutto va bene.
Sembra essere un problema con il superamento del numero massimo di uniformi. Ma, come ho scritto sopra mi sto 4096 per GL_MAX_VERTEX_UNIFORM_COMPONENTS modo 4096/(4 * 4) = 256, non 64 ...
OpenGL.org wiki dice
ATI/AMD nota: I valori dei componenti max ATI sono sbagliato. Sono il numero effettivo dei componenti diviso per 4.
Ma la lettura di questo mi potrebbe pensare che se interrogo GL_MAX_VERTEX_UNIFORM_COMPONENTS e ottenere 4096 che io in realtà sono 16.384. Quello che sembra essere il caso è che GL_MAX_VERTEX_UNIFORM_COMPONENTS restituisce il numero effettivo dei componenti moltiplicati per 4. Questo sarebbe poi dare 1024/(4 * 4) = 64.
Qualcuno può confermare?
Edit: mio Shader è semplicemente:
#version 120
// 65 goes into software render mode
#define MAX_T 64
attribute vec4 indices;
uniform mat4 T[MAX_T];
void main()
{
gl_Position = T[int(indices[0])]*gl_Vertex;
}
Potrebbe postare il codice dello shader o almeno la definizione di tutte le uniformi utilizzate. E hai ragione isofar, che devi dividere il 1024 per 4 non moltiplicare. La voce wiki è formulata male. – datenwolf
Ho pubblicato il codice dello shader sopra (ho anche notato che prima di averne uno spento nel mio conteggio, così ho modificato i numeri nella domanda originale 63-> 64 e 64-> 65 di conseguenza). –
@datenwolf Si dovrebbe postare questo come una risposta, in quanto questo sembra essere il suo problema abbastanza ovviamente. Immagino che usi solo altre piccole uniformi che "bloccano" l'ultimo 64 ° slot della matrice (anche le uniformi integrate contano, penso). –