PDA

View Full Version : glDrawArraysIndirect and gl_VertexID



soconnell
07-26-2013, 07:21 AM
I'm not 100% positive what the correct behavior is here, but on NVIDIA hardware, gl_VertexID = first + [vertex index]. So if I specify first=2, count = 6, then the values for gl_VertexID in each instance of the shader are: 2, 3, 4, 5, 6, 7. However on AMD hardware, gl_VertexID always starts at 0. When calling glDrawArrays with no bound attributes, the behavior between NVIDIA and AMD is the same and correct. Has anybody else experienced this issue on AMD hardware?


typedef struct
{
GLuint count;
GLuint instanceCount;
GLuint first;
GLuint baseInstance;
} DrawArraysIndirectCommand;

DrawArraysIndirectCommand command;
command.count = 6;
command.instanceCount = 1;
command.first = 4;
command.baseInstance = 0;

glGenBuffers(1, &indirectBuffer);
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, indirectBuffer);
glBufferData(GL_DRAW_INDIRECT_BUFFER, sizeof(DrawArraysIndirectCommand), &command, GL_STATIC_DRAW);
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0);


glBindVertexArray(dummyVao);
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, indirectBuffer);
glDrawArraysIndirect(GL_POINTS, 0);
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0);
glBindVertexArray(0);


#version 430 core

layout (std430, binding = 0) buffer BufferObject
{
int data[];
};

uniform mat4 ModelViewProjectionMatrix;

void main()
{
data[gl_VertexID] = gl_VertexID;
gl_Position = ModelViewProjectionMatrix * vec4(gl_VertexID, 0.0, 0.0, 1.0);
}