Hi,
mal wieder habe ich Schwierigkeiten einen GLSL Shader auf meinem Laptop, mit AMD Radeon zum Laufen zu bringen.
Diesmal ist es soga ein interner Compiler Fehler. Hier die Fehlermeldung:
|
Quellcode
|
1
2
3
4
|
Internal compilation failure. Possibly caused by GSA not supporting a GLSL feature used in shader.
ERROR: 0:6: error(#132) Syntax error: ';' parse error
ERROR: error(#273) 1 compilation errors. No code generated
|
Ich teste den Shader gerade mit AMDs GPU Shader Analyzer (v.1.59).
Hier der Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#version 330
#define MAX_NUM_IMAGES 2048
struct ImageEntry
{
vec4 positionSizeLayer; // xy: Position, z: Size, w: Image Array Layer.
vec4 color; // rgba: Color.
};
layout(std140) uniform vertexParam
{
mat4 wvpMatrix;
vec4 basePositionAndSize; // xy: Base Position, zw: Base Size.
vec4 baseColor;
};
layout(std140) uniform imageArrayEntries
{
ImageEntry entries[MAX_NUM_IMAGES];
};
out vec4 vertexColor;
out vec3 vertexTexCoord;
void main()
{
int id = gl_InstanceID;
/* Extract position, size and layer */
ImageEntry entry = entries[id];
vec4 posSizeLayer = entry.positionSizeLayer;
vec2 position = basePositionAndSize.xy + posSizeLayer.xy;
vec2 size = basePositionAndSize.zw * vec2(posSizeLayer.z);
float layer = posSizeLayer.w;
/* Compute vertex coordinate */
vec4 coord = vec4(0.0);
vec2 texCoord = vec2(0.0);
switch (gl_VertexID)
{
case 0:
coord = vec4(position.x, position.y, 0.0, 1.0);
texCoord = vec2(0.0, 0.0);
break;
case 1:
coord = vec4(position.x + size.x, position.y, 0.0, 1.0);
texCoord = vec2(1.0, 0.0);
break;
case 2:
coord = vec4(position.x, position.y + size.y, 0.0, 1.0);
texCoord = vec2(0.0, 1.0);
break;
case 3:
coord = vec4(position.x + size.x, position.y + size.y, 0.0, 1.0);
texCoord = vec2(1.0, 1.0);
break;
}
gl_Position = wvpMatrix * coord;
/* Compute color and texture coordinate */
vertexColor = baseColor * entry.color;
vertexTexCoord = vec3(texCoord, layer);
}
|
Mit 2048 "ImageEntry" Elementen sollte der Uniform (bzw. Constant-) Buffer "imageArrayEntries" genau das maximum eines ConstantBuffers haben - nämlich 4096 Vektoren, je 4 mal 32-bit groß.
Aber mit weniger Elementen kommt der selbe Fehler.
GLSL Version ist auf 330 gesetzt, daher verstehe ich nicht, welches Feature hier nicht unterstützt wird.
Kann mir da einer weiter helfen?
Aber bei internen Fehlern ist das wohl eher schwierig schätze ich
Aber vielleicht kann mir ja schon mal einer sagen was mit "GSA" (in der Fehlermeldung) gemeint ist.