H. Verbeet : wined3d: Properly load FLOAT16_2 and FLOAT16_4 vertex data.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Aug 2 06:23:05 CDT 2007


Module: wine
Branch: master
Commit: 82245cb5d716f11fcfe25a3b4e2440dab0e5c30a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=82245cb5d716f11fcfe25a3b4e2440dab0e5c30a

Author: H. Verbeet <hverbeet at gmail.com>
Date:   Wed Aug  1 22:48:54 2007 +0200

wined3d: Properly load FLOAT16_2 and FLOAT16_4 vertex data.

---

 dlls/wined3d/drawprim.c        |   12 ++++++++++--
 dlls/wined3d/wined3d_private.h |    7 +++++--
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index f440089..647e9b2 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -818,10 +818,18 @@ static inline void drawStridedInstanced(IWineD3DDevice *iface, WineDirect3DVerte
                     /* Are those 16 bit floats. C doesn't have a 16 bit float type. I could read the single bits and calculate a 4
                      * byte float according to the IEEE standard
                      */
-                    FIXME("Unsupported WINED3DDECLTYPE_FLOAT16_2\n");
+                    if (GL_SUPPORT(NV_HALF_FLOAT)) {
+                        GL_EXTCALL(glVertexAttrib2hvNV(instancedData[j], (GLhalfNV *)ptr));
+                    } else {
+                        FIXME("Unsupported WINED3DDECLTYPE_FLOAT16_2\n");
+                    }
                     break;
                 case WINED3DDECLTYPE_FLOAT16_4:
-                    FIXME("Unsupported WINED3DDECLTYPE_FLOAT16_4\n");
+                    if (GL_SUPPORT(NV_HALF_FLOAT)) {
+                        GL_EXTCALL(glVertexAttrib4hvNV(instancedData[j], (GLhalfNV *)ptr));
+                    } else {
+                        FIXME("Unsupported WINED3DDECLTYPE_FLOAT16_4\n");
+                    }
                     break;
 
                 case WINED3DDECLTYPE_UNUSED:
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 18528b8..22c18ca 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -139,8 +139,11 @@ static WINED3DGLTYPE const glTypeLookup[WINED3DDECLTYPE_UNUSED] = {
                                   {WINED3DDECLTYPE_USHORT4N,  4, GL_UNSIGNED_SHORT  , GL_TRUE  ,sizeof(short int)},
                                   {WINED3DDECLTYPE_UDEC3,     3, GL_UNSIGNED_SHORT  , GL_FALSE ,sizeof(short int)},
                                   {WINED3DDECLTYPE_DEC3N,     3, GL_SHORT           , GL_TRUE  ,sizeof(short int)},
-                                  {WINED3DDECLTYPE_FLOAT16_2, 2, GL_FLOAT           , GL_FALSE ,sizeof(short int)},
-                                  {WINED3DDECLTYPE_FLOAT16_4, 4, GL_FLOAT           , GL_FALSE ,sizeof(short int)}};
+                                  /* We should do an extension check for NV_HALF_FLOAT. However, without NV_HALF_FLOAT
+                                   * we won't be able to load the data at all, so at least for the moment it wouldn't
+                                   * gain us much. */
+                                  {WINED3DDECLTYPE_FLOAT16_2, 2, GL_HALF_FLOAT_NV   , GL_FALSE ,sizeof(GLhalfNV)},
+                                  {WINED3DDECLTYPE_FLOAT16_4, 4, GL_HALF_FLOAT_NV   , GL_FALSE ,sizeof(GLhalfNV)}};
 
 #define WINED3D_ATR_TYPE(type)          glTypeLookup[type].d3dType
 #define WINED3D_ATR_SIZE(type)          glTypeLookup[type].size




More information about the wine-cvs mailing list