VirtualBox

Changeset 65265 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jan 12, 2017 6:27:05 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
112807
Message:

VMSVGA: Translate palette register indexes for SVGA_ID_0. Added register and command statistics.

Location:
trunk/src/VBox/Devices/Graphics
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp

    r65101 r65265  
    146146    STAMPROFILE             StatBusyDelayEmts;
    147147
    148     STAMPROFILE             StatR3CmdPresent;
    149     STAMPROFILE             StatR3CmdDrawPrimitive;
    150     STAMPROFILE             StatR3CmdSurfaceDMA;
     148    STAMPROFILE             StatR3Cmd3dPresentProf;
     149    STAMPROFILE             StatR3Cmd3dDrawPrimitivesProf;
     150    STAMPROFILE             StatR3Cmd3dSurfaceDmaProf;
     151    STAMCOUNTER             StatR3CmdDefineGmr2;
     152    STAMCOUNTER             StatR3CmdDefineGmr2Free;
     153    STAMCOUNTER             StatR3CmdDefineGmr2Modify;
     154    STAMCOUNTER             StatR3CmdRemapGmr2;
     155    STAMCOUNTER             StatR3CmdRemapGmr2Modify;
     156    STAMCOUNTER             StatR3CmdInvalidCmd;
     157    STAMCOUNTER             StatR3CmdFence;
     158    STAMCOUNTER             StatR3CmdUpdate;
     159    STAMCOUNTER             StatR3CmdUpdateVerbose;
     160    STAMCOUNTER             StatR3CmdDefineCursor;
     161    STAMCOUNTER             StatR3CmdDefineAlphaCursor;
     162    STAMCOUNTER             StatR3CmdEscape;
     163    STAMCOUNTER             StatR3CmdDefineScreen;
     164    STAMCOUNTER             StatR3CmdDestroyScreen;
     165    STAMCOUNTER             StatR3CmdDefineGmrFb;
     166    STAMCOUNTER             StatR3CmdBlitGmrFbToScreen;
     167    STAMCOUNTER             StatR3CmdBlitScreentoGmrFb;
     168    STAMCOUNTER             StatR3CmdAnnotationFill;
     169    STAMCOUNTER             StatR3CmdAnnotationCopy;
     170    STAMCOUNTER             StatR3Cmd3dSurfaceDefine;
     171    STAMCOUNTER             StatR3Cmd3dSurfaceDefineV2;
     172    STAMCOUNTER             StatR3Cmd3dSurfaceDestroy;
     173    STAMCOUNTER             StatR3Cmd3dSurfaceCopy;
     174    STAMCOUNTER             StatR3Cmd3dSurfaceStretchBlt;
     175    STAMCOUNTER             StatR3Cmd3dSurfaceDma;
     176    STAMCOUNTER             StatR3Cmd3dSurfaceScreen;
     177    STAMCOUNTER             StatR3Cmd3dContextDefine;
     178    STAMCOUNTER             StatR3Cmd3dContextDestroy;
     179    STAMCOUNTER             StatR3Cmd3dSetTransform;
     180    STAMCOUNTER             StatR3Cmd3dSetZRange;
     181    STAMCOUNTER             StatR3Cmd3dSetRenderState;
     182    STAMCOUNTER             StatR3Cmd3dSetRenderTarget;
     183    STAMCOUNTER             StatR3Cmd3dSetTextureState;
     184    STAMCOUNTER             StatR3Cmd3dSetMaterial;
     185    STAMCOUNTER             StatR3Cmd3dSetLightData;
     186    STAMCOUNTER             StatR3Cmd3dSetLightEnable;
     187    STAMCOUNTER             StatR3Cmd3dSetViewPort;
     188    STAMCOUNTER             StatR3Cmd3dSetClipPlane;
     189    STAMCOUNTER             StatR3Cmd3dClear;
     190    STAMCOUNTER             StatR3Cmd3dPresent;
     191    STAMCOUNTER             StatR3Cmd3dPresentReadBack;
     192    STAMCOUNTER             StatR3Cmd3dShaderDefine;
     193    STAMCOUNTER             StatR3Cmd3dShaderDestroy;
     194    STAMCOUNTER             StatR3Cmd3dSetShader;
     195    STAMCOUNTER             StatR3Cmd3dSetShaderConst;
     196    STAMCOUNTER             StatR3Cmd3dDrawPrimitives;
     197    STAMCOUNTER             StatR3Cmd3dSetScissorRect;
     198    STAMCOUNTER             StatR3Cmd3dBeginQuery;
     199    STAMCOUNTER             StatR3Cmd3dEndQuery;
     200    STAMCOUNTER             StatR3Cmd3dWaitForQuery;
     201    STAMCOUNTER             StatR3Cmd3dGenerateMipmaps;
     202    STAMCOUNTER             StatR3Cmd3dActivateSurface;
     203    STAMCOUNTER             StatR3Cmd3dDeactivateSurface;
     204
     205    STAMCOUNTER             StatR3RegConfigDoneWr;
     206    STAMCOUNTER             StatR3RegGmrDescriptorWr;
     207    STAMCOUNTER             StatR3RegGmrDescriptorWrErrors;
     208    STAMCOUNTER             StatR3RegGmrDescriptorWrFree;
    151209
    152210    STAMCOUNTER             StatFifoCommands;
     
    223281#endif
    224282    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatBusyDelayEmts),
    225     SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdPresent),
    226     SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDrawPrimitive),
    227     SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdSurfaceDMA),
     283    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dPresentProf),
     284    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dDrawPrimitivesProf),
     285    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSurfaceDmaProf),
     286    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDefineGmr2),
     287    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDefineGmr2Free),
     288    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDefineGmr2Modify),
     289    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdRemapGmr2),
     290    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdRemapGmr2Modify),
     291    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdInvalidCmd),
     292    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdFence),
     293    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdUpdate),
     294    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdUpdateVerbose),
     295    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDefineCursor),
     296    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDefineAlphaCursor),
     297    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdEscape),
     298    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDefineScreen),
     299    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDestroyScreen),
     300    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdDefineGmrFb),
     301    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdBlitGmrFbToScreen),
     302    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdBlitScreentoGmrFb),
     303    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdAnnotationFill),
     304    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3CmdAnnotationCopy),
     305    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSurfaceDefine),
     306    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSurfaceDefineV2),
     307    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSurfaceDestroy),
     308    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSurfaceCopy),
     309    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSurfaceStretchBlt),
     310    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSurfaceDma),
     311    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSurfaceScreen),
     312    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dContextDefine),
     313    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dContextDestroy),
     314    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetTransform),
     315    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetZRange),
     316    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetRenderState),
     317    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetRenderTarget),
     318    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetTextureState),
     319    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetMaterial),
     320    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetLightData),
     321    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetLightEnable),
     322    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetViewPort),
     323    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetClipPlane),
     324    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dClear),
     325    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dPresent),
     326    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dPresentReadBack),
     327    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dShaderDefine),
     328    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dShaderDestroy),
     329    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetShader),
     330    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetShaderConst),
     331    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dDrawPrimitives),
     332    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dSetScissorRect),
     333    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dBeginQuery),
     334    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dEndQuery),
     335    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dWaitForQuery),
     336    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dGenerateMipmaps),
     337    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dActivateSurface),
     338    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3Cmd3dDeactivateSurface),
     339
     340    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3RegConfigDoneWr),
     341    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3RegGmrDescriptorWr),
     342    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3RegGmrDescriptorWrErrors),
     343    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatR3RegGmrDescriptorWrFree),
     344
    228345    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatFifoCommands),
    229346    SSMFIELD_ENTRY_IGNORE(      VMSVGAR3STATE, StatFifoErrors),
     
    293410 * @returns Index register string or "UNKNOWN"
    294411 * @param   pThis       VMSVGA State
     412 * @param   idxReg      The index register.
    295413 */
    296 static const char *vmsvgaIndexToString(PVGASTATE pThis)
     414static const char *vmsvgaIndexToString(PVGASTATE pThis, uint32_t idxReg)
    297415{
    298     switch (pThis->svga.u32IndexReg)
     416    switch (idxReg)
    299417    {
    300418    case SVGA_REG_ID:
     
    400518
    401519    default:
    402         if (pThis->svga.u32IndexReg - (uint32_t)SVGA_SCRATCH_BASE < pThis->svga.cScratchRegion)
     520        if (idxReg - (uint32_t)SVGA_SCRATCH_BASE < pThis->svga.cScratchRegion)
    403521            return "SVGA_SCRATCH_BASE reg";
    404         if (pThis->svga.u32IndexReg - (uint32_t)SVGA_PALETTE_BASE < (uint32_t)SVGA_NUM_PALETTE_REGS)
     522        if (idxReg - (uint32_t)SVGA_PALETTE_BASE < (uint32_t)SVGA_NUM_PALETTE_REGS)
    405523            return "SVGA_PALETTE_BASE reg";
    406524        return "UNKNOWN";
     
    591709{
    592710    int rc = VINF_SUCCESS;
    593 
    594711    *pu32 = 0;
    595     switch (pThis->svga.u32IndexReg)
     712
     713    /* We must adjust the register number if we're in SVGA_ID_0 mode because the PALETTE range moved. */
     714    uint32_t idxReg = pThis->svga.u32IndexReg;
     715    if (   idxReg >= SVGA_REG_CAPABILITIES
     716        && pThis->svga.u32SVGAId == SVGA_ID_0)
     717    {
     718        idxReg += SVGA_PALETTE_BASE - SVGA_REG_CAPABILITIES;
     719        Log(("vmsvgaWritePort: SVGA_ID_0 reg adj %#x -> %#x\n", pThis->svga.u32IndexReg, idxReg));
     720    }
     721
     722    switch (idxReg)
    596723    {
    597724    case SVGA_REG_ID:
     725        STAM_REL_COUNTER_INC(&pThis->svga.StatRegIdRd);
    598726        *pu32 = pThis->svga.u32SVGAId;
    599727        break;
    600728
    601729    case SVGA_REG_ENABLE:
     730        STAM_REL_COUNTER_INC(&pThis->svga.StatRegEnableRd);
    602731        *pu32 = pThis->svga.fEnabled;
    603732        break;
     
    605734    case SVGA_REG_WIDTH:
    606735    {
     736        STAM_REL_COUNTER_INC(&pThis->svga.StatRegWidthRd);
    607737        if (    pThis->svga.fEnabled
    608738            &&  pThis->svga.uWidth != VMSVGA_VAL_UNINITIALIZED)
     
    623753    case SVGA_REG_HEIGHT:
    624754    {
     755        STAM_REL_COUNTER_INC(&pThis->svga.StatRegHeightRd);
    625756        if (    pThis->svga.fEnabled
    626757            &&  pThis->svga.uHeight != VMSVGA_VAL_UNINITIALIZED)
     
    640771
    641772    case SVGA_REG_MAX_WIDTH:
     773        STAM_REL_COUNTER_INC(&pThis->svga.StatRegMaxWidthRd);
    642774        *pu32 = pThis->svga.u32MaxWidth;
    643775        break;
    644776
    645777    case SVGA_REG_MAX_HEIGHT:
     778        STAM_REL_COUNTER_INC(&pThis->svga.StatRegMaxHeightRd);
    646779        *pu32 = pThis->svga.u32MaxHeight;
    647780        break;
     
    649782    case SVGA_REG_DEPTH:
    650783        /* This returns the color depth of the current mode. */
     784        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDepthRd);
    651785        switch (pThis->svga.uBpp)
    652786        {
     
    665799
    666800    case SVGA_REG_HOST_BITS_PER_PIXEL: /* (Deprecated) */
     801        STAM_REL_COUNTER_INC(&pThis->svga.StatRegHostBitsPerPixelRd);
    667802        if (    pThis->svga.fEnabled
    668803            &&  pThis->svga.uBpp != VMSVGA_VAL_UNINITIALIZED)
     
    681816
    682817    case SVGA_REG_BITS_PER_PIXEL:      /* Current bpp in the guest */
     818        STAM_REL_COUNTER_INC(&pThis->svga.StatRegBitsPerPixelRd);
    683819        if (    pThis->svga.fEnabled
    684820            &&  pThis->svga.uBpp != VMSVGA_VAL_UNINITIALIZED)
     
    697833
    698834    case SVGA_REG_PSEUDOCOLOR:
     835        STAM_REL_COUNTER_INC(&pThis->svga.StatRegPsuedoColorRd);
    699836        *pu32 = 0;
    700837        break;
     
    749886            break;
    750887        }
    751         switch (pThis->svga.u32IndexReg)
     888        switch (idxReg)
    752889        {
    753890        case SVGA_REG_RED_MASK:
     891            STAM_REL_COUNTER_INC(&pThis->svga.StatRegRedMaskRd);
    754892            *pu32 = u32RedMask;
    755893            break;
    756894
    757895        case SVGA_REG_GREEN_MASK:
     896            STAM_REL_COUNTER_INC(&pThis->svga.StatRegGreenMaskRd);
    758897            *pu32 = u32GreenMask;
    759898            break;
    760899
    761900        case SVGA_REG_BLUE_MASK:
     901            STAM_REL_COUNTER_INC(&pThis->svga.StatRegBlueMaskRd);
    762902            *pu32 = u32BlueMask;
    763903            break;
     
    768908    case SVGA_REG_BYTES_PER_LINE:
    769909    {
     910        STAM_REL_COUNTER_INC(&pThis->svga.StatRegBytesPerLineRd);
    770911        if (    pThis->svga.fEnabled
    771912            &&  pThis->svga.cbScanline)
     
    785926
    786927    case SVGA_REG_VRAM_SIZE:            /* VRAM size */
     928        STAM_REL_COUNTER_INC(&pThis->svga.StatRegVramSizeRd);
    787929        *pu32 = pThis->vram_size;
    788930        break;
    789931
    790932    case SVGA_REG_FB_START:             /* Frame buffer physical address. */
     933        STAM_REL_COUNTER_INC(&pThis->svga.StatRegFbStartRd);
    791934        Assert(pThis->GCPhysVRAM <= 0xffffffff);
    792935        *pu32 = pThis->GCPhysVRAM;
     
    794937
    795938    case SVGA_REG_FB_OFFSET:            /* Offset of the frame buffer in VRAM */
     939        STAM_REL_COUNTER_INC(&pThis->svga.StatRegFbOffsetRd);
    796940        /* Always zero in our case. */
    797941        *pu32 = 0;
     
    803947        rc = VINF_IOM_R3_IOPORT_READ;
    804948#else
     949        STAM_REL_COUNTER_INC(&pThis->svga.StatRegFbSizeRd);
     950
    805951        /* VMWare testcases want at least 4 MB in case the hardware is disabled. */
    806952        if (    pThis->svga.fEnabled
     
    820966
    821967    case SVGA_REG_CAPABILITIES:
     968        STAM_REL_COUNTER_INC(&pThis->svga.StatRegCapabilitesRd);
    822969        *pu32 = pThis->svga.u32RegCaps;
    823970        break;
    824971
    825972    case SVGA_REG_MEM_START:           /* FIFO start */
     973        STAM_REL_COUNTER_INC(&pThis->svga.StatRegMemStartRd);
    826974        Assert(pThis->svga.GCPhysFIFO <= 0xffffffff);
    827975        *pu32 = pThis->svga.GCPhysFIFO;
     
    829977
    830978    case SVGA_REG_MEM_SIZE:            /* FIFO size */
     979        STAM_REL_COUNTER_INC(&pThis->svga.StatRegMemSizeRd);
    831980        *pu32 = pThis->svga.cbFIFO;
    832981        break;
    833982
    834983    case SVGA_REG_CONFIG_DONE:         /* Set when memory area configured */
     984        STAM_REL_COUNTER_INC(&pThis->svga.StatRegConfigDoneRd);
    835985        *pu32 = pThis->svga.fConfigured;
    836986        break;
    837987
    838988    case SVGA_REG_SYNC:                /* See "FIFO Synchronization Registers" */
     989        STAM_REL_COUNTER_INC(&pThis->svga.StatRegSyncRd);
    839990        *pu32 = 0;
    840991        break;
    841992
    842993    case SVGA_REG_BUSY:                /* See "FIFO Synchronization Registers" */
     994        STAM_REL_COUNTER_INC(&pThis->svga.StatRegBusyRd);
    843995        if (pThis->svga.fBusy)
    844996        {
     
    8991051
    9001052    case SVGA_REG_GUEST_ID:            /* Set guest OS identifier */
     1053        STAM_REL_COUNTER_INC(&pThis->svga.StatRegGuestIdRd);
    9011054        *pu32 = pThis->svga.u32GuestId;
    9021055        break;
    9031056
    9041057    case SVGA_REG_SCRATCH_SIZE:        /* Number of scratch registers */
     1058        STAM_REL_COUNTER_INC(&pThis->svga.StatRegScratchSizeRd);
    9051059        *pu32 = pThis->svga.cScratchRegion;
    9061060        break;
    9071061
    9081062    case SVGA_REG_MEM_REGS:            /* Number of FIFO registers */
     1063        STAM_REL_COUNTER_INC(&pThis->svga.StatRegMemRegsRd);
    9091064        *pu32 = SVGA_FIFO_NUM_REGS;
    9101065        break;
    9111066
    9121067    case SVGA_REG_PITCHLOCK:           /* Fixed pitch for all modes */
     1068        STAM_REL_COUNTER_INC(&pThis->svga.StatRegPitchLockRd);
    9131069        *pu32 = pThis->svga.u32PitchLock;
    9141070        break;
    9151071
    9161072    case SVGA_REG_IRQMASK:             /* Interrupt mask */
     1073        STAM_REL_COUNTER_INC(&pThis->svga.StatRegIrqMaskRd);
    9171074        *pu32 = pThis->svga.u32IrqMask;
    9181075        break;
     
    9201077    /* See "Guest memory regions" below. */
    9211078    case SVGA_REG_GMR_ID:
     1079        STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrIdRd);
    9221080        *pu32 = pThis->svga.u32CurrentGMRId;
    9231081        break;
    9241082
    9251083    case SVGA_REG_GMR_DESCRIPTOR:
     1084        STAM_REL_COUNTER_INC(&pThis->svga.StatRegWriteOnlyRd);
    9261085        /* Write only */
    9271086        *pu32 = 0;
     
    9291088
    9301089    case SVGA_REG_GMR_MAX_IDS:
     1090        STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrMaxIdsRd);
    9311091        *pu32 = VMSVGA_MAX_GMR_IDS;
    9321092        break;
    9331093
    9341094    case SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH:
     1095        STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrMaxDescriptorLengthRd);
    9351096        *pu32 = VMSVGA_MAX_GMR_PAGES;
    9361097        break;
    9371098
    9381099    case SVGA_REG_TRACES:            /* Enable trace-based updates even when FIFO is on */
     1100        STAM_REL_COUNTER_INC(&pThis->svga.StatRegTracesRd);
    9391101        *pu32 = pThis->svga.fTraces;
    9401102        break;
    9411103
    9421104    case SVGA_REG_GMRS_MAX_PAGES:    /* Maximum number of 4KB pages for all GMRs */
     1105        STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrsMaxPagesRd);
    9431106        *pu32 = VMSVGA_MAX_GMR_PAGES;
    9441107        break;
    9451108
    9461109    case SVGA_REG_MEMORY_SIZE:       /* Total dedicated device memory excluding FIFO */
     1110        STAM_REL_COUNTER_INC(&pThis->svga.StatRegMemorySizeRd);
    9471111        *pu32 = VMSVGA_SURFACE_SIZE;
    9481112        break;
    9491113
    9501114    case SVGA_REG_TOP:               /* Must be 1 more than the last register */
    951         break;
    952 
    953     case SVGA_PALETTE_BASE:         /* Base of SVGA color map */
    954         break;
    955         /* Next 768 (== 256*3) registers exist for colormap */
     1115        STAM_REL_COUNTER_INC(&pThis->svga.StatRegTopRd);
     1116        break;
    9561117
    9571118    /* Mouse cursor support. */
     
    9601121    case SVGA_REG_CURSOR_Y:
    9611122    case SVGA_REG_CURSOR_ON:
     1123        STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorXxxxRd);
    9621124        break;
    9631125
    9641126    /* Legacy multi-monitor support */
    9651127    case SVGA_REG_NUM_GUEST_DISPLAYS:/* Number of guest displays in X/Y direction */
     1128        STAM_REL_COUNTER_INC(&pThis->svga.StatRegNumGuestDisplaysRd);
    9661129        *pu32 = 1;
    9671130        break;
    9681131
    9691132    case SVGA_REG_DISPLAY_ID:        /* Display ID for the following display attributes */
     1133        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayIdRd);
     1134        *pu32 = 0;
     1135        break;
     1136
    9701137    case SVGA_REG_DISPLAY_IS_PRIMARY:/* Whether this is a primary display */
     1138        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayIsPrimaryRd);
     1139        *pu32 = 0;
     1140        break;
     1141
    9711142    case SVGA_REG_DISPLAY_POSITION_X:/* The display position x */
     1143        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayPositionXRd);
     1144        *pu32 = 0;
     1145        break;
     1146
    9721147    case SVGA_REG_DISPLAY_POSITION_Y:/* The display position y */
     1148        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayPositionYRd);
    9731149        *pu32 = 0;
    9741150        break;
    9751151
    9761152    case SVGA_REG_DISPLAY_WIDTH:     /* The display's width */
     1153        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayWidthRd);
    9771154        *pu32 = pThis->svga.uWidth;
    9781155        break;
    9791156
    9801157    case SVGA_REG_DISPLAY_HEIGHT:    /* The display's height */
     1158        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayHeightRd);
    9811159        *pu32 = pThis->svga.uHeight;
    9821160        break;
    9831161
    9841162    case SVGA_REG_NUM_DISPLAYS:        /* (Deprecated) */
     1163        STAM_REL_COUNTER_INC(&pThis->svga.StatRegNumDisplaysRd);
    9851164        *pu32 = 1;  /* Must return something sensible here otherwise the Linux driver will take a legacy code path without 3d support. */
    9861165        break;
    9871166
    9881167    default:
    989         if (    pThis->svga.u32IndexReg >= SVGA_SCRATCH_BASE
    990             &&  pThis->svga.u32IndexReg < SVGA_SCRATCH_BASE + pThis->svga.cScratchRegion)
    991         {
    992             *pu32 = pThis->svga.au32ScratchRegion[pThis->svga.u32IndexReg - SVGA_SCRATCH_BASE];
    993         }
    994         break;
    995     }
    996     Log(("vmsvgaReadPort index=%s (%d) val=%#x rc=%x\n", vmsvgaIndexToString(pThis), pThis->svga.u32IndexReg, *pu32, rc));
     1168    {
     1169        uint32_t offReg;
     1170        if ((offReg = idxReg - SVGA_SCRATCH_BASE) < pThis->svga.cScratchRegion)
     1171        {
     1172            *pu32 = pThis->svga.au32ScratchRegion[offReg];
     1173            STAM_REL_COUNTER_INC(&pThis->svga.StatRegScratchRd);
     1174        }
     1175        else if ((offReg = idxReg - SVGA_PALETTE_BASE) < (uint32_t)SVGA_NUM_PALETTE_REGS)
     1176        {
     1177            STAM_REL_COUNTER_INC(&pThis->svga.StatRegPaletteRd);
     1178            /* Next 768 (== 256*3) registers exist for colormap */
     1179        }
     1180        else
     1181        {
     1182#if !defined(IN_RING3) && defined(VBOX_STRICT)
     1183            rc = VINF_IOM_R3_IOPORT_READ;
     1184#else
     1185            STAM_REL_COUNTER_INC(&pThis->svga.StatRegUnknownRd);
     1186            AssertMsgFailed(("reg=%#x\n", idxReg));
     1187#endif
     1188        }
     1189        break;
     1190    }
     1191    }
     1192    Log(("vmsvgaReadPort index=%s (%d) val=%#x rc=%x\n", vmsvgaIndexToString(pThis, idxReg), idxReg, *pu32, rc));
    9971193    return rc;
    9981194}
     
    11091305    int            rc = VINF_SUCCESS;
    11101306
    1111     Log(("vmsvgaWritePort index=%s (%d) val=%#x\n", vmsvgaIndexToString(pThis), pThis->svga.u32IndexReg, u32));
    1112     switch (pThis->svga.u32IndexReg)
     1307    /* We must adjust the register number if we're in SVGA_ID_0 mode because the PALETTE range moved. */
     1308    uint32_t idxReg = pThis->svga.u32IndexReg;
     1309    if (   idxReg >= SVGA_REG_CAPABILITIES
     1310        && pThis->svga.u32SVGAId == SVGA_ID_0)
     1311    {
     1312        idxReg += SVGA_PALETTE_BASE - SVGA_REG_CAPABILITIES;
     1313        Log(("vmsvgaWritePort: SVGA_ID_0 reg adj %#x -> %#x\n", pThis->svga.u32IndexReg, idxReg));
     1314    }
     1315    Log(("vmsvgaWritePort index=%s (%d) val=%#x\n", vmsvgaIndexToString(pThis, idxReg), idxReg, u32));
     1316    switch (idxReg)
    11131317    {
    11141318    case SVGA_REG_ID:
     1319        STAM_REL_COUNTER_INC(&pThis->svga.StatRegIdWr);
    11151320        if (    u32 == SVGA_ID_0
    11161321            ||  u32 == SVGA_ID_1
    11171322            ||  u32 == SVGA_ID_2)
    11181323            pThis->svga.u32SVGAId = u32;
     1324        else
     1325            AssertMsgFailed(("%#x\n", u32));
    11191326        break;
    11201327
    11211328    case SVGA_REG_ENABLE:
     1329        STAM_REL_COUNTER_INC(&pThis->svga.StatRegEnableWr);
    11221330        if (    pThis->svga.fEnabled    == u32
    11231331            &&  pThis->last_bpp         == (unsigned)pThis->svga.uBpp
     
    11871395
    11881396    case SVGA_REG_WIDTH:
     1397        STAM_REL_COUNTER_INC(&pThis->svga.StatRegWidthWr);
    11891398        if (pThis->svga.uWidth != u32)
    11901399        {
     
    12061415
    12071416    case SVGA_REG_HEIGHT:
     1417        STAM_REL_COUNTER_INC(&pThis->svga.StatRegHeightWr);
    12081418        if (pThis->svga.uHeight != u32)
    12091419        {
     
    12251435
    12261436    case SVGA_REG_DEPTH:
     1437        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDepthWr);
    12271438        /** @todo read-only?? */
    12281439        break;
    12291440
    12301441    case SVGA_REG_BITS_PER_PIXEL:      /* Current bpp in the guest */
     1442        STAM_REL_COUNTER_INC(&pThis->svga.StatRegBitsPerPixelWr);
    12311443        if (pThis->svga.uBpp != u32)
    12321444        {
     
    12481460
    12491461    case SVGA_REG_PSEUDOCOLOR:
     1462        STAM_REL_COUNTER_INC(&pThis->svga.StatRegPseudoColorWr);
    12501463        break;
    12511464
    12521465    case SVGA_REG_CONFIG_DONE:         /* Set when memory area configured */
    12531466#ifdef IN_RING3
     1467        STAM_REL_COUNTER_INC(&pSVGAState->StatR3RegConfigDoneWr);
    12541468        pThis->svga.fConfigured = u32;
    12551469        /* Disabling the FIFO enables tracing (dirty page detection) by default. */
     
    12651479
    12661480    case SVGA_REG_SYNC:                /* See "FIFO Synchronization Registers" */
     1481        STAM_REL_COUNTER_INC(&pThis->svga.StatRegSyncWr);
    12671482        if (    pThis->svga.fEnabled
    12681483            &&  pThis->svga.fConfigured)
     
    12871502
    12881503    case SVGA_REG_BUSY:                /* See "FIFO Synchronization Registers" (read-only) */
     1504        STAM_REL_COUNTER_INC(&pThis->svga.StatRegBusyWr);
    12891505        break;
    12901506
    12911507    case SVGA_REG_GUEST_ID:            /* Set guest OS identifier */
     1508        STAM_REL_COUNTER_INC(&pThis->svga.StatRegGuestIdWr);
    12921509        pThis->svga.u32GuestId = u32;
    12931510        break;
    12941511
    12951512    case SVGA_REG_PITCHLOCK:           /* Fixed pitch for all modes */
     1513        STAM_REL_COUNTER_INC(&pThis->svga.StatRegPitchLockWr);
    12961514        pThis->svga.u32PitchLock = u32;
    12971515        break;
    12981516
    12991517    case SVGA_REG_IRQMASK:             /* Interrupt mask */
     1518        STAM_REL_COUNTER_INC(&pThis->svga.StatRegIrqMaskWr);
    13001519        pThis->svga.u32IrqMask = u32;
    13011520
     
    13151534    case SVGA_REG_CURSOR_Y:
    13161535    case SVGA_REG_CURSOR_ON:
     1536        STAM_REL_COUNTER_INC(&pThis->svga.StatRegCursorXxxxWr);
    13171537        break;
    13181538
    13191539    /* Legacy multi-monitor support */
    13201540    case SVGA_REG_NUM_GUEST_DISPLAYS:/* Number of guest displays in X/Y direction */
     1541        STAM_REL_COUNTER_INC(&pThis->svga.StatRegNumGuestDisplaysWr);
    13211542        break;
    13221543    case SVGA_REG_DISPLAY_ID:        /* Display ID for the following display attributes */
     1544        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayIdWr);
    13231545        break;
    13241546    case SVGA_REG_DISPLAY_IS_PRIMARY:/* Whether this is a primary display */
     1547        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayIsPrimaryWr);
    13251548        break;
    13261549    case SVGA_REG_DISPLAY_POSITION_X:/* The display position x */
     1550        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayPositionXWr);
    13271551        break;
    13281552    case SVGA_REG_DISPLAY_POSITION_Y:/* The display position y */
     1553        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayPositionYWr);
    13291554        break;
    13301555    case SVGA_REG_DISPLAY_WIDTH:     /* The display's width */
     1556        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayWidthWr);
    13311557        break;
    13321558    case SVGA_REG_DISPLAY_HEIGHT:    /* The display's height */
     1559        STAM_REL_COUNTER_INC(&pThis->svga.StatRegDisplayHeightWr);
    13331560        break;
    13341561#ifdef VBOX_WITH_VMSVGA3D
    13351562    /* See "Guest memory regions" below. */
    13361563    case SVGA_REG_GMR_ID:
     1564        STAM_REL_COUNTER_INC(&pThis->svga.StatRegGmrIdWr);
    13371565        pThis->svga.u32CurrentGMRId = u32;
    13381566        break;
     
    13441572# else /* IN_RING3 */
    13451573    {
     1574        STAM_REL_COUNTER_INC(&pSVGAState->StatR3RegGmrDescriptorWr);
     1575
    13461576        SVGAGuestMemDescriptor desc;
    13471577        RTGCPHYS               GCPhys = (RTGCPHYS)u32 << PAGE_SHIFT;
     
    14141644
    14151645    case SVGA_REG_TRACES:            /* Enable trace-based updates even when FIFO is on */
     1646        STAM_REL_COUNTER_INC(&pThis->svga.StatRegTracesWr);
    14161647        if (pThis->svga.fTraces == u32)
    14171648            break; /* nothing to do */
     
    14251656
    14261657    case SVGA_REG_TOP:               /* Must be 1 more than the last register */
    1427         break;
    1428 
    1429     case SVGA_PALETTE_BASE:         /* Base of SVGA color map */
    1430         break;
    1431         /* Next 768 (== 256*3) registers exist for colormap */
     1658        STAM_REL_COUNTER_INC(&pThis->svga.StatRegTopWr);
     1659        break;
    14321660
    14331661    case SVGA_REG_NUM_DISPLAYS:        /* (Deprecated) */
    1434         Log(("Write to deprecated register %x - val %x ignored\n", pThis->svga.u32IndexReg, u32));
     1662        STAM_REL_COUNTER_INC(&pThis->svga.StatRegNumDisplaysWr);
     1663        Log(("Write to deprecated register %x - val %x ignored\n", idxReg, u32));
    14351664        break;
    14361665
     
    14561685    case SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH:
    14571686        /* Read only - ignore. */
    1458         Log(("Write to R/O register %x - val %x ignored\n", pThis->svga.u32IndexReg, u32));
     1687        Log(("Write to R/O register %x - val %x ignored\n", idxReg, u32));
     1688        STAM_REL_COUNTER_INC(&pThis->svga.StatRegReadOnlyWr);
    14591689        break;
    14601690
    14611691    default:
    1462         if (    pThis->svga.u32IndexReg >= SVGA_SCRATCH_BASE
    1463             &&  pThis->svga.u32IndexReg < SVGA_SCRATCH_BASE + pThis->svga.cScratchRegion)
    1464         {
    1465             pThis->svga.au32ScratchRegion[pThis->svga.u32IndexReg - SVGA_SCRATCH_BASE] = u32;
    1466         }
    1467         break;
     1692    {
     1693        uint32_t offReg;
     1694        if ((offReg = idxReg - SVGA_SCRATCH_BASE) < pThis->svga.cScratchRegion)
     1695        {
     1696            pThis->svga.au32ScratchRegion[offReg] = u32;
     1697            STAM_REL_COUNTER_INC(&pThis->svga.StatRegScratchWr);
     1698        }
     1699        else if ((offReg = idxReg - SVGA_PALETTE_BASE) < (uint32_t)SVGA_NUM_PALETTE_REGS)
     1700        {
     1701            STAM_REL_COUNTER_INC(&pThis->svga.StatRegPaletteWr);
     1702            /* Next 768 (== 256*3) registers exist for colormap */
     1703        }
     1704        else
     1705        {
     1706#if !defined(IN_RING3) && defined(VBOX_STRICT)
     1707            rc = VINF_IOM_R3_IOPORT_WRITE;
     1708#else
     1709            STAM_REL_COUNTER_INC(&pThis->svga.StatRegUnknownWr);
     1710            AssertMsgFailed(("reg=%#x u32=%#x\n", idxReg, u32));
     1711#endif
     1712        }
     1713        break;
     1714    }
    14681715    }
    14691716    return rc;
     
    26572904            case SVGA_CMD_INVALID_CMD:
    26582905                /* Nothing to do. */
     2906                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdInvalidCmd);
    26592907                break;
    26602908
     
    26632911                SVGAFifoCmdFence *pCmdFence;
    26642912                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmdFence, SVGAFifoCmdFence, sizeof(*pCmdFence));
     2913                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdFence);
    26652914                if (VMSVGA_IS_VALID_FIFO_REG(SVGA_FIFO_FENCE, offFifoMin))
    26662915                {
     
    26912940                SVGAFifoCmdUpdate *pUpdate;
    26922941                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pUpdate, SVGAFifoCmdUpdate, sizeof(*pUpdate));
     2942                if (enmCmdId == SVGA_CMD_UPDATE)
     2943                    STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdUpdate);
     2944                else
     2945                    STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdUpdateVerbose);
    26932946                Log(("vmsvgaFIFOLoop: UPDATE (%d,%d)(%d,%d)\n", pUpdate->x, pUpdate->y, pUpdate->width, pUpdate->height));
    26942947                vgaR3UpdateDisplay(pThis, pUpdate->x, pUpdate->y, pUpdate->width, pUpdate->height);
     
    27012954                SVGAFifoCmdDefineCursor *pCursor;
    27022955                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCursor, SVGAFifoCmdDefineCursor, sizeof(*pCursor));
     2956                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineCursor);
    27032957                AssertFailed(); /** @todo implement when necessary. */
    27042958                break;
     
    27142968                SVGAFifoCmdDefineAlphaCursor *pCursor;
    27152969                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCursor, SVGAFifoCmdDefineAlphaCursor, sizeof(*pCursor));
     2970                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineAlphaCursor);
    27162971
    27172972                Log(("vmsvgaFIFOLoop: ALPHA_CURSOR id=%d size (%d,%d) hotspot (%d,%d)\n", pCursor->id, pCursor->width, pCursor->height, pCursor->hotspotX, pCursor->hotspotY));
     
    27683023                SVGAFifoCmdEscape *pEscape;
    27693024                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pEscape, SVGAFifoCmdEscape, sizeof(*pEscape));
     3025                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdEscape);
    27703026
    27713027                /* Refetch the command buffer with the variable data; undo size increase (ugly) */
     
    28183074                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineGMR2, sizeof(*pCmd));
    28193075                Log(("vmsvgaFIFOLoop: SVGA_CMD_DEFINE_GMR2 id=%x %x pages\n", pCmd->gmrId, pCmd->numPages));
     3076                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineGmr2);
    28203077
    28213078                /* Validate current GMR id. */
     
    28253082                if (!pCmd->numPages)
    28263083                {
     3084                    STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineGmr2Free);
    28273085                    vmsvgaGMRFree(pThis, pCmd->gmrId);
    28283086                }
     
    28303088                {
    28313089                    PGMR pGMR = &pSVGAState->aGMR[pCmd->gmrId];
     3090                    if (pGMR->cMaxPages)
     3091                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineGmr2Modify);
     3092
    28323093                    pGMR->cMaxPages = pCmd->numPages;
     3094                    /* The rest is done by the REMAP_GMR2 command. */
    28333095                }
    2834                 /* everything done in remap */
    28353096                break;
    28363097            }
     
    28413102                SVGAFifoCmdRemapGMR2 *pCmd;
    28423103                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdRemapGMR2, sizeof(*pCmd));
     3104                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdRemapGmr2);
     3105
    28433106                uint32_t cbPageDesc = (pCmd->flags & SVGA_REMAP_GMR2_PPN64) ? sizeof(uint64_t) : sizeof(uint32_t);
    28443107                uint32_t cbCmd;
     
    29793242                RT_BZERO(&pCmd->screen.id, sizeof(*pCmd) - RT_OFFSETOF(SVGAFifoCmdDefineScreen, screen.structSize));
    29803243                VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineScreen, RT_MAX(sizeof(pCmd->screen.structSize), pCmd->screen.structSize));
     3244                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineScreen);
    29813245
    29823246                Log(("vmsvgaFIFOLoop: SVGA_CMD_DEFINE_SCREEN id=%x flags=%x size=(%d,%d) root=(%d,%d)\n", pCmd->screen.id, pCmd->screen.flags, pCmd->screen.size.width, pCmd->screen.size.height, pCmd->screen.root.x, pCmd->screen.root.y));
     
    30033267                SVGAFifoCmdDestroyScreen *pCmd;
    30043268                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDestroyScreen, sizeof(*pCmd));
     3269                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDestroyScreen);
    30053270
    30063271                Log(("vmsvgaFIFOLoop: SVGA_CMD_DESTROY_SCREEN id=%x\n", pCmd->screenId));
     
    30123277                SVGAFifoCmdDefineGMRFB *pCmd;
    30133278                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineGMRFB, sizeof(*pCmd));
     3279                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineGmrFb);
    30143280
    30153281                Log(("vmsvgaFIFOLoop: SVGA_CMD_DEFINE_GMRFB gmr=%x offset=%x bytesPerLine=%x bpp=%d color depth=%d\n", pCmd->ptr.gmrId, pCmd->ptr.offset, pCmd->bytesPerLine, pCmd->format.s.bitsPerPixel, pCmd->format.s.colorDepth));
     
    30253291                SVGAFifoCmdBlitGMRFBToScreen *pCmd;
    30263292                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdBlitGMRFBToScreen, sizeof(*pCmd));
     3293                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdBlitGmrFbToScreen);
    30273294
    30283295                Log(("vmsvgaFIFOLoop: SVGA_CMD_BLIT_GMRFB_TO_SCREEN src=(%d,%d) dest id=%d (%d,%d)(%d,%d)\n", pCmd->srcOrigin.x, pCmd->srcOrigin.y, pCmd->destScreenId, pCmd->destRect.left, pCmd->destRect.top, pCmd->destRect.right, pCmd->destRect.bottom));
     
    30703337                SVGAFifoCmdBlitScreenToGMRFB *pCmd;
    30713338                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdBlitScreenToGMRFB, sizeof(*pCmd));
     3339                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdBlitScreentoGmrFb);
    30723340
    30733341                /* Note! This can fetch 3d render results as well!! */
     
    30813349                SVGAFifoCmdAnnotationFill *pCmd;
    30823350                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdAnnotationFill, sizeof(*pCmd));
     3351                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdAnnotationFill);
    30833352
    30843353                Log(("vmsvgaFIFOLoop: SVGA_CMD_ANNOTATION_FILL red=%x green=%x blue=%x\n", pCmd->color.s.r, pCmd->color.s.g, pCmd->color.s.b));
     
    30913360                SVGAFifoCmdAnnotationCopy *pCmd;
    30923361                VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdAnnotationCopy, sizeof(*pCmd));
     3362                STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdAnnotationCopy);
    30933363
    30943364                Log(("vmsvgaFIFOLoop: SVGA_CMD_ANNOTATION_COPY\n"));
     
    31243394                        SVGA3dCmdDefineSurface *pCmd = (SVGA3dCmdDefineSurface *)(pHdr + 1);
    31253395                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3396                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSurfaceDefine);
    31263397
    31273398                        cMipLevels = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dSize);
     
    31393410                        SVGA3dCmdDefineSurface_v2 *pCmd = (SVGA3dCmdDefineSurface_v2 *)(pHdr + 1);
    31403411                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3412                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSurfaceDefineV2);
    31413413
    31423414                        cMipLevels = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dSize);
     
    31513423                        SVGA3dCmdDestroySurface *pCmd = (SVGA3dCmdDestroySurface *)(pHdr + 1);
    31523424                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3425                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSurfaceDestroy);
    31533426                        rc = vmsvga3dSurfaceDestroy(pThis, pCmd->sid);
    31543427                        break;
     
    31603433                        SVGA3dCmdSurfaceCopy *pCmd = (SVGA3dCmdSurfaceCopy *)(pHdr + 1);
    31613434                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3435                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSurfaceCopy);
    31623436
    31633437                        cCopyBoxes = (pHdr->size - sizeof(pCmd)) / sizeof(SVGA3dCopyBox);
     
    31703444                        SVGA3dCmdSurfaceStretchBlt *pCmd = (SVGA3dCmdSurfaceStretchBlt *)(pHdr + 1);
    31713445                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3446                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSurfaceStretchBlt);
    31723447
    31733448                        rc = vmsvga3dSurfaceStretchBlt(pThis, &pCmd->dest, &pCmd->boxDest, &pCmd->src, &pCmd->boxSrc, pCmd->mode);
     
    31803455                        SVGA3dCmdSurfaceDMA *pCmd = (SVGA3dCmdSurfaceDMA *)(pHdr + 1);
    31813456                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3457                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSurfaceDma);
    31823458
    31833459                        cCopyBoxes = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dCopyBox);
    3184                         STAM_PROFILE_START(&pSVGAState->StatR3CmdSurfaceDMA, a);
     3460                        STAM_PROFILE_START(&pSVGAState->StatR3Cmd3dSurfaceDmaProf, a);
    31853461                        rc = vmsvga3dSurfaceDMA(pThis, pCmd->guest, pCmd->host, pCmd->transfer, cCopyBoxes, (SVGA3dCopyBox *)(pCmd + 1));
    3186                         STAM_PROFILE_STOP(&pSVGAState->StatR3CmdSurfaceDMA, a);
     3462                        STAM_PROFILE_STOP(&pSVGAState->StatR3Cmd3dSurfaceDmaProf, a);
    31873463                        break;
    31883464                    }
     
    31933469                        SVGA3dCmdBlitSurfaceToScreen *pCmd = (SVGA3dCmdBlitSurfaceToScreen *)(pHdr + 1);
    31943470                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3471                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSurfaceScreen);
    31953472
    31963473                        cRects = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGASignedRect);
     
    32033480                        SVGA3dCmdDefineContext *pCmd = (SVGA3dCmdDefineContext *)(pHdr + 1);
    32043481                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3482                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dContextDefine);
    32053483
    32063484                        rc = vmsvga3dContextDefine(pThis, pCmd->cid);
     
    32123490                        SVGA3dCmdDestroyContext *pCmd = (SVGA3dCmdDestroyContext *)(pHdr + 1);
    32133491                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3492                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dContextDestroy);
    32143493
    32153494                        rc = vmsvga3dContextDestroy(pThis, pCmd->cid);
     
    32213500                        SVGA3dCmdSetTransform *pCmd = (SVGA3dCmdSetTransform *)(pHdr + 1);
    32223501                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3502                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetTransform);
    32233503
    32243504                        rc = vmsvga3dSetTransform(pThis, pCmd->cid, pCmd->type, pCmd->matrix);
     
    32303510                        SVGA3dCmdSetZRange *pCmd = (SVGA3dCmdSetZRange *)(pHdr + 1);
    32313511                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3512                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetZRange);
    32323513
    32333514                        rc = vmsvga3dSetZRange(pThis, pCmd->cid, pCmd->zRange);
     
    32403521                        SVGA3dCmdSetRenderState *pCmd = (SVGA3dCmdSetRenderState *)(pHdr + 1);
    32413522                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3523                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetRenderState);
    32423524
    32433525                        cRenderStates = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dRenderState);
     
    32503532                        SVGA3dCmdSetRenderTarget *pCmd = (SVGA3dCmdSetRenderTarget *)(pHdr + 1);
    32513533                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3534                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetRenderTarget);
    32523535
    32533536                        rc = vmsvga3dSetRenderTarget(pThis, pCmd->cid, pCmd->type, pCmd->target);
     
    32603543                        SVGA3dCmdSetTextureState *pCmd = (SVGA3dCmdSetTextureState *)(pHdr + 1);
    32613544                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3545                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetTextureState);
    32623546
    32633547                        cTextureStates = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dTextureState);
     
    32703554                        SVGA3dCmdSetMaterial *pCmd = (SVGA3dCmdSetMaterial *)(pHdr + 1);
    32713555                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3556                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetMaterial);
    32723557
    32733558                        rc = vmsvga3dSetMaterial(pThis, pCmd->cid, pCmd->face, &pCmd->material);
     
    32793564                        SVGA3dCmdSetLightData *pCmd = (SVGA3dCmdSetLightData *)(pHdr + 1);
    32803565                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3566                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetLightData);
    32813567
    32823568                        rc = vmsvga3dSetLightData(pThis, pCmd->cid, pCmd->index, &pCmd->data);
     
    32883574                        SVGA3dCmdSetLightEnabled *pCmd = (SVGA3dCmdSetLightEnabled *)(pHdr + 1);
    32893575                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3576                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetLightEnable);
    32903577
    32913578                        rc = vmsvga3dSetLightEnabled(pThis, pCmd->cid, pCmd->index, pCmd->enabled);
     
    32973584                        SVGA3dCmdSetViewport *pCmd = (SVGA3dCmdSetViewport *)(pHdr + 1);
    32983585                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3586                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetViewPort);
    32993587
    33003588                        rc = vmsvga3dSetViewPort(pThis, pCmd->cid, &pCmd->rect);
     
    33063594                        SVGA3dCmdSetClipPlane *pCmd = (SVGA3dCmdSetClipPlane *)(pHdr + 1);
    33073595                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3596                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetClipPlane);
    33083597
    33093598                        rc = vmsvga3dSetClipPlane(pThis, pCmd->cid, pCmd->index, pCmd->plane);
     
    33153604                        SVGA3dCmdClear  *pCmd = (SVGA3dCmdClear *)(pHdr + 1);
    33163605                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3606                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dClear);
     3607
    33173608                        uint32_t         cRects;
    3318 
    33193609                        cRects = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dRect);
    33203610                        rc = vmsvga3dCommandClear(pThis, pCmd->cid, pCmd->clearFlag, pCmd->color, pCmd->depth, pCmd->stencil, cRects, (SVGA3dRect *)(pCmd + 1));
     
    33273617                        SVGA3dCmdPresent *pCmd = (SVGA3dCmdPresent *)(pHdr + 1);
    33283618                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
    3329                         uint32_t          cRects;
    3330 
    3331                         cRects = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dCopyRect);
    3332 
    3333                         STAM_PROFILE_START(&pSVGAState->StatR3CmdPresent, a);
     3619                        if (enmCmdId == SVGA_3D_CMD_PRESENT)
     3620                            STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dPresent);
     3621                        else
     3622                            STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dPresentReadBack);
     3623
     3624                        uint32_t cRects = (pHdr->size - sizeof(*pCmd)) / sizeof(SVGA3dCopyRect);
     3625
     3626                        STAM_PROFILE_START(&pSVGAState->StatR3Cmd3dPresentProf, a);
    33343627                        rc = vmsvga3dCommandPresent(pThis, pCmd->sid, cRects, (SVGA3dCopyRect *)(pCmd + 1));
    3335                         STAM_PROFILE_STOP(&pSVGAState->StatR3CmdPresent, a);
     3628                        STAM_PROFILE_STOP(&pSVGAState->StatR3Cmd3dPresentProf, a);
    33363629                        break;
    33373630                    }
     
    33413634                        SVGA3dCmdDefineShader *pCmd = (SVGA3dCmdDefineShader *)(pHdr + 1);
    33423635                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
    3343                         uint32_t               cbData;
    3344 
    3345                         cbData = (pHdr->size - sizeof(*pCmd));
     3636                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dShaderDefine);
     3637
     3638                        uint32_t cbData = (pHdr->size - sizeof(*pCmd));
    33463639                        rc = vmsvga3dShaderDefine(pThis, pCmd->cid, pCmd->shid, pCmd->type, cbData, (uint32_t *)(pCmd + 1));
    33473640                        break;
     
    33523645                        SVGA3dCmdDestroyShader *pCmd = (SVGA3dCmdDestroyShader *)(pHdr + 1);
    33533646                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3647                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dShaderDestroy);
    33543648
    33553649                        rc = vmsvga3dShaderDestroy(pThis, pCmd->cid, pCmd->shid, pCmd->type);
     
    33613655                        SVGA3dCmdSetShader *pCmd = (SVGA3dCmdSetShader *)(pHdr + 1);
    33623656                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3657                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetShader);
    33633658
    33643659                        rc = vmsvga3dShaderSet(pThis, NULL, pCmd->cid, pCmd->type, pCmd->shid);
     
    33703665                        SVGA3dCmdSetShaderConst *pCmd = (SVGA3dCmdSetShaderConst *)(pHdr + 1);
    33713666                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3667                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetShaderConst);
    33723668
    33733669                        uint32_t cRegisters = (pHdr->size - sizeof(*pCmd)) / sizeof(pCmd->values) + 1;
     
    33803676                        SVGA3dCmdDrawPrimitives *pCmd = (SVGA3dCmdDrawPrimitives *)(pHdr + 1);
    33813677                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
    3382                         uint32_t                 cVertexDivisor;
    3383 
    3384                         cVertexDivisor = (pHdr->size - sizeof(*pCmd) - sizeof(SVGA3dVertexDecl) * pCmd->numVertexDecls - sizeof(SVGA3dPrimitiveRange) * pCmd->numRanges);
     3678                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dDrawPrimitives);
     3679
     3680                        uint32_t cVertexDivisor = (pHdr->size - sizeof(*pCmd) - sizeof(SVGA3dVertexDecl) * pCmd->numVertexDecls - sizeof(SVGA3dPrimitiveRange) * pCmd->numRanges);
    33853681                        Assert(pCmd->numRanges <= SVGA3D_MAX_DRAW_PRIMITIVE_RANGES);
    33863682                        Assert(pCmd->numVertexDecls <= SVGA3D_MAX_VERTEX_ARRAYS);
     
    33913687                        SVGA3dVertexDivisor  *pVertexDivisor = (cVertexDivisor) ? (SVGA3dVertexDivisor *)(&pNumRange[pCmd->numRanges]) : NULL;
    33923688
    3393                         STAM_PROFILE_START(&pSVGAState->StatR3CmdDrawPrimitive, a);
     3689                        STAM_PROFILE_START(&pSVGAState->StatR3Cmd3dDrawPrimitivesProf, a);
    33943690                        rc = vmsvga3dDrawPrimitives(pThis, pCmd->cid, pCmd->numVertexDecls, pVertexDecl, pCmd->numRanges, pNumRange, cVertexDivisor, pVertexDivisor);
    3395                         STAM_PROFILE_STOP(&pSVGAState->StatR3CmdDrawPrimitive, a);
     3691                        STAM_PROFILE_STOP(&pSVGAState->StatR3Cmd3dDrawPrimitivesProf, a);
    33963692                        break;
    33973693                    }
     
    34013697                        SVGA3dCmdSetScissorRect *pCmd = (SVGA3dCmdSetScissorRect *)(pHdr + 1);
    34023698                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3699                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dSetScissorRect);
    34033700
    34043701                        rc = vmsvga3dSetScissorRect(pThis, pCmd->cid, &pCmd->rect);
     
    34103707                        SVGA3dCmdBeginQuery *pCmd = (SVGA3dCmdBeginQuery *)(pHdr + 1);
    34113708                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3709                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dBeginQuery);
    34123710
    34133711                        rc = vmsvga3dQueryBegin(pThis, pCmd->cid, pCmd->type);
     
    34193717                        SVGA3dCmdEndQuery *pCmd = (SVGA3dCmdEndQuery *)(pHdr + 1);
    34203718                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3719                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dEndQuery);
    34213720
    34223721                        rc = vmsvga3dQueryEnd(pThis, pCmd->cid, pCmd->type, pCmd->guestResult);
     
    34283727                        SVGA3dCmdWaitForQuery *pCmd = (SVGA3dCmdWaitForQuery *)(pHdr + 1);
    34293728                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3729                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dWaitForQuery);
    34303730
    34313731                        rc = vmsvga3dQueryWait(pThis, pCmd->cid, pCmd->type, pCmd->guestResult);
     
    34373737                        SVGA3dCmdGenerateMipmaps *pCmd = (SVGA3dCmdGenerateMipmaps *)(pHdr + 1);
    34383738                        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     3739                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dGenerateMipmaps);
    34393740
    34403741                        rc = vmsvga3dGenerateMipmaps(pThis, pCmd->sid, pCmd->filter);
     
    34433744
    34443745                    case SVGA_3D_CMD_ACTIVATE_SURFACE:
     3746                        /* context id + surface id? */
     3747                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dActivateSurface);
     3748                        break;
    34453749                    case SVGA_3D_CMD_DEACTIVATE_SURFACE:
    34463750                        /* context id + surface id? */
     3751                        STAM_REL_COUNTER_INC(&pSVGAState->StatR3Cmd3dDeactivateSurface);
    34473752                        break;
    34483753
    34493754                    default:
    34503755                        STAM_REL_COUNTER_INC(&pSVGAState->StatFifoUnkCmds);
    3451                         AssertFailed();
     3756                        AssertMsgFailed(("enmCmdId=%d\n", enmCmdId));
    34523757                        break;
    34533758                    }
     
    34573762                {
    34583763                    STAM_REL_COUNTER_INC(&pSVGAState->StatFifoUnkCmds);
    3459                     AssertFailed();
     3764                    AssertMsgFailed(("enmCmdId=%d\n", enmCmdId));
    34603765                }
    34613766            }
     
    43574662     * Statistics.
    43584663     */
    4359     STAM_REG(pVM, &pSVGAState->StatR3CmdPresent,        STAMTYPE_PROFILE, "/Devices/VMSVGA/3d/Cmd/Present",  STAMUNIT_TICKS_PER_CALL, "Profiling of Present.");
    4360     STAM_REG(pVM, &pSVGAState->StatR3CmdDrawPrimitive,  STAMTYPE_PROFILE, "/Devices/VMSVGA/3d/Cmd/DrawPrimitive",  STAMUNIT_TICKS_PER_CALL, "Profiling of DrawPrimitive.");
    4361     STAM_REG(pVM, &pSVGAState->StatR3CmdSurfaceDMA,     STAMTYPE_PROFILE, "/Devices/VMSVGA/3d/Cmd/SurfaceDMA",  STAMUNIT_TICKS_PER_CALL, "Profiling of SurfaceDMA.");
     4664    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dActivateSurface,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dActivateSurface",    STAMUNIT_OCCURENCES, "SVGA_3D_CMD_ACTIVATE_SURFACE");
     4665    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dBeginQuery,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dBeginQuery",         STAMUNIT_OCCURENCES, "SVGA_3D_CMD_BEGIN_QUERY");
     4666    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dClear,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dClear",              STAMUNIT_OCCURENCES, "SVGA_3D_CMD_CLEAR");
     4667    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dContextDefine,        STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dContextDefine",      STAMUNIT_OCCURENCES, "SVGA_3D_CMD_CONTEXT_DEFINE");
     4668    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dContextDestroy,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dContextDestroy",     STAMUNIT_OCCURENCES, "SVGA_3D_CMD_CONTEXT_DESTROY");
     4669    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dDeactivateSurface,    STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dDeactivateSurface",  STAMUNIT_OCCURENCES, "SVGA_3D_CMD_DEACTIVATE_SURFACE");
     4670    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dDrawPrimitives,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dDrawPrimitives",     STAMUNIT_OCCURENCES, "SVGA_3D_CMD_DRAW_PRIMITIVES");
     4671    STAM_REG(pVM,     &pSVGAState->StatR3Cmd3dDrawPrimitivesProf,   STAMTYPE_PROFILE, "/Devices/VMSVGA/Cmd/3dDrawPrimitivesProf", STAMUNIT_TICKS_PER_CALL, "Profiling of SVGA_3D_CMD_DRAW_PRIMITIVES.");
     4672    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dEndQuery,             STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dEndQuery",           STAMUNIT_OCCURENCES, "SVGA_3D_CMD_END_QUERY");
     4673    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dGenerateMipmaps,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dGenerateMipmaps",    STAMUNIT_OCCURENCES, "SVGA_3D_CMD_GENERATE_MIPMAPS");
     4674    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dPresent,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dPresent",            STAMUNIT_OCCURENCES, "SVGA_3D_CMD_PRESENT");
     4675    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dPresentReadBack,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dPresentReadBack",    STAMUNIT_OCCURENCES, "SVGA_3D_CMD_PRESENT_READBACK");
     4676    STAM_REG(pVM,     &pSVGAState->StatR3Cmd3dPresentProf,          STAMTYPE_PROFILE, "/Devices/VMSVGA/Cmd/3dPresentProfBoth",    STAMUNIT_TICKS_PER_CALL, "Profiling of SVGA_3D_CMD_PRESENT and SVGA_3D_CMD_PRESENT_READBACK.");
     4677    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetClipPlane,         STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetClipPlane",       STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETCLIPPLANE");
     4678    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetLightData,         STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetLightData",       STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETLIGHTDATA");
     4679    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetLightEnable,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetLightEnable",     STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETLIGHTENABLE");
     4680    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetMaterial,          STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetMaterial",        STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETMATERIAL");
     4681    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetRenderState,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetRenderState",     STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETRENDERSTATE");
     4682    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetRenderTarget,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetRenderTarget",    STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETRENDERTARGET");
     4683    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetScissorRect,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetScissorRect",     STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETSCISSORRECT");
     4684    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetShader,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetShader",          STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SET_SHADER");
     4685    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetShaderConst,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetShaderConst",     STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SET_SHADER_CONST");
     4686    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetTextureState,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetTextureState",    STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETTEXTURESTATE");
     4687    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetTransform,         STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetTransform",       STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETTRANSFORM");
     4688    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetViewPort,          STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetViewPort",        STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETVIEWPORT");
     4689    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSetZRange,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSetZRange",          STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SETZRANGE");
     4690    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dShaderDefine,         STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dShaderDefine",       STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SHADER_DEFINE");
     4691    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dShaderDestroy,        STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dShaderDestroy",      STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SHADER_DESTROY");
     4692    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSurfaceCopy,          STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSurfaceCopy",        STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SURFACE_COPY");
     4693    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSurfaceDefine,        STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSurfaceDefine",      STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SURFACE_DEFINE");
     4694    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSurfaceDefineV2,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSurfaceDefineV2",    STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SURFACE_DEFINE_V2");
     4695    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSurfaceDestroy,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSurfaceDestroy",     STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SURFACE_DESTROY");
     4696    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSurfaceDma,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSurfaceDma",         STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SURFACE_DMA");
     4697    STAM_REG(pVM,     &pSVGAState->StatR3Cmd3dSurfaceDmaProf,       STAMTYPE_PROFILE, "/Devices/VMSVGA/Cmd/3dSurfaceDmaProf",     STAMUNIT_TICKS_PER_CALL, "Profiling of SVGA_3D_CMD_SURFACE_DMA.");
     4698    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSurfaceScreen,        STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSurfaceScreen",      STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SURFACE_SCREEN");
     4699    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dSurfaceStretchBlt,    STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dSurfaceStretchBlt",  STAMUNIT_OCCURENCES, "SVGA_3D_CMD_SURFACE_STRETCHBLT");
     4700    STAM_REL_REG(pVM, &pSVGAState->StatR3Cmd3dWaitForQuery,         STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/3dWaitForQuery",       STAMUNIT_OCCURENCES, "SVGA_3D_CMD_WAIT_FOR_QUERY");
     4701    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdAnnotationCopy,         STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/AnnotationCopy",       STAMUNIT_OCCURENCES, "SVGA_CMD_ANNOTATION_COPY");
     4702    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdAnnotationFill,         STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/AnnotationFill",       STAMUNIT_OCCURENCES, "SVGA_CMD_ANNOTATION_FILL");
     4703    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdBlitGmrFbToScreen,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/BlitGmrFbToScreen",    STAMUNIT_OCCURENCES, "SVGA_CMD_BLIT_GMRFB_TO_SCREEN");
     4704    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdBlitScreentoGmrFb,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/BlitScreentoGmrFb",    STAMUNIT_OCCURENCES, "SVGA_CMD_BLIT_SCREEN_TO_GMRFB");
     4705    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdDefineAlphaCursor,      STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/DefineAlphaCursor",    STAMUNIT_OCCURENCES, "SVGA_CMD_DEFINE_ALPHA_CURSOR");
     4706    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdDefineCursor,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/DefineCursor",         STAMUNIT_OCCURENCES, "SVGA_CMD_DEFINE_CURSOR");
     4707    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdDefineGmr2,             STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/DefineGmr2",           STAMUNIT_OCCURENCES, "SVGA_CMD_DEFINE_GMR2");
     4708    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdDefineGmr2Free,         STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/DefineGmr2/Free",      STAMUNIT_OCCURENCES, "Number of SVGA_CMD_DEFINE_GMR2 commands that only frees.");
     4709    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdDefineGmr2Modify,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/DefineGmr2/Modify",    STAMUNIT_OCCURENCES, "Number of SVGA_CMD_DEFINE_GMR2 commands that redefines a non-free GMR.");
     4710    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdDefineGmrFb,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/DefineGmrFb",          STAMUNIT_OCCURENCES, "SVGA_CMD_DEFINE_GMRFB");
     4711    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdDefineScreen,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/DefineScreen",         STAMUNIT_OCCURENCES, "SVGA_CMD_DEFINE_SCREEN");
     4712    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdDestroyScreen,          STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/DestroyScreen",        STAMUNIT_OCCURENCES, "SVGA_CMD_DESTROY_SCREEN");
     4713    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdEscape,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/Escape",               STAMUNIT_OCCURENCES, "SVGA_CMD_ESCAPE");
     4714    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdFence,                  STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/Fence",                STAMUNIT_OCCURENCES, "SVGA_CMD_FENCE");
     4715    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdInvalidCmd,             STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/InvalidCmd",           STAMUNIT_OCCURENCES, "SVGA_CMD_INVALID_CMD");
     4716    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdRemapGmr2,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/RemapGmr2",            STAMUNIT_OCCURENCES, "SVGA_CMD_REMAP_GMR2.");
     4717    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdRemapGmr2Modify,        STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/RemapGmr2/Modify",     STAMUNIT_OCCURENCES, "Number of SVGA_CMD_REMAP_GMR2 commands that modifies rather than complete the definition of a GMR.");
     4718    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdUpdate,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/Update",               STAMUNIT_OCCURENCES, "SVGA_CMD_UPATE");
     4719    STAM_REL_REG(pVM, &pSVGAState->StatR3CmdUpdateVerbose,          STAMTYPE_COUNTER, "/Devices/VMSVGA/Cmd/UpdateVerbose",        STAMUNIT_OCCURENCES, "SVGA_CMD_UPDATE_VERBOSE");
     4720
     4721    STAM_REL_REG(pVM, &pSVGAState->StatR3RegConfigDoneWr,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/ConfigDoneWrite",            STAMUNIT_OCCURENCES, "SVGA_REG_CONFIG_DONE writes");
     4722    STAM_REL_REG(pVM, &pSVGAState->StatR3RegGmrDescriptorWr,        STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GmrDescriptorWrite",         STAMUNIT_OCCURENCES, "SVGA_REG_GMR_DESCRIPTOR writes");
     4723    STAM_REL_REG(pVM, &pSVGAState->StatR3RegGmrDescriptorWrErrors,  STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GmrDescriptorWrite/Errors",  STAMUNIT_OCCURENCES, "Number of erroneous SVGA_REG_GMR_DESCRIPTOR commands.");
     4724    STAM_REL_REG(pVM, &pSVGAState->StatR3RegGmrDescriptorWrFree,    STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GmrDescriptorWrite/Free",    STAMUNIT_OCCURENCES, "Number of SVGA_REG_GMR_DESCRIPTOR commands only freeing the GMR.");
     4725    STAM_REL_REG(pVM, &pThis->svga.StatRegBitsPerPixelWr,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/BitsPerPixelWrite",          STAMUNIT_OCCURENCES, "SVGA_REG_BITS_PER_PIXEL writes.");
     4726    STAM_REL_REG(pVM, &pThis->svga.StatRegBusyWr,                   STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/BusyWrite",                  STAMUNIT_OCCURENCES, "SVGA_REG_BUSY writes.");
     4727    STAM_REL_REG(pVM, &pThis->svga.StatRegCursorXxxxWr,             STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/CursorXxxxWrite",            STAMUNIT_OCCURENCES, "SVGA_REG_CURSOR_XXXX writes.");
     4728    STAM_REL_REG(pVM, &pThis->svga.StatRegDepthWr,                  STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DepthWrite",                 STAMUNIT_OCCURENCES, "SVGA_REG_DEPTH writes.");
     4729    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayHeightWr,          STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayHeightWrite",         STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_HEIGHT writes.");
     4730    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayIdWr,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayIdWrite",             STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_ID writes.");
     4731    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayIsPrimaryWr,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayIsPrimaryWrite",      STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_IS_PRIMARY writes.");
     4732    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayPositionXWr,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayPositionXWrite",      STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_POSITION_X writes.");
     4733    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayPositionYWr,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayPositionYWrite",      STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_POSITION_Y writes.");
     4734    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayWidthWr,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayWidthWrite",          STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_WIDTH writes.");
     4735    STAM_REL_REG(pVM, &pThis->svga.StatRegEnableWr,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/EnableWrite",                STAMUNIT_OCCURENCES, "SVGA_REG_ENABLE writes.");
     4736    STAM_REL_REG(pVM, &pThis->svga.StatRegGmrIdWr,                  STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GmrIdWrite",                 STAMUNIT_OCCURENCES, "SVGA_REG_GMR_ID writes.");
     4737    STAM_REL_REG(pVM, &pThis->svga.StatRegGuestIdWr,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GuestIdWrite",               STAMUNIT_OCCURENCES, "SVGA_REG_GUEST_ID writes.");
     4738    STAM_REL_REG(pVM, &pThis->svga.StatRegHeightWr,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/HeightWrite",                STAMUNIT_OCCURENCES, "SVGA_REG_HEIGHT writes.");
     4739    STAM_REL_REG(pVM, &pThis->svga.StatRegIdWr,                     STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/IdWrite",                    STAMUNIT_OCCURENCES, "SVGA_REG_ID writes.");
     4740    STAM_REL_REG(pVM, &pThis->svga.StatRegIrqMaskWr,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/IrqMaskWrite",               STAMUNIT_OCCURENCES, "SVGA_REG_IRQMASK writes.");
     4741    STAM_REL_REG(pVM, &pThis->svga.StatRegNumDisplaysWr,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/NumDisplaysWrite",           STAMUNIT_OCCURENCES, "SVGA_REG_NUM_DISPLAYS writes.");
     4742    STAM_REL_REG(pVM, &pThis->svga.StatRegNumGuestDisplaysWr,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/NumGuestDisplaysWrite",      STAMUNIT_OCCURENCES, "SVGA_REG_NUM_GUEST_DISPLAYS writes.");
     4743    STAM_REL_REG(pVM, &pThis->svga.StatRegPaletteWr,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/PaletteWrite",               STAMUNIT_OCCURENCES, "SVGA_PALETTE_XXXX writes.");
     4744    STAM_REL_REG(pVM, &pThis->svga.StatRegPitchLockWr,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/PitchLockWrite",             STAMUNIT_OCCURENCES, "SVGA_REG_PITCHLOCK writes.");
     4745    STAM_REL_REG(pVM, &pThis->svga.StatRegPseudoColorWr,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/PseudoColorWrite",           STAMUNIT_OCCURENCES, "SVGA_REG_PSEUDOCOLOR writes.");
     4746    STAM_REL_REG(pVM, &pThis->svga.StatRegReadOnlyWr,               STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/ReadOnlyWrite",              STAMUNIT_OCCURENCES, "Read-only SVGA_REG_XXXX writes.");
     4747    STAM_REL_REG(pVM, &pThis->svga.StatRegScratchWr,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/ScratchWrite",               STAMUNIT_OCCURENCES, "SVGA_REG_SCRATCH_XXXX writes.");
     4748    STAM_REL_REG(pVM, &pThis->svga.StatRegSyncWr,                   STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/SyncWrite",                  STAMUNIT_OCCURENCES, "SVGA_REG_SYNC writes.");
     4749    STAM_REL_REG(pVM, &pThis->svga.StatRegTopWr,                    STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/TopWrite",                   STAMUNIT_OCCURENCES, "SVGA_REG_TOP writes.");
     4750    STAM_REL_REG(pVM, &pThis->svga.StatRegTracesWr,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/TracesWrite",                STAMUNIT_OCCURENCES, "SVGA_REG_TRACES writes.");
     4751    STAM_REL_REG(pVM, &pThis->svga.StatRegUnknownWr,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/UnknownWrite",               STAMUNIT_OCCURENCES, "Writes to unknown register.");
     4752    STAM_REL_REG(pVM, &pThis->svga.StatRegWidthWr,                  STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/WidthWrite",                 STAMUNIT_OCCURENCES, "SVGA_REG_WIDTH writes.");
     4753
     4754    STAM_REL_REG(pVM, &pThis->svga.StatRegBitsPerPixelRd,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/BitsPerPixelRead",           STAMUNIT_OCCURENCES, "SVGA_REG_BITS_PER_PIXEL reads.");
     4755    STAM_REL_REG(pVM, &pThis->svga.StatRegBlueMaskRd,               STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/BlueMaskRead",               STAMUNIT_OCCURENCES, "SVGA_REG_BLUE_MASK reads.");
     4756    STAM_REL_REG(pVM, &pThis->svga.StatRegBusyRd,                   STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/BusyRead",                   STAMUNIT_OCCURENCES, "SVGA_REG_BUSY reads.");
     4757    STAM_REL_REG(pVM, &pThis->svga.StatRegBytesPerLineRd,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/BytesPerLineRead",           STAMUNIT_OCCURENCES, "SVGA_REG_BYTES_PER_LINE reads.");
     4758    STAM_REL_REG(pVM, &pThis->svga.StatRegCapabilitesRd,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/CapabilitesRead",            STAMUNIT_OCCURENCES, "SVGA_REG_CAPABILITIES reads.");
     4759    STAM_REL_REG(pVM, &pThis->svga.StatRegConfigDoneRd,             STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/ConfigDoneRead",             STAMUNIT_OCCURENCES, "SVGA_REG_CONFIG_DONE reads.");
     4760    STAM_REL_REG(pVM, &pThis->svga.StatRegCursorXxxxRd,             STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/CursorXxxxRead",             STAMUNIT_OCCURENCES, "SVGA_REG_CURSOR_XXXX reads.");
     4761    STAM_REL_REG(pVM, &pThis->svga.StatRegDepthRd,                  STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DepthRead",                  STAMUNIT_OCCURENCES, "SVGA_REG_DEPTH reads.");
     4762    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayHeightRd,          STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayHeightRead",          STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_HEIGHT reads.");
     4763    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayIdRd,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayIdRead",              STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_ID reads.");
     4764    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayIsPrimaryRd,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayIsPrimaryRead",       STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_IS_PRIMARY reads.");
     4765    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayPositionXRd,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayPositionXRead",       STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_POSITION_X reads.");
     4766    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayPositionYRd,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayPositionYRead",       STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_POSITION_Y reads.");
     4767    STAM_REL_REG(pVM, &pThis->svga.StatRegDisplayWidthRd,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/DisplayWidthRead",           STAMUNIT_OCCURENCES, "SVGA_REG_DISPLAY_WIDTH reads.");
     4768    STAM_REL_REG(pVM, &pThis->svga.StatRegEnableRd,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/EnableRead",                 STAMUNIT_OCCURENCES, "SVGA_REG_ENABLE reads.");
     4769    STAM_REL_REG(pVM, &pThis->svga.StatRegFbOffsetRd,               STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/FbOffsetRead",               STAMUNIT_OCCURENCES, "SVGA_REG_FB_OFFSET reads.");
     4770    STAM_REL_REG(pVM, &pThis->svga.StatRegFbSizeRd,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/FbSizeRead",                 STAMUNIT_OCCURENCES, "SVGA_REG_FB_SIZE reads.");
     4771    STAM_REL_REG(pVM, &pThis->svga.StatRegFbStartRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/FbStartRead",                STAMUNIT_OCCURENCES, "SVGA_REG_FB_START reads.");
     4772    STAM_REL_REG(pVM, &pThis->svga.StatRegGmrIdRd,                  STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GmrIdRead",                  STAMUNIT_OCCURENCES, "SVGA_REG_GMR_ID reads.");
     4773    STAM_REL_REG(pVM, &pThis->svga.StatRegGmrMaxDescriptorLengthRd, STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GmrMaxDescriptorLengthRead", STAMUNIT_OCCURENCES, "SVGA_REG_GMR_MAX_DESCRIPTOR_LENGTH reads.");
     4774    STAM_REL_REG(pVM, &pThis->svga.StatRegGmrMaxIdsRd,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GmrMaxIdsRead",              STAMUNIT_OCCURENCES, "SVGA_REG_GMR_MAX_IDS reads.");
     4775    STAM_REL_REG(pVM, &pThis->svga.StatRegGmrsMaxPagesRd,           STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GmrsMaxPagesRead",           STAMUNIT_OCCURENCES, "SVGA_REG_GMRS_MAX_PAGES reads.");
     4776    STAM_REL_REG(pVM, &pThis->svga.StatRegGreenMaskRd,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GreenMaskRead",              STAMUNIT_OCCURENCES, "SVGA_REG_GREEN_MASK reads.");
     4777    STAM_REL_REG(pVM, &pThis->svga.StatRegGuestIdRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/GuestIdRead",                STAMUNIT_OCCURENCES, "SVGA_REG_GUEST_ID reads.");
     4778    STAM_REL_REG(pVM, &pThis->svga.StatRegHeightRd,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/HeightRead",                 STAMUNIT_OCCURENCES, "SVGA_REG_HEIGHT reads.");
     4779    STAM_REL_REG(pVM, &pThis->svga.StatRegHostBitsPerPixelRd,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/HostBitsPerPixelRead",       STAMUNIT_OCCURENCES, "SVGA_REG_HOST_BITS_PER_PIXEL reads.");
     4780    STAM_REL_REG(pVM, &pThis->svga.StatRegIdRd,                     STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/IdRead",                     STAMUNIT_OCCURENCES, "SVGA_REG_ID reads.");
     4781    STAM_REL_REG(pVM, &pThis->svga.StatRegIrqMaskRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/IrqMaskRead",                STAMUNIT_OCCURENCES, "SVGA_REG_IRQ_MASK reads.");
     4782    STAM_REL_REG(pVM, &pThis->svga.StatRegMaxHeightRd,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/MaxHeightRead",              STAMUNIT_OCCURENCES, "SVGA_REG_MAX_HEIGHT reads.");
     4783    STAM_REL_REG(pVM, &pThis->svga.StatRegMaxWidthRd,               STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/MaxWidthRead",               STAMUNIT_OCCURENCES, "SVGA_REG_MAX_WIDTH reads.");
     4784    STAM_REL_REG(pVM, &pThis->svga.StatRegMemorySizeRd,             STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/MemorySizeRead",             STAMUNIT_OCCURENCES, "SVGA_REG_MEMORY_SIZE reads.");
     4785    STAM_REL_REG(pVM, &pThis->svga.StatRegMemRegsRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/MemRegsRead",                STAMUNIT_OCCURENCES, "SVGA_REG_MEM_REGS reads.");
     4786    STAM_REL_REG(pVM, &pThis->svga.StatRegMemSizeRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/MemSizeRead",                STAMUNIT_OCCURENCES, "SVGA_REG_MEM_SIZE reads.");
     4787    STAM_REL_REG(pVM, &pThis->svga.StatRegMemStartRd,               STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/MemStartRead",               STAMUNIT_OCCURENCES, "SVGA_REG_MEM_START reads.");
     4788    STAM_REL_REG(pVM, &pThis->svga.StatRegNumDisplaysRd,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/NumDisplaysRead",            STAMUNIT_OCCURENCES, "SVGA_REG_NUM_DISPLAYS reads.");
     4789    STAM_REL_REG(pVM, &pThis->svga.StatRegNumGuestDisplaysRd,       STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/NumGuestDisplaysRead",       STAMUNIT_OCCURENCES, "SVGA_REG_NUM_GUEST_DISPLAYS reads.");
     4790    STAM_REL_REG(pVM, &pThis->svga.StatRegPaletteRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/PaletteRead",                STAMUNIT_OCCURENCES, "SVGA_REG_PLAETTE_XXXX reads.");
     4791    STAM_REL_REG(pVM, &pThis->svga.StatRegPitchLockRd,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/PitchLockRead",              STAMUNIT_OCCURENCES, "SVGA_REG_PITCHLOCK reads.");
     4792    STAM_REL_REG(pVM, &pThis->svga.StatRegPsuedoColorRd,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/PsuedoColorRead",            STAMUNIT_OCCURENCES, "SVGA_REG_PSEUDOCOLOR reads.");
     4793    STAM_REL_REG(pVM, &pThis->svga.StatRegRedMaskRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/RedMaskRead",                STAMUNIT_OCCURENCES, "SVGA_REG_RED_MASK reads.");
     4794    STAM_REL_REG(pVM, &pThis->svga.StatRegScratchRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/ScratchRead",                STAMUNIT_OCCURENCES, "SVGA_REG_SCRATCH reads.");
     4795    STAM_REL_REG(pVM, &pThis->svga.StatRegScratchSizeRd,            STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/ScratchSizeRead",            STAMUNIT_OCCURENCES, "SVGA_REG_SCRATCH_SIZE reads.");
     4796    STAM_REL_REG(pVM, &pThis->svga.StatRegSyncRd,                   STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/SyncRead",                   STAMUNIT_OCCURENCES, "SVGA_REG_SYNC reads.");
     4797    STAM_REL_REG(pVM, &pThis->svga.StatRegTopRd,                    STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/TopRead",                    STAMUNIT_OCCURENCES, "SVGA_REG_TOP reads.");
     4798    STAM_REL_REG(pVM, &pThis->svga.StatRegTracesRd,                 STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/TracesRead",                 STAMUNIT_OCCURENCES, "SVGA_REG_TRACES reads.");
     4799    STAM_REL_REG(pVM, &pThis->svga.StatRegUnknownRd,                STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/UnknownRead",                STAMUNIT_OCCURENCES, "SVGA_REG_UNKNOWN reads.");
     4800    STAM_REL_REG(pVM, &pThis->svga.StatRegVramSizeRd,               STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/VramSizeRead",               STAMUNIT_OCCURENCES, "SVGA_REG_VRAM_SIZE reads.");
     4801    STAM_REL_REG(pVM, &pThis->svga.StatRegWidthRd,                  STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/WidthRead",                  STAMUNIT_OCCURENCES, "SVGA_REG_WIDTH reads.");
     4802    STAM_REL_REG(pVM, &pThis->svga.StatRegWriteOnlyRd,              STAMTYPE_COUNTER, "/Devices/VMSVGA/Reg/WriteOnlyRead",              STAMUNIT_OCCURENCES, "Write-only SVGA_REG_XXXX reads.");
     4803
    43624804    STAM_REL_REG(pVM, &pSVGAState->StatBusyDelayEmts,   STAMTYPE_PROFILE, "/Devices/VMSVGA/EmtDelayOnBusyFifo",  STAMUNIT_TICKS_PER_CALL, "Time we've delayed EMTs because of busy FIFO thread.");
    43634805    STAM_REL_REG(pVM, &pSVGAState->StatFifoCommands,    STAMTYPE_COUNTER, "/Devices/VMSVGA/FifoCommands",  STAMUNIT_OCCURENCES, "FIFO command counter.");
  • trunk/src/VBox/Devices/Graphics/DevVGA.h

    r65193 r65265  
    357357    PGMPHYSHANDLERTYPE          hFifoAccessHandlerType;
    358358# endif
     359
     360    STAMCOUNTER                 StatRegBitsPerPixelWr;
     361    STAMCOUNTER                 StatRegBusyWr;
     362    STAMCOUNTER                 StatRegCursorXxxxWr;
     363    STAMCOUNTER                 StatRegDepthWr;
     364    STAMCOUNTER                 StatRegDisplayHeightWr;
     365    STAMCOUNTER                 StatRegDisplayIdWr;
     366    STAMCOUNTER                 StatRegDisplayIsPrimaryWr;
     367    STAMCOUNTER                 StatRegDisplayPositionXWr;
     368    STAMCOUNTER                 StatRegDisplayPositionYWr;
     369    STAMCOUNTER                 StatRegDisplayWidthWr;
     370    STAMCOUNTER                 StatRegEnableWr;
     371    STAMCOUNTER                 StatRegGmrIdWr;
     372    STAMCOUNTER                 StatRegGuestIdWr;
     373    STAMCOUNTER                 StatRegHeightWr;
     374    STAMCOUNTER                 StatRegIdWr;
     375    STAMCOUNTER                 StatRegIrqMaskWr;
     376    STAMCOUNTER                 StatRegNumDisplaysWr;
     377    STAMCOUNTER                 StatRegNumGuestDisplaysWr;
     378    STAMCOUNTER                 StatRegPaletteWr;
     379    STAMCOUNTER                 StatRegPitchLockWr;
     380    STAMCOUNTER                 StatRegPseudoColorWr;
     381    STAMCOUNTER                 StatRegReadOnlyWr;
     382    STAMCOUNTER                 StatRegScratchWr;
     383    STAMCOUNTER                 StatRegSyncWr;
     384    STAMCOUNTER                 StatRegTopWr;
     385    STAMCOUNTER                 StatRegTracesWr;
     386    STAMCOUNTER                 StatRegUnknownWr;
     387    STAMCOUNTER                 StatRegWidthWr;
     388
     389    STAMCOUNTER                 StatRegBitsPerPixelRd;
     390    STAMCOUNTER                 StatRegBlueMaskRd;
     391    STAMCOUNTER                 StatRegBusyRd;
     392    STAMCOUNTER                 StatRegBytesPerLineRd;
     393    STAMCOUNTER                 StatRegCapabilitesRd;
     394    STAMCOUNTER                 StatRegConfigDoneRd;
     395    STAMCOUNTER                 StatRegCursorXxxxRd;
     396    STAMCOUNTER                 StatRegDepthRd;
     397    STAMCOUNTER                 StatRegDisplayHeightRd;
     398    STAMCOUNTER                 StatRegDisplayIdRd;
     399    STAMCOUNTER                 StatRegDisplayIsPrimaryRd;
     400    STAMCOUNTER                 StatRegDisplayPositionXRd;
     401    STAMCOUNTER                 StatRegDisplayPositionYRd;
     402    STAMCOUNTER                 StatRegDisplayWidthRd;
     403    STAMCOUNTER                 StatRegEnableRd;
     404    STAMCOUNTER                 StatRegFbOffsetRd;
     405    STAMCOUNTER                 StatRegFbSizeRd;
     406    STAMCOUNTER                 StatRegFbStartRd;
     407    STAMCOUNTER                 StatRegGmrIdRd;
     408    STAMCOUNTER                 StatRegGmrMaxDescriptorLengthRd;
     409    STAMCOUNTER                 StatRegGmrMaxIdsRd;
     410    STAMCOUNTER                 StatRegGmrsMaxPagesRd;
     411    STAMCOUNTER                 StatRegGreenMaskRd;
     412    STAMCOUNTER                 StatRegGuestIdRd;
     413    STAMCOUNTER                 StatRegHeightRd;
     414    STAMCOUNTER                 StatRegHostBitsPerPixelRd;
     415    STAMCOUNTER                 StatRegIdRd;
     416    STAMCOUNTER                 StatRegIrqMaskRd;
     417    STAMCOUNTER                 StatRegMaxHeightRd;
     418    STAMCOUNTER                 StatRegMaxWidthRd;
     419    STAMCOUNTER                 StatRegMemorySizeRd;
     420    STAMCOUNTER                 StatRegMemRegsRd;
     421    STAMCOUNTER                 StatRegMemSizeRd;
     422    STAMCOUNTER                 StatRegMemStartRd;
     423    STAMCOUNTER                 StatRegNumDisplaysRd;
     424    STAMCOUNTER                 StatRegNumGuestDisplaysRd;
     425    STAMCOUNTER                 StatRegPaletteRd;
     426    STAMCOUNTER                 StatRegPitchLockRd;
     427    STAMCOUNTER                 StatRegPsuedoColorRd;
     428    STAMCOUNTER                 StatRegRedMaskRd;
     429    STAMCOUNTER                 StatRegScratchRd;
     430    STAMCOUNTER                 StatRegScratchSizeRd;
     431    STAMCOUNTER                 StatRegSyncRd;
     432    STAMCOUNTER                 StatRegTopRd;
     433    STAMCOUNTER                 StatRegTracesRd;
     434    STAMCOUNTER                 StatRegUnknownRd;
     435    STAMCOUNTER                 StatRegVramSizeRd;
     436    STAMCOUNTER                 StatRegWidthRd;
     437    STAMCOUNTER                 StatRegWriteOnlyRd;
    359438} VMSVGAState;
    360439#endif /* VBOX_WITH_VMSVGA */
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette