From 94369e3ecf2ce997ed28cf71ad978227eb2939db Mon Sep 17 00:00:00 2001 From: Jan Date: Mon, 23 Dec 2019 23:46:37 +0100 Subject: [PATCH] ZoneCode: Add commands for GfxWorld --- src/ZoneCode/Game/T6/T6_Commands.txt | 174 +++++++++++++++++++++++++++ src/ZoneCommon/Game/T6/T6_Assets.h | 54 +++++---- 2 files changed, 206 insertions(+), 22 deletions(-) diff --git a/src/ZoneCode/Game/T6/T6_Commands.txt b/src/ZoneCode/Game/T6/T6_Commands.txt index 97c40819..9975678c 100644 --- a/src/ZoneCode/Game/T6/T6_Commands.txt +++ b/src/ZoneCode/Game/T6/T6_Commands.txt @@ -599,6 +599,180 @@ set reusable slabs; use GfxWorld; set string name; set name name; +set string baseName; +set string skyBoxModel; +set reusable sunLight; +set count coronas coronaCount; +set count shadowMapVolumes shadowMapVolumeCount; +set count shadowMapVolumePlanes shadowMapVolumePlaneCount; +set count exposureVolumes exposureVolumeCount; +set count exposureVolumePlanes exposureVolumePlaneCount; +set count worldFogVolumes worldFogVolumeCount; +set count worldFogVolumePlanes worldFogVolumePlaneCount; +set count worldFogModifierVolumes worldFogModifierVolumeCount; +set count worldFogModifierVolumePlanes worldFogModifierVolumePlaneCount; +set count lutVolumes lutVolumeCount; +set count lutVolumePlanes lutVolumePlaneCount; +set count cells dpvsPlanes::cellCount; +set count models modelCount; +set count materialMemory materialMemoryCount; +set block cellCasterBits XFILE_BLOCK_RUNTIME_VIRTUAL; +set count cellCasterBits dpvsPlanes::cellCount * ((dpvsPlanes::cellCount + 31) / 32); +set block sceneDynModel XFILE_BLOCK_RUNTIME_VIRTUAL; +set count sceneDynModel dpvsDyn::dynEntClientCount[0]; +set block sceneDynBrush XFILE_BLOCK_RUNTIME_VIRTUAL; +set count sceneDynBrush dpvsDyn::dynEntClientCount[1]; +set block primaryLightEntityShadowVis XFILE_BLOCK_RUNTIME_VIRTUAL; +set count primaryLightEntityShadowVis (primaryLightCount - sunPrimaryLightIndex - 1) * 0x2000; +set block primaryLightDynEntShadowVis XFILE_BLOCK_RUNTIME_VIRTUAL; +set count primaryLightDynEntShadowVis[0] dpvsDyn::dynEntClientCount[0] * (primaryLightCount - sunPrimaryLightIndex - 1); +set count primaryLightDynEntShadowVis[1] dpvsDyn::dynEntClientCount[1] * (primaryLightCount - sunPrimaryLightIndex - 1); +set count siegeSkinInsts numSiegeSkinInsts; +set count shadowGeom primaryLightCount; +set count lightRegion primaryLightCount; +set count occluders numOccluders; +set count outdoorBounds numOutdoorBounds; +set count heroLights heroLightCount; +set count heroLightTree heroLightTreeCount; + +// GfxWorldStreamInfo +use GfxWorldStreamInfo; +set count aabbTrees aabbTreeCount; +set count leafRefs leafRefCount; + +// GfxWorldDpvsPlanes +use GfxWorldDpvsPlanes; +set reusable planes; +set count planes GfxWorld::planeCount; +set count nodes GfxWorld::nodeCount; +set block sceneEntCellBits XFILE_BLOCK_RUNTIME_VIRTUAL; +set count sceneEntCellBits cellCount * 0x200; + +// GfxCell +use GfxCell; +set count aabbTree aabbTreeCount; +set count portals portalCount; +set count reflectionProbes reflectionProbeCount; + +// GfxAabbTree +use GfxAabbTree; +set reusable smodelIndexes; +set count smodelIndexes smodelIndexCount; + +// GfxPortal +use GfxPortal; +set reusable cell; +set count vertices vertexCount; + +// GfxWorldDraw +use GfxWorldDraw; +set count reflectionProbes reflectionProbeCount; +set block reflectionProbeTextures XFILE_BLOCK_RUNTIME_VIRTUAL; +set count reflectionProbeTextures reflectionProbeCount; +set count lightmaps lightmapCount; +set block lightmapPrimaryTextures XFILE_BLOCK_RUNTIME_VIRTUAL; +set count lightmapPrimaryTextures lightmapCount; +set block lightmapSecondaryTextures XFILE_BLOCK_RUNTIME_VIRTUAL; +set count lightmapSecondaryTextures lightmapCount; +set count indices indexCount; +set condition indexBuffer never; + +// GfxReflectionProbe +use GfxReflectionProbe; +set count probeVolumes probeVolumeCount; + +// GfxWorldVertexData0 +use GfxWorldVertexData0; +set count data GfxWorldDraw::vertexDataSize0; +set condition vb never; + +// GfxWorldVertexData1 +use GfxWorldVertexData1; +set count data GfxWorldDraw::vertexDataSize1; +set condition vb never; + +// GfxLightGrid +use GfxLightGrid; +set count rowDataStart maxs[rowAxis] - mins[rowAxis] + 1; +set count rawRowData rawRowDataSize; +set count entries entryCount; +set count colors colorCount; +set count coeffs coeffCount; +set count skyGridVolumes skyGridVolumeCount; + +// SSkinInstance +use SSkinInstance; +set reusable shaders; +set reusable model; +set reusable anim; +set count instVerts model::numVerts; + +// SSkinShaders +use SSkinShaders; +set count pixelShaderAlign pixelShaderSize; +set count pixelShader pixelShaderSize; +set count vertexShader vertexShaderSize; + +// SSkinModel +use SSkinModel; +set count verts numVerts; +set count tris numTris; + +// SSkinAnim +use SSkinAnim; +set count data 4 * width * frames; + +// GfxWorldDpvsStatic +use GfxWorldDpvsStatic; +set block smodelVisData XFILE_BLOCK_RUNTIME_VIRTUAL; +set count smodelVisData smodelVisDataCount; +set block surfaceVisData XFILE_BLOCK_RUNTIME_VIRTUAL; +set count surfaceVisData surfaceVisDataCount; +set block smodelVisDataCameraSaved XFILE_BLOCK_RUNTIME_VIRTUAL; +set count smodelVisDataCameraSaved smodelVisDataCount; +set block surfaceVisDataCameraSaved XFILE_BLOCK_RUNTIME_VIRTUAL; +set count surfaceVisDataCameraSaved surfaceVisDataCount; +set block surfaceCastsSunShadow XFILE_BLOCK_RUNTIME_VIRTUAL; +set count surfaceCastsSunShadow surfaceVisDataCount; +set block surfaceCastsShadow XFILE_BLOCK_RUNTIME_VIRTUAL; +set count surfaceCastsShadow surfaceVisDataCount; +set count smodelCastsShadow smodelVisDataCount; +set count sortedSurfIndex staticSurfaceCount; +set count smodelInsts smodelCount; +set count surfaces GfxWorld::surfaceCount; +set count smodelDrawInsts smodelCount; +set block surfaceMaterials XFILE_BLOCK_RUNTIME_VIRTUAL; +set count surfaceMaterials staticSurfaceCount; +reorder: + smodelVisData + surfaceVisData + smodelVisDataCameraSaved + surfaceVisDataCameraSaved + surfaceCastsSunShadow + surfaceCastsShadow + smodelCastsShadow + sortedSurfIndex + smodelInsts + surfaces + smodelDrawInsts + surfaceMaterials; + +// GfxWorldDpvsDynamic +use GfxWorldDpvsDynamic; +set block dynEntCellBits XFILE_BLOCK_RUNTIME_VIRTUAL; +set count dynEntCellBits[0] dynEntClientWordCount[0] * GfxWorld::dpvsPlanes::cellCount; +set count dynEntCellBits[1] dynEntClientWordCount[1] * GfxWorld::dpvsPlanes::cellCount; +set block dynEntVisData XFILE_BLOCK_RUNTIME_VIRTUAL; +set count dynEntVisData[0][0] dynEntClientWordCount[0]; +set count dynEntVisData[1][0] dynEntClientWordCount[1]; +set count dynEntVisData[0][1] dynEntClientWordCount[0]; +set count dynEntVisData[1][1] dynEntClientWordCount[1]; +set count dynEntVisData[0][2] dynEntClientWordCount[0]; +set count dynEntVisData[1][2] dynEntClientWordCount[1]; + +// GfxWaterBuffer +use GfxWaterBuffer; +set count buffer bufferSize / 16; // ========================================= // GfxLightDef diff --git a/src/ZoneCommon/Game/T6/T6_Assets.h b/src/ZoneCommon/Game/T6/T6_Assets.h index dda6a31d..1a2d24bd 100644 --- a/src/ZoneCommon/Game/T6/T6_Assets.h +++ b/src/ZoneCommon/Game/T6/T6_Assets.h @@ -8,8 +8,17 @@ namespace T6 { #endif - typedef __declspec(align(32)) char byte32; typedef __declspec(align(16)) char char16; + typedef __declspec(align(32)) char byte32; + typedef __declspec(align(128)) char byte128; + + typedef __declspec(align(4)) char char_align4; + typedef __declspec(align(128)) char char_align128; + + typedef __declspec(align(16)) char raw_byte16; + typedef __declspec(align(128)) char raw_byte128; + + typedef __declspec(align(128)) float float_align128; struct dvar_t; struct MenuCell; @@ -1081,14 +1090,14 @@ namespace T6 struct GfxWorldVertexData0 { - char* data; + byte128* data; ID3D11Buffer* vb; }; struct GfxWorldVertexData1 { - char* data; + byte128* data; ID3D11Buffer* vb; }; @@ -1112,6 +1121,7 @@ namespace T6 ID3D11Buffer* indexBuffer; }; + typedef __declspec(align(4)) char aligned_byte_pointer; struct GfxLightGrid { @@ -1123,7 +1133,7 @@ namespace T6 unsigned int colAxis; unsigned __int16* rowDataStart; unsigned int rawRowDataSize; - char* rawRowData; + aligned_byte_pointer* rawRowData; unsigned int entryCount; GfxLightGridEntry* entries; unsigned int colorCount; @@ -1162,6 +1172,7 @@ namespace T6 }; + struct GfxWorldDpvsStatic { unsigned int smodelCount; @@ -1176,18 +1187,18 @@ namespace T6 unsigned int emissiveTransSurfsEnd; unsigned int smodelVisDataCount; unsigned int surfaceVisDataCount; - char* smodelVisData[3]; - char* surfaceVisData[3]; - char* smodelVisDataCameraSaved; - char* surfaceVisDataCameraSaved; + raw_byte128* smodelVisData[3]; + raw_byte128* surfaceVisData[3]; + raw_byte128* smodelVisDataCameraSaved; + raw_byte128* surfaceVisDataCameraSaved; unsigned __int16* sortedSurfIndex; GfxStaticModelInst* smodelInsts; GfxSurface* surfaces; GfxStaticModelDrawInst* smodelDrawInsts; GfxDrawSurf* surfaceMaterials; - char* surfaceCastsSunShadow; - char* surfaceCastsShadow; - char* smodelCastsShadow; + raw_byte128* surfaceCastsSunShadow; + raw_byte128* surfaceCastsShadow; + raw_byte128* smodelCastsShadow; volatile int usageCount; }; @@ -1197,7 +1208,7 @@ namespace T6 unsigned int dynEntClientWordCount[2]; unsigned int dynEntClientCount[2]; unsigned int* dynEntCellBits[2]; - char* dynEntVisData[2][3]; + raw_byte16* dynEntVisData[2][3]; volatile int usageCount; }; @@ -3277,7 +3288,7 @@ namespace T6 }; - struct GfxStreamingAabbTree + struct __declspec(align(16)) GfxStreamingAabbTree { vec4_t mins; vec4_t maxs; @@ -3291,7 +3302,7 @@ namespace T6 }; - struct float44 + struct __declspec(align(16)) float44 { union { @@ -3301,7 +3312,7 @@ namespace T6 }; - struct GfxLight + struct __declspec(align(16)) GfxLight { char type; char canUseShadowMap; @@ -3326,7 +3337,6 @@ namespace T6 vec4_t cookieControl0; vec4_t cookieControl1; vec4_t cookieControl2; - /*__declspec(align(16))*/ float44 viewMatrix; float44 projMatrix; GfxLightDef* def; @@ -3572,7 +3582,7 @@ namespace T6 }; - struct SSkinInstance + struct __declspec(align(16)) SSkinInstance { union { @@ -3629,7 +3639,7 @@ namespace T6 }; - struct GfxSurface + struct __declspec(align(16)) GfxSurface { srfTriangles_t tris; Material* material; @@ -5533,9 +5543,9 @@ namespace T6 struct SSkinShaders { - char* pixelShaderAlign; - char* pixelShader; - char* vertexShader; + char_align128* pixelShaderAlign; + char_align4* pixelShader; + char_align128* vertexShader; int pixelShaderSize; int vertexShaderSize; }; @@ -5555,7 +5565,7 @@ namespace T6 int bones; int width; int frames; - float* data; + float_align128* data; };