[Bug 36820] RIFT crashes on startup (ID3DXBaseEffect::GetPassDesc returns NULL ptr for vertex and pixel shader function)

wine-bugs at winehq.org wine-bugs at winehq.org
Mon Jun 30 11:19:34 CDT 2014


https://bugs.winehq.org/show_bug.cgi?id=36820

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
          Component|-unknown                    |directx-d3dx9
         Resolution|---                         |DUPLICATE
            Summary|RIFT crashes on startup     |RIFT crashes on startup
                   |                            |(ID3DXBaseEffect::GetPassDe
                   |                            |sc returns NULL ptr for
                   |                            |vertex and pixel shader
                   |                            |function)

--- Comment #2 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

ok, I managed to attach a debugger at right place and can see where that NULL
pointer comes from.

The engine calls 'ID3DXBaseEffect::GetPassDesc' method before and passes the
address of D3DXPASS_DESC* (out parameter)

--- snip ---
00689CB9  8B0B         MOV ECX,DWORD PTR DS:[EBX]
00689CBB  8D5424 5C    LEA EDX,DWORD PTR SS:[ESP+5C] ; D3DXPASS_DESC*
00689CBF  52           PUSH EDX
00689CC0  50           PUSH EAX
00689CC1  8B41 18      MOV EAX,DWORD PTR DS:[ECX+18]
00689CC4  53           PUSH EBX
00689CC5  FFD0         CALL EAX              ; ID3DXBaseEffect::GetPassDesc
00689CC7  8B5424 64    MOV EDX,DWORD PTR SS:[ESP+64] ; pVertexShaderFunction
00689CCB  8D4C24 1C    LEA ECX,DWORD PTR SS:[ESP+1C]
00689CCF  51           PUSH ECX
00689CD0  68 00000200  PUSH 20000
00689CD5  52           PUSH EDX
00689CD6  E8 5D0A1601  CALL 017EA738         ; D3DXGetShaderConstantTableEx
--- snip ---

MSDN:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb205381%28v=vs.85%29.aspx

--- quote ---
typedef struct D3DXPASS_DESC {
  LPCSTR      Name;
  UINT        Annotations;
  const DWORD *pVertexShaderFunction;
  const DWORD *pPixelShaderFunction;
} D3DXPASS_DESC, *LPD3DXPASS_DESC;
--- quote ---

The C code would be something like this (for illustration):

--- snip ---
D3DXPASS_DESC passDesc;
ID3DXConstantTable* pConstantTable;

D3DXHANDLE hPass = pD3DEffect->GetPass(hTechnique, 0);  
pD3DEffect->GetPassDesc(hPass, &passDesc);

D3DXGetShaderConstantTableEx(passDesc.pVertexShaderFunction,
D3DXCONSTTABLE_LARGEADDRESSAWARE, &pConstantTable);
...
--- snip ---

That would make this one a dupe of bug 34551

Regards

*** This bug has been marked as a duplicate of bug 34551 ***

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list