ddraw/wined3d: Remove texture format enumeration functions.
authorStefan Dösinger <stefandoesinger@gmx.at>
Mon, 17 Jul 2006 22:09:09 +0000 (00:09 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 18 Jul 2006 09:25:22 +0000 (11:25 +0200)
dlls/ddraw/device.c
dlls/ddraw/direct3d.c
dlls/wined3d/device.c
include/wine/wined3d_interface.h

index bdb4d05..982ec16 100644 (file)
@@ -1040,80 +1040,12 @@ IDirect3DDeviceImpl_1_GetPickRecords(IDirect3DDevice *iface,
     return D3D_OK;
 }
 
-/*****************************************************************************
- * EnumTextureFormatsCB
- *
- * Callback called by WineD3D for each enumerated Texture format. It
- * translates the WineD3DFormat into a ddraw pixel format and calls
- * the application callback
- *
- * Params:
- *  Device: The WineD3DDevice's parents = The IDirect3DDevice7 interface
- *          of our device
- *  fmt: An enumerated pixel format
- *  Context: Data pointer passed to WineD3D by
- *           IDirect3DDevice7::EnumTexureformats
- *
- * Returns:
- *  The return value of the application-provided callback
- *
- *****************************************************************************/
-static HRESULT WINAPI
-EnumTextureFormatsCB(IUnknown *Device,
-                     WINED3DFORMAT fmt,
-                     void *Context)
-{
-    struct EnumTextureFormatsCBS *cbs = (struct EnumTextureFormatsCBS *) Context;
-
-    DDSURFACEDESC sdesc;
-    DDPIXELFORMAT *pformat;
-
-    memset(&sdesc, 0, sizeof(DDSURFACEDESC));
-    sdesc.dwSize = sizeof(DDSURFACEDESC);
-    sdesc.dwFlags = DDSD_PIXELFORMAT | DDSD_CAPS;
-    sdesc.ddsCaps.dwCaps = DDSCAPS_TEXTURE;
-    pformat = &(sdesc.ddpfPixelFormat);
-    pformat->dwSize = sizeof(DDPIXELFORMAT);
-
-    PixelFormat_WineD3DtoDD(pformat, fmt);
-
-    if( ( fmt == WINED3DFMT_UYVY)        ||
-        ( fmt == WINED3DFMT_YUY2)        ||
-        ( fmt == WINED3DFMT_DXT1)        ||
-        ( fmt == WINED3DFMT_DXT2)        ||
-        ( fmt == WINED3DFMT_DXT3)        ||
-        ( fmt == WINED3DFMT_DXT4)        ||
-        ( fmt == WINED3DFMT_DXT5)        ||
-        ( fmt == WINED3DFMT_MULTI2_ARGB) ||
-        ( fmt == WINED3DFMT_G8R8_G8B8)   ||
-        ( fmt == WINED3DFMT_R8G8_B8G8)   ||
-        ( fmt == WINED3DFMT_L8)          ||
-        ( fmt == WINED3DFMT_A8L8)        ||
-        ( fmt == WINED3DFMT_A4L4)        ||
-        ( fmt == WINED3DFMT_V8U8)        ||
-        ( fmt == WINED3DFMT_L6V5U5)      )
-    {
-        /* These formats exist in D3D3 and D3D7 only,
-         * so do not call the older callback
-         */
-        if(cbs->cbv7) return cbs->cbv7(pformat, cbs->Context);
-    }
-    else
-    {
-        /* Only one of these should be passed */
-        if(cbs->cbv2) return cbs->cbv2(&sdesc, cbs->Context);
-        if(cbs->cbv7) return cbs->cbv7(pformat, cbs->Context);
-    }
-
-    return DDENUMRET_OK;
-}
-
 /*****************************************************************************
  * IDirect3DDevice7::EnumTextureformats
  *
- * Enumerates the supported texture formats. This is relayed to WineD3D,
- * and a EnumTextureFormatsCB translated the WineD3DFormats to DDraw
- * formats and calls the application callback.
+ * Enumerates the supported texture formats. It has a list of all possible
+ * formats and calls IWineD3D::CheckDeviceFormat for each format to see if
+ * WineD3D supports it. If so, then it is passed to the app.
  *
  * This is for Version 7 and 3, older versions have a different
  * callback function and their own implementation
@@ -1134,16 +1066,61 @@ IDirect3DDeviceImpl_7_EnumTextureFormats(IDirect3DDevice7 *iface,
 {
     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
     HRESULT hr;
-    struct EnumTextureFormatsCBS cbs = { NULL, Callback, Arg };
+    int i;
+
+    WINED3DFORMAT FormatList[] = {
+        /* 32 bit */
+        WINED3DFMT_A8R8G8B8,
+        WINED3DFMT_X8R8G8B8,
+        /* 24 bit */
+        WINED3DFMT_R8G8B8,
+        /* 16 Bit */
+        WINED3DFMT_A1R5G5B5,
+        WINED3DFMT_A4R4G4B4,
+        WINED3DFMT_R5G6B5,
+        WINED3DFMT_X1R5G5B5,
+        /* 8 Bit */
+        WINED3DFMT_R3G3B2,
+        WINED3DFMT_P8,
+        /* FOURCC codes */
+        WINED3DFMT_DXT1,
+        WINED3DFMT_DXT3,
+        WINED3DFMT_DXT5,
+    };
+
     TRACE("(%p)->(%p,%p): Relay\n", This, Callback, Arg);
 
     if(!Callback)
         return DDERR_INVALIDPARAMS;
 
