diff --git a/dlls/d3d8/directx.c b/dlls/d3d8/directx.c index 7a5a62ae3a9..2083dfb4861 100644 --- a/dlls/d3d8/directx.c +++ b/dlls/d3d8/directx.c @@ -391,8 +391,6 @@ HRESULT WINAPI IDirect3D8Impl_GetDeviceCaps (LPDIRECT3D8 iface, ICOM_THIS(IDirect3D8Impl,iface); TRACE("(%p)->(Adptr:%d, DevType: %x, pCaps: %p)\n", This, Adapter, DeviceType, pCaps); - - /* NOTE: Most of the values here are complete garbage for now */ pCaps->DeviceType = (DeviceType == D3DDEVTYPE_HAL) ? D3DDEVTYPE_HAL : D3DDEVTYPE_REF; /* Not quite true, but use h/w supported by opengl I suppose */ pCaps->AdapterOrdinal = Adapter; @@ -508,15 +506,16 @@ HRESULT WINAPI IDirect3D8Impl_GetDeviceCaps (LPDIRECT3D8 iface, pCaps->ExtentsAdjust = 0; - pCaps->StencilCaps = D3DSTENCILCAPS_DECRSAT | - D3DSTENCILCAPS_INCRSAT | - D3DSTENCILCAPS_INVERT | - D3DSTENCILCAPS_KEEP | - D3DSTENCILCAPS_REPLACE | - D3DSTENCILCAPS_ZERO; - /* FIXME: Add - D3DSTENCILCAPS_DECR - D3DSTENCILCAPS_INCR */ + pCaps->StencilCaps = D3DSTENCILCAPS_DECRSAT | + D3DSTENCILCAPS_INCRSAT | + D3DSTENCILCAPS_INVERT | + D3DSTENCILCAPS_KEEP | + D3DSTENCILCAPS_REPLACE | + D3DSTENCILCAPS_ZERO; +#if defined(GL_VERSION_1_4) || defined(GL_EXT_stencil_wrap) + pCaps->StencilCaps |= D3DSTENCILCAPS_DECR | + D3DSTENCILCAPS_INCR; +#endif pCaps->FVFCaps = D3DFVFCAPS_PSIZE | 0x80000; diff --git a/dlls/d3d8/utils.c b/dlls/d3d8/utils.c index a76c3bdb2e9..9180b637d1d 100644 --- a/dlls/d3d8/utils.c +++ b/dlls/d3d8/utils.c @@ -407,11 +407,19 @@ GLenum StencilOp(DWORD op) { case D3DSTENCILOP_REPLACE : return GL_REPLACE; case D3DSTENCILOP_INCRSAT : return GL_INCR; case D3DSTENCILOP_DECRSAT : return GL_DECR; - case D3DSTENCILOP_INVERT : return GL_INVERT; + case D3DSTENCILOP_INVERT : return GL_INVERT; +#if defined(GL_VERSION_1_4) + case D3DSTENCILOP_INCR : return GL_INCR_WRAP; + case D3DSTENCILOP_DECR : return GL_DECR_WRAP; +#elif defined(GL_EXT_stencil_wrap) + case D3DSTENCILOP_INCR : return GL_INCR_WRAP_EXT; + case D3DSTENCILOP_DECR : return GL_DECR_WRAP_EXT; +#else case D3DSTENCILOP_INCR : FIXME("Unsupported stencil op D3DSTENCILOP_INCR\n"); return GL_INCR; /* Fixme - needs to support wrap */ case D3DSTENCILOP_DECR : FIXME("Unsupported stencil op D3DSTENCILOP_DECR\n"); return GL_DECR; /* Fixme - needs to support wrap */ +#endif default: FIXME("Invalid stencil op %ld\n", op); return GL_ALWAYS;