[WINED3D 3/3] Add support for R32F and R16F texture formats

Ivan Gyurdiev ivg231 at gmail.com
Mon Sep 4 00:33:02 CDT 2006


... using:
GL_ARB_texture_float
GL_ARB_half_float_pixel

The internal format is RGB16/32F, which is wasteful (2 unused colors),
but there's no way around that. The NV_float_buffer extension
offers one and two component float formats, but they only work
with the NV_RECTANGLE texture target, which is no good.
Besides, that wouldn't help ATI users.

====================
Notes:

This patch shows significant improvement in the 3Dc demo.
It also makes it run much slower.
With pbuffers, 3Dc runs 100% correctly, and slow.
With FBOs (future patch), 3Dc runs 100% correctly, and fast.

Patch shows no improvement on PhongLighting, and SoftShadows2 demos.
It does make both run really really slow.
However, with pbuffers and this patch, SoftShadows2 runs correctly.
FBOs have some issues that I have yet to resolve.
=================

So, since correctness comes first, and speed second, patch should be 
applied.
Also, FBOs show promising results on some of those demos.

-------------- next part --------------
---
 dlls/wined3d/directx.c |    4 ++--
 dlls/wined3d/utils.c   |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index c413175..d4a0e97 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1650,8 +1650,10 @@ static HRESULT WINAPI IWineD3DImpl_Check
         BOOL half_pixel_support = GL_SUPPORT(ARB_HALF_FLOAT_PIXEL);
 
         switch (CheckFormat) {
+            case D3DFMT_R16F:
             case D3DFMT_A16B16G16R16F:
                 if (!half_pixel_support) break;
+            case D3DFMT_R32F:
             case D3DFMT_A32B32G32R32F:
                 TRACE_(d3d_caps)("[OK]\n");
                 return WINED3D_OK;
@@ -1748,9 +1750,7 @@ static HRESULT WINAPI IWineD3DImpl_Check
         /*****
          *  Float formats: Not supported right now
          */
-        case WINED3DFMT_R16F:
         case WINED3DFMT_G16R16F:
-        case WINED3DFMT_R32F:
         case WINED3DFMT_G32R32F:
         case WINED3DFMT_CxV8U8:
             TRACE_(d3d_caps)("[FAILED]\n"); /* Enable when implemented */
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 372fdb1..e0778c0 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -47,13 +47,13 @@ static const PixelFormatDesc formats[] =
     {WINED3DFMT_G8R8_G8B8   ,0x0        ,0x0        ,0x0        ,0x0        ,1/*?*/ ,TRUE       ,0                      ,0                  ,0                              },
     {WINED3DFMT_R8G8_B8G8   ,0x0        ,0x0        ,0x0        ,0x0        ,1/*?*/ ,TRUE       ,0                      ,0                  ,0                              },
     /* IEEE formats */
-    {WINED3DFMT_R32F        ,0x0        ,0x0        ,0x0        ,0x0        ,4      ,FALSE      ,0                      ,0                  ,0                              },
+    {WINED3DFMT_R32F        ,0x0        ,0x0        ,0x0        ,0x0        ,4      ,FALSE      ,GL_RGB32F_ARB         ,GL_RED             ,GL_FLOAT                       },
     {WINED3DFMT_G32R32F     ,0x0        ,0x0        ,0x0        ,0x0        ,8      ,FALSE      ,0                      ,0                  ,0                              },
     {WINED3DFMT_A32B32G32R32F,0x0       ,0x0        ,0x0        ,0x0        ,16     ,FALSE      ,GL_RGBA32F_ARB         ,GL_RGBA            ,GL_FLOAT                       },
     /* Hmm? */
     {WINED3DFMT_CxV8U8      ,0x0        ,0x0        ,0x0        ,0x0        ,2      ,FALSE      ,0                      ,0                  ,0                              },
     /* Float */
-    {WINED3DFMT_R16F        ,0x0        ,0x0        ,0x0        ,0x0        ,2      ,FALSE      ,0                      ,0                  ,0                              },
+    {WINED3DFMT_R16F        ,0x0        ,0x0        ,0x0        ,0x0        ,2      ,FALSE      ,GL_RGB16F_ARB         ,GL_RED             ,GL_HALF_FLOAT_ARB              },
     {WINED3DFMT_G16R16F     ,0x0        ,0x0        ,0x0        ,0x0        ,4      ,FALSE      ,0                      ,0                  ,0                              },
     {WINED3DFMT_A16B16G16R16F,0x0       ,0x0        ,0x0        ,0x0        ,8      ,FALSE      ,GL_RGBA16F_ARB         ,GL_RGBA            ,GL_HALF_FLOAT_ARB              },
     /* Palettized formats */
-- 
1.4.1



More information about the wine-patches mailing list