Potential fix for Indiana Jones regression?
This commit is contained in:
parent
ec25283551
commit
4591e40712
|
@ -174,7 +174,7 @@ static XTL::X_D3DSurface *g_pXboxDepthStencil = NULL;
|
|||
static DWORD g_dwVertexShaderUsage = 0; // TODO : Move to XbVertexShader.cpp
|
||||
static DWORD g_VertexShaderSlots[X_VSH_MAX_INSTRUCTION_COUNT];
|
||||
|
||||
DWORD g_XboxBaseVertexIndex = 0; // a value that's effectively added to every VB Index stored in the index buffer
|
||||
DWORD g_XboxBaseVertexIndex = 0; // Set by D3DDevice_SetIndices : a value that's effectively added to every VB Index stored in the index buffer
|
||||
DWORD g_DefaultPresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
|
||||
DWORD g_PresentationIntervalOverride = 0;
|
||||
bool g_UnlockFramerateHack = false; // ignore the xbox presentation interval
|
||||
|
@ -2668,7 +2668,7 @@ ConvertedIndexBuffer& CxbxUpdateActiveIndexBuffer
|
|||
// Note, that LowIndex and HighIndex won't change due to any quad-to-triangle conversion,
|
||||
// so it's less work to WalkIndexBuffer over the input instead of the converted index buffer.
|
||||
EmuLog(LOG_LEVEL::DEBUG, "CxbxUpdateActiveIndexBuffer: Converting quads to %d triangle indices (D3DFMT_INDEX16)", RequiredIndexCount);
|
||||
CxbxConvertQuadListToTriangleListIndices((INDEX16*)pXboxIndexData, RequiredIndexCount, pHostIndexBufferData);
|
||||
CxbxConvertQuadListToTriangleListIndices(pXboxIndexData, RequiredIndexCount, pHostIndexBufferData);
|
||||
} else {
|
||||
EmuLog(LOG_LEVEL::DEBUG, "CxbxUpdateActiveIndexBuffer: Copying %d indices (D3DFMT_INDEX16)", XboxIndexCount);
|
||||
memcpy(pHostIndexBufferData, pXboxIndexData, XboxIndexCount * sizeof(INDEX16));
|
||||
|
@ -6718,6 +6718,9 @@ void CxbxDrawIndexed(CxbxDrawContext &DrawContext)
|
|||
INT BaseVertexIndex = DrawContext.dwBaseVertexIndex;
|
||||
UINT primCount = DrawContext.dwHostPrimitiveCount;
|
||||
if (bConvertQuadListToTriangleList) {
|
||||
if (DrawContext.dwVertexCount == 4)
|
||||
LOG_TEST_CASE("X_D3DPT_QUADLIST (single quad)"); // breakpoint location
|
||||
else
|
||||
LOG_TEST_CASE("X_D3DPT_QUADLIST");
|
||||
// Convert draw arguments from quads to triangles :
|
||||
BaseVertexIndex = QuadToTriangleVertexCount(BaseVertexIndex);
|
||||
|
@ -7154,7 +7157,7 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_DrawIndexedVertices)
|
|||
|
||||
DrawContext.XboxPrimitiveType = PrimitiveType;
|
||||
DrawContext.dwVertexCount = VertexCount;
|
||||
DrawContext.dwBaseVertexIndex = g_XboxBaseVertexIndex; // Used to derive VerticesInBuffer
|
||||
DrawContext.dwBaseVertexIndex = 0; // DO NOT set to g_XboxBaseVertexIndex (since pIndexData is given, we should ignore D3DDevice_SetIndices)
|
||||
DrawContext.pXboxIndexData = pIndexData; // Used to derive VerticesInBuffer
|
||||
|
||||
// Test case JSRF draws all geometry through this function (only sparks are drawn via another method)
|
||||
|
|
|
@ -1204,17 +1204,17 @@ UINT EmuD3DVertexToPrimitive[11][2] =
|
|||
D3DPRIMITIVETYPE EmuPrimitiveTypeLookup[] =
|
||||
{
|
||||
/* NULL = 0 */ (D3DPRIMITIVETYPE)0,
|
||||
/* D3DPT_POINTLIST = 1, */ D3DPT_POINTLIST,
|
||||
/* D3DPT_LINELIST = 2, */ D3DPT_LINELIST,
|
||||
/* D3DPT_LINELOOP = 3, Xbox */ D3DPT_LINESTRIP,
|
||||
/* D3DPT_LINESTRIP = 4, */ D3DPT_LINESTRIP,
|
||||
/* D3DPT_TRIANGLELIST = 5, */ D3DPT_TRIANGLELIST,
|
||||
/* D3DPT_TRIANGLESTRIP = 6, */ D3DPT_TRIANGLESTRIP,
|
||||
/* D3DPT_TRIANGLEFAN = 7, */ D3DPT_TRIANGLEFAN,
|
||||
/* D3DPT_QUADLIST = 8, Xbox */ D3DPT_TRIANGLELIST,
|
||||
/* D3DPT_QUADSTRIP = 9, Xbox */ D3DPT_TRIANGLESTRIP,
|
||||
/* D3DPT_POLYGON = 10, Xbox */ D3DPT_TRIANGLEFAN,
|
||||
/* D3DPT_MAX = 11, */ (D3DPRIMITIVETYPE)11
|
||||
/* X_D3DPT_POINTLIST = 1, */ D3DPT_POINTLIST,
|
||||
/* X_D3DPT_LINELIST = 2, */ D3DPT_LINELIST,
|
||||
/* X_D3DPT_LINELOOP = 3, Xbox */ D3DPT_LINESTRIP,
|
||||
/* X_D3DPT_LINESTRIP = 4, */ D3DPT_LINESTRIP,
|
||||
/* X_D3DPT_TRIANGLELIST = 5, */ D3DPT_TRIANGLELIST,
|
||||
/* X_D3DPT_TRIANGLESTRIP = 6, */ D3DPT_TRIANGLESTRIP,
|
||||
/* X_D3DPT_TRIANGLEFAN = 7, */ D3DPT_TRIANGLEFAN,
|
||||
/* X_D3DPT_QUADLIST = 8, Xbox */ D3DPT_TRIANGLELIST,
|
||||
/* X_D3DPT_QUADSTRIP = 9, Xbox */ D3DPT_TRIANGLESTRIP,
|
||||
/* X_D3DPT_POLYGON = 10, Xbox */ D3DPT_TRIANGLEFAN,
|
||||
/* X_D3DPT_MAX = 11, */ (D3DPRIMITIVETYPE)11
|
||||
};
|
||||
|
||||
void EmuUnswizzleBox
|
||||
|
|
|
@ -262,12 +262,14 @@ inline int EmuD3DPrimitive2VertexCount(XTL::X_D3DPRIMITIVETYPE PrimitiveType, in
|
|||
extern D3DPRIMITIVETYPE EmuPrimitiveTypeLookup[];
|
||||
|
||||
// convert xbox->pc primitive type
|
||||
inline D3DPRIMITIVETYPE EmuXB2PC_D3DPrimitiveType(XTL::X_D3DPRIMITIVETYPE PrimitiveType)
|
||||
inline D3DPRIMITIVETYPE EmuXB2PC_D3DPrimitiveType(XTL::X_D3DPRIMITIVETYPE XboxPrimitiveType)
|
||||
{
|
||||
if((DWORD)PrimitiveType == 0x7FFFFFFF)
|
||||
if (XboxPrimitiveType >= XTL::X_D3DPT_MAX) {
|
||||
LOG_TEST_CASE("XboxPrimitiveType too large");
|
||||
return D3DPT_FORCE_DWORD;
|
||||
}
|
||||
|
||||
return EmuPrimitiveTypeLookup[PrimitiveType];
|
||||
return EmuPrimitiveTypeLookup[XboxPrimitiveType];
|
||||
}
|
||||
|
||||
inline int EmuD3DIndexCountToVertexCount(XTL::X_D3DPRIMITIVETYPE XboxPrimitiveType, int IndexCount)
|
||||
|
|
Loading…
Reference in New Issue