Re: [Mesa-dev] [PATCH] RFC gallium: add 64 bit integer formats
On Mon, Apr 9, 2018 at 9:14 PM, Karol Herbstwrote: > On Tue, Apr 10, 2018 at 2:43 AM, Ilia Mirkin wrote: > > On Mon, Apr 9, 2018 at 8:39 PM, Karol Herbst wrote: > >> unsigneds are needed by ARB_bindless_texture 64 bit vertex attribs, > both for > >> NV_vertex_attrib_integer64. > >> > >> Fixes the new piglit sampler-vertex-attrib-input-output test I sent > some days > >> ago for bindless_texture. > >> > >> The change inside vbo_attrtype_to_double_flag is what I am most > concerned > >> about. Maybe I should add another flag for 64 bit ints. Or rework what > Doubles > >> mean in gl_array_attributes. Or Rename that to is64Bit and rework all > users of > >> Doubles. > >> > >> Any suggestions? > >> > >> Signed-off-by: Karol Herbst > >> --- > >> src/gallium/drivers/svga/svga_format.c | 8 > >> src/gallium/include/pipe/p_format.h| 9 + > >> src/mesa/main/glformats.c | 3 +++ > >> src/mesa/state_tracker/st_atom_array.c | 30 > +++--- > >> src/mesa/vbo/vbo_private.h | 2 +- > >> 5 files changed, 48 insertions(+), 4 deletions(-) > >> > >> diff --git a/src/gallium/drivers/svga/svga_format.c > b/src/gallium/drivers/svga/svga_format.c > >> index 20a6e6b159f..f01a0e79c72 100644 > >> --- a/src/gallium/drivers/svga/svga_format.c > >> +++ b/src/gallium/drivers/svga/svga_format.c > >> @@ -369,6 +369,14 @@ static const struct vgpu10_format_entry > format_conversion_table[] = > >> { PIPE_FORMAT_A1B5G5R5_UNORM,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> { PIPE_FORMAT_X1B5G5R5_UNORM,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> { PIPE_FORMAT_A4B4G4R4_UNORM,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> + { PIPE_FORMAT_R64_UINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> + { PIPE_FORMAT_R64G64_UINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> + { PIPE_FORMAT_R64G64B64_UINT,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> + { PIPE_FORMAT_R64G64B64A64_UINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> + { PIPE_FORMAT_R64_SINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> + { PIPE_FORMAT_R64G64_SINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> + { PIPE_FORMAT_R64G64B64_SINT,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> + { PIPE_FORMAT_R64G64B64A64_SINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > >> }; > >> > >> > >> diff --git a/src/gallium/include/pipe/p_format.h > b/src/gallium/include/pipe/p_format.h > >> index 57399800fa4..df698856b70 100644 > >> --- a/src/gallium/include/pipe/p_format.h > >> +++ b/src/gallium/include/pipe/p_format.h > >> @@ -396,6 +396,15 @@ enum pipe_format { > >> PIPE_FORMAT_X1B5G5R5_UNORM = 310, > >> PIPE_FORMAT_A4B4G4R4_UNORM = 311, > >> > >> + PIPE_FORMAT_R64_UINT= 312, > >> + PIPE_FORMAT_R64G64_UINT = 313, > >> + PIPE_FORMAT_R64G64B64_UINT = 314, > >> + PIPE_FORMAT_R64G64B64A64_UINT = 315, > >> + PIPE_FORMAT_R64_SINT= 316, > >> + PIPE_FORMAT_R64G64_SINT = 317, > >> + PIPE_FORMAT_R64G64B64_SINT = 318, > >> + PIPE_FORMAT_R64G64B64A64_SINT = 319, > >> + > >> PIPE_FORMAT_COUNT > >> }; > >> > >> diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c > >> index 1e797c24c2a..feafd97f5ee 100644 > >> --- a/src/mesa/main/glformats.c > >> +++ b/src/mesa/main/glformats.c > >> @@ -543,6 +543,9 @@ _mesa_bytes_per_vertex_attrib(GLint comps, GLenum > type) > >> case GL_INT: > >> case GL_UNSIGNED_INT: > >>return comps * sizeof(GLint); > >> + /* ARB_bindless_texture */ > >> + case GL_UNSIGNED_INT64_ARB: > >> + return comps * sizeof(GLuint64EXT); > >> case GL_FLOAT: > >>return comps * sizeof(GLfloat); > >> case GL_HALF_FLOAT_ARB: > >> diff --git a/src/mesa/state_tracker/st_atom_array.c > b/src/mesa/state_tracker/st_atom_array.c > >> index 2fd67e8d840..1c3f677d4bf 100644 > >> --- a/src/mesa/state_tracker/st_atom_array.c > >> +++ b/src/mesa/state_tracker/st_atom_array.c > >> @@ -230,6 +230,27 @@ static const uint16_t vertex_formats[][4][4] = { > >> PIPE_FORMAT_R32G32B32A32_FIXED > >>}, > >> }, > >> + {{0}}, /* gap */ > >> + { /* GL_INT64_ARB */ > >> + {0}, > >> + {0}, > >> + { > >> + PIPE_FORMAT_R64_SINT, > >> + PIPE_FORMAT_R64G64_SINT, > >> + PIPE_FORMAT_R64G64B64_SINT, > >> + PIPE_FORMAT_R64G64B64A64_SINT > >> + }, > >> + }, > >> + { /* GL_UNSIGNED_INT64_ARB */ > >> + {0}, > >> + {0}, > >> + { > >> + PIPE_FORMAT_R64_UINT, > >> +
Re: [Mesa-dev] [PATCH] RFC gallium: add 64 bit integer formats
On Tue, Apr 10, 2018 at 2:43 AM, Ilia Mirkinwrote: > On Mon, Apr 9, 2018 at 8:39 PM, Karol Herbst wrote: >> unsigneds are needed by ARB_bindless_texture 64 bit vertex attribs, both for >> NV_vertex_attrib_integer64. >> >> Fixes the new piglit sampler-vertex-attrib-input-output test I sent some days >> ago for bindless_texture. >> >> The change inside vbo_attrtype_to_double_flag is what I am most concerned >> about. Maybe I should add another flag for 64 bit ints. Or rework what >> Doubles >> mean in gl_array_attributes. Or Rename that to is64Bit and rework all users >> of >> Doubles. >> >> Any suggestions? >> >> Signed-off-by: Karol Herbst >> --- >> src/gallium/drivers/svga/svga_format.c | 8 >> src/gallium/include/pipe/p_format.h| 9 + >> src/mesa/main/glformats.c | 3 +++ >> src/mesa/state_tracker/st_atom_array.c | 30 +++--- >> src/mesa/vbo/vbo_private.h | 2 +- >> 5 files changed, 48 insertions(+), 4 deletions(-) >> >> diff --git a/src/gallium/drivers/svga/svga_format.c >> b/src/gallium/drivers/svga/svga_format.c >> index 20a6e6b159f..f01a0e79c72 100644 >> --- a/src/gallium/drivers/svga/svga_format.c >> +++ b/src/gallium/drivers/svga/svga_format.c >> @@ -369,6 +369,14 @@ static const struct vgpu10_format_entry >> format_conversion_table[] = >> { PIPE_FORMAT_A1B5G5R5_UNORM,SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> { PIPE_FORMAT_X1B5G5R5_UNORM,SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> { PIPE_FORMAT_A4B4G4R4_UNORM,SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> + { PIPE_FORMAT_R64_UINT, SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> + { PIPE_FORMAT_R64G64_UINT, SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> + { PIPE_FORMAT_R64G64B64_UINT,SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> + { PIPE_FORMAT_R64G64B64A64_UINT, SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> + { PIPE_FORMAT_R64_SINT, SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> + { PIPE_FORMAT_R64G64_SINT, SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> + { PIPE_FORMAT_R64G64B64_SINT,SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> + { PIPE_FORMAT_R64G64B64A64_SINT, SVGA3D_FORMAT_INVALID, >> SVGA3D_FORMAT_INVALID, 0 }, >> }; >> >> >> diff --git a/src/gallium/include/pipe/p_format.h >> b/src/gallium/include/pipe/p_format.h >> index 57399800fa4..df698856b70 100644 >> --- a/src/gallium/include/pipe/p_format.h >> +++ b/src/gallium/include/pipe/p_format.h >> @@ -396,6 +396,15 @@ enum pipe_format { >> PIPE_FORMAT_X1B5G5R5_UNORM = 310, >> PIPE_FORMAT_A4B4G4R4_UNORM = 311, >> >> + PIPE_FORMAT_R64_UINT= 312, >> + PIPE_FORMAT_R64G64_UINT = 313, >> + PIPE_FORMAT_R64G64B64_UINT = 314, >> + PIPE_FORMAT_R64G64B64A64_UINT = 315, >> + PIPE_FORMAT_R64_SINT= 316, >> + PIPE_FORMAT_R64G64_SINT = 317, >> + PIPE_FORMAT_R64G64B64_SINT = 318, >> + PIPE_FORMAT_R64G64B64A64_SINT = 319, >> + >> PIPE_FORMAT_COUNT >> }; >> >> diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c >> index 1e797c24c2a..feafd97f5ee 100644 >> --- a/src/mesa/main/glformats.c >> +++ b/src/mesa/main/glformats.c >> @@ -543,6 +543,9 @@ _mesa_bytes_per_vertex_attrib(GLint comps, GLenum type) >> case GL_INT: >> case GL_UNSIGNED_INT: >>return comps * sizeof(GLint); >> + /* ARB_bindless_texture */ >> + case GL_UNSIGNED_INT64_ARB: >> + return comps * sizeof(GLuint64EXT); >> case GL_FLOAT: >>return comps * sizeof(GLfloat); >> case GL_HALF_FLOAT_ARB: >> diff --git a/src/mesa/state_tracker/st_atom_array.c >> b/src/mesa/state_tracker/st_atom_array.c >> index 2fd67e8d840..1c3f677d4bf 100644 >> --- a/src/mesa/state_tracker/st_atom_array.c >> +++ b/src/mesa/state_tracker/st_atom_array.c >> @@ -230,6 +230,27 @@ static const uint16_t vertex_formats[][4][4] = { >> PIPE_FORMAT_R32G32B32A32_FIXED >>}, >> }, >> + {{0}}, /* gap */ >> + { /* GL_INT64_ARB */ >> + {0}, >> + {0}, >> + { >> + PIPE_FORMAT_R64_SINT, >> + PIPE_FORMAT_R64G64_SINT, >> + PIPE_FORMAT_R64G64B64_SINT, >> + PIPE_FORMAT_R64G64B64A64_SINT >> + }, >> + }, >> + { /* GL_UNSIGNED_INT64_ARB */ >> + {0}, >> + {0}, >> + { >> + PIPE_FORMAT_R64_UINT, >> + PIPE_FORMAT_R64G64_UINT, >> + PIPE_FORMAT_R64G64B64_UINT, >> + PIPE_FORMAT_R64G64B64A64_UINT >> + }, >> + }, > > Since these are never actually passed in via a single vertex attrib, > is there
Re: [Mesa-dev] [PATCH] RFC gallium: add 64 bit integer formats
On Mon, Apr 9, 2018 at 8:39 PM, Karol Herbstwrote: > unsigneds are needed by ARB_bindless_texture 64 bit vertex attribs, both for > NV_vertex_attrib_integer64. > > Fixes the new piglit sampler-vertex-attrib-input-output test I sent some days > ago for bindless_texture. > > The change inside vbo_attrtype_to_double_flag is what I am most concerned > about. Maybe I should add another flag for 64 bit ints. Or rework what Doubles > mean in gl_array_attributes. Or Rename that to is64Bit and rework all users of > Doubles. > > Any suggestions? > > Signed-off-by: Karol Herbst > --- > src/gallium/drivers/svga/svga_format.c | 8 > src/gallium/include/pipe/p_format.h| 9 + > src/mesa/main/glformats.c | 3 +++ > src/mesa/state_tracker/st_atom_array.c | 30 +++--- > src/mesa/vbo/vbo_private.h | 2 +- > 5 files changed, 48 insertions(+), 4 deletions(-) > > diff --git a/src/gallium/drivers/svga/svga_format.c > b/src/gallium/drivers/svga/svga_format.c > index 20a6e6b159f..f01a0e79c72 100644 > --- a/src/gallium/drivers/svga/svga_format.c > +++ b/src/gallium/drivers/svga/svga_format.c > @@ -369,6 +369,14 @@ static const struct vgpu10_format_entry > format_conversion_table[] = > { PIPE_FORMAT_A1B5G5R5_UNORM,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > { PIPE_FORMAT_X1B5G5R5_UNORM,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > { PIPE_FORMAT_A4B4G4R4_UNORM,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > + { PIPE_FORMAT_R64_UINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > + { PIPE_FORMAT_R64G64_UINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > + { PIPE_FORMAT_R64G64B64_UINT,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > + { PIPE_FORMAT_R64G64B64A64_UINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > + { PIPE_FORMAT_R64_SINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > + { PIPE_FORMAT_R64G64_SINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > + { PIPE_FORMAT_R64G64B64_SINT,SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > + { PIPE_FORMAT_R64G64B64A64_SINT, SVGA3D_FORMAT_INVALID, > SVGA3D_FORMAT_INVALID, 0 }, > }; > > > diff --git a/src/gallium/include/pipe/p_format.h > b/src/gallium/include/pipe/p_format.h > index 57399800fa4..df698856b70 100644 > --- a/src/gallium/include/pipe/p_format.h > +++ b/src/gallium/include/pipe/p_format.h > @@ -396,6 +396,15 @@ enum pipe_format { > PIPE_FORMAT_X1B5G5R5_UNORM = 310, > PIPE_FORMAT_A4B4G4R4_UNORM = 311, > > + PIPE_FORMAT_R64_UINT= 312, > + PIPE_FORMAT_R64G64_UINT = 313, > + PIPE_FORMAT_R64G64B64_UINT = 314, > + PIPE_FORMAT_R64G64B64A64_UINT = 315, > + PIPE_FORMAT_R64_SINT= 316, > + PIPE_FORMAT_R64G64_SINT = 317, > + PIPE_FORMAT_R64G64B64_SINT = 318, > + PIPE_FORMAT_R64G64B64A64_SINT = 319, > + > PIPE_FORMAT_COUNT > }; > > diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c > index 1e797c24c2a..feafd97f5ee 100644 > --- a/src/mesa/main/glformats.c > +++ b/src/mesa/main/glformats.c > @@ -543,6 +543,9 @@ _mesa_bytes_per_vertex_attrib(GLint comps, GLenum type) > case GL_INT: > case GL_UNSIGNED_INT: >return comps * sizeof(GLint); > + /* ARB_bindless_texture */ > + case GL_UNSIGNED_INT64_ARB: > + return comps * sizeof(GLuint64EXT); > case GL_FLOAT: >return comps * sizeof(GLfloat); > case GL_HALF_FLOAT_ARB: > diff --git a/src/mesa/state_tracker/st_atom_array.c > b/src/mesa/state_tracker/st_atom_array.c > index 2fd67e8d840..1c3f677d4bf 100644 > --- a/src/mesa/state_tracker/st_atom_array.c > +++ b/src/mesa/state_tracker/st_atom_array.c > @@ -230,6 +230,27 @@ static const uint16_t vertex_formats[][4][4] = { > PIPE_FORMAT_R32G32B32A32_FIXED >}, > }, > + {{0}}, /* gap */ > + { /* GL_INT64_ARB */ > + {0}, > + {0}, > + { > + PIPE_FORMAT_R64_SINT, > + PIPE_FORMAT_R64G64_SINT, > + PIPE_FORMAT_R64G64B64_SINT, > + PIPE_FORMAT_R64G64B64A64_SINT > + }, > + }, > + { /* GL_UNSIGNED_INT64_ARB */ > + {0}, > + {0}, > + { > + PIPE_FORMAT_R64_UINT, > + PIPE_FORMAT_R64G64_UINT, > + PIPE_FORMAT_R64G64B64_UINT, > + PIPE_FORMAT_R64G64B64A64_UINT > + }, > + }, Since these are never actually passed in via a single vertex attrib, is there any way to not add these at all, and just handle the conversion from 64-bit to 2x 32-bit entirely internally to st/mesa? (Note that R64_FLOAT *can* be actually passed to a driver, and it is *not* the
[Mesa-dev] [PATCH] RFC gallium: add 64 bit integer formats
unsigneds are needed by ARB_bindless_texture 64 bit vertex attribs, both for NV_vertex_attrib_integer64. Fixes the new piglit sampler-vertex-attrib-input-output test I sent some days ago for bindless_texture. The change inside vbo_attrtype_to_double_flag is what I am most concerned about. Maybe I should add another flag for 64 bit ints. Or rework what Doubles mean in gl_array_attributes. Or Rename that to is64Bit and rework all users of Doubles. Any suggestions? Signed-off-by: Karol Herbst--- src/gallium/drivers/svga/svga_format.c | 8 src/gallium/include/pipe/p_format.h| 9 + src/mesa/main/glformats.c | 3 +++ src/mesa/state_tracker/st_atom_array.c | 30 +++--- src/mesa/vbo/vbo_private.h | 2 +- 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/svga/svga_format.c b/src/gallium/drivers/svga/svga_format.c index 20a6e6b159f..f01a0e79c72 100644 --- a/src/gallium/drivers/svga/svga_format.c +++ b/src/gallium/drivers/svga/svga_format.c @@ -369,6 +369,14 @@ static const struct vgpu10_format_entry format_conversion_table[] = { PIPE_FORMAT_A1B5G5R5_UNORM,SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, { PIPE_FORMAT_X1B5G5R5_UNORM,SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, { PIPE_FORMAT_A4B4G4R4_UNORM,SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_R64_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_R64G64_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_R64G64B64_UINT,SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_R64G64B64A64_UINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_R64_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_R64G64_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_R64G64B64_SINT,SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, + { PIPE_FORMAT_R64G64B64A64_SINT, SVGA3D_FORMAT_INVALID, SVGA3D_FORMAT_INVALID, 0 }, }; diff --git a/src/gallium/include/pipe/p_format.h b/src/gallium/include/pipe/p_format.h index 57399800fa4..df698856b70 100644 --- a/src/gallium/include/pipe/p_format.h +++ b/src/gallium/include/pipe/p_format.h @@ -396,6 +396,15 @@ enum pipe_format { PIPE_FORMAT_X1B5G5R5_UNORM = 310, PIPE_FORMAT_A4B4G4R4_UNORM = 311, + PIPE_FORMAT_R64_UINT= 312, + PIPE_FORMAT_R64G64_UINT = 313, + PIPE_FORMAT_R64G64B64_UINT = 314, + PIPE_FORMAT_R64G64B64A64_UINT = 315, + PIPE_FORMAT_R64_SINT= 316, + PIPE_FORMAT_R64G64_SINT = 317, + PIPE_FORMAT_R64G64B64_SINT = 318, + PIPE_FORMAT_R64G64B64A64_SINT = 319, + PIPE_FORMAT_COUNT }; diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c index 1e797c24c2a..feafd97f5ee 100644 --- a/src/mesa/main/glformats.c +++ b/src/mesa/main/glformats.c @@ -543,6 +543,9 @@ _mesa_bytes_per_vertex_attrib(GLint comps, GLenum type) case GL_INT: case GL_UNSIGNED_INT: return comps * sizeof(GLint); + /* ARB_bindless_texture */ + case GL_UNSIGNED_INT64_ARB: + return comps * sizeof(GLuint64EXT); case GL_FLOAT: return comps * sizeof(GLfloat); case GL_HALF_FLOAT_ARB: diff --git a/src/mesa/state_tracker/st_atom_array.c b/src/mesa/state_tracker/st_atom_array.c index 2fd67e8d840..1c3f677d4bf 100644 --- a/src/mesa/state_tracker/st_atom_array.c +++ b/src/mesa/state_tracker/st_atom_array.c @@ -230,6 +230,27 @@ static const uint16_t vertex_formats[][4][4] = { PIPE_FORMAT_R32G32B32A32_FIXED }, }, + {{0}}, /* gap */ + { /* GL_INT64_ARB */ + {0}, + {0}, + { + PIPE_FORMAT_R64_SINT, + PIPE_FORMAT_R64G64_SINT, + PIPE_FORMAT_R64G64B64_SINT, + PIPE_FORMAT_R64G64B64A64_SINT + }, + }, + { /* GL_UNSIGNED_INT64_ARB */ + {0}, + {0}, + { + PIPE_FORMAT_R64_UINT, + PIPE_FORMAT_R64G64_UINT, + PIPE_FORMAT_R64G64B64_UINT, + PIPE_FORMAT_R64G64B64A64_UINT + }, + }, }; @@ -244,7 +265,7 @@ st_pipe_vertex_format(const struct gl_array_attributes *attrib) const bool normalized = attrib->Normalized; const bool integer = attrib->Integer; GLenum16 type = attrib->Type; - unsigned index; + unsigned index = integer*2 + normalized; assert(size >= 1 && size <= 4); assert(format == GL_RGBA || format == GL_BGRA); @@ -298,11 +319,14 @@ st_pipe_vertex_format(const struct gl_array_attributes *attrib) return PIPE_FORMAT_B8G8R8A8_UNORM; } break; + case GL_UNSIGNED_INT64_ARB: + case GL_INT64_ARB: +