wine hangs in ddraw/d3dtexture.c (d3dtexture_create)

Michael Schlüter michael at johalla.de
Mon Mar 15 05:38:59 CST 2004


Hi,

the whole yesterday I was hunting a problem when staring a program with
wine. Now I'm at a point I don't know what to do next. May be somebody
can give me an hint?

Here are the last lines of the trace+ddraw output:

trace:ddraw:Main_DirectDrawSurface_Lock (0x40405b50)->Lock((nil),0x408bf960,00000001,00000000)
trace:ddraw:Main_DirectDrawSurface_Lock  - locking flags : DDLOCK_WAIT
trace:ddraw:d3ddevice_lock_update  copying back buffer to main memory with rectangle (0x0) - (800x600).
trace:ddraw:Main_DirectDrawSurface_Lock locked surface returning description :
 - DDSD_CAPS : DDSCAPS_BACKBUFFER DDSCAPS_COMPLEX DDSCAPS_FLIP DDSCAPS_3DDEVICE DDSCAPS_VIDEOMEMORY DDSCAPS_LOCALVIDMEM
 - DDSD_HEIGHT : 600
 - DDSD_WIDTH : 800
 - DDSD_PITCH : 1600
 - DDSD_LPSURFACE : 0x5f0d0000
 - DDSD_PIXELFORMAT : ( DDPF_RGB , RGB bits: 16,  R f800 G 07e0 B 001f)
trace:ddraw:Main_DirectDrawSurface_Unlock (0x40405b50)->Unlock((nil))
trace:ddraw:DIB_DirectDrawSurface_Blt (0x403f5768)->(0x61885c,0x40405b50,0x61886c,01000000,(nil))
trace:ddraw:DIB_DirectDrawSurface_Blt   destrect :0x0-800x600
trace:ddraw:DIB_DirectDrawSurface_Blt   srcrect  :0x0-800x600
trace:ddraw:DIB_DirectDrawSurface_Blt   flags: DDBLT_WAIT
trace:ddraw:d3ddevice_blt  using direct buffer to buffer copy.
trace:ddraw:upload_surface_to_tex_memory_init  initialized texture upload for level 0 with conversion 0.
trace:ddraw:Main_DirectDraw_CreateSurface (0x403f5418)->(0x61741ba0,0x60d0aedc,(nil))
trace:ddraw:Main_DirectDraw_CreateSurface Requesting surface desc :
 - DDSD_CAPS : DDSCAPS_TEXTURE DDSCAPS2_TEXTUREMANAGE
 - DDSD_HEIGHT : 128
 - DDSD_WIDTH : 256
 - DDSD_PIXELFORMAT : ( DDPF_ALPHAPIXELS DDPF_RGB , RGB bits: 16,  R 7c00 G 03e0 B 001f A 8000)
trace:ddraw:HAL_DirectDrawSurface_Construct (0x60f501b8,0x403f5418,0x61741ac0)
trace:ddraw:DIB_DirectDrawSurface_Construct (0x60f501b8)->(0x403f5418,0x60f503b4)
trace:ddraw:Main_DirectDrawSurface_Construct (0x60f501b8)->(0x403f5418,0x60f503b4)
trace:ddraw:DIB_DirectDrawSurface_Construct (256x128, pitch=512)
trace:ddraw:create_dib DIBSection at : 0x62100000
trace:ddraw:d3dtexture_create  GL texture created for surface 0x60f501b8 (private data at 0x60f50058)

The appropriate source code:

        ENTER_GL();
        if (surf->mipmap_level == 0) {
            glGenTextures(1, &(private->tex_name));
            if (private->tex_name == 0) ERR("Error at creation of OpenGL texture ID !\n");
            TRACE(" GL texture id is : %d.\n", private->tex_name);
            private->__global_dirty_flag = (at_creation == FALSE ? SURFACE_MEMORY_DIRTY : SURFACE_MEMORY);
            private->global_dirty_flag = &(private->__global_dirty_flag);
        } else {
            private->tex_name = ((IDirect3DTextureGLImpl *) (main->tex_private))->tex_name;
            TRACE(" GL texture id reusing id %d from surface %p (private at %p)).\n", private->tex_name, main, main->tex_private);
            private->global_dirty_flag = &(((IDirect3DTextureGLImpl *) (main->tex_private))->__global_dirty_flag);
        }
        LEAVE_GL();

A printf showed me, that the call of glGenTextures didn't come back.
That's strage because d3dtexture_create and glGenTextures are called a
lot of times before without problems? If I delete glGenTextures it works
but...

Bye, Michael




More information about the wine-devel mailing list