//==================================================================================================
 
// PIXPlugin.h
 
//
 
// Microsoft PIX Plugin Header
 
//
 
// Copyright (c) Microsoft Corporation, All rights reserved
 
//==================================================================================================
 
 
 
#pragma once
 
 
 
#ifdef __cplusplus
 
extern "C" 
 
{
 
#endif
 
 
 
 
 
//==================================================================================================
 
// PIX_PLUGIN_SYSTEM_VERSION - Indicates version of the plugin interface the plugin is built with.
 
//==================================================================================================
 
#define PIX_PLUGIN_SYSTEM_VERSION 0x101
 
 
 
 
 
//==================================================================================================
 
// PIXCOUNTERID - A unique identifier for each PIX plugin counter.
 
//==================================================================================================
 
typedef int PIXCOUNTERID;
 
 
 
 
 
//==================================================================================================
 
// PIXCOUNTERDATATYPE - Indicates what type of data the counter produces.
 
//==================================================================================================
 
enum PIXCOUNTERDATATYPE
 
{
 
    PCDT_RESERVED,
 
    PCDT_FLOAT,
 
    PCDT_INT,
 
    PCDT_INT64,
 
    PCDT_STRING,
 
};
 
 
 
 
 
//==================================================================================================
 
// PIXPLUGININFO - This structure is filled out by PIXGetPluginInfo and passed back to PIX.
 
//==================================================================================================
 
struct PIXPLUGININFO
 
{
 
    // Filled in by caller:
 
    HINSTANCE hinst;
 
 
 
    // Filled in by PIXGetPluginInfo:
 
    WCHAR* pstrPluginName;              // Name of plugin
 
    int iPluginVersion;                 // Version of this particular plugin
 
    int iPluginSystemVersion;           // Version of PIX's plugin system this plugin was designed for
 
};
 
 
 
 
 
//==================================================================================================
 
// PIXCOUNTERINFO - This structure is filled out by PIXGetCounterInfo and passed back to PIX 
 
//                  to allow PIX to determine information about the counters in the plugin.
 
//==================================================================================================
 
struct PIXCOUNTERINFO
 
{
 
    PIXCOUNTERID counterID;             // Used to uniquely ID this counter
 
    WCHAR* pstrName;                    // String name of the counter
 
    PIXCOUNTERDATATYPE pcdtDataType;    // Data type returned by this counter
 
};
 
 
 
 
 
//==================================================================================================
 
// PIXGetPluginInfo - This returns basic information about this plugin to PIX.
 
//==================================================================================================
 
BOOL WINAPI PIXGetPluginInfo( PIXPLUGININFO* pPIXPluginInfo );
 
 
 
 
 
//==================================================================================================
 
// PIXGetCounterInfo - This returns an array of PIXCOUNTERINFO structs to PIX.  
 
//                     These PIXCOUNTERINFOs allow PIX to enumerate the counters contained
 
//                     in this plugin.
 
//==================================================================================================
 
BOOL WINAPI PIXGetCounterInfo( DWORD* pdwReturnCounters, PIXCOUNTERINFO** ppCounterInfoList );
 
 
 
 
 
//==================================================================================================
 
// PIXGetCounterDesc - This is called by PIX to request a description of the indicated counter.
 
//==================================================================================================
 
BOOL WINAPI PIXGetCounterDesc( PIXCOUNTERID id, WCHAR** ppstrCounterDesc );
 
 
 
 
 
//==================================================================================================
 
// PIXBeginExperiment - This called by PIX once per counter when instrumentation starts.
 
//==================================================================================================
 
BOOL WINAPI PIXBeginExperiment( PIXCOUNTERID id, const WCHAR* pstrApplication );
 
 
 
 
 
//==================================================================================================
 
// PIXEndFrame - This is called by PIX once per counter at the end of each frame to gather the
 
//               counter value for that frame.  Note that the pointer to the return data must
 
//               continue to point to valid counter data until the next call to PIXEndFrame (or
 
//               PIXEndExperiment) for the same counter.  So do not set *ppReturnData to the same 
 
//               pointer for multiple counters, or point to a local variable that will go out of 
 
//               scope.  See the sample PIX plugin for an example of how to structure a plugin
 
//               properly.
 
//==================================================================================================
 
BOOL WINAPI PIXEndFrame( PIXCOUNTERID id, UINT iFrame, DWORD* pdwReturnBytes, BYTE** ppReturnData );
 
 
 
 
 
//==================================================================================================
 
// PIXEndExperiment - This is called by PIX once per counter when instrumentation ends.
 
//==================================================================================================
 
BOOL WINAPI PIXEndExperiment( PIXCOUNTERID id );
 
 
 
 
 
#ifdef __cplusplus
 
};
 
#endif
 
 
 
//==================================================================================================
 
// eof: PIXPlugin.h
 
//==================================================================================================