-    hr = IWineD3DDevice_EnumTextureFormats(This->wineD3DDevice,
-                                           EnumTextureFormatsCB,
-                                           &cbs);
-    return hr_ddraw_from_wined3d(hr);
+    for(i = 0; i < sizeof(FormatList) / sizeof(WINED3DFORMAT); i++)
+    {
+        hr = IWineD3D_CheckDeviceFormat(This->ddraw->wineD3D,
+                                        0 /* Adapter */,
+                                        0 /* DeviceType */,
+                                        0 /* AdapterFormat */,
+                                        0 /* Usage */,
+                                        0 /* ResourceType */,
+                                        FormatList[i]);
+        if(hr == D3D_OK)
+        {
+            DDPIXELFORMAT pformat;
+
+            memset(&pformat, 0, sizeof(pformat));
+            pformat.dwSize = sizeof(pformat);
+            PixelFormat_WineD3DtoDD(&pformat, FormatList[i]);
+
+            TRACE("Enumerating WineD3DFormat %d\n", FormatList[i]);
+            hr = Callback(&pformat, Arg);
+            if(hr != DDENUMRET_OK)
+            {
+                TRACE("Format enumeration cancelled by application\n");
+                return D3D_OK;
+            }
+        }
+    }
+    TRACE("End of enumeration\n");
+    return D3D_OK;
 }
 
 static HRESULT WINAPI
