text: ﻿//==================================================================================================
  // 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
  //==================================================================================================
  
  