Quantcast
Viewing all articles
Browse latest Browse all 631

glDrawArraysIndirect not setting gl_VertexID correctly?

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?

 

//-------------------------Create and set up indirect draw buffer-------------------------

typedef struct

{

    GLuint count;

    GLuint primCount;

    GLuint first;

    GLuint baseInstance;

} DrawArraysIndirectCommand;

 

DrawArraysIndirectCommand command;

command.count = 6;

command.primCount= 1;

command.first = 2;

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);

 

//-------------------------Make indirect draw call-------------------------

glBindVertexArray(dummyVao);

glBindBuffer(GL_DRAW_INDIRECT_BUFFER, indirectBuffer);

glDrawArraysIndirect(GL_POINTS, 0);

glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0);

glBindVertexArray(0);

 

 

//-------------------------VERTEX SHADER--------------------------

#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);

}


Viewing all articles
Browse latest Browse all 631

Trending Articles