| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578 |
- // Copyright (c) Microsoft Corporation.
- // Licensed under the MIT License.
- // Don't include this file directly - use pix3.h
- #pragma once
- #ifndef _PixEvents_H_
- #define _PixEvents_H_
- #ifndef _PIX3_H_
- # error Do not include this file directly - use pix3.h
- #endif
- #include "PIXEventsCommon.h"
- #if _MSC_VER < 1800
- # error This version of pix3.h is only supported on Visual Studio 2013 or higher
- #elif _MSC_VER < 1900
- # ifndef constexpr // Visual Studio 2013 doesn't support constexpr
- # define constexpr
- # define PIX3__DEFINED_CONSTEXPR
- # endif
- #endif
- // Xbox does not support CPU events for retail scenarios
- #if defined(USE_PIX) || !defined(PIX_XBOX)
- #define PIX_CONTEXT_EMIT_CPU_EVENTS
- #endif
- namespace PIXEventsDetail
- {
- inline void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit)
- {
- // nothing
- UNREFERENCED_PARAMETER(destination);
- UNREFERENCED_PARAMETER(limit);
- }
- template<typename ARG, typename... ARGS>
- void PIXCopyEventArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args)
- {
- PIXCopyEventArgument(destination, limit, arg);
- PIXCopyEventArguments(destination, limit, args...);
- }
- template<typename ARG, typename... ARGS>
- void PIXCopyStringArguments(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, ARG const& arg, ARGS const&... args)
- {
- PIXCopyStringArgument(destination, limit, arg);
- PIXCopyEventArguments(destination, limit, args...);
- }
- template<typename ARG, typename... ARGS>
- void PIXCopyStringArgumentsWithContext(_Out_writes_to_ptr_(limit) UINT64*& destination, _In_ const UINT64* limit, void* context, ARG const& arg, ARGS const&... args)
- {
- #ifdef PIX_XBOX
- UNREFERENCED_PARAMETER(context);
- PIXCopyStringArgument(destination, limit, arg);
- PIXCopyEventArguments(destination, limit, args...);
- #else
- PIXCopyEventArgument(destination, limit, context);
- PIXCopyStringArgument(destination, limit, arg);
- PIXCopyEventArguments(destination, limit, args...);
- #endif
- }
- inline UINT8 PIXGetEventSize(const UINT64* end, const UINT64* start)
- {
- const UINT64 actualEventSize = end - start;
- return static_cast<UINT8>(actualEventSize > PIXEventsSizeMax ? PIXEventsSizeMax : actualEventSize);
- }
- template<typename STR>
- inline UINT8 PIXEncodeStringIsAnsi()
- {
- return PIX_EVENT_METADATA_NONE;
- }
- template<>
- inline UINT8 PIXEncodeStringIsAnsi<char*>()
- {
- return PIX_EVENT_METADATA_STRING_IS_ANSI;
- }
- template<>
- inline UINT8 PIXEncodeStringIsAnsi<const char*>()
- {
- return PIX_EVENT_METADATA_STRING_IS_ANSI;
- }
- template<typename STR, typename... ARGS>
- __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, false);
- if (!time)
- return;
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- return;
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64* eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArguments(destination, limit, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_HAS_COLOR |
- PIXEncodeStringIsAnsi<STR>();
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- template<typename STR, typename... ARGS>
- void PIXBeginEvent(UINT64 color, STR formatString, ARGS... args)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit != nullptr)
- {
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- UINT64* eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArguments(destination, limit, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_HAS_COLOR |
- PIXEncodeStringIsAnsi<STR>();
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- else
- {
- PIXBeginEventAllocate(threadInfo, color, formatString, args...);
- }
- }
- }
- template<typename STR, typename... ARGS>
- __declspec(noinline) void PIXBeginEventAllocate(PIXEventsThreadInfo* threadInfo, UINT8 color, STR formatString, ARGS... args)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, false);
- if (!time)
- return;
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- return;
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64* eventDestination = destination++;
- PIXCopyStringArguments(destination, limit, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- template<typename STR, typename... ARGS>
- void PIXBeginEvent(UINT8 color, STR formatString, ARGS... args)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit != nullptr)
- {
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- UINT64* eventDestination = destination++;
- PIXCopyStringArguments(destination, limit, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- else
- {
- PIXBeginEventAllocate(threadInfo, color, formatString, args...);
- }
- }
- }
- template<typename STR, typename... ARGS>
- __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT64 color, STR formatString, ARGS... args)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, false);
- if (!time)
- return;
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- return;
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64* eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArguments(destination, limit, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIXEncodeStringIsAnsi<STR>() |
- PIX_EVENT_METADATA_HAS_COLOR;
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- template<typename STR, typename... ARGS>
- void PIXSetMarker(UINT64 color, STR formatString, ARGS... args)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit != nullptr)
- {
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- UINT64* eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArguments(destination, limit, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIXEncodeStringIsAnsi<STR>() |
- PIX_EVENT_METADATA_HAS_COLOR;
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- else
- {
- PIXSetMarkerAllocate(threadInfo, color, formatString, args...);
- }
- }
- }
- template<typename STR, typename... ARGS>
- __declspec(noinline) void PIXSetMarkerAllocate(PIXEventsThreadInfo* threadInfo, UINT8 color, STR formatString, ARGS... args)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, false);
- if (!time)
- return;
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- return;
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64* eventDestination = destination++;
- PIXCopyStringArguments(destination, limit, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- template<typename STR, typename... ARGS>
- void PIXSetMarker(UINT8 color, STR formatString, ARGS... args)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit != nullptr)
- {
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- UINT64* eventDestination = destination++;
- PIXCopyStringArguments(destination, limit, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- else
- {
- PIXSetMarkerAllocate(threadInfo, color, formatString, args...);
- }
- }
- }
- template<typename STR, typename... ARGS>
- __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, false);
- if (!time)
- {
- eventDestination = nullptr;
- return;
- }
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- {
- eventDestination = nullptr;
- return;
- }
- limit += PIXEventsSafeFastCopySpaceQwords;
- eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIX_EVENT_METADATA_HAS_COLOR;
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- template<typename STR, typename... ARGS>
- void PIXBeginEventOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT64 color, STR formatString, ARGS... args)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit == nullptr)
- {
- eventDestination = nullptr;
- return;
- }
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIX_EVENT_METADATA_HAS_COLOR;
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- else
- {
- PIXBeginEventOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...);
- }
- }
- template<typename CONTEXT, typename STR, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, UINT64 color, STR formatString, ARGS... args)
- {
- UINT64* destination = nullptr;
- UINT8 eventSize = 0u;
- #ifdef PIX_CONTEXT_EMIT_CPU_EVENTS
- PIXBeginEventOnContextCpu(destination, eventSize, context, color, formatString, args...);
- #endif
- #ifdef PIX_USE_GPU_MARKERS_V2
- if (destination != nullptr)
- {
- PIXInsertTimingMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast<void*>(destination), eventSize * sizeof(UINT64));
- }
- else
- #endif
- {
- UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords];
- #ifdef PIX_USE_GPU_MARKERS_V2
- destination = buffer;
- UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords;
- UINT64* eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = 0ull;
- eventSize = static_cast<const UINT8>(destination - buffer);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIX_EVENT_METADATA_HAS_COLOR;
- *eventDestination = PIXEncodeEventInfo(0, PIXEvent_BeginEvent, eventSize, eventMetadata);
- PIXInsertGPUMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #else
- destination = PixEventsLegacy::EncodeBeginEventForContext(buffer, color, formatString, args...);
- PIXBeginGPUEventOnContext(context, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #endif
- }
- }
- template<typename STR, typename... ARGS>
- __declspec(noinline) void PIXBeginEventOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT8 color, STR formatString, ARGS... args)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, false);
- if (!time)
- {
- eventDestination = nullptr;
- return;
- }
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- {
- eventDestination = nullptr;
- return;
- }
- limit += PIXEventsSafeFastCopySpaceQwords;
- eventDestination = destination++;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- template<typename STR, typename... ARGS>
- void PIXBeginEventOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT8 color, STR formatString, ARGS... args)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit == nullptr)
- {
- eventDestination = nullptr;
- return;
- }
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- eventDestination = destination++;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_BeginEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- else
- {
- PIXBeginEventOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...);
- }
- }
- template<typename CONTEXT, typename STR, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, UINT8 color, STR formatString, ARGS... args)
- {
- UINT64* destination = nullptr;
- UINT8 eventSize = 0u;
- #ifdef PIX_CONTEXT_EMIT_CPU_EVENTS
- PIXBeginEventOnContextCpu(destination, eventSize, context, color, formatString, args...);
- #endif
- #ifdef PIX_USE_GPU_MARKERS_V2
- if (destination != nullptr)
- {
- PIXInsertTimingMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast<void*>(destination), eventSize * sizeof(UINT64));
- }
- else
- #endif
- {
- UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords];
- #ifdef PIX_USE_GPU_MARKERS_V2
- destination = buffer;
- UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords;
- UINT64* eventDestination = destination++;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = 0ull;
- eventSize = static_cast<const UINT8>(destination - buffer);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(0, PIXEvent_BeginEvent, eventSize, eventMetadata);
- PIXInsertGPUMarkerOnContextForBeginEvent(context, PIXEvent_BeginEvent, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #else
- destination = PixEventsLegacy::EncodeBeginEventForContext(buffer, color, formatString, args...);
- PIXBeginGPUEventOnContext(context, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #endif
- }
- }
- template<typename STR, typename... ARGS>
- __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT64 color, STR formatString, ARGS... args)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, false);
- if (!time)
- {
- eventDestination = nullptr;
- return;
- }
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- {
- eventDestination = nullptr;
- return;
- }
- limit += PIXEventsSafeFastCopySpaceQwords;
- eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIX_EVENT_METADATA_HAS_COLOR;
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- template<typename STR, typename... ARGS>
- void PIXSetMarkerOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT64 color, STR formatString, ARGS... args)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit == nullptr)
- {
- eventDestination = nullptr;
- return;
- }
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIX_EVENT_METADATA_HAS_COLOR;
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- else
- {
- PIXSetMarkerOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...);
- }
- }
- template<typename CONTEXT, typename STR, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, UINT64 color, STR formatString, ARGS... args)
- {
- UINT64* destination = nullptr;
- UINT8 eventSize = 0u;
- #ifdef PIX_CONTEXT_EMIT_CPU_EVENTS
- PIXSetMarkerOnContextCpu(destination, eventSize, context, color, formatString, args...);
- #endif
- #ifdef PIX_USE_GPU_MARKERS_V2
- if (destination != nullptr)
- {
- PIXInsertTimingMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast<void*>(destination), eventSize * sizeof(UINT64));
- }
- else
- #endif
- {
- UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords];
- #ifdef PIX_USE_GPU_MARKERS_V2
- destination = buffer;
- UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords;
- UINT64* eventDestination = destination++;
- *destination++ = color;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = 0ull;
- eventSize = static_cast<const UINT8>(destination - buffer);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIX_EVENT_METADATA_HAS_COLOR;
- *eventDestination = PIXEncodeEventInfo(0, PIXEvent_SetMarker, eventSize, eventMetadata);
- PIXInsertGPUMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #else
- destination = PixEventsLegacy::EncodeSetMarkerForContext(buffer, color, formatString, args...);
- PIXSetGPUMarkerOnContext(context, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #endif
- }
- }
- template<typename STR, typename... ARGS>
- __declspec(noinline) void PIXSetMarkerOnContextCpuAllocate(UINT64*& eventDestination, UINT8& eventSize, PIXEventsThreadInfo* threadInfo, void* context, UINT8 color, STR formatString, ARGS... args)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, false);
- if (!time)
- {
- eventDestination = nullptr;
- return;
- }
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- {
- eventDestination = nullptr;
- return;
- }
- limit += PIXEventsSafeFastCopySpaceQwords;
- eventDestination = destination++;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- template<typename STR, typename... ARGS>
- void PIXSetMarkerOnContextCpu(UINT64*& eventDestination, UINT8& eventSize, void* context, UINT8 color, STR formatString, ARGS... args)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit == nullptr)
- {
- eventDestination = nullptr;
- return;
- }
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- eventDestination = destination++;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = PIXEventsBlockEndMarker;
- eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_SetMarker, eventSize, eventMetadata);
- threadInfo->destination = destination;
- }
- else
- {
- PIXSetMarkerOnContextCpuAllocate(eventDestination, eventSize, threadInfo, context, color, formatString, args...);
- }
- }
- template<typename CONTEXT, typename STR, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, UINT8 color, STR formatString, ARGS... args)
- {
- UINT64* destination = nullptr;
- UINT8 eventSize = 0u;
- #ifdef PIX_CONTEXT_EMIT_CPU_EVENTS
- PIXSetMarkerOnContextCpu(destination, eventSize, context, color, formatString, args...);
- #endif
- #ifdef PIX_USE_GPU_MARKERS_V2
- if (destination != nullptr)
- {
- PIXInsertTimingMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast<void*>(destination), eventSize * sizeof(UINT64));
- }
- else
- #endif
- {
- UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords];
- #ifdef PIX_USE_GPU_MARKERS_V2
- destination = buffer;
- UINT64* limit = buffer + PIXEventsGraphicsRecordSpaceQwords - PIXEventsReservedTailSpaceQwords;
- UINT64* eventDestination = destination++;
- PIXCopyStringArgumentsWithContext(destination, limit, context, formatString, args...);
- *destination = 0ull;
- eventSize = static_cast<const UINT8>(destination - buffer);
- const UINT8 eventMetadata =
- PIX_EVENT_METADATA_ON_CONTEXT |
- PIXEncodeStringIsAnsi<STR>() |
- PIXEncodeIndexColor(color);
- *eventDestination = PIXEncodeEventInfo(0, PIXEvent_SetMarker, eventSize, eventMetadata);
- PIXInsertGPUMarkerOnContextForSetMarker(context, PIXEvent_SetMarker, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #else
- destination = PixEventsLegacy::EncodeSetMarkerForContext(buffer, color, formatString, args...);
- PIXSetGPUMarkerOnContext(context, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #endif
- }
- }
- __declspec(noinline) inline void PIXEndEventAllocate(PIXEventsThreadInfo* threadInfo)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, true);
- if (!time)
- return;
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- return;
- limit += PIXEventsSafeFastCopySpaceQwords;
- const UINT8 eventSize = 1;
- const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE;
- *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata);
- *destination = PIXEventsBlockEndMarker;
- threadInfo->destination = destination;
- }
- inline void PIXEndEvent()
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit != nullptr)
- {
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- const UINT8 eventSize = 1;
- const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE;
- *destination++ = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata);
- *destination = PIXEventsBlockEndMarker;
- threadInfo->destination = destination;
- }
- else
- {
- PIXEndEventAllocate(threadInfo);
- }
- }
- }
- __declspec(noinline) inline UINT64* PIXEndEventOnContextCpuAllocate(PIXEventsThreadInfo* threadInfo, void* context)
- {
- UINT64 time = PIXEventsReplaceBlock(threadInfo, true);
- if (!time)
- return nullptr;
- UINT64* destination = threadInfo->destination;
- UINT64* limit = threadInfo->biasedLimit;
- if (destination >= limit)
- return nullptr;
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64* eventDestination = destination++;
- #ifdef PIX_XBOX
- UNREFERENCED_PARAMETER(context);
- #else
- PIXCopyEventArgument(destination, limit, context);
- #endif
- * destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata = PIX_EVENT_METADATA_ON_CONTEXT;
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- return eventDestination;
- }
- inline UINT64* PIXEndEventOnContextCpu(void* context)
- {
- PIXEventsThreadInfo* threadInfo = PIXGetThreadInfo();
- UINT64* limit = threadInfo->biasedLimit;
- if (limit != nullptr)
- {
- UINT64* destination = threadInfo->destination;
- if (destination < limit)
- {
- limit += PIXEventsSafeFastCopySpaceQwords;
- UINT64 time = PIXGetTimestampCounter();
- UINT64* eventDestination = destination++;
- #ifndef PIX_XBOX
- PIXCopyEventArgument(destination, limit, context);
- #endif
- * destination = PIXEventsBlockEndMarker;
- const UINT8 eventSize = PIXGetEventSize(destination, threadInfo->destination);
- const UINT8 eventMetadata = PIX_EVENT_METADATA_ON_CONTEXT;
- *eventDestination = PIXEncodeEventInfo(time, PIXEvent_EndEvent, eventSize, eventMetadata);
- threadInfo->destination = destination;
- return eventDestination;
- }
- else
- {
- return PIXEndEventOnContextCpuAllocate(threadInfo, context);
- }
- }
- return nullptr;
- }
- template<typename CONTEXT>
- void PIXEndEvent(CONTEXT* context)
- {
- UINT64* destination = nullptr;
- #ifdef PIX_CONTEXT_EMIT_CPU_EVENTS
- destination = PIXEndEventOnContextCpu(context);
- #endif
- #ifdef PIX_USE_GPU_MARKERS_V2
- if (destination != nullptr)
- {
- PIXInsertTimingMarkerOnContextForEndEvent(context, PIXEvent_EndEvent);
- }
- else
- #endif
- {
- #ifdef PIX_USE_GPU_MARKERS_V2
- UINT64 buffer[PIXEventsGraphicsRecordSpaceQwords];
- destination = buffer;
- UINT64* eventDestination = destination++;
- const UINT8 eventSize = static_cast<const UINT8>(destination - buffer);
- const UINT8 eventMetadata = PIX_EVENT_METADATA_NONE;
- *eventDestination = PIXEncodeEventInfo(0, PIXEvent_EndEvent, eventSize, eventMetadata);
- PIXInsertGPUMarkerOnContextForEndEvent(context, PIXEvent_EndEvent, static_cast<void*>(buffer), static_cast<UINT>(reinterpret_cast<BYTE*>(destination) - reinterpret_cast<BYTE*>(buffer)));
- #else
- PIXEndGPUEventOnContext(context);
- #endif
- }
- }
- }
- #if defined(USE_PIX)
- template<typename... ARGS>
- void PIXBeginEvent(UINT64 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(UINT64 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(UINT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(UINT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(INT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(INT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(DWORD color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(DWORD color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(UINT8 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- void PIXBeginEvent(UINT8 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(UINT64 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(color, formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(UINT64 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(color, formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(UINT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(UINT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(INT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(INT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(DWORD color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(DWORD color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(static_cast<UINT64>(color), formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(UINT8 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(color, formatString, args...);
- }
- template<typename... ARGS>
- void PIXSetMarker(UINT8 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginEvent(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetMarker(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, color, formatString, args...);
- }
- inline void PIXEndEvent()
- {
- PIXEventsDetail::PIXEndEvent();
- }
- template<typename CONTEXT>
- void PIXEndEvent(CONTEXT* context)
- {
- PIXEventsDetail::PIXEndEvent(context);
- }
- #else // USE_PIX_RETAIL
- inline void PIXBeginEvent(UINT64, _In_ PCSTR, ...) {}
- inline void PIXBeginEvent(UINT64, _In_ PCWSTR, ...) {}
- inline void PIXBeginEvent(void*, UINT64, _In_ PCSTR, ...) {}
- inline void PIXBeginEvent(void*, UINT64, _In_ PCWSTR, ...) {}
- inline void PIXEndEvent() {}
- inline void PIXEndEvent(void*) {}
- inline void PIXSetMarker(UINT64, _In_ PCSTR, ...) {}
- inline void PIXSetMarker(UINT64, _In_ PCWSTR, ...) {}
- inline void PIXSetMarker(void*, UINT64, _In_ PCSTR, ...) {}
- inline void PIXSetMarker(void*, UINT64, _In_ PCWSTR, ...) {}
- #endif // USE_PIX
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXBeginRetailEvent(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXBeginEvent(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, static_cast<UINT64>(color), formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, color, formatString, args...);
- }
- template<typename CONTEXT, typename... ARGS>
- void PIXSetRetailMarker(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args)
- {
- PIXEventsDetail::PIXSetMarker(context, color, formatString, args...);
- }
- template<typename CONTEXT>
- void PIXEndRetailEvent(CONTEXT* context)
- {
- PIXEventsDetail::PIXEndEvent(context);
- }
- template<typename CONTEXT>
- class PIXScopedEventObject
- {
- CONTEXT* m_context;
- public:
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginEvent(m_context, color, formatString, args...);
- }
- ~PIXScopedEventObject()
- {
- PIXEndEvent(m_context);
- }
- };
- template<typename CONTEXT>
- class PIXScopedRetailEventObject
- {
- CONTEXT* m_context;
- public:
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, UINT64 color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, UINT32 color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, UINT32 color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, INT32 color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, INT32 color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, DWORD color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, DWORD color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, UINT8 color, PCWSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedRetailEventObject(CONTEXT* context, UINT8 color, PCSTR formatString, ARGS... args)
- : m_context(context)
- {
- PIXBeginRetailEvent(m_context, color, formatString, args...);
- }
- ~PIXScopedRetailEventObject()
- {
- PIXEndRetailEvent(m_context);
- }
- };
- template<>
- class PIXScopedEventObject<void>
- {
- public:
- template<typename... ARGS>
- PIXScopedEventObject(UINT64 color, PCWSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(UINT64 color, PCSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(UINT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(UINT32 color, PCSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(INT32 color, PCWSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(INT32 color, PCSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(DWORD color, PCWSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(DWORD color, PCSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(UINT8 color, PCWSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- template<typename... ARGS>
- PIXScopedEventObject(UINT8 color, PCSTR formatString, ARGS... args)
- {
- PIXBeginEvent(color, formatString, args...);
- }
- ~PIXScopedEventObject()
- {
- PIXEndEvent();
- }
- };
- #define PIXConcatenate(a, b) a ## b
- #define PIXGetScopedEventVariableName(a, b) PIXConcatenate(a, b)
- #define PIXScopedEvent(context, ...) PIXScopedEventObject<PIXInferScopedEventType<decltype(context)>::Type> PIXGetScopedEventVariableName(pixEvent, __LINE__)(context, __VA_ARGS__)
- #ifdef PIX3__DEFINED_CONSTEXPR
- #undef constexpr
- #undef PIX3__DEFINED_CONSTEXPR
- #endif
- #endif // _PIXEvents_H__
|