[D3D8][D3D9][DDRAW][WINED3D] Sync with Wine Staging 2.9. This work couldn't have...
[reactos.git] / reactos / dll / directx / wine / d3d8 / directx.c
index 081befe..35bf76a 100644 (file)
@@ -231,27 +231,20 @@ static HRESULT WINAPI d3d8_CheckDeviceFormat(IDirect3D8 *iface, UINT adapter, D3
     usage = usage & (WINED3DUSAGE_MASK | WINED3DUSAGE_QUERY_MASK);
     switch (resource_type)
     {
-        case D3DRTYPE_SURFACE:
-            wined3d_rtype = WINED3D_RTYPE_SURFACE;
-            break;
-
-        case D3DRTYPE_VOLUME:
-            wined3d_rtype = WINED3D_RTYPE_VOLUME;
-            break;
-
+        case D3DRTYPE_CUBETEXTURE:
+            usage |= WINED3DUSAGE_LEGACY_CUBEMAP;
         case D3DRTYPE_TEXTURE:
+            usage |= WINED3DUSAGE_TEXTURE;
+        case D3DRTYPE_SURFACE:
             wined3d_rtype = WINED3D_RTYPE_TEXTURE_2D;
             break;
 
         case D3DRTYPE_VOLUMETEXTURE:
+        case D3DRTYPE_VOLUME:
+            usage |= WINED3DUSAGE_TEXTURE;
             wined3d_rtype = WINED3D_RTYPE_TEXTURE_3D;
             break;
 
-        case D3DRTYPE_CUBETEXTURE:
-            wined3d_rtype = WINED3D_RTYPE_TEXTURE_2D;
-            usage |= WINED3DUSAGE_LEGACY_CUBEMAP;
-            break;
-
         case D3DRTYPE_VERTEXBUFFER:
         case D3DRTYPE_INDEXBUFFER:
             wined3d_rtype = WINED3D_RTYPE_BUFFER;
@@ -309,26 +302,10 @@ static HRESULT WINAPI d3d8_CheckDepthStencilMatch(IDirect3D8 *iface, UINT adapte
     return hr;
 }
 
-void fixup_caps(WINED3DCAPS *caps)
-{
-    /* D3D8 doesn't support SM 2.0 or higher, so clamp to 1.x */
-    if (caps->PixelShaderVersion)
-        caps->PixelShaderVersion = D3DPS_VERSION(1,4);
-    else
-        caps->PixelShaderVersion = D3DPS_VERSION(0,0);
-    if (caps->VertexShaderVersion)
-        caps->VertexShaderVersion = D3DVS_VERSION(1,1);
-    else
-        caps->VertexShaderVersion = D3DVS_VERSION(0,0);
-    caps->MaxVertexShaderConst = min(D3D8_MAX_VERTEX_SHADER_CONSTANTF, caps->MaxVertexShaderConst);
-
-    caps->StencilCaps &= ~WINED3DSTENCILCAPS_TWOSIDED;
-}
-
 static HRESULT WINAPI d3d8_GetDeviceCaps(IDirect3D8 *iface, UINT adapter, D3DDEVTYPE device_type, D3DCAPS8 *caps)
 {
     struct d3d8 *d3d8 = impl_from_IDirect3D8(iface);
-    WINED3DCAPS *wined3d_caps;
+    WINED3DCAPS wined3d_caps;
     HRESULT hr;
 
     TRACE("iface %p, adapter %u, device_type %#x, caps %p.\n", iface, adapter, device_type, caps);
@@ -336,16 +313,11 @@ static HRESULT WINAPI d3d8_GetDeviceCaps(IDirect3D8 *iface, UINT adapter, D3DDEV
     if (!caps)
         return D3DERR_INVALIDCALL;
 
-    if (!(wined3d_caps = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wined3d_caps))))
-        return D3DERR_INVALIDCALL;
-
     wined3d_mutex_lock();
-    hr = wined3d_get_device_caps(d3d8->wined3d, adapter, device_type, wined3d_caps);
+    hr = wined3d_get_device_caps(d3d8->wined3d, adapter, device_type, &wined3d_caps);
     wined3d_mutex_unlock();
 
-    fixup_caps(wined3d_caps);
-    WINECAPSTOD3D8CAPS(caps, wined3d_caps)
-    HeapFree(GetProcessHeap(), 0, wined3d_caps);
+    d3dcaps_from_wined3dcaps(caps, &wined3d_caps);
 
     return hr;
 }
@@ -425,7 +397,9 @@ static const struct IDirect3D8Vtbl d3d8_vtbl =
 BOOL d3d8_init(struct d3d8 *d3d8)
 {
     DWORD flags = WINED3D_LEGACY_DEPTH_BIAS | WINED3D_VIDMEM_ACCOUNTING
-            | WINED3D_HANDLE_RESTORE | WINED3D_PIXEL_CENTER_INTEGER;
+            | WINED3D_HANDLE_RESTORE | WINED3D_PIXEL_CENTER_INTEGER
+            | WINED3D_LEGACY_UNBOUND_RESOURCE_COLOR | WINED3D_NO_PRIMITIVE_RESTART
+            | WINED3D_LEGACY_CUBEMAP_FILTERING;
 
     d3d8->IDirect3D8_iface.lpVtbl = &d3d8_vtbl;
     d3d8->refcount = 1;