[Mesa-dev] [PATCH v2] mesa/extensions: expose OES_vertex_half_float for ES2
Kevin Strasser
kevin.strasser at intel.com
Mon Oct 10 21:29:58 UTC 2016
Half float support already exists for desktop GL. Reuse the
ARB_half_float_vertex enable bit and account for the different enum to
enable the extension for ES2.
Signed-off-by: Kevin Strasser <kevin.strasser at intel.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/mesa/drivers/dri/i965/brw_draw_upload.c | 2 ++
src/mesa/main/extensions_table.h | 1 +
src/mesa/main/glformats.c | 1 +
src/mesa/main/varray.c | 7 +++++--
src/mesa/state_tracker/st_atom_array.c | 7 +++++--
5 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index 993b21c..a47ba68 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -290,6 +290,7 @@ brw_get_vertex_surface_type(struct brw_context *brw,
case GL_DOUBLE: return double_types(brw, size, glarray->Doubles);
case GL_FLOAT: return float_types[size];
case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES:
if (brw->gen < 6 && size == 3)
return half_float_types[4];
else
@@ -368,6 +369,7 @@ brw_get_vertex_surface_type(struct brw_context *brw,
case GL_DOUBLE: return double_types(brw, size, glarray->Doubles);
case GL_FLOAT: return float_types[size];
case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES:
if (brw->gen < 6 && size == 3)
return half_float_types[4];
else
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index b6286fc..d97d714 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -391,6 +391,7 @@ EXT(OES_texture_npot , ARB_texture_non_power_of_two
EXT(OES_texture_stencil8 , ARB_texture_stencil8 , x , x , x , 30, 2014)
EXT(OES_texture_storage_multisample_2d_array, ARB_texture_multisample , x , x , x , 31, 2014)
EXT(OES_vertex_array_object , dummy_true , x , x , ES1, ES2, 2010)
+EXT(OES_vertex_half_float , ARB_half_float_vertex , x , x , x , ES2, 2005)
EXT(OES_viewport_array , OES_viewport_array , x , x , x , 31, 2010)
EXT(S3_s3tc , ANGLE_texture_compression_dxt , GLL, GLC, x , x , 1999)
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index 85d00af..a95909c 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -546,6 +546,7 @@ _mesa_bytes_per_vertex_attrib(GLint comps, GLenum type)
case GL_FLOAT:
return comps * sizeof(GLfloat);
case GL_HALF_FLOAT_ARB:
+ case GL_HALF_FLOAT_OES:
return comps * sizeof(GLhalfARB);
case GL_DOUBLE:
return comps * sizeof(GLdouble);
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 027ae7c..d04fd0b 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -102,6 +102,7 @@ type_to_bit(const struct gl_context *ctx, GLenum type)
case GL_UNSIGNED_INT:
return UNSIGNED_INT_BIT;
case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES:
if (ctx->Extensions.ARB_half_float_vertex)
return HALF_BIT;
else
@@ -235,8 +236,10 @@ get_legal_types_mask(const struct gl_context *ctx)
legalTypesMask &= ~(UNSIGNED_INT_BIT |
INT_BIT |
UNSIGNED_INT_2_10_10_10_REV_BIT |
- INT_2_10_10_10_REV_BIT |
- HALF_BIT);
+ INT_2_10_10_10_REV_BIT);
+
+ if (!_mesa_has_OES_vertex_half_float(ctx))
+ legalTypesMask &= ~HALF_BIT;
}
}
else {
diff --git a/src/mesa/state_tracker/st_atom_array.c b/src/mesa/state_tracker/st_atom_array.c
index 1c2cfa7..3f7ff7d 100644
--- a/src/mesa/state_tracker/st_atom_array.c
+++ b/src/mesa/state_tracker/st_atom_array.c
@@ -212,6 +212,7 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
{
assert((type >= GL_BYTE && type <= GL_DOUBLE) ||
type == GL_FIXED || type == GL_HALF_FLOAT ||
+ type == GL_HALF_FLOAT_OES ||
type == GL_INT_2_10_10_10_REV ||
type == GL_UNSIGNED_INT_2_10_10_10_REV ||
type == GL_UNSIGNED_INT_10F_11F_11F_REV);
@@ -281,7 +282,8 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
switch (type) {
case GL_DOUBLE: return double_types[size-1];
case GL_FLOAT: return float_types[size-1];
- case GL_HALF_FLOAT: return half_float_types[size-1];
+ case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES: return half_float_types[size-1];
case GL_INT: return int_types_norm[size-1];
case GL_SHORT: return short_types_norm[size-1];
case GL_BYTE: return byte_types_norm[size-1];
@@ -296,7 +298,8 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
switch (type) {
case GL_DOUBLE: return double_types[size-1];
case GL_FLOAT: return float_types[size-1];
- case GL_HALF_FLOAT: return half_float_types[size-1];
+ case GL_HALF_FLOAT:
+ case GL_HALF_FLOAT_OES: return half_float_types[size-1];
case GL_INT: return int_types_scale[size-1];
case GL_SHORT: return short_types_scale[size-1];
case GL_BYTE: return byte_types_scale[size-1];
--
2.7.4
More information about the mesa-dev
mailing list