MrKaktus
05-15-2010, 01:14 AM
Hi,
After migration from XP x86 to Windows 7 x64 (nvidia driver 197.45) my aplication is no longer working correctly.
When creating Vertex Shader I got such error log during compilation:
Vertex info
-----------
0(36) : error C5058: no buffers available for bindable uniform
....
0(36) : error C5058: no buffers available for bindable uniform
This is exactly 245 times the same error line.
And this is my shader code:
#version 150
uniform samplerCube heightmap; // Height value
in vec2 mPosition; // Vertex position
in vec3 mWeights; // Vertex weights
out vec3 fNormal; // Vertex normal and texcoord
// Whole planet specyfic data
// (shared across all sections of program)
layout(std140)
uniform Planet
{
mat4 matMVP; // Model-View-Projection matrix for planet
vec3 correction; // Unit sphere center correction
uint level; // Teselation swith off sector level
float r; // Planet radius
float multiplier; // Planet height multiplier
} planet;
// Sector specyfic data array
layout(std140)
uniform Sectors
{
vec4 v0; // [v0.nx][v0.ny][v0.nz][ lvl ]
vec4 v1; // [v1.nx][v1.ny][v1.nz][-----]
vec4 v2; // [v2.nx][v2.ny][v2.nz][-----]
uint lvl;
} sectors[256];
void main(void)
{
// Corners positions, normals, texcoords
vec3 n0 = sectors[gl_InstanceID].v0.xyz;
vec3 n1 = sectors[gl_InstanceID].v1.xyz;
vec3 n2 = sectors[gl_InstanceID].v2.xyz;
// Sector level of subdivision
uint lvl = sectors[gl_InstanceID].lvl; //v0.z;
// Read weights for interpolation
float w0 = mWeights.x;
float w1 = mWeights.y;
float w2 = mWeights.z;
// Linear interpolate texcoords and normals
fNormal = normalize(w0*n0 + w1*n1 + w2*n2);
// Sampling terrain height in vertex position
float height = texture(heightmap,fNormal).x * planet.multiplier;
vec3 elevation = fNormal.xyz * height;
vec4 base_position;
if (lvl < planet.level)
base_position = vec4(fNormal.xyz, 1.0);
else
{
mat4 sectorMatrix;
vec3 rb = vec3(n2 - n1);
vec3 rc = vec3(n1 - n0);
sectorMatrix[0] = vec4(rc, 0.0);
sectorMatrix[1] = vec4(rb, 0.0);
sectorMatrix[2] = vec4(cross(rb,rc), 0.0);
sectorMatrix[3] = vec4(n0, 1.0);
base_position = sectorMatrix * vec4(mPosition.x, mPosition.y, 0.0, 1.0);
}
gl_Position = planet.matMVP * (base_position + vec4(elevation - planet.correction, 0.0));
};
I tried to change sectors table size to smaller for eg. 128, 10, 1 but always got this error.
Did anyone of you guys got similiar problems?
Any clues what could changed between these drivers ?
(or maybe something is wrong in shader ?)
Karol
After migration from XP x86 to Windows 7 x64 (nvidia driver 197.45) my aplication is no longer working correctly.
When creating Vertex Shader I got such error log during compilation:
Vertex info
-----------
0(36) : error C5058: no buffers available for bindable uniform
....
0(36) : error C5058: no buffers available for bindable uniform
This is exactly 245 times the same error line.
And this is my shader code:
#version 150
uniform samplerCube heightmap; // Height value
in vec2 mPosition; // Vertex position
in vec3 mWeights; // Vertex weights
out vec3 fNormal; // Vertex normal and texcoord
// Whole planet specyfic data
// (shared across all sections of program)
layout(std140)
uniform Planet
{
mat4 matMVP; // Model-View-Projection matrix for planet
vec3 correction; // Unit sphere center correction
uint level; // Teselation swith off sector level
float r; // Planet radius
float multiplier; // Planet height multiplier
} planet;
// Sector specyfic data array
layout(std140)
uniform Sectors
{
vec4 v0; // [v0.nx][v0.ny][v0.nz][ lvl ]
vec4 v1; // [v1.nx][v1.ny][v1.nz][-----]
vec4 v2; // [v2.nx][v2.ny][v2.nz][-----]
uint lvl;
} sectors[256];
void main(void)
{
// Corners positions, normals, texcoords
vec3 n0 = sectors[gl_InstanceID].v0.xyz;
vec3 n1 = sectors[gl_InstanceID].v1.xyz;
vec3 n2 = sectors[gl_InstanceID].v2.xyz;
// Sector level of subdivision
uint lvl = sectors[gl_InstanceID].lvl; //v0.z;
// Read weights for interpolation
float w0 = mWeights.x;
float w1 = mWeights.y;
float w2 = mWeights.z;
// Linear interpolate texcoords and normals
fNormal = normalize(w0*n0 + w1*n1 + w2*n2);
// Sampling terrain height in vertex position
float height = texture(heightmap,fNormal).x * planet.multiplier;
vec3 elevation = fNormal.xyz * height;
vec4 base_position;
if (lvl < planet.level)
base_position = vec4(fNormal.xyz, 1.0);
else
{
mat4 sectorMatrix;
vec3 rb = vec3(n2 - n1);
vec3 rc = vec3(n1 - n0);
sectorMatrix[0] = vec4(rc, 0.0);
sectorMatrix[1] = vec4(rb, 0.0);
sectorMatrix[2] = vec4(cross(rb,rc), 0.0);
sectorMatrix[3] = vec4(n0, 1.0);
base_position = sectorMatrix * vec4(mPosition.x, mPosition.y, 0.0, 1.0);
}
gl_Position = planet.matMVP * (base_position + vec4(elevation - planet.correction, 0.0));
};
I tried to change sectors table size to smaller for eg. 128, 10, 1 but always got this error.
Did anyone of you guys got similiar problems?
Any clues what could changed between these drivers ?
(or maybe something is wrong in shader ?)
Karol