VirtualBox

Changeset 41637 in vbox for trunk/src/VBox/Additions/WINNT


Ignore:
Timestamp:
Jun 9, 2012 12:57:58 PM (13 years ago)
Author:
vboxsync
Message:

wddm/3d: some fixes + profiling & debugging

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp

    r41475 r41637  
    3535
    3636#ifdef VBOX_WDDMDISP_WITH_PROFILE
    37 #include "VBoxDispProfile.h"
     37
     38volatile uint32_t g_u32VBoxDispProfileFunctionLoggerIndex = 0;
     39
     40struct VBOXDISPPROFILE_GLOBAL {
     41    VBoxDispProfileFpsCounter ProfileDdiFps;
     42    VBoxDispProfileSet ProfileDdiFunc;
     43} g_VBoxDispProfile;
    3844
    3945/* uncomment to enable particular logging */
    40 #define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_ENABLE
    41 //#define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_ENABLE
    42 
    43 #ifdef VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_ENABLE
    44 static VBoxDispProfileSet g_VBoxDispProfileDDI("D3D_DDI");
    45 #define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_PROLOGUE() VBOXDISPPROFILE_FUNCTION_LOGGER_DEFINE(g_VBoxDispProfileDDI)
    46 #define VBOXDDIROFILE_FUNCTION_LOGGER_DUMP() do {\
    47         g_VBoxDispProfileDDI.dump(_pDev); \
     46/* allows dumping fps + how much time is spent in ddi functions in comparison with the rest time */
     47//# define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_ENABLE
     48/* allows dumping time spent in each function and the number of calls made for any given function */
     49# define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_ENABLE
     50
     51# ifdef VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_ENABLE
     52
     53extern volatile uint32_t g_u322VBoxDispProfileFunctionLoggerIndex = 0;
     54
     55//static VBoxDispProfileSet g_VBoxDispProfileDDI("D3D_DDI");
     56#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_PROLOGUE(_pObj) VBOXDISPPROFILE_FUNCTION_LOGGER_DEFINE((_pObj)->ProfileDdiFunc)
     57#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DUMP(_pObj) do {\
     58        (_pObj)->ProfileDdiFunc.dump(_pObj); \
    4859    } while (0)
    49 #define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_RESET() do {\
    50         g_VBoxDispProfileDDI.resetEntries();\
     60#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_RESET(_pObj) do {\
     61        (_pObj)->ProfileDdiFunc.resetEntries();\
    5162    } while (0)
    52 #define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DISABLE_CURRENT() do {\
     63#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DISABLE_CURRENT() do {\
    5364        VBOXDISPPROFILE_FUNCTION_LOGGER_DISABLE_CURRENT();\
    5465    } while (0)
    5566
    56 
    57 #else
    58 #define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_PROLOGUE() do {} while(0)
    59 #define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DUMP() do {} while(0)
    60 #define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_RESET() do {} while(0)
    61 #define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DISABLE_CURRENT() do {} while (0)
    62 #endif
    63 
    64 #ifdef VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_ENABLE
    65 static VBoxDispProfileFpsCounter g_VBoxDispFpsDDI(64);
    66 #define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_PROLOGUE() VBOXDISPPROFILE_STATISTIC_LOGGER_DEFINE(&g_VBoxDispFpsDDI)
    67 #define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_DISABLE_CURRENT() do {\
     67#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_LOG_AND_DISABLE_CURRENT() VBOXDISPPROFILE_FUNCTION_LOGGER_LOG_AND_DISABLE_CURRENT()
     68
     69#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_REPORT_FRAME(_pObj) do { \
     70        if (!((_pObj)->ProfileDdiFunc.reportIteration() % 31) && !VBOXVDBG_IS_DWM()) {\
     71            VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DUMP(_pObj); \
     72            VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_RESET(_pObj); \
     73        } \
     74    } while (0)
     75
     76# else
     77#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_PROLOGUE(_pObj) do {} while(0)
     78#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DUMP(_pObj) do {} while(0)
     79#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_RESET(_pObj) do {} while(0)
     80#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DISABLE_CURRENT() do {} while (0)
     81#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_LOG_AND_DISABLE_CURRENT() do {} while (0)
     82#  define VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_REPORT_FRAME(_pDev) do {} while (0)
     83# endif
     84
     85# ifdef VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_ENABLE
     86//static VBoxDispProfileFpsCounter g_VBoxDispFpsDDI(64);
     87#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_PROLOGUE(_pObj) VBOXDISPPROFILE_STATISTIC_LOGGER_DEFINE(&(_pObj)->ProfileDdiFps)
     88#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_DISABLE_CURRENT() do {\
    6889        VBOXDISPPROFILE_STATISTIC_LOGGER_DISABLE_CURRENT();\
    6990    } while (0)
    70 #define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_REPORT_FRAME(_pDev) do { \
    71         VBOXDISPPROFILE_STATISTIC_LOGGER_LOG_AND_DISABLE_CURRENT(); \
    72         g_VBoxDispFpsDDI.ReportFrame(); \
    73         if(!(g_VBoxDispFpsDDI.GetNumFrames() % 31)) \
     91
     92#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_DUMP(_pObj) do { \
     93            double fps = (_pObj)->ProfileDdiFps.GetFps(); \
     94            double cps = (_pObj)->ProfileDdiFps.GetCps(); \
     95            double tup = (_pObj)->ProfileDdiFps.GetTimeProcPercent(); \
     96            VBOXDISPPROFILE_DUMP(("[0x%p]: fps: %f, cps: %.1f, host %.1f%%", (_pObj), fps, cps, tup)); \
     97    } while (0)
     98
     99#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_REPORT_FRAME(_pObj) do { \
     100        (_pObj)->ProfileDdiFps.ReportFrame(); \
     101        if(!((_pObj)->ProfileDdiFps.GetNumFrames() % 31)) \
    74102        { \
    75             double fps = g_VBoxDispFpsDDI.GetFps(); \
    76             double cps = g_VBoxDispFpsDDI.GetCps(); \
    77             double tup = g_VBoxDispFpsDDI.GetTimeProcPercent(); \
    78             VBOXDISPPROFILE_DUMP(("fps: %f, cps: %.1f, host %.1f%%\n", fps, cps, tup)); \
     103            VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_DUMP(_pObj); \
    79104        } \
    80105    } while (0)
     106
     107#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_LOG_AND_DISABLE_CURRENT() VBOXDISPPROFILE_STATISTIC_LOGGER_LOG_AND_DISABLE_CURRENT()
     108# else
     109#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_PROLOGUE(_pObj) do {} while(0)
     110#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_DISABLE_CURRENT() do {} while (0)
     111#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_LOG_AND_DISABLE_CURRENT() do {} while (0)
     112#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_REPORT_FRAME(_pDev) do {} while (0)
     113#  define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_DUMP(_pObj) do {} while (0)
     114# endif
     115
     116# define VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE(_pObj) \
     117        VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_PROLOGUE(_pObj); \
     118        VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_PROLOGUE(_pObj);
     119
     120# define VBOXDISPPROFILE_DDI_LOG_AND_DISABLE_CURRENT() \
     121        VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_LOG_AND_DISABLE_CURRENT(); \
     122        VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_LOG_AND_DISABLE_CURRENT();
     123
     124# define VBOXDISPPROFILE_DDI_REPORT_FRAME(_pDev) do {\
     125        VBOXDISPPROFILE_DDI_LOG_AND_DISABLE_CURRENT(); \
     126        VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_REPORT_FRAME(_pDev); \
     127        VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_REPORT_FRAME(_pDev); \
     128    } while (0)
     129
     130# define VBOXDISPPROFILE_DDI_REPORT_FLUSH(_pDev) do {\
     131        VBOXDISPPROFILE_DDI_LOG_AND_DISABLE_CURRENT(); \
     132        VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_REPORT_FRAME(_pDev); \
     133        VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_REPORT_FRAME(_pDev); \
     134    } while (0)
     135
     136# define VBOXDISPPROFILE_DDI_INIT_CMN(_pObj, _name, _cEntries) do { \
     137        (_pObj)->ProfileDdiFps = VBoxDispProfileFpsCounter(); \
     138        (_pObj)->ProfileDdiFps.init(_cEntries); \
     139        (_pObj)->ProfileDdiFunc = VBoxDispProfileSet(_name); \
     140    } while (0)
     141
     142# define VBOXDISPPROFILE_DDI_TERM_CMN(_pObj) do { \
     143        (_pObj)->ProfileDdiFps.term(); \
     144    } while (0)
     145
     146# define VBOXDISPPROFILE_DDI_TERM(_pObj) do {\
     147        VBOXDISPPROFILE_DDI_LOG_AND_DISABLE_CURRENT(); \
     148        VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DUMP(_pObj); \
     149        VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_RESET(_pObj); \
     150        VBOXDISPPROFILE_DDI_TERM_CMN(_pObj); \
     151    } while (0)
     152
     153# define VBOXDISPPROFILE_DDI_PRINT(_m) VBOXDISPPROFILE_DUMP(_m)
     154
     155# define VBOXDISPPROFILE_DDI_INIT_GLBL() VBOXDISPPROFILE_DDI_INIT_CMN(&g_VBoxDispProfile, "DDI_Adp", 64)
     156# define VBOXDISPPROFILE_DDI_INIT_ADP(_pAdp) VBOXDISPPROFILE_DDI_INIT_CMN(_pAdp, "DDI_Adp", 64)
     157# define VBOXDISPPROFILE_DDI_INIT_DEV(_pDev) VBOXDISPPROFILE_DDI_INIT_CMN(_pDev, "DDI_Dev", 64)
    81158#else
    82 #define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_PROLOGUE() do {} while(0)
    83 #define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_DISABLE_CURRENT() do {} while (0)
    84 #define VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_REPORT_FRAME(_pDev) do {} while (0)
    85 #endif
    86 
    87 #define VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE() \
    88         VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_PROLOGUE(); \
    89         VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_PROLOGUE();
    90 
    91 #define VBOXDISPPROFILE_DDI_DUMPRESET(_pDev) do {\
    92         VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DUMP(); \
    93         VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_RESET(); \
    94         VBOXDISPPROFILE_DDI_FUNCTION_LOGGER_DISABLE_CURRENT();\
    95     } while (0)
    96 
    97 #define VBOXDISPPROFILE_DDI_REPORT_FRAME(_pDev) do {\
    98         VBOXDISPPROFILE_DDI_STATISTIC_LOGGER_REPORT_FRAME(_pDev); \
    99     } while (0)
    100 
    101 
    102 #else
    103 #define VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE() do {} while (0)
    104 #define VBOXDISPPROFILE_DDI_DUMPRESET(_pDev) do {} while (0)
    105 #define VBOXDISPPROFILE_DDI_REPORT_FRAME(_pDev) do {} while (0)
     159# define VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE(_pObj) do {} while (0)
     160# define VBOXDISPPROFILE_DDI_REPORT_FRAME(_pDev) do {} while (0)
     161# define VBOXDISPPROFILE_DDI_REPORT_FLUSH(_pDev) do {} while (0)
     162# define VBOXDISPPROFILE_DDI_INIT_GLBL() do {} while (0)
     163# define VBOXDISPPROFILE_DDI_INIT_ADP(_pAdp) do {} while (0)
     164# define VBOXDISPPROFILE_DDI_INIT_DEV(_pDev) do {} while (0)
     165# define VBOXDISPPROFILE_DDI_TERM(_pObj) do {} while (0)
     166# define VBOXDISPPROFILE_DDI_PRINT(_m) do {} while (0)
    106167#endif
    107168
    108169/* debugging/profiling stuff could go here.
    109170 * NOP in release */
    110 #define VBOXDISP_DDI_PROLOGUE() \
     171#define VBOXDISP_DDI_PROLOGUE_CMN() \
    111172    VBOXVDBG_BREAK_DDI(); \
    112     VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE(); \
    113173    VBOXVDBG_CREATE_CHECK_SWAPCHAIN();
     174
     175#define VBOXDISP_DDI_PROLOGUE_DEV(_hDevice) \
     176    VBOXDISP_DDI_PROLOGUE_CMN(); \
     177    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE((PVBOXWDDMDISP_DEVICE)(_hDevice));
     178
     179#define VBOXDISP_DDI_PROLOGUE_ADP(_hAdapter) \
     180    VBOXDISP_DDI_PROLOGUE_CMN(); \
     181    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE((PVBOXWDDMDISP_ADAPTER)(_hAdapter));
     182
     183#define VBOXDISP_DDI_PROLOGUE_GLBL() \
     184    VBOXDISP_DDI_PROLOGUE_CMN(); \
     185    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE(&g_VBoxDispProfile);
    114186
    115187#ifdef VBOXDISPMP_TEST
     
    10351107static BOOLEAN vboxWddmDalCheckAdd(PVBOXWDDMDISP_DEVICE pDevice, PVBOXWDDMDISP_ALLOCATION pAlloc, BOOLEAN fWrite)
    10361108{
    1037     if (!pAlloc->hSharedHandle /* only shared resources matter */
     1109    if (!pAlloc->hAllocation /* only shared resources matter */
    10381110#ifdef VBOX_WDDM_SHRC_WO_NOTIFY
    10391111            || !fWrite /* only write op matter */
     
    10461118        Assert(!pAlloc->DirtyAllocListEntry.pNext);
    10471119#endif
     1120        Assert(!pAlloc->hSharedHandle);
     1121
    10481122        return FALSE;
    10491123    }
     
    28872961    {
    28882962        VBOXVDBG_ASSERT_IS_DWM(FALSE);
     2963
     2964        HRESULT hr = pDevice->pAdapter->D3D.pfnVBoxWineExD3DDev9Flush((IDirect3DDevice9Ex*)pDevice->pDevice9If);
     2965        Assert(hr == S_OK);
     2966
     2967        vboxWddmDalNotifyChange(pDevice);
     2968
    28892969        return S_OK;
    28902970    }
     2971
     2972    VBOXVDBG_ASSERT_IS_DWM(TRUE);
    28912973
    28922974    BOOL bNeedPresent;
     
    31493231static HRESULT APIENTRY vboxWddmDispGetCaps (HANDLE hAdapter, CONST D3DDDIARG_GETCAPS* pData)
    31503232{
    3151         VBOXDISP_DDI_PROLOGUE();
     3233        VBOXDISP_DDI_PROLOGUE_ADP(hAdapter);
    31523234
    31533235    vboxVDbgPrint(("==> "__FUNCTION__", hAdapter(0x%p), caps type(%d)\n", hAdapter, pData->Type));
     
    34503532static HRESULT APIENTRY vboxWddmDDevSetRenderState(HANDLE hDevice, CONST D3DDDIARG_RENDERSTATE* pData)
    34513533{
    3452     VBOXDISP_DDI_PROLOGUE();
     3534    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    34533535    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    34543536    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    34643546static HRESULT APIENTRY vboxWddmDDevUpdateWInfo(HANDLE hDevice, CONST D3DDDIARG_WINFO* pData)
    34653547{
    3466     VBOXDISP_DDI_PROLOGUE();
     3548    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    34673549//    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
    34683550//    VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     
    34743556static HRESULT APIENTRY vboxWddmDDevValidateDevice(HANDLE hDevice, D3DDDIARG_VALIDATETEXTURESTAGESTATE* pData)
    34753557{
    3476     VBOXDISP_DDI_PROLOGUE();
     3558    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    34773559//    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
    34783560//    VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     
    34893571static HRESULT APIENTRY vboxWddmDDevSetTextureStageState(HANDLE hDevice, CONST D3DDDIARG_TEXTURESTAGESTATE* pData)
    34903572{
    3491     VBOXDISP_DDI_PROLOGUE();
     3573    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    34923574    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    34933575    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    35153597static HRESULT APIENTRY vboxWddmDDevSetTexture(HANDLE hDevice, UINT Stage, HANDLE hTexture)
    35163598{
    3517     VBOXDISP_DDI_PROLOGUE();
     3599    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    35183600    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    35193601    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    35993681static HRESULT APIENTRY vboxWddmDDevSetPixelShader(HANDLE hDevice, HANDLE hShaderHandle)
    36003682{
    3601     VBOXDISP_DDI_PROLOGUE();
     3683    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    36023684    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    36033685    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    36143696static HRESULT APIENTRY vboxWddmDDevSetPixelShaderConst(HANDLE hDevice, CONST D3DDDIARG_SETPIXELSHADERCONST* pData, CONST FLOAT* pRegisters)
    36153697{
    3616     VBOXDISP_DDI_PROLOGUE();
     3698    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    36173699    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    36183700    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    36283710static HRESULT APIENTRY vboxWddmDDevSetStreamSourceUm(HANDLE hDevice, CONST D3DDDIARG_SETSTREAMSOURCEUM* pData, CONST VOID* pUMBuffer )
    36293711{
    3630     VBOXDISP_DDI_PROLOGUE();
     3712    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    36313713    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    36323714    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    36543736static HRESULT APIENTRY vboxWddmDDevSetIndices(HANDLE hDevice, CONST D3DDDIARG_SETINDICES* pData)
    36553737{
    3656     VBOXDISP_DDI_PROLOGUE();
     3738    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    36573739    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    36583740    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    36853767static HRESULT APIENTRY vboxWddmDDevSetIndicesUm(HANDLE hDevice, UINT IndexSize, CONST VOID* pUMBuffer)
    36863768{
    3687     VBOXDISP_DDI_PROLOGUE();
     3769    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    36883770    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    36893771    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    37003782static HRESULT APIENTRY vboxWddmDDevDrawPrimitive(HANDLE hDevice, CONST D3DDDIARG_DRAWPRIMITIVE* pData, CONST UINT* pFlagBuffer)
    37013783{
    3702     VBOXDISP_DDI_PROLOGUE();
     3784    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    37033785    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    37043786    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    37783860static HRESULT APIENTRY vboxWddmDDevDrawIndexedPrimitive(HANDLE hDevice, CONST D3DDDIARG_DRAWINDEXEDPRIMITIVE* pData)
    37793861{
    3780     VBOXDISP_DDI_PROLOGUE();
     3862    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    37813863    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    37823864    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    38323914static HRESULT APIENTRY vboxWddmDDevDrawRectPatch(HANDLE hDevice, CONST D3DDDIARG_DRAWRECTPATCH* pData, CONST D3DDDIRECTPATCH_INFO* pInfo, CONST FLOAT* pPatch)
    38333915{
    3834     VBOXDISP_DDI_PROLOGUE();
     3916    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    38353917    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    38363918    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    38453927static HRESULT APIENTRY vboxWddmDDevDrawTriPatch(HANDLE hDevice, CONST D3DDDIARG_DRAWTRIPATCH* pData, CONST D3DDDITRIPATCH_INFO* pInfo, CONST FLOAT* pPatch)
    38463928{
    3847     VBOXDISP_DDI_PROLOGUE();
     3929    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    38483930    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    38493931    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    38583940static HRESULT APIENTRY vboxWddmDDevDrawPrimitive2(HANDLE hDevice, CONST D3DDDIARG_DRAWPRIMITIVE2* pData)
    38593941{
    3860     VBOXDISP_DDI_PROLOGUE();
     3942    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    38613943    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    38623944    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    39554037static HRESULT APIENTRY vboxWddmDDevDrawIndexedPrimitive2(HANDLE hDevice, CONST D3DDDIARG_DRAWINDEXEDPRIMITIVE2* pData, UINT dwIndicesSize, CONST VOID* pIndexBuffer, CONST UINT* pFlagBuffer)
    39564038{
    3957     VBOXDISP_DDI_PROLOGUE();
     4039    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    39584040    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    39594041    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    39684050static HRESULT APIENTRY vboxWddmDDevVolBlt(HANDLE hDevice, CONST D3DDDIARG_VOLUMEBLT* pData)
    39694051{
    3970     VBOXDISP_DDI_PROLOGUE();
     4052    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    39714053    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    39724054    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    39814063static HRESULT APIENTRY vboxWddmDDevBufBlt(HANDLE hDevice, CONST D3DDDIARG_BUFFERBLT* pData)
    39824064{
    3983     VBOXDISP_DDI_PROLOGUE();
     4065    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    39844066    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    39854067    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    39944076static HRESULT APIENTRY vboxWddmDDevTexBlt(HANDLE hDevice, CONST D3DDDIARG_TEXBLT* pData)
    39954077{
    3996     VBOXDISP_DDI_PROLOGUE();
     4078    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    39974079    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    39984080    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    40734155static HRESULT APIENTRY vboxWddmDDevStateSet(HANDLE hDevice, D3DDDIARG_STATESET* pData)
    40744156{
    4075     VBOXDISP_DDI_PROLOGUE();
     4157    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    40764158    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    40774159    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    40844166static HRESULT APIENTRY vboxWddmDDevSetPriority(HANDLE hDevice, CONST D3DDDIARG_SETPRIORITY* pData)
    40854167{
    4086     VBOXDISP_DDI_PROLOGUE();
     4168    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    40874169//    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
    40884170//    Assert(pDevice);
     
    41044186static HRESULT APIENTRY vboxWddmDDevClear(HANDLE hDevice, CONST D3DDDIARG_CLEAR* pData, UINT NumRect, CONST RECT* pRect)
    41054187{
    4106     VBOXDISP_DDI_PROLOGUE();
     4188    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    41074189    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    41084190    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    41214203static HRESULT APIENTRY vboxWddmDDevUpdatePalette(HANDLE hDevice, CONST D3DDDIARG_UPDATEPALETTE* pData, CONST PALETTEENTRY* pPaletteData)
    41224204{
    4123     VBOXDISP_DDI_PROLOGUE();
     4205    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    41244206    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    41254207    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    41334215static HRESULT APIENTRY vboxWddmDDevSetPalette(HANDLE hDevice, CONST D3DDDIARG_SETPALETTE* pData)
    41344216{
    4135     VBOXDISP_DDI_PROLOGUE();
     4217    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    41364218    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    41374219    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    41454227static HRESULT APIENTRY vboxWddmDDevSetVertexShaderConst(HANDLE hDevice, CONST D3DDDIARG_SETVERTEXSHADERCONST* pData , CONST VOID* pRegisters)
    41464228{
    4147     VBOXDISP_DDI_PROLOGUE();
     4229    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    41484230    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    41494231    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    41614243static HRESULT APIENTRY vboxWddmDDevMultiplyTransform(HANDLE hDevice, CONST D3DDDIARG_MULTIPLYTRANSFORM* pData)
    41624244{
    4163     VBOXDISP_DDI_PROLOGUE();
     4245    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    41644246    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    41654247    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    41724254static HRESULT APIENTRY vboxWddmDDevSetTransform(HANDLE hDevice, CONST D3DDDIARG_SETTRANSFORM* pData)
    41734255{
    4174     VBOXDISP_DDI_PROLOGUE();
     4256    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    41754257    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    41764258    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    41834265static HRESULT APIENTRY vboxWddmDDevSetViewport(HANDLE hDevice, CONST D3DDDIARG_VIEWPORTINFO* pData)
    41844266{
    4185     VBOXDISP_DDI_PROLOGUE();
     4267    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    41864268    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    41874269    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    42014283static HRESULT APIENTRY vboxWddmDDevSetZRange(HANDLE hDevice, CONST D3DDDIARG_ZRANGE* pData)
    42024284{
    4203     VBOXDISP_DDI_PROLOGUE();
     4285    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    42044286    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    42054287    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    42174299static HRESULT APIENTRY vboxWddmDDevSetMaterial(HANDLE hDevice, CONST D3DDDIARG_SETMATERIAL* pData)
    42184300{
    4219     VBOXDISP_DDI_PROLOGUE();
     4301    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    42204302    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    42214303    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    42284310static HRESULT APIENTRY vboxWddmDDevSetLight(HANDLE hDevice, CONST D3DDDIARG_SETLIGHT* pData, CONST D3DDDI_LIGHT* pLightProperties)
    42294311{
    4230     VBOXDISP_DDI_PROLOGUE();
     4312    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    42314313    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    42324314    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    42394321static HRESULT APIENTRY vboxWddmDDevCreateLight(HANDLE hDevice, CONST D3DDDIARG_CREATELIGHT* pData)
    42404322{
    4241     VBOXDISP_DDI_PROLOGUE();
     4323    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    42424324    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    42434325    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    42504332static HRESULT APIENTRY vboxWddmDDevDestroyLight(HANDLE hDevice, CONST D3DDDIARG_DESTROYLIGHT* pData)
    42514333{
    4252     VBOXDISP_DDI_PROLOGUE();
     4334    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    42534335    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    42544336    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    42614343static HRESULT APIENTRY vboxWddmDDevSetClipPlane(HANDLE hDevice, CONST D3DDDIARG_SETCLIPPLANE* pData)
    42624344{
    4263     VBOXDISP_DDI_PROLOGUE();
     4345    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    42644346    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    42654347    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    42764358static HRESULT APIENTRY vboxWddmDDevGetInfo(HANDLE hDevice, UINT DevInfoID, VOID* pDevInfoStruct, UINT DevInfoSize)
    42774359{
    4278     VBOXDISP_DDI_PROLOGUE();
     4360    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    42794361    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    42804362//    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    43094391static HRESULT APIENTRY vboxWddmDDevLock(HANDLE hDevice, D3DDDIARG_LOCK* pData)
    43104392{
    4311     VBOXDISP_DDI_PROLOGUE();
     4393    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    43124394    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    43134395    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    47594841static HRESULT APIENTRY vboxWddmDDevUnlock(HANDLE hDevice, CONST D3DDDIARG_UNLOCK* pData)
    47604842{
    4761     VBOXDISP_DDI_PROLOGUE();
     4843    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    47624844    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    47634845    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    49875069static HRESULT APIENTRY vboxWddmDDevLockAsync(HANDLE hDevice, D3DDDIARG_LOCKASYNC* pData)
    49885070{
    4989     VBOXDISP_DDI_PROLOGUE();
     5071    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    49905072    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    49915073    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    49985080static HRESULT APIENTRY vboxWddmDDevUnlockAsync(HANDLE hDevice, CONST D3DDDIARG_UNLOCKASYNC* pData)
    49995081{
    5000     VBOXDISP_DDI_PROLOGUE();
     5082    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    50015083    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    50025084    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    50095091static HRESULT APIENTRY vboxWddmDDevRename(HANDLE hDevice, CONST D3DDDIARG_RENAME* pData)
    50105092{
    5011     VBOXDISP_DDI_PROLOGUE();
     5093    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    50125094    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    50135095    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    50635145static HRESULT APIENTRY vboxWddmDDevCreateResource(HANDLE hDevice, D3DDDIARG_CREATERESOURCE* pResource)
    50645146{
    5065     VBOXDISP_DDI_PROLOGUE();
     5147    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    50665148    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    50675149    HRESULT hr = S_OK;
     
    56225704                    if (pResource->Flags.SharedResource)
    56235705                    {
    5624 #ifdef DEBUG_misha
     5706#ifdef VBOXWDDMDISP_DEBUG_PRINT_SHARED_CREATE
    56255707                        Assert(VBOXWDDMDISP_IS_TEXTURE(pResource->Flags));
    56265708                        vboxVDbgPrint(("\n\n********\n(0x%x:0n%d)Shared CREATED pAlloc(0x%p), hRc(0x%p), hAl(0x%p), "
     
    56675749static HRESULT APIENTRY vboxWddmDDevDestroyResource(HANDLE hDevice, HANDLE hResource)
    56685750{
    5669     VBOXDISP_DDI_PROLOGUE();
     5751    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    56705752    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    56715753    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    56875769            if (pAlloc->hSharedHandle)
    56885770            {
    5689 #ifdef DEBUG_misha
     5771#ifdef VBOXWDDMDISP_DEBUG_PRINT_SHARED_CREATE
    56905772                vboxVDbgPrint(("\n\n********\n(0x%x:0n%d)Shared DESTROYED pAlloc(0x%p), hRc(0x%p), hAl(0x%p), "
    56915773                                "Handle(0x%x), (0n%d) \n***********\n\n",
     
    57485830static HRESULT APIENTRY vboxWddmDDevSetDisplayMode(HANDLE hDevice, CONST D3DDDIARG_SETDISPLAYMODE* pData)
    57495831{
    5750     VBOXDISP_DDI_PROLOGUE();
     5832    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    57515833    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    57525834    HRESULT hr = S_OK;
     
    57805862static HRESULT APIENTRY vboxWddmDDevPresent(HANDLE hDevice, CONST D3DDDIARG_PRESENT* pData)
    57815863{
    5782     VBOXDISP_DDI_PROLOGUE();
     5864    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    57835865    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    57845866    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    58265908        DdiPresent.hContext = pDevice->DefaultContext.ContextInfo.hContext;
    58275909
     5910#if 0 //def VBOX_WDDMDISP_WITH_PROFILE
     5911        VBoxDispProfileScopeLogger<VBoxDispProfileEntry> profilePresentCbLogger(pDevice->ProfileDdiPresentCb.alloc("pfnPresentCb"));
     5912#endif
     5913#ifdef VBOXWDDMDISP_DEBUG_TIMER
     5914        HANDLE hTimer = NULL;
     5915        vboxVDbgTimerStart(pDevice->hTimerQueue, &hTimer, 1000);
     5916#endif
    58285917        hr = pDevice->RtCallbacks.pfnPresentCb(pDevice->hDevice, &DdiPresent);
     5918#ifdef VBOXWDDMDISP_DEBUG_TIMER
     5919        vboxVDbgTimerStop(pDevice->hTimerQueue, hTimer);
     5920#endif
     5921#if 0 //def VBOX_WDDMDISP_WITH_PROFILE
     5922        profilePresentCbLogger.logAndDisable();
     5923        if (pDevice->ProfileDdiPresentCb.getNumEntries() == 64)
     5924        {
     5925            pDevice->ProfileDdiPresentCb.dump(pDevice);
     5926            pDevice->ProfileDdiPresentCb.reset();
     5927        }
     5928#endif
    58295929        Assert(hr == S_OK);
    58305930    }
    58315931
     5932    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr));
     5933
    58325934    VBOXDISPPROFILE_DDI_REPORT_FRAME(pDevice);
    58335935
    5834     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr));
    58355936    return hr;
    58365937}
     
    58385939static HRESULT APIENTRY vboxWddmDDevFlush(HANDLE hDevice)
    58395940{
    5840     VBOXDISP_DDI_PROLOGUE();
     5941    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    58415942    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    58425943    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    58555956    }
    58565957    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr));
     5958
     5959    VBOXDISPPROFILE_DDI_REPORT_FLUSH(pDevice);
     5960
    58575961    return hr;
    58585962}
     
    58755979static HRESULT APIENTRY vboxWddmDDevCreateVertexShaderDecl(HANDLE hDevice, D3DDDIARG_CREATEVERTEXSHADERDECL* pData, CONST D3DDDIVERTEXELEMENT* pVertexElements)
    58765980{
    5877     VBOXDISP_DDI_PROLOGUE();
     5981    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    58785982    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    58795983    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    59236027static HRESULT APIENTRY vboxWddmDDevSetVertexShaderDecl(HANDLE hDevice, HANDLE hShaderHandle)
    59246028{
    5925     VBOXDISP_DDI_PROLOGUE();
     6029    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    59266030    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    59276031    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    59386042static HRESULT APIENTRY vboxWddmDDevDeleteVertexShaderDecl(HANDLE hDevice, HANDLE hShaderHandle)
    59396043{
    5940     VBOXDISP_DDI_PROLOGUE();
     6044    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    59416045    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    59426046    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    59516055static HRESULT APIENTRY vboxWddmDDevCreateVertexShaderFunc(HANDLE hDevice, D3DDDIARG_CREATEVERTEXSHADERFUNC* pData, CONST UINT* pCode)
    59526056{
    5953     VBOXDISP_DDI_PROLOGUE();
     6057    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    59546058    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    59556059    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    59716075static HRESULT APIENTRY vboxWddmDDevSetVertexShaderFunc(HANDLE hDevice, HANDLE hShaderHandle)
    59726076{
    5973     VBOXDISP_DDI_PROLOGUE();
     6077    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    59746078    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    59756079    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    59856089static HRESULT APIENTRY vboxWddmDDevDeleteVertexShaderFunc(HANDLE hDevice, HANDLE hShaderHandle)
    59866090{
    5987     VBOXDISP_DDI_PROLOGUE();
     6091    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    59886092    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    59896093    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    59986102static HRESULT APIENTRY vboxWddmDDevSetVertexShaderConstI(HANDLE hDevice, CONST D3DDDIARG_SETVERTEXSHADERCONSTI* pData, CONST INT* pRegisters)
    59996103{
    6000     VBOXDISP_DDI_PROLOGUE();
     6104    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    60016105    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    60026106    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    60116115static HRESULT APIENTRY vboxWddmDDevSetVertexShaderConstB(HANDLE hDevice, CONST D3DDDIARG_SETVERTEXSHADERCONSTB* pData, CONST BOOL* pRegisters)
    60126116{
    6013     VBOXDISP_DDI_PROLOGUE();
     6117    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    60146118    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    60156119    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    60246128static HRESULT APIENTRY vboxWddmDDevSetScissorRect(HANDLE hDevice, CONST RECT* pRect)
    60256129{
    6026     VBOXDISP_DDI_PROLOGUE();
     6130    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    60276131    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    60286132    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    60376141static HRESULT APIENTRY vboxWddmDDevSetStreamSource(HANDLE hDevice, CONST D3DDDIARG_SETSTREAMSOURCE* pData)
    60386142{
    6039     VBOXDISP_DDI_PROLOGUE();
     6143    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    60406144    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    60416145    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    60826186static HRESULT APIENTRY vboxWddmDDevSetStreamSourceFreq(HANDLE hDevice, CONST D3DDDIARG_SETSTREAMSOURCEFREQ* pData)
    60836187{
    6084     VBOXDISP_DDI_PROLOGUE();
     6188    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    60856189    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    60866190    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    60936197static HRESULT APIENTRY vboxWddmDDevSetConvolutionKernelMono(HANDLE hDevice, CONST D3DDDIARG_SETCONVOLUTIONKERNELMONO* pData)
    60946198{
    6095     VBOXDISP_DDI_PROLOGUE();
     6199    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    60966200    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    60976201    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    61046208static HRESULT APIENTRY vboxWddmDDevComposeRects(HANDLE hDevice, CONST D3DDDIARG_COMPOSERECTS* pData)
    61056209{
    6106     VBOXDISP_DDI_PROLOGUE();
     6210    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    61076211    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    61086212    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    61166220static HRESULT APIENTRY vboxWddmDDevBlt(HANDLE hDevice, CONST D3DDDIARG_BLT* pData)
    61176221{
    6118     VBOXDISP_DDI_PROLOGUE();
     6222    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    61196223    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    61206224    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    61956299static HRESULT APIENTRY vboxWddmDDevColorFill(HANDLE hDevice, CONST D3DDDIARG_COLORFILL* pData)
    61966300{
    6197     VBOXDISP_DDI_PROLOGUE();
     6301    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    61986302    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    61996303    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    62256329static HRESULT APIENTRY vboxWddmDDevDepthFill(HANDLE hDevice, CONST D3DDDIARG_DEPTHFILL* pData)
    62266330{
    6227     VBOXDISP_DDI_PROLOGUE();
     6331    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    62286332    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    62296333    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    62376341static HRESULT APIENTRY vboxWddmDDevCreateQuery(HANDLE hDevice, D3DDDIARG_CREATEQUERY* pData)
    62386342{
    6239     VBOXDISP_DDI_PROLOGUE();
     6343    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    62406344    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    62416345//    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    62676371static HRESULT APIENTRY vboxWddmDDevDestroyQuery(HANDLE hDevice, HANDLE hQuery)
    62686372{
    6269     VBOXDISP_DDI_PROLOGUE();
     6373    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    62706374    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    62716375    HRESULT hr = S_OK;
     
    62826386static HRESULT APIENTRY vboxWddmDDevIssueQuery(HANDLE hDevice, CONST D3DDDIARG_ISSUEQUERY* pData)
    62836387{
    6284     VBOXDISP_DDI_PROLOGUE();
     6388    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    62856389    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    62866390    HRESULT hr = S_OK;
     
    62976401static HRESULT APIENTRY vboxWddmDDevGetQueryData(HANDLE hDevice, CONST D3DDDIARG_GETQUERYDATA* pData)
    62986402{
    6299     VBOXDISP_DDI_PROLOGUE();
     6403    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    63006404    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    63016405    HRESULT hr = S_OK;
     
    63236427static HRESULT APIENTRY vboxWddmDDevSetRenderTarget(HANDLE hDevice, CONST D3DDDIARG_SETRENDERTARGET* pData)
    63246428{
    6325     VBOXDISP_DDI_PROLOGUE();
     6429    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    63266430    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    63276431    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    63426446static HRESULT APIENTRY vboxWddmDDevSetDepthStencil(HANDLE hDevice, CONST D3DDDIARG_SETDEPTHSTENCIL* pData)
    63436447{
    6344     VBOXDISP_DDI_PROLOGUE();
     6448    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    63456449    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    63466450    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    63666470static HRESULT APIENTRY vboxWddmDDevGenerateMipSubLevels(HANDLE hDevice, CONST D3DDDIARG_GENERATEMIPSUBLEVELS* pData)
    63676471{
    6368     VBOXDISP_DDI_PROLOGUE();
     6472    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    63696473    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    63706474    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    63786482static HRESULT APIENTRY vboxWddmDDevSetPixelShaderConstI(HANDLE hDevice, CONST D3DDDIARG_SETPIXELSHADERCONSTI* pData, CONST INT* pRegisters)
    63796483{
    6380     VBOXDISP_DDI_PROLOGUE();
     6484    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    63816485    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    63826486    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    63926496static HRESULT APIENTRY vboxWddmDDevSetPixelShaderConstB(HANDLE hDevice, CONST D3DDDIARG_SETPIXELSHADERCONSTB* pData, CONST BOOL* pRegisters)
    63936497{
    6394     VBOXDISP_DDI_PROLOGUE();
     6498    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    63956499    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    63966500    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    64066510static HRESULT APIENTRY vboxWddmDDevCreatePixelShader(HANDLE hDevice, D3DDDIARG_CREATEPIXELSHADER* pData, CONST UINT* pCode)
    64076511{
    6408     VBOXDISP_DDI_PROLOGUE();
     6512    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    64096513    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    64106514    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    64276531static HRESULT APIENTRY vboxWddmDDevDeletePixelShader(HANDLE hDevice, HANDLE hShaderHandle)
    64286532{
    6429     VBOXDISP_DDI_PROLOGUE();
     6533    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    64306534    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    64316535    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    64416545static HRESULT APIENTRY vboxWddmDDevCreateDecodeDevice(HANDLE hDevice, D3DDDIARG_CREATEDECODEDEVICE* pData)
    64426546{
    6443     VBOXDISP_DDI_PROLOGUE();
     6547    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    64446548    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    64456549    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    64536557static HRESULT APIENTRY vboxWddmDDevDestroyDecodeDevice(HANDLE hDevice, HANDLE hDecodeDevice)
    64546558{
    6455     VBOXDISP_DDI_PROLOGUE();
     6559    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    64566560    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    64576561    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    64656569static HRESULT APIENTRY vboxWddmDDevSetDecodeRenderTarget(HANDLE hDevice, CONST D3DDDIARG_SETDECODERENDERTARGET* pData)
    64666570{
    6467     VBOXDISP_DDI_PROLOGUE();
     6571    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    64686572    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    64696573    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    64776581static HRESULT APIENTRY vboxWddmDDevDecodeBeginFrame(HANDLE hDevice, D3DDDIARG_DECODEBEGINFRAME* pData)
    64786582{
    6479     VBOXDISP_DDI_PROLOGUE();
     6583    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    64806584    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    64816585    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    64896593static HRESULT APIENTRY vboxWddmDDevDecodeEndFrame(HANDLE hDevice, D3DDDIARG_DECODEENDFRAME* pData)
    64906594{
    6491     VBOXDISP_DDI_PROLOGUE();
     6595    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    64926596    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    64936597    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65016605static HRESULT APIENTRY vboxWddmDDevDecodeExecute(HANDLE hDevice, CONST D3DDDIARG_DECODEEXECUTE* pData)
    65026606{
    6503     VBOXDISP_DDI_PROLOGUE();
     6607    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    65046608    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    65056609    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65136617static HRESULT APIENTRY vboxWddmDDevDecodeExtensionExecute(HANDLE hDevice, CONST D3DDDIARG_DECODEEXTENSIONEXECUTE* pData)
    65146618{
    6515     VBOXDISP_DDI_PROLOGUE();
     6619    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    65166620    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    65176621    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65256629static HRESULT APIENTRY vboxWddmDDevCreateVideoProcessDevice(HANDLE hDevice, D3DDDIARG_CREATEVIDEOPROCESSDEVICE* pData)
    65266630{
    6527     VBOXDISP_DDI_PROLOGUE();
     6631    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    65286632    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    65296633    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65376641static HRESULT APIENTRY vboxWddmDDevDestroyVideoProcessDevice(HANDLE hDevice, HANDLE hVideoProcessor)
    65386642{
    6539     VBOXDISP_DDI_PROLOGUE();
     6643    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    65406644    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    65416645    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65496653static HRESULT APIENTRY vboxWddmDDevVideoProcessBeginFrame(HANDLE hDevice, HANDLE hVideoProcess)
    65506654{
    6551     VBOXDISP_DDI_PROLOGUE();
     6655    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    65526656    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    65536657    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65616665static HRESULT APIENTRY vboxWddmDDevVideoProcessEndFrame(HANDLE hDevice, D3DDDIARG_VIDEOPROCESSENDFRAME* pData)
    65626666{
    6563     VBOXDISP_DDI_PROLOGUE();
     6667    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    65646668    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    65656669    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65736677static HRESULT APIENTRY vboxWddmDDevSetVideoProcessRenderTarget(HANDLE hDevice, CONST D3DDDIARG_SETVIDEOPROCESSRENDERTARGET* pData)
    65746678{
    6575     VBOXDISP_DDI_PROLOGUE();
     6679    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    65766680    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    65776681    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65856689static HRESULT APIENTRY vboxWddmDDevVideoProcessBlt(HANDLE hDevice, CONST D3DDDIARG_VIDEOPROCESSBLT* pData)
    65866690{
    6587     VBOXDISP_DDI_PROLOGUE();
     6691    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    65886692    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    65896693    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    65976701static HRESULT APIENTRY vboxWddmDDevCreateExtensionDevice(HANDLE hDevice, D3DDDIARG_CREATEEXTENSIONDEVICE* pData)
    65986702{
    6599     VBOXDISP_DDI_PROLOGUE();
     6703    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    66006704    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    66016705    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    66096713static HRESULT APIENTRY vboxWddmDDevDestroyExtensionDevice(HANDLE hDevice, HANDLE hExtension)
    66106714{
    6611     VBOXDISP_DDI_PROLOGUE();
     6715    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    66126716    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    66136717    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    66216725static HRESULT APIENTRY vboxWddmDDevExtensionExecute(HANDLE hDevice, CONST D3DDDIARG_EXTENSIONEXECUTE* pData)
    66226726{
    6623     VBOXDISP_DDI_PROLOGUE();
     6727    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    66246728    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    66256729    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    66336737static HRESULT APIENTRY vboxWddmDDevDestroyDevice(IN HANDLE hDevice)
    66346738{
    6635     VBOXDISP_DDI_PROLOGUE();
    6636     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    6637 
    6638     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
    6639     Assert(pDevice);
    6640     VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
    6641 
    6642     VBOXDISPPROFILE_DDI_DUMPRESET(pDevice);
     6739    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
     6740    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     6741
     6742    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     6743    Assert(pDevice);
     6744    VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     6745
     6746    VBOXDISPPROFILE_DDI_PRINT(("Dumping on DestroyDevice: 0x%p", pDevice));
     6747    VBOXDISPPROFILE_DDI_TERM(pDevice);
     6748
     6749#ifdef VBOXWDDMDISP_DEBUG_TIMER
     6750        DeleteTimerQueueEx(pDevice->hTimerQueue, INVALID_HANDLE_VALUE /* see term */);
     6751        pDevice->hTimerQueue = NULL;
     6752#endif
     6753
    66436754    PVBOXWDDMDISP_ADAPTER pAdapter = pDevice->pAdapter;
    66446755    if (VBOXDISPMODE_IS_3D(pAdapter))
     
    66806791static HRESULT APIENTRY vboxWddmDDevCreateOverlay(HANDLE hDevice, D3DDDIARG_CREATEOVERLAY* pData)
    66816792{
    6682     VBOXDISP_DDI_PROLOGUE();
     6793    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    66836794    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    66846795    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    67446855static HRESULT APIENTRY vboxWddmDDevUpdateOverlay(HANDLE hDevice, CONST D3DDDIARG_UPDATEOVERLAY* pData)
    67456856{
    6746     VBOXDISP_DDI_PROLOGUE();
     6857    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    67476858    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    67486859    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    67886899static HRESULT APIENTRY vboxWddmDDevFlipOverlay(HANDLE hDevice, CONST D3DDDIARG_FLIPOVERLAY* pData)
    67896900{
    6790     VBOXDISP_DDI_PROLOGUE();
     6901    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    67916902    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    67926903    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    68256936static HRESULT APIENTRY vboxWddmDDevGetOverlayColorControls(HANDLE hDevice, D3DDDIARG_GETOVERLAYCOLORCONTROLS* pData)
    68266937{
    6827     VBOXDISP_DDI_PROLOGUE();
     6938    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    68286939    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    68296940    Assert(0);
     
    68336944static HRESULT APIENTRY vboxWddmDDevSetOverlayColorControls(HANDLE hDevice, CONST D3DDDIARG_SETOVERLAYCOLORCONTROLS* pData)
    68346945{
    6835     VBOXDISP_DDI_PROLOGUE();
     6946    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    68366947    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    68376948    Assert(0);
     
    68416952static HRESULT APIENTRY vboxWddmDDevDestroyOverlay(HANDLE hDevice, CONST D3DDDIARG_DESTROYOVERLAY* pData)
    68426953{
    6843     VBOXDISP_DDI_PROLOGUE();
     6954    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    68446955    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    68456956    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    68636974static HRESULT APIENTRY vboxWddmDDevQueryResourceResidency(HANDLE hDevice, CONST D3DDDIARG_QUERYRESOURCERESIDENCY* pData)
    68646975{
    6865     VBOXDISP_DDI_PROLOGUE();
     6976    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    68666977    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    68676978    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    69107021static HRESULT APIENTRY vboxWddmDDevOpenResource(HANDLE hDevice, D3DDDIARG_OPENRESOURCE* pData)
    69117022{
    6912     VBOXDISP_DDI_PROLOGUE();
     7023    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    69137024    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    69147025    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    70057116                    Assert(pAllocation->hSharedHandle);
    70067117#endif
     7118#ifdef VBOXWDDMDISP_DEBUG_PRINT_SHARED_CREATE
    70077119                    vboxVDbgPrint(("\n\n********\n(0x%x:0n%d)Shared OPENNED pAlloc(0x%p), hRc(0x%p), hAl(0x%p), "
    70087120                                    "Handle(0x%x), (0n%d) \n***********\n\n",
     
    70117123                                pAllocation->hSharedHandle, pAllocation->hSharedHandle
    70127124                                ));
     7125#endif
    70137126                }
    70147127
     
    71267239static HRESULT APIENTRY vboxWddmDDevGetCaptureAllocationHandle(HANDLE hDevice, D3DDDIARG_GETCAPTUREALLOCATIONHANDLE* pData)
    71277240{
    7128     VBOXDISP_DDI_PROLOGUE();
     7241    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    71297242    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    71307243    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    71397252static HRESULT APIENTRY vboxWddmDDevCaptureToSysMem(HANDLE hDevice, CONST D3DDDIARG_CAPTURETOSYSMEM* pData)
    71407253{
    7141     VBOXDISP_DDI_PROLOGUE();
     7254    VBOXDISP_DDI_PROLOGUE_DEV(hDevice);
    71427255    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    71437256    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     
    71527265static HRESULT APIENTRY vboxWddmDispCreateDevice (IN HANDLE hAdapter, IN D3DDDIARG_CREATEDEVICE* pCreateData)
    71537266{
    7154     VBOXDISP_DDI_PROLOGUE();
     7267    VBOXDISP_DDI_PROLOGUE_ADP(hAdapter);
    71557268    HRESULT hr = S_OK;
    71567269    vboxVDbgPrint(("==> "__FUNCTION__", hAdapter(0x%p), Interface(%d), Version(%d)\n", hAdapter, pCreateData->Interface, pCreateData->Version));
     
    72867399        pCreateData->pDeviceFuncs->pfnRename = NULL; //vboxWddmDDevRename;
    72877400
     7401        VBOXDISPPROFILE_DDI_INIT_DEV(pDevice);
     7402#ifdef VBOX_WDDMDISP_WITH_PROFILE
     7403        pDevice->ProfileDdiPresentCb = VBoxDispProfileSet("pfnPresentCb");
     7404#endif
     7405
     7406#ifdef VBOXWDDMDISP_DEBUG_TIMER
     7407        pDevice->hTimerQueue = CreateTimerQueue();
     7408        Assert(pDevice->hTimerQueue);
     7409#endif
    72887410
    72897411        do
     
    73807502static HRESULT APIENTRY vboxWddmDispCloseAdapter (IN HANDLE hAdapter)
    73817503{
    7382     VBOXDISP_DDI_PROLOGUE();
     7504    VBOXDISP_DDI_PROLOGUE_ADP(hAdapter);
    73837505    vboxVDbgPrint(("==> "__FUNCTION__", hAdapter(0x%p)\n", hAdapter));
    73847506
     
    73967518
    73977519    vboxCapsFree(pAdapter);
     7520
     7521    VBOXDISPPROFILE_DDI_TERM(pAdapter);
    73987522
    73997523    RTMemFree(pAdapter);
     
    74407564HRESULT APIENTRY OpenAdapter(__inout D3DDDIARG_OPENADAPTER*  pOpenData)
    74417565{
    7442     VBOXDISP_DDI_PROLOGUE();
     7566    VBOXDISP_DDI_PROLOGUE_GLBL();
    74437567
    74447568    vboxVDbgPrint(("==> "__FUNCTION__"\n"));
     
    75257649                    VBOXDISPCRHGSMI_SCOPE_SET_GLOBAL();
    75267650                    /* try enable the 3D */
     7651#if 1
    75277652                    hr = VBoxDispD3DOpen(&pAdapter->D3D);
    75287653                    Assert(hr == S_OK);
     7654#else
     7655                    hr = E_FAIL;
     7656#endif
    75297657                    if (hr == S_OK)
    75307658                    {
     
    75737701        hr = S_OK;
    75747702//        RTMemFree(pAdapter);
     7703
     7704        VBOXDISPPROFILE_DDI_INIT_ADP(pAdapter);
    75757705    }
    75767706    else
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.h

    r41473 r41637  
    2626#endif
    2727
     28#ifdef VBOX_WDDMDISP_WITH_PROFILE
     29#include <iprt/asm.h>
     30extern volatile uint32_t g_u32VBoxDispProfileFunctionLoggerIndex;
     31# define VBOXDISPPROFILE_FUNCTION_LOGGER_INDEX_GEN() ASMAtomicIncU32(&g_u32VBoxDispProfileFunctionLoggerIndex);
     32# include "VBoxDispProfile.h"
     33#endif
     34
    2835#include <iprt/cdefs.h>
    2936#include <iprt/list.h>
     
    7784    DDSURFACEDESC *paSurfDescs;
    7885    UINT cMaxSimRTs;
     86#ifdef VBOX_WDDMDISP_WITH_PROFILE
     87    VBoxDispProfileFpsCounter ProfileDdiFps;
     88    VBoxDispProfileSet ProfileDdiFunc;
     89#endif
    7990#ifdef VBOX_WITH_VIDEOHWACCEL
    8091    uint32_t cHeads;
     
    205216    UINT cSamplerTextures;
    206217    struct VBOXWDDMDISP_RESOURCE *aSamplerTextures[VBOXWDDMDISP_TOTAL_SAMPLERS];
     218
     219#ifdef VBOX_WDDMDISP_WITH_PROFILE
     220    VBoxDispProfileFpsCounter ProfileDdiFps;
     221    VBoxDispProfileSet ProfileDdiFunc;
     222
     223    VBoxDispProfileSet ProfileDdiPresentCb;
     224#endif
     225
     226#ifdef VBOXWDDMDISP_DEBUG_TIMER
     227    HANDLE hTimerQueue;
     228#endif
    207229
    208230    UINT cRTs;
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3DIf.h

    r40388 r41637  
    2424#include <iprt/semaphore.h>
    2525
     26#       define _InterlockedExchange           _InterlockedExchange_StupidDDKVsCompilerCrap
     27#       define _InterlockedExchangeAdd        _InterlockedExchangeAdd_StupidDDKVsCompilerCrap
     28#       define _InterlockedCompareExchange    _InterlockedCompareExchange_StupidDDKVsCompilerCrap
     29#       define _InterlockedAddLargeStatistic  _InterlockedAddLargeStatistic_StupidDDKVsCompilerCrap
     30#       define _interlockedbittestandset      _interlockedbittestandset_StupidDDKVsCompilerCrap
     31#       define _interlockedbittestandreset    _interlockedbittestandreset_StupidDDKVsCompilerCrap
     32#       define _interlockedbittestandset64    _interlockedbittestandset64_StupidDDKVsCompilerCrap
     33#       define _interlockedbittestandreset64  _interlockedbittestandreset64_StupidDDKVsCompilerCrap
     34#       pragma warning(disable : 4163)
    2635#include <D3D9.h>
     36#       pragma warning(default : 4163)
     37#       undef  _InterlockedExchange
     38#       undef  _InterlockedExchangeAdd
     39#       undef  _InterlockedCompareExchange
     40#       undef  _InterlockedAddLargeStatistic
     41#       undef  _interlockedbittestandset
     42#       undef  _interlockedbittestandreset
     43#       undef  _interlockedbittestandset64
     44#       undef  _interlockedbittestandreset64
    2745
    2846#include "../../../Wine/vbox/VBoxWineEx.h"
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp

    r41475 r41637  
    5050#include <iprt/assert.h>
    5151
     52static DWORD g_VBoxVDbgFIsModuleNameInited = 0;
     53static char g_VBoxVDbgModuleName[MAX_PATH];
     54
     55char *vboxVDbgDoGetModuleName()
     56{
     57    if (!g_VBoxVDbgFIsModuleNameInited)
     58    {
     59        DWORD cName = GetModuleFileNameA(NULL, g_VBoxVDbgModuleName, RT_ELEMENTS(g_VBoxVDbgModuleName));
     60        if (!cName)
     61        {
     62            DWORD winEr = GetLastError();
     63            WARN(("GetModuleFileNameA failed, winEr %d", winEr));
     64            return NULL;
     65        }
     66        g_VBoxVDbgFIsModuleNameInited = TRUE;
     67    }
     68    return g_VBoxVDbgModuleName;
     69}
     70
    5271static void vboxDispLogDbgFormatStringV(char * szBuffer, uint32_t cbBuffer, const char * szString, va_list pArgList)
    5372{
    54     uint32_t cbWritten = sprintf(szBuffer, "[0x%x.0x%x] Disp: ", GetCurrentProcessId(), GetCurrentThreadId());
     73    uint32_t cbWritten = sprintf(szBuffer, "['%s' 0x%x.0x%x] Disp: ", vboxVDbgDoGetModuleName(), GetCurrentProcessId(), GetCurrentThreadId());
    5574    if (cbWritten > cbBuffer)
    5675    {
     
    90109DWORD g_VBoxVDbgFLog = 1;
    91110DWORD g_VBoxVDbgFLogFlow = 0;
    92 
    93 DWORD g_VBoxVDbgFIsModuleNameInited = 0;
    94 char g_VBoxVDbgModuleName[MAX_PATH];
    95111
    96112LONG g_VBoxVDbgFIsDwm = -1;
     
    626642}
    627643
    628 char *vboxVDbgDoGetModuleName()
    629 {
    630     if (!g_VBoxVDbgFIsModuleNameInited)
    631     {
    632         DWORD cName = GetModuleFileNameA(NULL, g_VBoxVDbgModuleName, RT_ELEMENTS(g_VBoxVDbgModuleName));
    633         if (!cName)
    634         {
    635             DWORD winEr = GetLastError();
    636             WARN(("GetModuleFileNameA failed, winEr %d", winEr));
    637             return NULL;
    638         }
    639         g_VBoxVDbgFIsModuleNameInited = TRUE;
    640     }
    641     return g_VBoxVDbgModuleName;
    642 }
    643 
    644644BOOL vboxVDbgDoCheckExe(const char * pszName)
    645645{
     
    655655        return FALSE;
    656656    return TRUE;
     657}
     658
     659static VOID CALLBACK vboxVDbgTimerCb(__in PVOID lpParameter, __in BOOLEAN TimerOrWaitFired)
     660{
     661    Assert(0);
     662}
     663
     664HRESULT vboxVDbgTimerStart(HANDLE hTimerQueue, HANDLE *phTimer, DWORD msTimeout)
     665{
     666    if (!CreateTimerQueueTimer(phTimer, hTimerQueue,
     667                               vboxVDbgTimerCb,
     668                               NULL,
     669                               msTimeout, /* ms*/
     670                               0,
     671                               WT_EXECUTEONLYONCE))
     672    {
     673        DWORD winEr = GetLastError();
     674        AssertMsgFailed(("CreateTimerQueueTimer failed, winEr (%d)\n", winEr));
     675        return E_FAIL;
     676    }
     677    return S_OK;
     678}
     679
     680HRESULT vboxVDbgTimerStop(HANDLE hTimerQueue, HANDLE hTimer)
     681{
     682    if (!DeleteTimerQueueTimer(hTimerQueue, hTimer, NULL))
     683    {
     684        DWORD winEr = GetLastError();
     685        AssertMsg(winEr == ERROR_IO_PENDING, ("DeleteTimerQueueTimer failed, winEr (%d)\n", winEr));
     686    }
     687    return S_OK;
    657688}
    658689#endif
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h

    r41481 r41637  
    4444/* disable shared resource creation with wine */
    4545//#  define VBOXWDDMDISP_DEBUG_NOSHARED
     46
     47//#  define VBOXWDDMDISP_DEBUG_PRINT_SHARED_CREATE
     48
     49//#  define VBOXWDDMDISP_DEBUG_TIMER
    4650# endif
    4751
     
    7478extern DWORD g_VBoxVDbgFLog;
    7579extern DWORD g_VBoxVDbgFLogFlow;
    76 
    77 extern DWORD g_VBoxVDbgFIsModuleNameInited;
    78 extern char g_VBoxVDbgModuleName[];
    7980
    8081extern LONG g_VBoxVDbgFIsDwm;
     
    261262
    262263VOID vboxVDbgDoPrintLopLastCmd(const char* pszDesc);
     264
     265HRESULT vboxVDbgTimerStart(HANDLE hTimerQueue, HANDLE *phTimer, DWORD msTimeout);
     266HRESULT vboxVDbgTimerStop(HANDLE hTimerQueue, HANDLE hTimer);
    263267
    264268extern DWORD g_VBoxVDbgPid;
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispProfile.h

    r36867 r41637  
    1919#ifndef ___VBoxDispProfile_h__
    2020#define ___VBoxDispProfile_h__
     21#include "VBoxDispD3DCmn.h"
     22
    2123#include <iprt/ctype.h>
    2224#include <iprt/time.h>
    23 
    24 #include "VBoxDispD3DCmn.h"
    2525
    2626#define VBOXDISPPROFILE_MAX_SETSIZE 512
     
    2828#define VBOXDISPPROFILE_GET_TIME_MILLI() RTTimeMilliTS()
    2929#define VBOXDISPPROFILE_DUMP(_m) do {\
    30         LogRel (_m); \
     30        LOGREL_EXACT(_m); \
    3131    } while (0)
    3232
     
    5858    }
    5959
    60     void dump(const PVBOXWDDMDISP_DEVICE pDevice) const
     60    uint64_t getTime() const
     61    {
     62        return m_cTime;
     63    }
     64
     65    uint32_t getNumCalls() const
     66    {
     67        return m_cCalls;
     68    }
     69
     70    const char* getName() const
     71    {
     72        return m_pName;
     73    }
     74
     75    void dump(void *pvObj, uint64_t cTotalEntriesTime, uint64_t cTotalTime) const
    6176    {
    6277//        VBOXDISPPROFILE_DUMP((pDevice, "Entry '%s': calls(%d), time: nanos(%I64u), micros(%I64u), millis(%I64u)\n",
    6378//                m_pName, m_cCalls,
    6479//                m_cTime, m_cTime/1000, m_cTime/1000000));
    65         VBOXDISPPROFILE_DUMP(("%s\t%d\t%I64u\t%I64u\t%I64u\n",
    66                 m_pName, m_cCalls,
    67                 m_cTime, m_cTime/1000, m_cTime/1000000));
     80        VBOXDISPPROFILE_DUMP(("'%s' [0x%p]: \t%d\t%u\t%u\t%u\t%u\t%u", m_pName, pvObj,
     81                m_cCalls,
     82                (uint32_t)m_cTime, (uint32_t)(m_cTime/1000), (uint32_t)(m_cTime/1000000),
     83                (uint32_t)(((double)m_cTime)/cTotalEntriesTime),
     84                (uint32_t)(((double)m_cTime)/cTotalTime)));
    6885    }
    6986private:
     
    7895    VBoxDispProfileSet(const char *pName) :
    7996        m_cEntries(0),
     97        m_cIterations(0),
    8098        m_pName(pName)
    81     {}
     99    {
     100        m_cTime = VBOXDISPPROFILE_GET_TIME_NANO();
     101    }
     102
     103    VBoxDispProfileSet() :
     104        m_cEntries(0),
     105        m_cIterations(0),
     106        m_pName("global")
     107    {
     108        m_cTime = VBOXDISPPROFILE_GET_TIME_NANO();
     109    }
    82110
    83111    VBoxDispProfileEntry * alloc(const char *pName)
     
    93121    }
    94122
     123    VBoxDispProfileEntry * get(uint32_t u32Entry, const char *pName)
     124    {
     125        if (u32Entry < RT_ELEMENTS(m_Entries))
     126        {
     127            VBoxDispProfileEntry * entry = &m_Entries[u32Entry];
     128            if (entry->getName())
     129                return entry;
     130            ++m_cEntries;
     131            *entry = VBoxDispProfileEntry(pName);
     132            return entry;
     133        }
     134        return NULL;
     135    }
     136
     137    uint32_t reportIteration()
     138    {
     139        return ++m_cIterations;
     140    }
     141
     142    uint32_t getNumIterations() const
     143    {
     144        return m_cIterations;
     145    }
     146
     147    uint32_t getNumEntries() const
     148    {
     149        return m_cEntries;
     150    }
     151
     152#define VBOXDISPPROFILESET_FOREACHENTRY(_op) \
     153        for (uint32_t i = 0, e = 0; e < m_cEntries && i < RT_ELEMENTS(m_Entries); ++i) { \
     154            if (m_Entries[i].getName()) { \
     155                { \
     156                _op  \
     157                } \
     158                ++e; \
     159            } \
     160        } \
     161
    95162    void resetEntries()
    96163    {
    97         for (uint32_t i = 0; i < m_cEntries; ++i)
    98         {
    99             m_Entries[i].reset();
    100         }
    101     }
    102 
    103     void dump(const PVBOXWDDMDISP_DEVICE pDevice)
    104     {
    105         VBOXDISPPROFILE_DUMP((">>>> Start of VBox Disp Dump '%s': num entries(%d) >>>>>\n", m_pName, m_cEntries));
    106         VBOXDISPPROFILE_DUMP(("Name\tCalls\tNanos\tMicros\tMillis\n"));
    107         for (uint32_t i = 0; i < m_cEntries; ++i)
    108         {
    109             m_Entries[i].dump(pDevice);
    110         }
    111         VBOXDISPPROFILE_DUMP(("<<<< Endi of VBox Disp Dump '%s' <<<<<\n", m_pName));
     164        VBOXDISPPROFILESET_FOREACHENTRY(  m_Entries[i].reset(); );
     165        m_cTime = VBOXDISPPROFILE_GET_TIME_NANO();
     166    }
     167
     168    void reset()
     169    {
     170        m_cEntries = 0;
     171        m_cTime = VBOXDISPPROFILE_GET_TIME_NANO();
     172    }
     173
     174    void dump(void *pvObj)
     175    {
     176        uint64_t cEntriesTime = 0;
     177        VBOXDISPPROFILESET_FOREACHENTRY( cEntriesTime += m_Entries[i].getTime(); );
     178
     179        VBOXDISPPROFILE_DUMP((">>>> '%s' [0x%p]: Start of VBox Disp Dump: num entries(%d), et(%u), tt(%u) >>>>>", m_pName, pvObj, m_cEntries,
     180                (uint32_t)(cEntriesTime / 1000000), (uint32_t)(m_cTime / 1000000)));
     181        VBOXDISPPROFILE_DUMP(("Name\tCalls\tNanos\tMicros\tMillis\tentries_quota\ttotal_quota"));
     182        VBOXDISPPROFILESET_FOREACHENTRY(
     183                if (m_Entries[i].getNumCalls())
     184                    m_Entries[i].dump(pvObj, cEntriesTime, m_cTime); );
     185        VBOXDISPPROFILE_DUMP(("<<<< '%s' [0x%p]: End of VBox Disp Dump <<<<<", m_pName, pvObj));
    112186    }
    113187
     
    115189    VBoxDispProfileEntry m_Entries[VBOXDISPPROFILE_MAX_SETSIZE];
    116190    uint32_t m_cEntries;
     191    uint32_t m_cIterations;
     192    uint64_t m_cTime;
    117193    const char * m_pName;
    118194};
     
    164240    VBoxDispProfileFpsCounter(uint32_t cPeriods)
    165241    {
     242        init(cPeriods);
     243    }
     244
     245    VBoxDispProfileFpsCounter()
     246    {
     247        memset(&m_Data, 0, sizeof (m_Data));
     248    }
     249
     250    ~VBoxDispProfileFpsCounter()
     251    {
     252        term();
     253    }
     254
     255    void term()
     256    {
     257        if (m_Data.mpaPeriods)
     258        {
     259            RTMemFree(m_Data.mpaPeriods);
     260            m_Data.mpaPeriods = NULL;
     261        }
     262        if (m_Data.mpaCalls)
     263        {
     264            RTMemFree(m_Data.mpaCalls);
     265            m_Data.mpaCalls = NULL;
     266        }
     267        if (m_Data.mpaTimes)
     268        {
     269            RTMemFree(m_Data.mpaTimes);
     270            m_Data.mpaTimes = NULL;
     271        }
     272        m_Data.mcPeriods = 0;
     273    }
     274
     275    /* to be called in case fps counter was created with default constructor */
     276    void init(uint32_t cPeriods)
     277    {
    166278        memset(&m_Data, 0, sizeof (m_Data));
    167279        m_Data.mcPeriods = cPeriods;
    168         m_Data.mpaPeriods = (uint64_t *)RTMemAllocZ(sizeof (m_Data.mpaPeriods[0]) * cPeriods);
    169         m_Data.mpaCalls = (uint32_t *)RTMemAllocZ(sizeof (m_Data.mpaCalls[0]) * cPeriods);
    170         m_Data.mpaTimes = (uint64_t *)RTMemAllocZ(sizeof (m_Data.mpaTimes[0]) * cPeriods);
    171     }
    172 
    173     ~VBoxDispProfileFpsCounter()
    174     {
    175         RTMemFree(m_Data.mpaPeriods);
    176         RTMemFree(m_Data.mpaCalls);
    177         RTMemFree(m_Data.mpaTimes);
     280        if (cPeriods)
     281        {
     282            m_Data.mpaPeriods = (uint64_t *)RTMemAllocZ(sizeof (m_Data.mpaPeriods[0]) * cPeriods);
     283            m_Data.mpaCalls = (uint32_t *)RTMemAllocZ(sizeof (m_Data.mpaCalls[0]) * cPeriods);
     284            m_Data.mpaTimes = (uint64_t *)RTMemAllocZ(sizeof (m_Data.mpaTimes[0]) * cPeriods);
     285        }
    178286    }
    179287
     
    264372    } while (0)
    265373
    266 #define VBOXDISPPROFILE_FUNCTION_LOGGER_DEFINE(_p)  \
     374#ifdef VBOXDISPPROFILE_FUNCTION_LOGGER_GLOBAL_PROFILE
     375# define VBOXDISPPROFILE_FUNCTION_LOGGER_DEFINE(_p)  \
    267376        static VBoxDispProfileEntry * __pVBoxDispProfileEntry = NULL; \
    268377        if (!__pVBoxDispProfileEntry) { __pVBoxDispProfileEntry = _p.alloc(__FUNCTION__); } \
    269378        VBoxDispProfileScopeLogger<VBoxDispProfileEntry> __vboxDispProfileFunctionLogger(__pVBoxDispProfileEntry);
     379#else
     380# ifndef VBOXDISPPROFILE_FUNCTION_LOGGER_INDEX_GEN
     381#  error "VBOXDISPPROFILE_FUNCTION_LOGGER_INDEX_GEN should be fedined!"
     382# endif
     383# define VBOXDISPPROFILE_FUNCTION_LOGGER_DEFINE(_p)  \
     384        static uint32_t __u32VBoxDispProfileIndex = VBOXDISPPROFILE_FUNCTION_LOGGER_INDEX_GEN(); \
     385        VBoxDispProfileEntry * __pVBoxDispProfileEntry = _p.get(__u32VBoxDispProfileIndex, __FUNCTION__); \
     386        VBoxDispProfileScopeLogger<VBoxDispProfileEntry> __vboxDispProfileFunctionLogger(__pVBoxDispProfileEntry);
     387#endif
    270388
    271389#define VBOXDISPPROFILE_STATISTIC_LOGGER_DISABLE_CURRENT() do { \
Note: See TracChangeset for help on using the changeset viewer.

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