@@ -1162,7 +1139,10 @@ Thunk_IDirect3DDeviceImpl_3_EnumTextureFormats(IDirect3DDevice3 *iface,
  * IDirect3DDevice2::EnumTextureformats
  *
  * EnumTextureFormats for Version 1 and 2, see
- * IDirect3DDevice7::EnumTexureFormats for a more detailed description
+ * IDirect3DDevice7::EnumTexureFormats for a more detailed description.
+ *
+ * This version has a different callback and does not enumerate FourCC
+ * formats
  *
  *****************************************************************************/
 static HRESULT WINAPI
@@ -1172,13 +1152,61 @@ IDirect3DDeviceImpl_2_EnumTextureFormats(IDirect3DDevice2 *iface,
 {
     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
     HRESULT hr;
-    struct EnumTextureFormatsCBS cbs = { Callback, NULL, Arg };
+    int i;
+
+    WINED3DFORMAT FormatList[] = {
+        /* 32 bit */
+        WINED3DFMT_A8R8G8B8,
+        WINED3DFMT_X8R8G8B8,
+        /* 24 bit */
+        WINED3DFMT_R8G8B8,
+        /* 16 Bit */
+        WINED3DFMT_A1R5G5B5,
+        WINED3DFMT_A4R4G4B4,
+        WINED3DFMT_R5G6B5,
+        WINED3DFMT_X1R5G5B5,
+        /* 8 Bit */
+        WINED3DFMT_R3G3B2,
+        WINED3DFMT_P8,
+        /* FOURCC codes - Not in this version*/
+    };
+
     TRACE("(%p)->(%p,%p): Relay\n", This, Callback, Arg);
 
-    hr = IWineD3DDevice_EnumTextureFormats(This->wineD3DDevice,
-                                           EnumTextureFormatsCB,
-                                           &cbs);
-    return hr_ddraw_from_wined3d(hr);
+    if(!Callback)
+        return DDERR_INVALIDPARAMS;
+
+    for(i = 0; i < sizeof(FormatList) / sizeof(WINED3DFORMAT); i++)
+    {
+        hr = IWineD3D_CheckDeviceFormat(This->ddraw->wineD3D,
+                                        0 /* Adapter */,
+                                        0 /* DeviceType */,
+                                        0 /* AdapterFormat */,
+                                        0 /* Usage */,
+                                        0 /* ResourceType */,
+                                        FormatList[i]);
+        if(hr == D3D_OK)
+        {
+            DDSURFACEDESC sdesc;
+
+            memset(&sdesc, 0, sizeof(sdesc));
+            sdesc.dwSize = sizeof(sdesc);
+            sdesc.dwFlags = DDSD_PIXELFORMAT | DDSD_CAPS;
+            sdesc.ddsCaps.dwCaps = DDSCAPS_TEXTURE;
+            sdesc.ddpfPixelFormat.dwSize = sizeof(sdesc.ddpfPixelFormat.dwSize);
+            PixelFormat_WineD3DtoDD(&sdesc.ddpfPixelFormat, FormatList[i]);
+
+            TRACE("Enumerating WineD3DFormat %d\n", FormatList[i]);
+            hr = Callback(&sdesc, Arg);
+            if(hr != DDENUMRET_OK)
+            {
+                TRACE("Format enumeration cancelled by application\n");
+                return D3D_OK;
+            }
+        }
+    }
+    TRACE("End of enumeration\n");
+    return D3D_OK;
 }
 
 static HRESULT WINAPI
index 6e8c610..19c2e8c 100644 (file)
@@ -1024,37 +1024,6 @@ Thunk_IDirect3DImpl_3_CreateVertexBuffer(IDirect3D3 *iface,
     return hr;
 }
 
-/*****************************************************************************
- * EnumZBufferFormatsCB
- *
- * Helper function for IDirect3D7::EnumZBufferFormats. Converts
- * the WINED3DFORMAT into a DirectDraw pixelformat and calls the application
- * callback
- *
- * Version 3 and 7
- *
- * Parameters:
- *  Device: Parent of the IWineD3DDevice, our IDirectDraw7 interface
- *  fmt: The enumerated pixel format
- *  Context: Context passed to IWineD3DDevice::EnumZBufferFormat
- *
- * Returns:
- *  The return value of the application-provided callback
- *
- *****************************************************************************/
-static HRESULT WINAPI
-EnumZBufferFormatsCB(IUnknown *Device,
-                     WINED3DFORMAT fmt,
-                     void *Context)
-{
-     struct EnumZBufferFormatsData *cbdata = (struct EnumZBufferFormatsData *) Context;
-     DDPIXELFORMAT pformat;
-
-     memset(&pformat, 0, sizeof(DDPIXELFORMAT));
-     pformat.dwSize=sizeof(DDPIXELFORMAT);
-     PixelFormat_WineD3DtoDD(&pformat, fmt);
-     return cbdata->Callback(&pformat, cbdata->Context);
-}
 
 /*****************************************************************************
  * IDirect3D7::EnumZBufferFormats
@@ -1081,13 +1050,51 @@ IDirect3DImpl_7_EnumZBufferFormats(IDirect3D7 *iface,
                                    void *Context)
 {
     ICOM_THIS_FROM(IDirectDrawImpl, IDirect3D7, iface);
-    struct EnumZBufferFormatsData cbdata = { Callback, Context };
+    HRESULT hr;
+    int i;
+
+    WINED3DFORMAT FormatList[] = {
+        WINED3DFMT_D32,
+        WINED3DFMT_D15S1,
+        WINED3DFMT_D24S8,
+        WINED3DFMT_D24X8,
+        WINED3DFMT_D24X4S4,
+        WINED3DFMT_D16
+    };
+
     TRACE("(%p)->(%s,%p,%p): Relay\n", iface, debugstr_guid(refiidDevice), Callback, Context);
 
     if(!Callback)
         return DDERR_INVALIDPARAMS;
 
-    return IWineD3DDevice_EnumZBufferFormats(This->wineD3DDevice, EnumZBufferFormatsCB, &cbdata);
+    for(i = 0; i < sizeof(FormatList) / sizeof(WINED3DFORMAT); i++)
+    {
+        hr = IWineD3D_CheckDeviceFormat(This->wineD3D,
+                                        0 /* Adapter */,
+                                        0 /* DeviceType */,
+                                        0 /* AdapterFormat */,
+                                        WINED3DUSAGE_DEPTHSTENCIL /* Usage */,
+                                        0 /* ResourceType */,
+                                        FormatList[i]);
+        if(hr == D3D_OK)
+        {
+            DDPIXELFORMAT pformat;
+
+            memset(&pformat, 0, sizeof(pformat));
+            pformat.dwSize = sizeof(pformat);
+            PixelFormat_WineD3DtoDD(&pformat, FormatList[i]);
+
+            TRACE("Enumerating WineD3DFormat %d\n", FormatList[i]);
+            hr = Callback(&pformat, Context);
+            if(hr != DDENUMRET_OK)
+            {
+                TRACE("Format enumeration cancelled by application\n");
+                return D3D_OK;
+            }
+        }
+    }
+    TRACE("End of enumeration\n");
+    return D3D_OK;
 }
 
 static HRESULT WINAPI
index 630d6d4..820935d 100644 (file)
@@ -2225,89 +2225,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetDisplayMode(IWineD3DDevice *iface, U
     return WINED3D_OK;
 }
 
-static HRESULT WINAPI IWineD3DDeviceImpl_EnumZBufferFormats(IWineD3DDevice *iface, D3DCB_ENUMPIXELFORMATS Callback, void *Context) {
-    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface;
-    HRESULT ret;
-    int i = 0;
-    WINED3DFORMAT FormatList[] = {
-        WINED3DFMT_D16,
-        WINED3DFMT_D32,
-        WINED3DFMT_D24X4S4,
-        WINED3DFMT_D24S8,
-        WINED3DFMT_D24X8,
-        WINED3DFMT_D15S1,
-        WINED3DFMT_UNKNOWN  /* Terminate the list */
-    };
-
-    TRACE("(%p)->(%p,%p)\n", This, Callback, Context);
-
-    while(FormatList[i] != WINED3DFMT_UNKNOWN) {
-        TRACE("Enumerating %s\n", debug_d3dformat(FormatList[i]));
-        ret = Callback((IUnknown *) This, FormatList[i], Context);
-        if(ret != DDENUMRET_OK) {
-            TRACE("Enumeration cancelled by Application\n");
-            return WINED3D_OK;
-        }
-        i++;
-    }
-
-    TRACE("End of Enumeration\n");
-
-    return WINED3D_OK;
-}
-
-static HRESULT WINAPI IWineD3DDeviceImpl_EnumTextureFormats(IWineD3DDevice *iface, D3DCB_ENUMPIXELFORMATS Callback, void *Context) {
-    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface;
-    HRESULT ret;
-    int i = 0;
-    
-    /* From old ddraw:
-     * WINED3DFMT_A1R5G5B5 needs to be the first 16 bit format, as some dumb apps depend on this
-     *
-     * Do not enumerate RGBA pixel formats: "some games choose the first 16 bit texture format
-     * with alpha they find enumerated, others the last one. And both want to have the ARGB one."
-     * But WineD3D doesn't support RGBA formats anyway...
-     */
-
-    WINED3DFORMAT FormatList[] = {
-        /* 32 bit */
-        WINED3DFMT_A8R8G8B8,
-        WINED3DFMT_X8R8G8B8,
-        /* 24 bit */
-        WINED3DFMT_R8G8B8,
-        /* 16 Bit */
-        WINED3DFMT_A1R5G5B5,
-        WINED3DFMT_A4R4G4B4,
-        WINED3DFMT_R5G6B5,
-        WINED3DFMT_X1R5G5B5,
-        /* 8 Bit */
-        WINED3DFMT_R3G3B2,
-        WINED3DFMT_P8,
-        /* FOURCC codes */
-        WINED3DFMT_DXT1,
-        WINED3DFMT_DXT3,
-        WINED3DFMT_DXT5,
-         /* Terminate the list */
-        WINED3DFMT_UNKNOWN
-    };
-
-    TRACE("(%p)->(%p,%p)\n", This, Callback, Context);
-
-    while(FormatList[i] != WINED3DFMT_UNKNOWN) {
-        TRACE("Enumerating %s\n", debug_d3dformat(FormatList[i]));
-        ret = Callback((IUnknown *) This, FormatList[i], Context);
-        if(ret != DDENUMRET_OK) {
-            TRACE("Enumeration cancelled by Application\n");
-            return WINED3D_OK;
-        }
-        i++;
-    }
-
-    TRACE("End of Enumeration\n");
-
-    return WINED3D_OK;
-}
-
 static HRESULT WINAPI IWineD3DDeviceImpl_GetDirect3D(IWineD3DDevice *iface, IWineD3D **ppD3D) {
    IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
    *ppD3D= This->wineD3D;
@@ -7933,8 +7850,6 @@ const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =
     IWineD3DDeviceImpl_SetCursorPosition,
     IWineD3DDeviceImpl_ShowCursor,
     IWineD3DDeviceImpl_TestCooperativeLevel,
-    IWineD3DDeviceImpl_EnumZBufferFormats,
-    IWineD3DDeviceImpl_EnumTextureFormats,
     /*** Getters and setters **/
     IWineD3DDeviceImpl_SetClipPlane,
     IWineD3DDeviceImpl_GetClipPlane,
index 5ede0b4..1c97114 100644 (file)
@@ -261,10 +261,6 @@ typedef HRESULT WINAPI (*D3DCB_CREATEADDITIONALSWAPCHAIN) (IUnknown *pDevice,
                                                struct IWineD3DSwapChain **pSwapChain
                                                );
 
-typedef HRESULT WINAPI (*D3DCB_ENUMPIXELFORMATS) (struct IUnknown *pDevice,
-                                                  WINED3DFORMAT fmt,
-                                                  void *Context);
-
 typedef HRESULT WINAPI (*D3DCB_ENUMDISPLAYMODESCALLBACK) (IUnknown *pDevice,
                                                           UINT Width,
                                                           UINT Height,
@@ -405,8 +401,6 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase)
     STDMETHOD_(void, SetCursorPosition)(THIS_ int XScreenSpace, int YScreenSpace, DWORD Flags) PURE;
     STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;
     STDMETHOD(TestCooperativeLevel)(THIS) PURE;
-    STDMETHOD(EnumZBufferFormats)(THIS_ D3DCB_ENUMPIXELFORMATS Callback, void *Context) PURE;
-    STDMETHOD(EnumTextureFormats)(THIS_ D3DCB_ENUMPIXELFORMATS Callback, void *Context) PURE;
     STDMETHOD(SetClipPlane)(THIS_ DWORD  Index,CONST float * pPlane) PURE;
     STDMETHOD(GetClipPlane)(THIS_ DWORD  Index,float * pPlane) PURE;
     STDMETHOD(SetClipStatus)(THIS_ CONST WINED3DCLIPSTATUS * pClipStatus) PURE;
@@ -547,8 +541,6 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase)
 #define IWineD3DDevice_TestCooperativeLevel(p)                  (p)->lpVtbl->TestCooperativeLevel(p)
 #define IWineD3DDevice_SetFVF(p,a)                              (p)->lpVtbl->SetFVF(p,a)
 #define IWineD3DDevice_GetFVF(p,a)                              (p)->lpVtbl->GetFVF(p,a)
-#define IWineD3DDevice_EnumZBufferFormats(p, a, b)              (p)->lpVtbl->EnumZBufferFormats(p, a, b)
-#define IWineD3DDevice_EnumTextureFormats(p, a, b)              (p)->lpVtbl->EnumTextureFormats(p, a, b)
 #define IWineD3DDevice_SetClipPlane(p,a,b)                      (p)->lpVtbl->SetClipPlane(p,a,b)
 #define IWineD3DDevice_GetClipPlane(p,a,b)                      (p)->lpVtbl->GetClipPlane(p,a,b)
 #define IWineD3DDevice_SetClipStatus(p,a)                       (p)->lpVtbl->SetClipStatus(p,a)