Public feed
#529387
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 6901145..0c9c2be 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -852,6 +852,36 @@ static void depth_copy(IWineD3DDevice *iface) {
}
}
+float convert16bitfloatto32 (unsigned short ptr) {
+
+float ret;
+unsigned short *sptr = (unsigned short * )&ptr;
+int i = 1;
+/*
+int fract = (*sptr >> 0) & 0x7FFFFF;
+int exp = (*sptr >> 23) & 0xFF;
+int sign = (*sptr >> 31) & 0x1;
+*/
+
+short fract = (*sptr >> 0) & 0x3FF;
+short exp = (*sptr >> 10) & 0x1F;
+short sign = (*sptr >> 15) & 0x1;
+
+
+FIXME("fract=%d, exp=%d, sign=%d\n", fract, exp, sign);
+
+while (1<= (fract / pow(10, i))) i++;
+
+FIXME("0.something=%f\n", pow(10, -i)*fract);
+FIXME("p1=%d, %f, %f\n", (sign == 0 ? 1 : -1), (pow(10, -i)*fract+1), pow(2,((int)exp-15)));
+ret = (sign == 0 ? 1 : -1) * ((pow(10, -i)*fract+1) * pow(2,((int)exp-15)));
+
+FIXME("float=%f\n", ret);
+
+return ret;
+
+}
+
static inline void drawStridedInstanced(IWineD3DDevice *iface, WineDirect3DVertexStridedData *sd, UINT numberOfVertices,
GLenum glPrimitiveType, const void *idxData, short idxSize, ULONG minIndex,
ULONG startIdx, ULONG startVertex) {
@@ -972,9 +1002,14 @@ static inline void drawStridedInstanced(IWineD3DDevice *iface, WineDirect3DVerte
FIXME("Unsupported WINED3DDECLTYPE_FLOAT16_2\n");
break;
case WINED3DDECLTYPE_FLOAT16_4:
- FIXME("Unsupported WINED3DDECLTYPE_FLOAT16_4\n");
+ {
+// FIXME("Unsupported WINED3DDECLTYPE_FLOAT16_4\n");
+ float f[4] = {convert16bitfloatto32(((unsigned short * ) ptr)[0]), convert16bitfloatto32(((unsigned short * ) ptr)[1]),
+ convert16bitfloatto32(((unsigned short * ) ptr)[2]), convert16bitfloatto32(((unsigned short * ) ptr)[3])};
+ GL_EXTCALL(glVertexAttrib4fvARB(instancedData[j], (float *) f));
+// FIXME("FLOAT=%f\n", convert16bitfloatto32(((unsigned short * ) ptr)[0]));
break;
-
+ }
case WINED3DDECLTYPE_UNUSED:
default:
ERR("Unexpected declaration in instanced attributes\n");