r300: half float support
authorDave Airlie <airlied@redhat.com>
Fri, 22 Jan 2010 21:38:06 +0000 (07:38 +1000)
committerDave Airlie <airlied@redhat.com>
Sat, 23 Jan 2010 02:28:33 +0000 (12:28 +1000)
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/mesa/drivers/dri/r300/r300_context.c
src/mesa/drivers/dri/r300/r300_draw.c
src/mesa/drivers/dri/r300/r300_reg.h

index bb0e6db31395b568baa2932a8e62bb6c018fa790..24c51d4fee8198d048ba31bd4ba43603d2193efe 100644 (file)
@@ -97,6 +97,7 @@ static const struct dri_extension card_extensions[] = {
   /* *INDENT-OFF* */
   {"GL_ARB_depth_texture",             NULL},
   {"GL_ARB_fragment_program",          NULL},
+  {"GL_ARB_half_float_vertex",         NULL},
   {"GL_ARB_occlusion_query",           GL_ARB_occlusion_query_functions},
   {"GL_ARB_multitexture",              NULL},
   {"GL_ARB_point_parameters",          GL_ARB_point_parameters_functions},
index 3dcd986e2267f3ae09abc6342e0efaa30dbe4456..2219821153b2569a172110d98a475ddaf2ba6dfc 100644 (file)
@@ -56,6 +56,8 @@ static int getTypeSize(GLenum type)
        switch (type) {
                case GL_DOUBLE:
                        return sizeof(GLdouble);
+               case GL_HALF_FLOAT:
+                       return sizeof(GLhalfARB);
                case GL_FLOAT:
                        return sizeof(GLfloat);
                case GL_INT:
@@ -385,6 +387,18 @@ static void r300TranslateAttrib(GLcontext *ctx, GLuint attr, int count, const st
                        r300_attr._signed = 0;
                        r300_attr.normalize = 0;
                        break;
+               case GL_HALF_FLOAT:
+                       switch (input->Size) {
+                               case 1:
+                               case 2:
+                                       r300_attr.data_type = R300_DATA_TYPE_FLT16_2;
+                                       break;
+                               case 3:
+                               case 4:
+                                       r300_attr.data_type = R300_DATA_TYPE_FLT16_4;
+                                       break;
+                       }
+                       break;
                case GL_SHORT:
                        r300_attr._signed = 1;
                        r300_attr.normalize = input->Normalized;
index ea684e7df18d7ff6e7ea7ac683700577a8005b80..d18ebab8ff236dffeee9afff8ec5ffa28c3126cb 100644 (file)
@@ -230,6 +230,9 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_DATA_TYPE_SHORT_4                   7
 #       define R300_DATA_TYPE_VECTOR_3_TTT              8
 #       define R300_DATA_TYPE_VECTOR_3_EET              9
+#      define R300_DATA_TYPE_FLT16_2                   11
+#      define R300_DATA_TYPE_FLT16_4                   12
+
 #       define R300_SKIP_DWORDS_SHIFT                   4
 #       define R300_DST_VEC_LOC_SHIFT                   8
 #       define R300_LAST_VEC                            (1 << 13)