Path: blob/master/dep/winpixeventruntime/include/WinPixEventRuntime/pix3.h
4261 views
// Copyright (c) Microsoft Corporation. All rights reserved.12/*==========================================================================;3*4* Copyright (C) Microsoft Corporation. All Rights Reserved.5*6* File: pix3.h7* Content: PIX include file8*9****************************************************************************/10#pragma once1112#ifndef _PIX3_H_13#define _PIX3_H_1415#include <sal.h>1617#ifndef __cplusplus18#error "Only C++ files can include pix3.h. C is not supported."19#endif2021#if !defined(USE_PIX_SUPPORTED_ARCHITECTURE)22#if defined(_M_X64) || defined(USE_PIX_ON_ALL_ARCHITECTURES) || defined(_M_ARM64)23#define USE_PIX_SUPPORTED_ARCHITECTURE24#endif25#endif2627#if !defined(USE_PIX)28#if defined(USE_PIX_SUPPORTED_ARCHITECTURE) && (defined(_DEBUG) || DBG || defined(PROFILE) || defined(PROFILE_BUILD)) && !defined(_PREFAST_)29#define USE_PIX30#endif31#endif3233#if defined(USE_PIX) && !defined(USE_PIX_SUPPORTED_ARCHITECTURE)34#pragma message("Warning: Pix markers are only supported on AMD64 and ARM64")35#endif363738// These flags are used by both PIXBeginCapture and PIXGetCaptureState39#define PIX_CAPTURE_TIMING (1 << 0)40#define PIX_CAPTURE_GPU (1 << 1)41#define PIX_CAPTURE_FUNCTION_SUMMARY (1 << 2)42#define PIX_CAPTURE_FUNCTION_DETAILS (1 << 3)43#define PIX_CAPTURE_CALLGRAPH (1 << 4)44#define PIX_CAPTURE_INSTRUCTION_TRACE (1 << 5)45#define PIX_CAPTURE_SYSTEM_MONITOR_COUNTERS (1 << 6)46#define PIX_CAPTURE_VIDEO (1 << 7)47#define PIX_CAPTURE_AUDIO (1 << 8)48#define PIX_CAPTURE_RESERVED (1 << 15)4950union PIXCaptureParameters51{52enum PIXCaptureStorage53{54Memory = 0,55};5657struct GpuCaptureParameters58{59PCWSTR FileName;60} GpuCaptureParameters;6162struct TimingCaptureParameters63{64PCWSTR FileName;65UINT32 MaximumToolingMemorySizeMb;66PIXCaptureStorage CaptureStorage;6768BOOL CaptureGpuTiming;6970BOOL CaptureCallstacks;71BOOL CaptureCpuSamples;72UINT32 CpuSamplesPerSecond;7374BOOL CaptureFileIO;7576BOOL CaptureVirtualAllocEvents;77BOOL CaptureHeapAllocEvents;78BOOL CaptureXMemEvents; // Xbox only79BOOL CapturePixMemEvents; // Xbox only80} TimingCaptureParameters;81};8283typedef PIXCaptureParameters* PPIXCaptureParameters;8485#if defined(XBOX) || defined(_XBOX_ONE) || defined(_DURANGO) || defined(_GAMING_XBOX) || defined(_GAMING_XBOX_SCARLETT)86#include "pix3_xbox.h"87#else88#include "pix3_win.h"89#endif9091#if defined(USE_PIX_SUPPORTED_ARCHITECTURE) && (defined(USE_PIX) || defined(USE_PIX_RETAIL))9293#define PIX_EVENTS_ARE_TURNED_ON9495#include "PIXEventsCommon.h"96#include "PIXEvents.h"9798#ifdef USE_PIX99// Starts a programmatically controlled capture.100// captureFlags uses the PIX_CAPTURE_* family of flags to specify the type of capture to take101extern "C" HRESULT WINAPI PIXBeginCapture2(DWORD captureFlags, _In_opt_ const PPIXCaptureParameters captureParameters);102inline HRESULT PIXBeginCapture(DWORD captureFlags, _In_opt_ const PPIXCaptureParameters captureParameters) { return PIXBeginCapture2(captureFlags, captureParameters); }103104// Stops a programmatically controlled capture105// If discard == TRUE, the captured data is discarded106// If discard == FALSE, the captured data is saved107// discard parameter is not supported on Windows108extern "C" HRESULT WINAPI PIXEndCapture(BOOL discard);109110extern "C" DWORD WINAPI PIXGetCaptureState();111112extern "C" void WINAPI PIXReportCounter(_In_ PCWSTR name, float value);113114#endif // USE_PIX115116#endif // (USE_PIX_SUPPORTED_ARCHITECTURE) && (USE_PIX || USE_PIX_RETAIL)117118#if !defined(USE_PIX_SUPPORTED_ARCHITECTURE) || !defined(USE_PIX)119120// Eliminate these APIs when not using PIX121inline HRESULT PIXBeginCapture2(DWORD, _In_opt_ const PIXCaptureParameters*) { return S_OK; }122inline HRESULT PIXBeginCapture(DWORD, _In_opt_ const PIXCaptureParameters*) { return S_OK; }123inline HRESULT PIXEndCapture(BOOL) { return S_OK; }124inline HRESULT PIXGpuCaptureNextFrames(PCWSTR, UINT32) { return S_OK; }125inline HRESULT PIXSetTargetWindow(HWND) { return S_OK; }126inline HRESULT PIXForceD3D11On12() { return S_OK; }127inline HRESULT WINAPI PIXSetHUDOptions(PIXHUDOptions) { return S_OK; }128inline bool WINAPI PIXIsAttachedForGpuCapture() { return false; }129inline HINSTANCE WINAPI PIXOpenCaptureInUI(PCWSTR) { return 0; }130inline HMODULE PIXLoadLatestWinPixGpuCapturerLibrary() { return nullptr; }131inline HMODULE PIXLoadLatestWinPixTimingCapturerLibrary() { return nullptr; }132inline DWORD PIXGetCaptureState() { return 0; }133inline void PIXReportCounter(_In_ PCWSTR, float) {}134inline void PIXNotifyWakeFromFenceSignal(_In_ HANDLE) {}135136#if !defined(USE_PIX_RETAIL)137138inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {}139inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {}140inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {}141inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {}142inline void PIXEndEvent() {}143inline void PIXEndEvent(void*) {}144inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {}145inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {}146inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {}147inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {}148inline void PIXBeginRetailEvent(void*, UINT64, _In_ PCSTR, ...) {}149inline void PIXBeginRetailEvent(void*, UINT64, _In_ PCWSTR, ...) {}150inline void PIXEndRetailEvent(void*) {}151inline void PIXSetRetailMarker(void*, UINT64, _In_ PCSTR, ...) {}152inline void PIXSetRetailMarker(void*, UINT64, _In_ PCWSTR, ...) {}153inline void PIXScopedEvent(UINT64, _In_ PCSTR, ...) {}154inline void PIXScopedEvent(UINT64, _In_ PCWSTR, ...) {}155inline void PIXScopedEvent(void*, UINT64, _In_ PCSTR, ...) {}156inline void PIXScopedEvent(void*, UINT64, _In_ PCWSTR, ...) {}157158#endif // !USE_PIX_RETAIL159160// don't show warnings about expressions with no effect161#pragma warning(disable:4548)162#pragma warning(disable:4555)163164#endif // !USE_PIX_SUPPORTED_ARCHITECTURE || !USE_PIX165166// Use these functions to specify colors to pass as metadata to a PIX event/marker API.167// Use PIX_COLOR() to specify a particular color for an event.168// Or, use PIX_COLOR_INDEX() to specify a set of unique event categories, and let PIX choose169// the colors to represent each category.170inline UINT PIX_COLOR(BYTE r, BYTE g, BYTE b) { return 0xff000000 | (r << 16) | (g << 8) | b; }171inline UINT PIX_COLOR_INDEX(BYTE i) { return i; }172const UINT PIX_COLOR_DEFAULT = PIX_COLOR_INDEX(0);173174#endif // _PIX3_H_175176177