add GnmCommandProxy

not used currently
This commit is contained in:
Asuka 2022-06-23 21:53:23 +08:00
parent f0a9c75637
commit 7c7bc81039
7 changed files with 12627 additions and 4 deletions

View file

@ -5,6 +5,7 @@
#include <string>
#include <vector>
namespace cxxopts
{
class ParseResult;

View file

@ -51,6 +51,7 @@
<ClInclude Include="Graphics\Gcn\GcnShaderRegister.h" />
<ClInclude Include="Graphics\Gcn\GcnStateRegister.h" />
<ClInclude Include="Graphics\Gcn\GcnUtil.h" />
<ClInclude Include="Graphics\Gnm\GnmCommandProxy.h" />
<ClInclude Include="Graphics\Gnm\GnmGpuLabel.h" />
<ClInclude Include="Graphics\Gnm\GnmInitializer.h" />
<ClInclude Include="Graphics\Gnm\GnmRenderState.h" />
@ -329,6 +330,8 @@
<ClCompile Include="Graphics\Gcn\GcnModule.cpp" />
<ClCompile Include="Graphics\Gcn\GcnProgramInfo.cpp" />
<ClCompile Include="Graphics\Gcn\GcnStateRegister.cpp" />
<ClCompile Include="Graphics\Gnm\GnmCommandProxy.cpp" />
<ClCompile Include="Graphics\Gnm\GnmCommandProxyTable.cpp" />
<ClCompile Include="Graphics\Gnm\GnmGpuLabel.cpp" />
<ClCompile Include="Graphics\Gnm\GnmInitializer.cpp" />
<ClCompile Include="Graphics\Gnm\GnmResourceFactory.cpp" />

View file

@ -967,6 +967,9 @@
<ClInclude Include="Graphics\Gcn\ControlFlowGraph\GcnDivergentFlow.h">
<Filter>Source Files\Graphics\Gcn\ControlFlowGraph</Filter>
</ClInclude>
<ClInclude Include="Graphics\Gnm\GnmCommandProxy.h">
<Filter>Source Files\Graphics\Gnm</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Loader\EbootObject.cpp">
@ -1698,6 +1701,12 @@
<ClCompile Include="Graphics\Gcn\ControlFlowGraph\GcnDivergentFlow.cpp">
<Filter>Source Files\Graphics\Gcn\ControlFlowGraph</Filter>
</ClCompile>
<ClCompile Include="Graphics\Gnm\GnmCommandProxy.cpp">
<Filter>Source Files\Graphics\Gnm</Filter>
</ClCompile>
<ClCompile Include="Graphics\Gnm\GnmCommandProxyTable.cpp">
<Filter>Source Files\Graphics\Gnm</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Text Include="Emulator\TLSStub.asm">

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,501 @@
#pragma once
#include "GnmCommon.h"
#include "GnmOpCode.h"
#include <array>
namespace sce::Gnm
{
class GnmCommandProxy
{
public:
enum PacketCount : uint32_t
{
kPacketCountSub_7FFC805A03D0 = 0,
kPacketCountPrepareFlip2 = 3,
kPacketCountSetVsharpInUserData = 2,
kPacketCountSetTsharpInUserData = 2,
kPacketCountSetSsharpInUserData = 2,
kPacketCountSetUserDataRegion = 2,
kPacketCountSetPointerInUserData = 1,
kPacketCountSetUserData = 1,
kPacketCountPrefetchIntoL2 = 0,
kPacketCountRequestVideoFlip = 2,
kPacketCountInitializeDefaultHardwareState = 0,
kPacketCountInitializeToDefaultContextState = 0,
kPacketCountInitializeToDefaultContextState2 = 0,
kPacketCountInitializeToDefaultContextState3 = 0,
kPacketCountSetupEsGsRingRegisters = 1,
kPacketCountSetupGsVsRingRegisters = 4,
kPacketCountFlushStreamout = 5,
kPacketCountSetStreamoutBufferDimensions = 1,
kPacketCountSetStreamoutMapping = 1,
kPacketCountWriteStreamoutBufferUpdate = 1,
kPacketCountSetComputeShaderControl = 1,
kPacketCountSetGraphicsShaderControl = 7,
kPacketCountSetGraphicsShaderControl2 = 1,
kPacketCountSetGraphicsShaderControl3 = 1,
kPacketCountSetGraphicsShaderControl4 = 1,
kPacketCountSetGraphicsShaderControl5 = 1,
kPacketCountSetGraphicsShaderControl6 = 1,
kPacketCountSetGraphicsShaderControl7 = 1,
kPacketCountSetComputeResourceManagement = 2,
kPacketCountSetComputeResourceManagement2 = 2,
kPacketCountSetComputeResourceManagementForNeo = 1,
kPacketCountSetComputeResourceManagementForBase = 1,
kPacketCountSetGraphicsScratchSize = 1,
kPacketCountSetComputeScratchSize = 1,
kPacketCountSetViewportTransformControl = 1,
kPacketCountSetClipControl = 1,
kPacketCountSetUserClipPlane = 1,
kPacketCountSetClipRectangle = 1,
kPacketCountSetClipRectangleRule = 1,
kPacketCountSetPrimitiveSetup = 1,
kPacketCountSetPrimitiveResetIndexEnable = 1,
kPacketCountSetPrimitiveResetIndex = 1,
kPacketCountSetVertexQuantization = 1,
kPacketCountSetWindowOffset = 1,
kPacketCountSetScreenScissor = 1,
kPacketCountSetWindowScissor = 1,
kPacketCountSetGenericScissor = 1,
kPacketCountSetViewportScissor = 1,
kPacketCountSetViewport = 2,
kPacketCountSetScanModeControl = 1,
kPacketCountSetAaSampleCount = 1,
kPacketCountSetAaSampleLocationControl = 2,
kPacketCountSetPsShaderRate = 1,
kPacketCountSetAaSampleMask = 2,
kPacketCountSetAaSampleLocations = 1,
kPacketCountSetCentroidPriority = 1,
kPacketCountSetLineWidth = 1,
kPacketCountSetPointSize = 1,
kPacketCountSetPointMinMax = 1,
kPacketCountSetPolygonOffsetClamp = 1,
kPacketCountSetPolygonOffsetZFormat = 1,
kPacketCountSetPolygonOffsetFront = 1,
kPacketCountSetPolygonOffsetBack = 1,
kPacketCountSetHardwareScreenOffset = 1,
kPacketCountSetGuardBandClip = 2,
kPacketCountSetGuardBandDiscard = 2,
kPacketCountSetInstanceStepRate = 1,
kPacketCountSetPsShaderUsage = 1,
kPacketCountSetRenderOverrideControl = 1,
kPacketCountSetRenderOverride2Control = 1,
kPacketCountSetActiveShaderStages = 1,
kPacketCountSetGsMode = 1,
kPacketCountSetGsOnChipControl = 1,
kPacketCountSetBorderColorTableAddr = 1,
kPacketCountSetPsShader = 3,
kPacketCountSetPsShader2 = 4,
kPacketCountSetPsShader3 = 9,
kPacketCountSetVsShader = 6,
kPacketCountSetEsShader = 3,
kPacketCountSetGsShader = 6,
kPacketCountSetCsShader = 4,
kPacketCountSetLsShader = 4,
kPacketCountSetHsShader = 6,
kPacketCountUpdatePsShader = 9,
kPacketCountUpdateVsShader = 6,
kPacketCountUpdateGsShader = 6,
kPacketCountUpdateHsShader = 6,
kPacketCountWaitOnCe = 1,
kPacketCountIncrementDeCounter = 1,
kPacketCountReadDataFromGds = 1,
kPacketCountSetRenderTarget = 3,
kPacketCountSetRenderTarget2 = 2,
kPacketCountSetRenderTarget3 = 2,
kPacketCountSetRenderTarget4 = 1,
kPacketCountSetDepthRenderTarget = 6,
kPacketCountSetDepthRenderTarget2 = 2,
kPacketCountSetDepthClearValue = 1,
kPacketCountSetStencilClearValue = 1,
kPacketCountSetCmaskClearColor = 1,
kPacketCountSetRenderTargetMask = 1,
kPacketCountSetBlendControl = 1,
kPacketCountSetBlendColor = 1,
kPacketCountSetStencilSeparate = 0,
kPacketCountSetAlphaToMaskControl = 1,
kPacketCountSetHtileStencil0 = 1,
kPacketCountSetHtileStencil1 = 1,
kPacketCountSetCbControl = 1,
kPacketCountSetDepthStencilDisable = 0,
kPacketCountSetDepthBoundsRange = 1,
kPacketCountSetStencilOpControl = 1,
kPacketCountSetDbRenderControl = 1,
kPacketCountSetDbCountControl = 1,
kPacketCountSetDepthEqaaControl = 1,
kPacketCountSetPrimitiveIdEnable = 1,
kPacketCountSetVgtControlForBase = 1,
kPacketCountSetVgtControlForNeo = 1,
kPacketCountSetVgtControlForNeo2 = 1,
kPacketCountSetVertexReuseEnable = 1,
kPacketCountSetPrimitiveType = 1,
kPacketCountSetIndexSize = 1,
kPacketCountSetNumInstances = 1,
kPacketCountSetIndexOffset = 1,
kPacketCountSetIndexOffset2 = 1,
kPacketCountDrawOpaqueAuto = 0,
kPacketCountDrawIndexAuto = 0,
kPacketCountDrawIndexInline = 0,
kPacketCountDrawIndexInline2 = 0,
kPacketCountDrawIndex = 0,
kPacketCountSetIndexBuffer = 1,
kPacketCountSetIndexCount = 1,
kPacketCountDrawIndexOffset = 0,
kPacketCountSetBaseIndirectArgs = 1,
kPacketCountDrawIndirect = 0,
kPacketCountDrawIndirectMulti = 0,
kPacketCountDrawIndirectCountMulti = 0,
kPacketCountDrawIndexIndirect = 0,
kPacketCountDrawIndexIndirectMulti = 0,
kPacketCountDrawIndexIndirectCountMulti = 0,
kPacketCountSetDispatchDrawIndexDeallocationMask = 1,
kPacketCountWaitForSetupDispatchDrawKickRingBuffer = 1,
kPacketCountDispatchDraw = 0,
kPacketCountDispatchWithOrderedAppend = 0,
kPacketCountDispatchIndirectWithOrderedAppend = 0,
kPacketCountDrawIndexMultiInstanced = 0,
kPacketCountWriteOcclusionQuery = 4,
kPacketCountWriteOcclusionQuery2 = 2,
kPacketCountSetZPassPredicationEnable = 1,
kPacketCountSetZPassPredicationDisable = 1,
kPacketCountWriteDataInline = 1,
kPacketCountWriteDataInlineThroughL2 = 1,
kPacketCountWriteAtEndOfPipe = 1,
kPacketCountWriteAtEndOfPipeWithInterrupt = 1,
kPacketCountTriggerEndOfPipeInterrupt = 1,
kPacketCountWriteAtEndOfShader = 1,
kPacketCountStallCommandBufferParser = 1,
kPacketCountWaitOnAddressAndStallCommandBufferParser = 1,
kPacketCountWaitOnRegister = 1,
kPacketCountFlushShaderCachesAndWait = 1,
kPacketCountSignalSemaphore = 1,
kPacketCountWaitSemaphore = 1,
kPacketCountWriteEventStats = 1,
kPacketCountDmaData = 1,
kPacketCountDisableOrderedAppendAllocationCounter = 0,
kPacketCountEnableOrderedAppendAllocationCounter = 0,
kPacketCountSetVsShaderStreamoutEnable = 1,
kPacketCountSetupDrawOpaqueParameters = 3,
kPacketCountRequestMipStatsReportAndReset = 1,
kPacketCountSetGuardBands = 1,
kPacketCountSetPredication = 1,
kPacketCountPrepareFlip = 7,
kPacketCountSetObjectId = 1,
kPacketCountSetObjectIdMode = 1,
kPacketCountSetDrawPayloadControl = 1,
kPacketCountResetFoveatedWindow = 1,
kPacketCountSetFoveatedWindow = 1,
kPacketCountSetPsShaderSampleExclusionMask = 1,
kPacketCountSetScaledResolutionGrid = 1,
kPacketCountSetTessellationDistributionThresholds = 1,
kPacketCountSetTextureGradientFactors = 1,
kPacketCountSetVgtNumInstances = 1,
kPacketCountRttvThreadTraceMarker = 2,
kPacketCountRttvThreadTraceMarker2 = 1,
kPacketCountSetContextRegisterWithIndex = 1,
kPacketCountSetContextRegister = 1,
kPacketCountSetConfigRegister = 1,
kPacketCountSetUserConfigRegisterWithIndex = 1,
kPacketCountSetUserConfigRegister = 1,
kPacketCountSetPersistentRegister = 1,
kPacketCountSetContextRegisterRange = 1,
kPacketCountSetConfigRegisterRange = 1,
kPacketCountSetUserConfigRegisterRange = 1,
kPacketCountSetPersistentRegisterRange = 1,
kPacketCountChainCommandBuffer = 1,
kPacketCountPause = 1,
kPacketCountTriggerEvent = 1,
kPacketCountWaitOnAddress = 1,
kPacketCountWaitForGraphicsWrites = 1,
kPacketCountInsertNop = 1,
kPacketCountInsertNop2 = 1,
kPacketCountIncrementCeCounter = 1,
kPacketCountIncrementCeCounterForDispatchDraw = 1,
kPacketCountWaitOnDeCounterDiff = 1,
kPacketCountWriteToCpRam = 1,
kPacketCountCpRamDump = 1,
kPacketCountChainCommandBuffer2 = 1,
kPacketCountCallCommandBuffer = 1,
kPacketCountInitializeDefaultHardwareState2 = 0,
kPacketCountSetQueuePriority = 1,
kPacketCountDispatchIndirectWithOrderedAppend2 = 0,
kPacketCountSub_7FFC805A03E0 = 0,
kPacketCountSetVsharpInUserData2 = 2,
kPacketCountSetTsharpInUserData2 = 2,
kPacketCountSetSsharpInUserData2 = 2,
kPacketCountSetUserDataRegion2 = 2,
kPacketCountSetPointerInUserData2 = 1,
kPacketCountSetUserData2 = 1,
kPacketCountPrefetchIntoL22 = 0,
kPacketCountReadDataFromGds2 = 1,
kPacketCountWaitOnAddress2 = 3,
kPacketCountDispatchDraw2 = 0,
kPacketCountFlushShaderCachesAndWait2 = 1,
kPacketCountEnableOrderedAppendAllocationCounter2 = 0,
kPacketCountSetupDispatchDrawKickRingBuffer = 2,
kPacketCountSetScratchSize = 1,
kPacketCountTriggerReleaseMemEventInterrupt = 1,
kPacketCountWaitForResume = 0,
kPacketCountWriteResume = 1,
kPacketCountEnableQueueQuantumTimer = 1,
kPacketCountDisableQueueQuantumTimer = 1,
kPacketCountInsertRttvDingDongMarker = 6,
kPacketCountRttvThreadTraceMarker3 = 1,
kPacketCountSetQueueRegister = 1,
kPacketCountCallCommandBuffer2 = 1,
kPacketCountWaitForGraphicsWrites2 = 1,
kPacketCountWriteResumeEventWithInterrupt = 1,
kPacketCountWriteWaitMemCmd = 1,
};
public:
GnmCommandProxy();
~GnmCommandProxy();
private:
uint32_t sub_7FFC805A03D0(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t prepareFlip2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVsharpInUserData(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setTsharpInUserData(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setSsharpInUserData(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setUserDataRegion(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPointerInUserData(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setUserData(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t prefetchIntoL2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t requestVideoFlip(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t initializeDefaultHardwareState(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t initializeToDefaultContextState(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t initializeToDefaultContextState2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t initializeToDefaultContextState3(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setupEsGsRingRegisters(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setupGsVsRingRegisters(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t flushStreamout(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setStreamoutBufferDimensions(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setStreamoutMapping(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeStreamoutBufferUpdate(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setComputeShaderControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGraphicsShaderControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGraphicsShaderControl2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGraphicsShaderControl3(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGraphicsShaderControl4(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGraphicsShaderControl5(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGraphicsShaderControl6(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGraphicsShaderControl7(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setComputeResourceManagement(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setComputeResourceManagement2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setComputeResourceManagementForNeo(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setComputeResourceManagementForBase(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGraphicsScratchSize(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setComputeScratchSize(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setViewportTransformControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setClipControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setUserClipPlane(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setClipRectangle(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setClipRectangleRule(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPrimitiveSetup(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPrimitiveResetIndexEnable(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPrimitiveResetIndex(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVertexQuantization(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setWindowOffset(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setScreenScissor(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setWindowScissor(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGenericScissor(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setViewportScissor(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setViewport(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setScanModeControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setAaSampleCount(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setAaSampleLocationControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPsShaderRate(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setAaSampleMask(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setAaSampleLocations(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setCentroidPriority(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setLineWidth(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPointSize(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPointMinMax(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPolygonOffsetClamp(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPolygonOffsetZFormat(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPolygonOffsetFront(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPolygonOffsetBack(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setHardwareScreenOffset(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGuardBandClip(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGuardBandDiscard(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setInstanceStepRate(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPsShaderUsage(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setRenderOverrideControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setRenderOverride2Control(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setActiveShaderStages(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGsMode(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGsOnChipControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setBorderColorTableAddr(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPsShader2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPsShader3(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setEsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setCsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setLsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setHsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t updatePsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t updateVsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t updateGsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t updateHsShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitOnCe(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t incrementDeCounter(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t readDataFromGds(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setRenderTarget(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setRenderTarget2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setRenderTarget3(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setRenderTarget4(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDepthRenderTarget(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDepthRenderTarget2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDepthClearValue(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setStencilClearValue(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setCmaskClearColor(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setRenderTargetMask(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setBlendControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setBlendColor(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setStencilSeparate(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setAlphaToMaskControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setHtileStencil0(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setHtileStencil1(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setCbControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDepthStencilDisable(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDepthBoundsRange(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setStencilOpControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDbRenderControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDbCountControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDepthEqaaControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPrimitiveIdEnable(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVgtControlForBase(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVgtControlForNeo(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVgtControlForNeo2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVertexReuseEnable(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPrimitiveType(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setIndexSize(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setNumInstances(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setIndexOffset(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setIndexOffset2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawOpaqueAuto(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndexAuto(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndexInline(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndexInline2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndex(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setIndexBuffer(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setIndexCount(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndexOffset(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setBaseIndirectArgs(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndirect(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndirectMulti(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndirectCountMulti(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndexIndirect(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndexIndirectMulti(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndexIndirectCountMulti(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDispatchDrawIndexDeallocationMask(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitForSetupDispatchDrawKickRingBuffer(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t dispatchDraw(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t dispatchWithOrderedAppend(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t dispatchIndirectWithOrderedAppend(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t drawIndexMultiInstanced(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeOcclusionQuery(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeOcclusionQuery2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setZPassPredicationEnable(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setZPassPredicationDisable(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeDataInline(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeDataInlineThroughL2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeAtEndOfPipe(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeAtEndOfPipeWithInterrupt(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t triggerEndOfPipeInterrupt(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeAtEndOfShader(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t stallCommandBufferParser(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitOnAddressAndStallCommandBufferParser(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitOnRegister(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t flushShaderCachesAndWait(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t signalSemaphore(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitSemaphore(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeEventStats(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t dmaData(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t disableOrderedAppendAllocationCounter(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t enableOrderedAppendAllocationCounter(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVsShaderStreamoutEnable(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setupDrawOpaqueParameters(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t requestMipStatsReportAndReset(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setGuardBands(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPredication(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t prepareFlip(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setObjectId(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setObjectIdMode(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setDrawPayloadControl(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t resetFoveatedWindow(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setFoveatedWindow(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPsShaderSampleExclusionMask(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setScaledResolutionGrid(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setTessellationDistributionThresholds(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setTextureGradientFactors(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVgtNumInstances(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t RttvThreadTraceMarker(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t RttvThreadTraceMarker2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setContextRegisterWithIndex(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setContextRegister(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setConfigRegister(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setUserConfigRegisterWithIndex(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setUserConfigRegister(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPersistentRegister(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setContextRegisterRange(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setConfigRegisterRange(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setUserConfigRegisterRange(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPersistentRegisterRange(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t chainCommandBuffer(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t pause(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t triggerEvent(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitOnAddress(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitForGraphicsWrites(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t insertNop(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t insertNop2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t incrementCeCounter(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t incrementCeCounterForDispatchDraw(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitOnDeCounterDiff(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeToCpRam(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t cpRamDump(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t chainCommandBuffer2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t callCommandBuffer(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t initializeDefaultHardwareState2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setQueuePriority(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t dispatchIndirectWithOrderedAppend2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t sub_7FFC805A03E0(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setVsharpInUserData2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setTsharpInUserData2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setSsharpInUserData2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setUserDataRegion2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setPointerInUserData2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setUserData2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t prefetchIntoL22(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t readDataFromGds2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitOnAddress2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t dispatchDraw2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t flushShaderCachesAndWait2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t enableOrderedAppendAllocationCounter2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setupDispatchDrawKickRingBuffer(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setScratchSize(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t triggerReleaseMemEventInterrupt(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitForResume(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeResume(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t enableQueueQuantumTimer(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t disableQueueQuantumTimer(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t insertRttvDingDongMarker(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t RttvThreadTraceMarker3(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t setQueueRegister(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t callCommandBuffer2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t waitForGraphicsWrites2(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeResumeEventWithInterrupt(PPM4_TYPE_3_HEADER pm4Hdr);
uint32_t writeWaitMemCmd(PPM4_TYPE_3_HEADER pm4Hdr);
private:
using ProxyFunction = uint32_t (GnmCommandProxy::*)(PPM4_TYPE_3_HEADER);
static const std::array<
const std::array<ProxyFunction, 88>, 259> m_proxyTable;
};
} // namespace sce::Gnm

View file

@ -0,0 +1,913 @@
#include "GnmCommandProxy.h"
namespace sce::Gnm
{
const std::array<const std::array<GnmCommandProxy::ProxyFunction, 88>, 259> GnmCommandProxy::m_proxyTable = { {
// IT_UNKNOWN_0
{ nullptr },
// IT_UNKNOWN_1
{ nullptr },
// IT_UNKNOWN_2
{ nullptr },
// IT_UNKNOWN_3
{ nullptr },
// IT_UNKNOWN_4
{ nullptr },
// IT_UNKNOWN_5
{ nullptr },
// IT_UNKNOWN_6
{ nullptr },
// IT_UNKNOWN_7
{ nullptr },
// IT_UNKNOWN_8
{ nullptr },
// IT_UNKNOWN_9
{ nullptr },
// IT_UNKNOWN_A
{ nullptr },
// IT_UNKNOWN_B
{ nullptr },
// IT_UNKNOWN_C
{ nullptr },
// IT_UNKNOWN_D
{ nullptr },
// IT_UNKNOWN_E
{ nullptr },
// IT_UNKNOWN_F
{ nullptr },
// IT_NOP
{
&GnmCommandProxy::sub_7FFC805A03D0,
&GnmCommandProxy::setVsharpInUserData,
&GnmCommandProxy::setTsharpInUserData,
&GnmCommandProxy::setSsharpInUserData,
&GnmCommandProxy::setUserDataRegion,
&GnmCommandProxy::insertNop,
&GnmCommandProxy::sub_7FFC805A03E0,
&GnmCommandProxy::setVsharpInUserData2,
&GnmCommandProxy::setTsharpInUserData2,
&GnmCommandProxy::setSsharpInUserData2,
&GnmCommandProxy::setUserDataRegion2,
nullptr,
},
// IT_SET_BASE
{
&GnmCommandProxy::setBaseIndirectArgs,
nullptr,
},
// IT_CLEAR_STATE
{ nullptr },
// IT_INDEX_BUFFER_SIZE
{
&GnmCommandProxy::setIndexCount,
nullptr,
},
// IT_UNKNOWN_14
{ nullptr },
// IT_DISPATCH_DIRECT
{
&GnmCommandProxy::dispatchWithOrderedAppend,
nullptr,
},
// IT_DISPATCH_INDIRECT
{
&GnmCommandProxy::dispatchIndirectWithOrderedAppend,
&GnmCommandProxy::dispatchIndirectWithOrderedAppend2,
nullptr,
},
// IT_INDIRECT_BUFFER_END
{ nullptr },
// IT_UNKNOWN_18
{ nullptr },
// IT_INDIRECT_BUFFER_CNST_END
{ nullptr },
// IT_UNKNOWN_1A
{ nullptr },
// IT_UNKNOWN_1B
{ nullptr },
// IT_UNKNOWN_1C
{ nullptr },
// IT_ATOMIC_GDS
{ nullptr },
// IT_ATOMIC_MEM
{ nullptr },
// IT_OCCLUSION_QUERY
{ nullptr },
// IT_SET_PREDICATION
{
&GnmCommandProxy::setZPassPredicationEnable,
&GnmCommandProxy::setZPassPredicationDisable,
nullptr,
},
// IT_REG_RMW
{ nullptr },
// IT_COND_EXEC
{
&GnmCommandProxy::setPredication,
nullptr,
},
// IT_PRED_EXEC
{ nullptr },
// IT_DRAW_INDIRECT
{
&GnmCommandProxy::drawIndirect,
nullptr,
},
// IT_DRAW_INDEX_INDIRECT
{
&GnmCommandProxy::drawIndexIndirect,
nullptr,
},
// IT_INDEX_BASE
{
&GnmCommandProxy::setIndexBuffer,
nullptr,
},
// IT_DRAW_INDEX_2
{
&GnmCommandProxy::drawIndexInline2,
&GnmCommandProxy::drawIndex,
nullptr,
},
// IT_CONTEXT_CONTROL
{
&GnmCommandProxy::initializeDefaultHardwareState,
&GnmCommandProxy::initializeToDefaultContextState,
&GnmCommandProxy::initializeToDefaultContextState2,
&GnmCommandProxy::initializeToDefaultContextState3,
nullptr,
},
// IT_UNKNOWN_29
{ nullptr },
// IT_INDEX_TYPE
{
&GnmCommandProxy::setIndexSize,
nullptr,
},
// IT_UNKNOWN_2B
{ nullptr },
// IT_DRAW_INDIRECT_MULTI
{
&GnmCommandProxy::drawIndirectMulti,
nullptr,
},
// IT_DRAW_INDEX_AUTO
{
&GnmCommandProxy::drawOpaqueAuto,
&GnmCommandProxy::drawIndexAuto,
nullptr,
},
// IT_UNKNOWN_2E
{
&GnmCommandProxy::drawIndexInline,
nullptr,
},
// IT_NUM_INSTANCES
{
&GnmCommandProxy::setNumInstances,
nullptr,
},
// IT_DRAW_INDEX_MULTI_AUTO
{ nullptr },
// IT_UNKNOWN_31
{ nullptr },
// IT_INDIRECT_BUFFER_PRIV
{ nullptr },
// IT_INDIRECT_BUFFER_CNST
{
&GnmCommandProxy::chainCommandBuffer2,
&GnmCommandProxy::callCommandBuffer,
nullptr,
},
// IT_STRMOUT_BUFFER_UPDATE
{
&GnmCommandProxy::writeStreamoutBufferUpdate,
nullptr,
},
// IT_DRAW_INDEX_OFFSET_2
{
&GnmCommandProxy::drawIndexOffset,
nullptr,
},
// IT_DRAW_PREAMBLE
{ nullptr },
// IT_WRITE_DATA
{
&GnmCommandProxy::prepareFlip2,
&GnmCommandProxy::requestVideoFlip,
&GnmCommandProxy::writeDataInline,
&GnmCommandProxy::writeDataInlineThroughL2,
&GnmCommandProxy::writeResume,
nullptr,
},
// IT_DRAW_INDEX_INDIRECT_MULTI
{
&GnmCommandProxy::drawIndexIndirectMulti,
nullptr,
},
// IT_MEM_SEMAPHORE
{
&GnmCommandProxy::signalSemaphore,
&GnmCommandProxy::waitSemaphore,
nullptr,
},
// IT_DRAW_INDEX_MULTI_INST
{
&GnmCommandProxy::drawIndexMultiInstanced,
nullptr,
},
// IT_COPY_DW
{ nullptr },
// IT_WAIT_REG_MEM
{
&GnmCommandProxy::waitOnAddressAndStallCommandBufferParser,
&GnmCommandProxy::waitOnRegister,
&GnmCommandProxy::waitOnAddress,
&GnmCommandProxy::waitForResume,
&GnmCommandProxy::writeWaitMemCmd,
nullptr,
},
// IT_UNKNOWN_3D
{ nullptr },
// IT_UNKNOWN_3E
{ nullptr },
// IT_INDIRECT_BUFFER
{
&GnmCommandProxy::prepareFlip,
&GnmCommandProxy::chainCommandBuffer,
&GnmCommandProxy::callCommandBuffer2,
nullptr,
},
// IT_COPY_DATA
{ nullptr },
// IT_CP_DMA
{ nullptr },
// IT_PFP_SYNC_ME
{
&GnmCommandProxy::stallCommandBufferParser,
nullptr,
},
// IT_SURFACE_SYNC
{ nullptr },
// IT_ME_INITIALIZE
{ nullptr },
// IT_COND_WRITE
{ nullptr },
// IT_EVENT_WRITE
{
&GnmCommandProxy::flushStreamout,
&GnmCommandProxy::writeOcclusionQuery2,
&GnmCommandProxy::writeEventStats,
&GnmCommandProxy::RttvThreadTraceMarker,
&GnmCommandProxy::RttvThreadTraceMarker2,
&GnmCommandProxy::triggerEvent,
nullptr,
},
// IT_EVENT_WRITE_EOP
{
&GnmCommandProxy::writeAtEndOfPipe,
&GnmCommandProxy::writeAtEndOfPipeWithInterrupt,
&GnmCommandProxy::triggerEndOfPipeInterrupt,
nullptr,
},
// IT_EVENT_WRITE_EOS
{
&GnmCommandProxy::readDataFromGds,
&GnmCommandProxy::writeAtEndOfShader,
nullptr,
},
// IT_RELEASE_MEM
{
&GnmCommandProxy::readDataFromGds2,
&GnmCommandProxy::triggerReleaseMemEventInterrupt,
&GnmCommandProxy::writeResumeEventWithInterrupt,
nullptr,
},
// IT_PREAMBLE_CNTL
{ nullptr },
// IT_UNKNOWN_4B
{ nullptr },
// IT_DRAW_RESERVED0
{ nullptr },
// IT_DRAW_RESERVED1
{ nullptr },
// IT_DRAW_RESERVED2
{ nullptr },
// IT_DRAW_RESERVED3
{ nullptr },
// IT_DMA_DATA
{
&GnmCommandProxy::prefetchIntoL2,
&GnmCommandProxy::writeOcclusionQuery,
&GnmCommandProxy::dmaData,
&GnmCommandProxy::prefetchIntoL22,
nullptr,
},
// IT_CONTEXT_REG_RMW
{ nullptr },
// IT_GFX_CNTX_UPDATE
{ nullptr },
// IT_BLK_CNTX_UPDATE
{ nullptr },
// IT_UNKNOWN_54
{ nullptr },
// IT_INCR_UPDT_STATE
{ nullptr },
// IT_UNKNOWN_56
{ nullptr },
// IT_UNKNOWN_57
{ nullptr },
// IT_ACQUIRE_MEM
{
&GnmCommandProxy::flushShaderCachesAndWait,
&GnmCommandProxy::waitForGraphicsWrites,
&GnmCommandProxy::flushShaderCachesAndWait2,
&GnmCommandProxy::waitForGraphicsWrites2,
nullptr,
},
// IT_REWIND
{
&GnmCommandProxy::pause,
nullptr,
},
// IT_INTERRUPT
{ nullptr },
// IT_GEN_PDEPTE
{ nullptr },
// IT_INDIRECT_BUFFER_PASID
{ nullptr },
// IT_PRIME_UTCL2
{ nullptr },
// IT_LOAD_UCONFIG_REG
{ nullptr },
// IT_LOAD_SH_REG
{ nullptr },
// IT_LOAD_CONFIG_REG
{ nullptr },
// IT_LOAD_CONTEXT_REG
{ nullptr },
// IT_LOAD_COMPUTE_STATE
{ nullptr },
// IT_LOAD_SH_REG_INDEX
{ nullptr },
// IT_UNKNOWN_64
{ nullptr },
// IT_UNKNOWN_65
{ nullptr },
// IT_UNKNOWN_66
{ nullptr },
// IT_UNKNOWN_67
{ nullptr },
// IT_SET_CONFIG_REG
{
&GnmCommandProxy::setIndexOffset2,
&GnmCommandProxy::setConfigRegister,
&GnmCommandProxy::setConfigRegisterRange,
nullptr,
},
// IT_SET_CONTEXT_REG
{
&GnmCommandProxy::setupEsGsRingRegisters,
&GnmCommandProxy::setupGsVsRingRegisters,
&GnmCommandProxy::setStreamoutBufferDimensions,
&GnmCommandProxy::setStreamoutMapping,
&GnmCommandProxy::setGraphicsScratchSize,
&GnmCommandProxy::setViewportTransformControl,
&GnmCommandProxy::setClipControl,
&GnmCommandProxy::setUserClipPlane,
&GnmCommandProxy::setClipRectangle,
&GnmCommandProxy::setClipRectangleRule,
&GnmCommandProxy::setPrimitiveSetup,
&GnmCommandProxy::setPrimitiveResetIndexEnable,
&GnmCommandProxy::setPrimitiveResetIndex,
&GnmCommandProxy::setVertexQuantization,
&GnmCommandProxy::setWindowOffset,
&GnmCommandProxy::setScreenScissor,
&GnmCommandProxy::setWindowScissor,
&GnmCommandProxy::setGenericScissor,
&GnmCommandProxy::setViewportScissor,
&GnmCommandProxy::setViewport,
&GnmCommandProxy::setScanModeControl,
&GnmCommandProxy::setAaSampleCount,
&GnmCommandProxy::setAaSampleLocationControl,
&GnmCommandProxy::setPsShaderRate,
&GnmCommandProxy::setAaSampleMask,
&GnmCommandProxy::setAaSampleLocations,
&GnmCommandProxy::setCentroidPriority,
&GnmCommandProxy::setLineWidth,
&GnmCommandProxy::setPointSize,
&GnmCommandProxy::setPointMinMax,
&GnmCommandProxy::setPolygonOffsetClamp,
&GnmCommandProxy::setPolygonOffsetZFormat,
&GnmCommandProxy::setPolygonOffsetFront,
&GnmCommandProxy::setPolygonOffsetBack,
&GnmCommandProxy::setHardwareScreenOffset,
&GnmCommandProxy::setGuardBandClip,
&GnmCommandProxy::setGuardBandDiscard,
&GnmCommandProxy::setInstanceStepRate,
&GnmCommandProxy::setPsShaderUsage,
&GnmCommandProxy::setRenderOverrideControl,
&GnmCommandProxy::setRenderOverride2Control,
&GnmCommandProxy::setActiveShaderStages,
&GnmCommandProxy::setGsMode,
&GnmCommandProxy::setGsOnChipControl,
&GnmCommandProxy::setBorderColorTableAddr,
&GnmCommandProxy::setRenderTarget,
&GnmCommandProxy::setRenderTarget2,
&GnmCommandProxy::setRenderTarget3,
&GnmCommandProxy::setRenderTarget4,
&GnmCommandProxy::setDepthRenderTarget,
&GnmCommandProxy::setDepthRenderTarget2,
&GnmCommandProxy::setDepthClearValue,
&GnmCommandProxy::setStencilClearValue,
&GnmCommandProxy::setCmaskClearColor,
&GnmCommandProxy::setRenderTargetMask,
&GnmCommandProxy::setBlendControl,
&GnmCommandProxy::setBlendColor,
&GnmCommandProxy::setStencilSeparate,
&GnmCommandProxy::setAlphaToMaskControl,
&GnmCommandProxy::setHtileStencil0,
&GnmCommandProxy::setHtileStencil1,
&GnmCommandProxy::setCbControl,
&GnmCommandProxy::setDepthStencilDisable,
&GnmCommandProxy::setDepthBoundsRange,
&GnmCommandProxy::setStencilOpControl,
&GnmCommandProxy::setDbRenderControl,
&GnmCommandProxy::setDbCountControl,
&GnmCommandProxy::setDepthEqaaControl,
&GnmCommandProxy::setPrimitiveIdEnable,
&GnmCommandProxy::setVgtControlForBase,
&GnmCommandProxy::setVgtControlForNeo,
&GnmCommandProxy::setVertexReuseEnable,
&GnmCommandProxy::setIndexOffset,
&GnmCommandProxy::setDispatchDrawIndexDeallocationMask,
&GnmCommandProxy::setVsShaderStreamoutEnable,
&GnmCommandProxy::setupDrawOpaqueParameters,
&GnmCommandProxy::setGuardBands,
&GnmCommandProxy::setObjectIdMode,
&GnmCommandProxy::setDrawPayloadControl,
&GnmCommandProxy::resetFoveatedWindow,
&GnmCommandProxy::setFoveatedWindow,
&GnmCommandProxy::setPsShaderSampleExclusionMask,
&GnmCommandProxy::setScaledResolutionGrid,
&GnmCommandProxy::setTessellationDistributionThresholds,
&GnmCommandProxy::setContextRegisterWithIndex,
&GnmCommandProxy::setContextRegister,
&GnmCommandProxy::setContextRegisterRange,
nullptr,
},
// IT_SET_CONTEXT_REG_INDEX
{ nullptr },
// IT_UNKNOWN_6B
{ nullptr },
// IT_UNKNOWN_6C
{ nullptr },
// IT_UNKNOWN_6D
{ nullptr },
// IT_UNKNOWN_6E
{ nullptr },
// IT_UNKNOWN_6F
{ nullptr },
// IT_UNKNOWN_70
{ nullptr },
// IT_SET_VGPR_REG_DI_MULTI
{ nullptr },
// IT_SET_SH_REG_DI
{ nullptr },
// IT_SET_CONTEXT_REG_INDIRECT
{ nullptr },
// IT_SET_SH_REG_DI_MULTI
{ nullptr },
// IT_GFX_PIPE_LOCK
{ nullptr },
// IT_SET_SH_REG
{
&GnmCommandProxy::setPointerInUserData,
&GnmCommandProxy::setUserData,
&GnmCommandProxy::setComputeShaderControl,
&GnmCommandProxy::setGraphicsShaderControl,
&GnmCommandProxy::setGraphicsShaderControl2,
&GnmCommandProxy::setGraphicsShaderControl3,
&GnmCommandProxy::setGraphicsShaderControl4,
&GnmCommandProxy::setGraphicsShaderControl5,
&GnmCommandProxy::setGraphicsShaderControl6,
&GnmCommandProxy::setGraphicsShaderControl7,
&GnmCommandProxy::setComputeResourceManagement,
&GnmCommandProxy::setComputeResourceManagement2,
&GnmCommandProxy::setComputeResourceManagementForNeo,
&GnmCommandProxy::setComputeResourceManagementForBase,
&GnmCommandProxy::setComputeScratchSize,
&GnmCommandProxy::setPsShader,
&GnmCommandProxy::setPsShader2,
&GnmCommandProxy::setPsShader3,
&GnmCommandProxy::setVsShader,
&GnmCommandProxy::setEsShader,
&GnmCommandProxy::setGsShader,
&GnmCommandProxy::setCsShader,
&GnmCommandProxy::setLsShader,
&GnmCommandProxy::setHsShader,
&GnmCommandProxy::updatePsShader,
&GnmCommandProxy::updateVsShader,
&GnmCommandProxy::updateGsShader,
&GnmCommandProxy::updateHsShader,
&GnmCommandProxy::setPersistentRegister,
&GnmCommandProxy::setPersistentRegisterRange,
&GnmCommandProxy::initializeDefaultHardwareState2,
&GnmCommandProxy::setPointerInUserData2,
&GnmCommandProxy::setUserData2,
&GnmCommandProxy::setScratchSize,
nullptr,
},
// IT_SET_SH_REG_OFFSET
{ nullptr },
// IT_SET_QUEUE_REG
{
&GnmCommandProxy::setQueuePriority,
&GnmCommandProxy::enableQueueQuantumTimer,
&GnmCommandProxy::disableQueueQuantumTimer,
&GnmCommandProxy::setQueueRegister,
nullptr,
},
// IT_SET_UCONFIG_REG
{
&GnmCommandProxy::setVgtControlForNeo2,
&GnmCommandProxy::setPrimitiveType,
&GnmCommandProxy::disableOrderedAppendAllocationCounter,
&GnmCommandProxy::enableOrderedAppendAllocationCounter,
&GnmCommandProxy::setObjectId,
&GnmCommandProxy::setTextureGradientFactors,
&GnmCommandProxy::setVgtNumInstances,
&GnmCommandProxy::setUserConfigRegisterWithIndex,
&GnmCommandProxy::setUserConfigRegister,
&GnmCommandProxy::setUserConfigRegisterRange,
&GnmCommandProxy::waitOnAddress2,
&GnmCommandProxy::enableOrderedAppendAllocationCounter2,
&GnmCommandProxy::insertRttvDingDongMarker,
&GnmCommandProxy::RttvThreadTraceMarker3,
nullptr,
},
// IT_SET_UCONFIG_REG_INDEX
{ nullptr },
// IT_UNKNOWN_7B
{ nullptr },
// IT_FORWARD_HEADER
{ nullptr },
// IT_SCRATCH_RAM_WRITE
{ nullptr },
// IT_SCRATCH_RAM_READ
{ nullptr },
// IT_UNKNOWN_7F
{ nullptr },
// IT_LOAD_CONST_RAM
{ nullptr },
// IT_WRITE_CONST_RAM
{
&GnmCommandProxy::writeToCpRam,
nullptr,
},
// IT_UNKNOWN_82
{ nullptr },
// IT_DUMP_CONST_RAM
{
&GnmCommandProxy::cpRamDump,
nullptr,
},
// IT_INCREMENT_CE_COUNTER
{
&GnmCommandProxy::incrementCeCounter,
&GnmCommandProxy::incrementCeCounterForDispatchDraw,
nullptr,
},
// IT_INCREMENT_DE_COUNTER
{
&GnmCommandProxy::incrementDeCounter,
nullptr,
},
// IT_WAIT_ON_CE_COUNTER
{
&GnmCommandProxy::waitOnCe,
nullptr,
},
// IT_UNKNOWN_87
{ nullptr },
// IT_WAIT_ON_DE_COUNTER_DIFF
{
&GnmCommandProxy::waitOnDeCounterDiff,
nullptr,
},
// IT_UNKNOWN_89
{ nullptr },
// IT_UNKNOWN_8A
{ nullptr },
// IT_SWITCH_BUFFER
{ nullptr },
// IT_DISPATCH_DRAW_PREAMBLE__GFX09
{
&GnmCommandProxy::waitForSetupDispatchDrawKickRingBuffer,
&GnmCommandProxy::setupDispatchDrawKickRingBuffer,
nullptr,
},
// IT_UNKNOWN_8D
{
&GnmCommandProxy::dispatchDraw,
&GnmCommandProxy::dispatchDraw2,
nullptr,
},
// IT_GET_LOD_STATS__GFX09
{
&GnmCommandProxy::requestMipStatsReportAndReset,
nullptr,
},
// IT_DRAW_MULTI_PREAMBLE__GFX09
{ nullptr },
// IT_FRAME_CONTROL
{ nullptr },
// IT_INDEX_ATTRIBUTES_INDIRECT
{ nullptr },
// IT_UNKNOWN_92
{ nullptr },
// IT_WAIT_REG_MEM64
{ nullptr },
// IT_COND_PREEMPT
{ nullptr },
// IT_HDP_FLUSH
{ nullptr },
// IT_UNKNOWN_96
{ nullptr },
// IT_UNKNOWN_97
{ nullptr },
// IT_INVALIDATE_TLBS
{ nullptr },
// IT_UNKNOWN_99
{ nullptr },
// IT_DMA_DATA_FILL_MULTI
{ nullptr },
// IT_SET_SH_REG_INDEX
{ nullptr },
// IT_DRAW_INDIRECT_COUNT_MULTI
{
&GnmCommandProxy::drawIndirectCountMulti,
nullptr,
},
// IT_DRAW_INDEX_INDIRECT_COUNT_MULTI
{
&GnmCommandProxy::drawIndexIndirectCountMulti,
nullptr,
},
// IT_DUMP_CONST_RAM_OFFSET
{ nullptr },
// IT_LOAD_CONTEXT_REG_INDEX
{ nullptr },
// IT_SET_RESOURCES
{ nullptr },
// IT_MAP_PROCESS
{ nullptr },
// IT_MAP_QUEUES
{ nullptr },
// IT_UNMAP_QUEUES
{ nullptr },
// IT_QUERY_STATUS
{ nullptr },
// IT_RUN_LIST
{ nullptr },
// IT_MAP_PROCESS_VM
{ nullptr },
// IT_UNKNOWN_A7
{ nullptr },
// IT_UNKNOWN_A8
{ nullptr },
// IT_UNKNOWN_A9
{ nullptr },
// IT_UNKNOWN_AA
{ nullptr },
// IT_UNKNOWN_AB
{ nullptr },
// IT_UNKNOWN_AC
{ nullptr },
// IT_UNKNOWN_AD
{ nullptr },
// IT_UNKNOWN_AE
{ nullptr },
// IT_UNKNOWN_AF
{ nullptr },
// IT_UNKNOWN_B0
{ nullptr },
// IT_UNKNOWN_B1
{ nullptr },
// IT_UNKNOWN_B2
{ nullptr },
// IT_UNKNOWN_B3
{ nullptr },
// IT_UNKNOWN_B4
{ nullptr },
// IT_UNKNOWN_B5
{ nullptr },
// IT_UNKNOWN_B6
{ nullptr },
// IT_UNKNOWN_B7
{ nullptr },
// IT_UNKNOWN_B8
{ nullptr },
// IT_UNKNOWN_B9
{ nullptr },
// IT_UNKNOWN_BA
{ nullptr },
// IT_UNKNOWN_BB
{ nullptr },
// IT_UNKNOWN_BC
{ nullptr },
// IT_UNKNOWN_BD
{ nullptr },
// IT_UNKNOWN_BE
{ nullptr },
// IT_UNKNOWN_BF
{ nullptr },
// IT_UNKNOWN_C0
{ nullptr },
// IT_UNKNOWN_C1
{ nullptr },
// IT_UNKNOWN_C2
{ nullptr },
// IT_UNKNOWN_C3
{ nullptr },
// IT_UNKNOWN_C4
{ nullptr },
// IT_UNKNOWN_C5
{ nullptr },
// IT_UNKNOWN_C6
{ nullptr },
// IT_UNKNOWN_C7
{ nullptr },
// IT_UNKNOWN_C8
{ nullptr },
// IT_UNKNOWN_C9
{ nullptr },
// IT_UNKNOWN_CA
{ nullptr },
// IT_UNKNOWN_CB
{ nullptr },
// IT_UNKNOWN_CC
{ nullptr },
// IT_UNKNOWN_CD
{ nullptr },
// IT_UNKNOWN_CE
{ nullptr },
// IT_UNKNOWN_CF
{ nullptr },
// IT_UNKNOWN_D0
{ nullptr },
// IT_UNKNOWN_D1
{ nullptr },
// IT_UNKNOWN_D2
{ nullptr },
// IT_UNKNOWN_D3
{ nullptr },
// IT_UNKNOWN_D4
{ nullptr },
// IT_UNKNOWN_D5
{ nullptr },
// IT_UNKNOWN_D6
{ nullptr },
// IT_UNKNOWN_D7
{ nullptr },
// IT_UNKNOWN_D8
{ nullptr },
// IT_UNKNOWN_D9
{ nullptr },
// IT_UNKNOWN_DA
{ nullptr },
// IT_UNKNOWN_DB
{ nullptr },
// IT_UNKNOWN_DC
{ nullptr },
// IT_UNKNOWN_DD
{ nullptr },
// IT_UNKNOWN_DE
{ nullptr },
// IT_UNKNOWN_DF
{ nullptr },
// IT_UNKNOWN_E0
{ nullptr },
// IT_UNKNOWN_E1
{ nullptr },
// IT_UNKNOWN_E2
{ nullptr },
// IT_UNKNOWN_E3
{ nullptr },
// IT_UNKNOWN_E4
{ nullptr },
// IT_UNKNOWN_E5
{ nullptr },
// IT_UNKNOWN_E6
{ nullptr },
// IT_UNKNOWN_E7
{ nullptr },
// IT_UNKNOWN_E8
{ nullptr },
// IT_UNKNOWN_E9
{ nullptr },
// IT_UNKNOWN_EA
{ nullptr },
// IT_UNKNOWN_EB
{ nullptr },
// IT_UNKNOWN_EC
{ nullptr },
// IT_UNKNOWN_ED
{ nullptr },
// IT_UNKNOWN_EE
{ nullptr },
// IT_UNKNOWN_EF
{ nullptr },
// IT_UNKNOWN_F0
{ nullptr },
// IT_UNKNOWN_F1
{ nullptr },
// IT_UNKNOWN_F2
{ nullptr },
// IT_UNKNOWN_F3
{ nullptr },
// IT_UNKNOWN_F4
{ nullptr },
// IT_UNKNOWN_F5
{ nullptr },
// IT_UNKNOWN_F6
{ nullptr },
// IT_UNKNOWN_F7
{ nullptr },
// IT_UNKNOWN_F8
{ nullptr },
// IT_UNKNOWN_F9
{ nullptr },
// IT_UNKNOWN_FA
{ nullptr },
// IT_UNKNOWN_FB
{ nullptr },
// IT_UNKNOWN_FC
{ nullptr },
// IT_UNKNOWN_FD
{ nullptr },
// IT_UNKNOWN_FE
{ nullptr },
// IT_UNKNOWN_FF
{ nullptr },
// IT_UNKNOWN_100
{ nullptr },
// IT_UNKNOWN_101
{ nullptr },
// IT_UNKNOWN_102
{
&GnmCommandProxy::insertNop2,
nullptr,
},
} };
} // namespace sce::Gnm

View file

@ -1,6 +1,6 @@
# used to debug in pycharm
DEBUG = 0
DEBUG = 1
def connect_debug_server():
@ -343,21 +343,21 @@ def write_function_array(table):
fout = open('PacketArray.cpp', 'w')
max_code, max_sub_code = get_max_code(table)
head = 'const std::array<const std::array<ProxyFunction, {}>, {}> m_proxyTable = {{ {{\n'.format(max_sub_code, max_code)
head = 'const std::array<const std::array<ProxyFunction, {}>, {}> m_proxyTable = {{ {{\n'.format(max_sub_code + 1, max_code + 1)
fout.write(head)
last_opcode = -1
for opcode, proxy_list in ordered_table.items():
for i in range(last_opcode + 1, opcode):
fout.write('\t// {}\n'.format(get_code_name(i)))
fout.write('\t{ 0 },\n')
fout.write('\t{ nullptr },\n')
last_opcode = opcode
fout.write('\t// {}\n'.format(get_code_name(opcode)))
fout.write('\t{\n')
for proxy_func in proxy_list:
fout.write('\t\t&{},\n'.format(proxy_func))
fout.write('\t\t(ProxyFunction)0,\n')
fout.write('\t\tnullptr,\n')
fout.write('\t},\n')
fout.write('\n')
@ -393,6 +393,7 @@ def define_proxy_function(name, code):
lines.append('\t' + 'uint32_t count = 0;\n')
lines.append('\t' + 'if (false)\n')
lines.append('\t' + '{\n')
lines.append('\t\t' + 'LOG_SCE_TRACE("Gnm: {}");\n'.format(recover_gnm_name(name)))
lines.append('\t\t' + '// m_cb->{}();\n'.format(recover_gnm_name(name)))
lines.append('\t\t' + 'count = {};\n'.format(get_enum_name(name)))
lines.append('\t' + '}\n')