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;
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);
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;
}
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;