Merge pull request #1601 from LukeUsher/fix-endpush-count
Fix D3DDevice_Begin/D3DDevice_EndPush length calculation
This commit is contained in:
commit
472baf66eb
|
@ -109,10 +109,8 @@ static bool g_bHasStencil = false; // Does device have
|
||||||
static DWORD g_dwPrimPerFrame = 0; // Number of primitives within one frame
|
static DWORD g_dwPrimPerFrame = 0; // Number of primitives within one frame
|
||||||
|
|
||||||
// primary push buffer
|
// primary push buffer
|
||||||
static uint32_t g_dwPrimaryPBCount = 0;
|
|
||||||
static uint32_t *g_pPrimaryPB = nullptr;
|
static uint32_t *g_pPrimaryPB = nullptr;
|
||||||
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
XTL::X_D3DSurface Surface;
|
XTL::X_D3DSurface Surface;
|
||||||
RECT SrcRect;
|
RECT SrcRect;
|
||||||
|
@ -2615,7 +2613,6 @@ PDWORD WINAPI XTL::EMUPATCH(D3DDevice_BeginPush)(DWORD Count)
|
||||||
|
|
||||||
DWORD *pRet = new DWORD[Count];
|
DWORD *pRet = new DWORD[Count];
|
||||||
|
|
||||||
g_dwPrimaryPBCount = Count;
|
|
||||||
g_pPrimaryPB = (uint32_t*)pRet;
|
g_pPrimaryPB = (uint32_t*)pRet;
|
||||||
|
|
||||||
return pRet;
|
return pRet;
|
||||||
|
@ -2641,7 +2638,6 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_BeginPush2)(DWORD Count, DWORD** ppPush)
|
||||||
|
|
||||||
DWORD *pRet = new DWORD[Count];
|
DWORD *pRet = new DWORD[Count];
|
||||||
|
|
||||||
g_dwPrimaryPBCount = Count;
|
|
||||||
g_pPrimaryPB = (uint32_t*)pRet;
|
g_pPrimaryPB = (uint32_t*)pRet;
|
||||||
|
|
||||||
*ppPush=pRet;
|
*ppPush=pRet;
|
||||||
|
@ -2658,7 +2654,9 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_EndPush)(DWORD *pPush)
|
||||||
EmuLog(LOG_LEVEL::WARNING, "D3DDevice_EndPush called without preceding D3DDevice_BeginPush?!");
|
EmuLog(LOG_LEVEL::WARNING, "D3DDevice_EndPush called without preceding D3DDevice_BeginPush?!");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
EmuExecutePushBufferRaw(g_pPrimaryPB, g_dwPrimaryPBCount * sizeof(DWORD));
|
// Note: We don't use the count from BeginPush because that specifies the *maximum* count
|
||||||
|
// rather than the count actually in the pushbuffer.
|
||||||
|
EmuExecutePushBufferRaw(g_pPrimaryPB, (uintptr_t)pPush - (uintptr_t)g_pPrimaryPB);
|
||||||
|
|
||||||
delete[] g_pPrimaryPB;
|
delete[] g_pPrimaryPB;
|
||||||
g_pPrimaryPB = nullptr;
|
g_pPrimaryPB = nullptr;
|
||||||
|
|
Loading…
Reference in New Issue