Oops: badly named variables caused confusion: OriginalDeclarationSize was a count, HostDeclarationSize was actual size
This commit is contained in:
parent
f8b1c890be
commit
04bc37589f
|
@ -3445,13 +3445,13 @@ HRESULT WINAPI XTL::EMUPATCH(D3DDevice_CreateVertexShader)
|
|||
DWORD *pRecompiledDeclaration = NULL;
|
||||
DWORD *pRecompiledFunction = NULL;
|
||||
DWORD VertexShaderSize = 0;
|
||||
DWORD OriginalDeclarationSize = 0;
|
||||
DWORD OriginalDeclarationCount = 0;
|
||||
DWORD HostDeclarationSize = 0;
|
||||
DWORD Handle = 0;
|
||||
|
||||
HRESULT hRet = XTL::EmuRecompileVshDeclaration((DWORD*)pDeclaration,
|
||||
(XTL::D3DVERTEXELEMENT9**)&pRecompiledDeclaration,
|
||||
&OriginalDeclarationSize,
|
||||
&OriginalDeclarationCount,
|
||||
&HostDeclarationSize,
|
||||
pFunction == NULL,
|
||||
&pVertexShader->VertexShaderInfo);
|
||||
|
@ -3548,14 +3548,14 @@ HRESULT WINAPI XTL::EMUPATCH(D3DDevice_CreateVertexShader)
|
|||
|
||||
free(pRecompiledDeclaration);
|
||||
|
||||
pVertexShader->pDeclaration = (DWORD*)g_VMManager.Allocate(HostDeclarationSize);
|
||||
memcpy(pVertexShader->pDeclaration, pDeclaration, HostDeclarationSize);
|
||||
pVertexShader->pDeclaration = (DWORD*)g_VMManager.Allocate(OriginalDeclarationCount * sizeof(DWORD));
|
||||
memcpy(pVertexShader->pDeclaration, pDeclaration, OriginalDeclarationCount * sizeof(DWORD));
|
||||
|
||||
pVertexShader->FunctionSize = 0;
|
||||
pVertexShader->pFunction = NULL;
|
||||
pVertexShader->Type = X_VST_NORMAL;
|
||||
pVertexShader->Size = (VertexShaderSize - sizeof(VSH_SHADER_HEADER)) / VSH_INSTRUCTION_SIZE_BYTES;
|
||||
pVertexShader->OriginalDeclarationSize = OriginalDeclarationSize;
|
||||
pVertexShader->OriginalDeclarationCount = OriginalDeclarationCount;
|
||||
pVertexShader->HostDeclarationSize = HostDeclarationSize;
|
||||
|
||||
if(SUCCEEDED(hRet))
|
||||
|
@ -8349,8 +8349,8 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_LoadVertexShaderProgram)
|
|||
DWORD hNewShader = 0;
|
||||
|
||||
// Save the contents of the existing vertex shader program
|
||||
DWORD* pDeclaration = (DWORD*) malloc( pVertexShader->OriginalDeclarationSize );
|
||||
memmove( pDeclaration, pVertexShader->pDeclaration, pVertexShader->OriginalDeclarationSize);
|
||||
DWORD* pDeclaration = (DWORD*) malloc( pVertexShader->OriginalDeclarationCount * sizeof(DWORD) );
|
||||
memmove( pDeclaration, pVertexShader->pDeclaration, pVertexShader->OriginalDeclarationCount * sizeof(DWORD));
|
||||
|
||||
// Create a new vertex shader with the new
|
||||
HRESULT hr = EMUPATCH(D3DDevice_CreateVertexShader)( pDeclaration, pFunction, &hNewShader, 0 );
|
||||
|
@ -8424,13 +8424,13 @@ HRESULT WINAPI XTL::EMUPATCH(D3DDevice_GetVertexShaderDeclaration)
|
|||
if (pSizeOfData) {
|
||||
CxbxVertexShader *pVertexShader = MapXboxVertexShaderHandleToCxbxVertexShader(Handle);
|
||||
if (pVertexShader) {
|
||||
DWORD sizeOfData = pVertexShader->OriginalDeclarationSize * sizeof(DWORD);
|
||||
DWORD sizeOfData = pVertexShader->OriginalDeclarationCount * sizeof(DWORD);
|
||||
if (*pSizeOfData < sizeOfData || !pData) {
|
||||
*pSizeOfData = sizeOfData;
|
||||
hRet = !pData ? D3D_OK : D3DERR_MOREDATA;
|
||||
}
|
||||
else {
|
||||
memcpy(pData, pVertexShader->pDeclaration, pVertexShader->OriginalDeclarationSize);
|
||||
memcpy(pData, pVertexShader->pDeclaration, pVertexShader->OriginalDeclarationCount * sizeof(DWORD));
|
||||
hRet = D3D_OK;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -516,7 +516,7 @@ typedef struct _CxbxVertexShader
|
|||
// we save them to be able to return them when necessary.
|
||||
UINT Size;
|
||||
DWORD *pDeclaration;
|
||||
DWORD OriginalDeclarationSize;
|
||||
DWORD OriginalDeclarationCount;
|
||||
XTL::LPDIRECT3DVERTEXDECLARATION9 pHostDeclaration;
|
||||
DWORD HostDeclarationSize;
|
||||
DWORD *pFunction;
|
||||
|
|
|
@ -1768,7 +1768,7 @@ CxbxVertexShaderPatch;
|
|||
#define DEF_VSH_END 0xFFFFFFFF
|
||||
#define DEF_VSH_NOP 0x00000000
|
||||
|
||||
static DWORD VshGetDeclarationSize(DWORD *pDeclaration)
|
||||
static DWORD VshGetDeclarationCount(DWORD *pDeclaration)
|
||||
{
|
||||
DWORD Pos = 0;
|
||||
while (*(pDeclaration + Pos) != DEF_VSH_END)
|
||||
|
@ -2361,7 +2361,7 @@ DWORD XTL::EmuRecompileVshDeclaration
|
|||
(
|
||||
DWORD *pDeclaration,
|
||||
D3DVERTEXELEMENT **ppRecompiledDeclaration,
|
||||
DWORD *pOriginalDeclarationSize,
|
||||
DWORD *pOriginalDeclarationCount,
|
||||
DWORD *pHostDeclarationSize,
|
||||
boolean IsFixedFunction,
|
||||
CxbxVertexShaderInfo *pVertexShaderInfo
|
||||
|
@ -2378,18 +2378,17 @@ DWORD XTL::EmuRecompileVshDeclaration
|
|||
// 0x00000000 - nop (means that this value is ignored)
|
||||
|
||||
// Calculate size of declaration
|
||||
DWORD DeclarationSize = VshGetDeclarationSize(pDeclaration);
|
||||
*pOriginalDeclarationSize = DeclarationSize;
|
||||
|
||||
DWORD DeclarationCount = VshGetDeclarationCount(pDeclaration);
|
||||
// For Direct3D9, we need to reserve at least twice the number of elements, as one token can generate two registers (in and out) :
|
||||
DeclarationSize *= sizeof(D3DVERTEXELEMENT) * 2;
|
||||
DWORD HostDeclarationSize = DeclarationCount * sizeof(D3DVERTEXELEMENT) * 2;
|
||||
*pOriginalDeclarationCount = DeclarationCount;
|
||||
*pHostDeclarationSize = HostDeclarationSize;
|
||||
|
||||
D3DVERTEXELEMENT *pRecompiled = (D3DVERTEXELEMENT *)malloc(DeclarationSize);
|
||||
memset(pRecompiled, 0, DeclarationSize);
|
||||
D3DVERTEXELEMENT *pRecompiled = (D3DVERTEXELEMENT *)malloc(HostDeclarationSize);
|
||||
memset(pRecompiled, 0, HostDeclarationSize);
|
||||
|
||||
uint8_t *pRecompiledBufferOverflow = ((uint8_t*)pRecompiled) + DeclarationSize;
|
||||
uint8_t *pRecompiledBufferOverflow = ((uint8_t*)pRecompiled) + HostDeclarationSize;
|
||||
*ppRecompiledDeclaration = pRecompiled;
|
||||
*pHostDeclarationSize = DeclarationSize;
|
||||
|
||||
CxbxVertexShaderPatch PatchData = { 0 };
|
||||
PatchData.pVertexShaderInfoToSet = pVertexShaderInfo;
|
||||
|
|
Loading…
Reference in New Issue