Module: wine Branch: master Commit: 82245cb5d716f11fcfe25a3b4e2440dab0e5c30a URL: http://source.winehq.org/git/wine.git/?a=commit;h=82245cb5d716f11fcfe25a3b4e...
Author: H. Verbeet hverbeet@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