Daniel Melo Jorge da Cunha
2016-Apr-19 12:52 UTC
[Nouveau] more one question regarding gl and nouveau
Hi, for example, if I have glVertex3f(0.75, 0.75, 1.0) how the video card processes these three floats? Does the card work with floats? Does (mesa? gallium? driver?) process these three input floats before it is sent to the card? Where is the code for it? If you say the floats are memory mapped as in exec->vtx.buffer_map = (GLfloat *)ctx->Driver.MapBufferRange(...) I would say from what I learned that it has to pass through gallium and that means: st_draw_vbo(...) ending up in nv30_draw_vbo(..) but these functions don't make any reference to those (memory mapped) input floats. So where is the piece of code that instructs the card to fetch those three (possibly processed) input floats and send them to the card? Thanks in advance. -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/nouveau/attachments/20160419/0d227f1e/attachment.html>
On Tue, Apr 19, 2016 at 8:52 AM, Daniel Melo Jorge da Cunha <dmjcunha at gmail.com> wrote:> Hi, for example, if I have glVertex3f(0.75, 0.75, 1.0) how the video card > processes > these three floats? Does the card work with floats? Does (mesa? gallium? > driver?) > process these three input floats before it is sent to the card? Where is the > code > for it?src/mesa/vbo will upload it to a vbo. The driver then points the hardware at the vbo and tells it to read from there. (Under some circumstances, the vbo data might have to be transformed on the cpu as well if the driver can't handle the format.)> > If you say the floats are memory mapped as in > exec->vtx.buffer_map = (GLfloat *)ctx->Driver.MapBufferRange(...) I would > say > from what I learned that it has to pass through gallium and that means: > st_draw_vbo(...) ending up in nv30_draw_vbo(..) but these functions don't > make > any reference to those (memory mapped) input floats. So where is the piece > of > code that instructs the card to fetch those three (possibly processed) input > floats > and send them to the card? > > Thanks in advance.The vbo module converts this to the equivalent of glGenBuffers(1, &buf) glBindBuffer(GL_ARRAY_BUFFER, buf) glBufferData(GL_ARRAY_BUFFER, ...) foo = glMapBuffer(buf) write vertex values to foo glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); draw Hope that helps, -ilia
Daniel Melo Jorge da Cunha
2016-Apr-19 15:01 UTC
[Nouveau] more one question regarding gl and nouveau
Hi Ilia, you were straight to the point for me in: "src/mesa/vbo will upload it to a vbo. The driver then points the hardware at the vbo and tells it to read from there." But where is it the function that implements this? Is it in nv30_draw_vbo(...)? Please, give me a function name or at least a file name? 2016-04-19 10:04 GMT-04:00 Ilia Mirkin <imirkin at alum.mit.edu>:> On Tue, Apr 19, 2016 at 8:52 AM, Daniel Melo Jorge da Cunha > <dmjcunha at gmail.com> wrote: > > Hi, for example, if I have glVertex3f(0.75, 0.75, 1.0) how the video card > > processes > > these three floats? Does the card work with floats? Does (mesa? gallium? > > driver?) > > process these three input floats before it is sent to the card? Where is > the > > code > > for it? > > src/mesa/vbo will upload it to a vbo. The driver then points the > hardware at the vbo and tells it to read from there. (Under some > circumstances, the vbo data might have to be transformed on the cpu as > well if the driver can't handle the format.) > > > > > If you say the floats are memory mapped as in > > exec->vtx.buffer_map = (GLfloat *)ctx->Driver.MapBufferRange(...) I would > > say > > from what I learned that it has to pass through gallium and that means: > > st_draw_vbo(...) ending up in nv30_draw_vbo(..) but these functions don't > > make > > any reference to those (memory mapped) input floats. So where is the > piece > > of > > code that instructs the card to fetch those three (possibly processed) > input > > floats > > and send them to the card? > > > > Thanks in advance. > > The vbo module converts this to the equivalent of > > glGenBuffers(1, &buf) > glBindBuffer(GL_ARRAY_BUFFER, buf) > glBufferData(GL_ARRAY_BUFFER, ...) > foo = glMapBuffer(buf) > write vertex values to foo > glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); > draw > > Hope that helps, > > -ilia >-------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/nouveau/attachments/20160419/0aa6b9fd/attachment.html>