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