NVTX C API Reference v3
NVIDIA Tools Extension Library
Loading...
Searching...
No Matches
nvToolsExtPayload.h
1/*
2 * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 * Licensed under the Apache License v2.0 with LLVM Exceptions.
18 * See https://nvidia.github.io/NVTX/LICENSE.txt for license information.
19 */
20
21#if defined(NVTX_AS_SYSTEM_HEADER)
22#if defined(__clang__)
23#pragma clang system_header
24#elif defined(__GNUC__) || defined(__NVCOMPILER)
25#pragma GCC system_header
26#elif defined(_MSC_VER)
27#pragma system_header
28#endif
29#endif
30
31#include "nvToolsExt.h"
32
33/* Optionally include helper macros. */
34/* #include "nvToolsExtPayloadHelper.h" */
35
43#ifndef NVTX_EXT_PAYLOAD_COMPATID
44#define NVTX_EXT_PAYLOAD_COMPATID 0x0104
45#endif
46
51#ifndef NVTX_EXT_PAYLOAD_MODULEID
52#define NVTX_EXT_PAYLOAD_MODULEID 2
53#endif
54
58#ifndef NVTX_PAYLOAD_TYPE_EXT
59#define NVTX_PAYLOAD_TYPE_EXT (NVTX_STATIC_CAST(int32_t, 0xDFBD0009))
60#endif
61
65#ifndef NVTX_PAYLOAD_ENTRY_FLAGS_V1
66#define NVTX_PAYLOAD_ENTRY_FLAGS_V1
67
68#define NVTX_PAYLOAD_ENTRY_FLAG_UNUSED 0
69
73#define NVTX_PAYLOAD_ENTRY_FLAG_POINTER (1 << 1)
74
78#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_BASE (1 << 2)
79
83#define NVTX_PAYLOAD_ENTRY_FLAG_OFFSET_FROM_HERE (1 << 3)
84
88#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE (1 << 4)
89
93#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED (2 << 4)
94
109#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX (3 << 4)
110
118#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_PAYLOAD_INDEX (4 << 4)
119
127#define NVTX_PAYLOAD_ENTRY_FLAG_DEEP_COPY (1 << 8)
128
132#define NVTX_PAYLOAD_ENTRY_FLAG_HIDE (1 << 9)
133
137#define NVTX_PAYLOAD_ENTRY_FLAG_EVENT_MESSAGE (1 << 10)
138
145#define NVTX_PAYLOAD_ENTRY_FLAG_TIMESTAMP (2 << 10)
146
150#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_BEGIN (1 << 12)
151#define NVTX_PAYLOAD_ENTRY_FLAG_RANGE_END (2 << 12)
152#define NVTX_PAYLOAD_ENTRY_FLAG_MARK (3 << 12)
153#define NVTX_PAYLOAD_ENTRY_FLAG_COUNTER (4 << 12)
154
155#endif /* NVTX_PAYLOAD_ENTRY_FLAGS_V1 */
170/* Helper macro to check if an entry represents an array. */
171#define NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY (\
172 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_FIXED_SIZE | \
173 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_ZERO_TERMINATED | \
174 NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_LENGTH_INDEX)
175
176#define NVTX_PAYLOAD_ENTRY_FLAG_ARRAY_TYPE(F) \
177 ((F) & NVTX_PAYLOAD_ENTRY_FLAG_IS_ARRAY)
178
179
192#ifndef NVTX_PAYLOAD_ENTRY_TYPES_V1
193#define NVTX_PAYLOAD_ENTRY_TYPES_V1
194
195#define NVTX_PAYLOAD_ENTRY_TYPE_INVALID 0
196
200#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR 1
201#define NVTX_PAYLOAD_ENTRY_TYPE_UCHAR 2
202#define NVTX_PAYLOAD_ENTRY_TYPE_SHORT 3
203#define NVTX_PAYLOAD_ENTRY_TYPE_USHORT 4
204#define NVTX_PAYLOAD_ENTRY_TYPE_INT 5
205#define NVTX_PAYLOAD_ENTRY_TYPE_UINT 6
206#define NVTX_PAYLOAD_ENTRY_TYPE_LONG 7
207#define NVTX_PAYLOAD_ENTRY_TYPE_ULONG 8
208#define NVTX_PAYLOAD_ENTRY_TYPE_LONGLONG 9
209#define NVTX_PAYLOAD_ENTRY_TYPE_ULONGLONG 10
210
214#define NVTX_PAYLOAD_ENTRY_TYPE_INT8 11
215#define NVTX_PAYLOAD_ENTRY_TYPE_UINT8 12
216#define NVTX_PAYLOAD_ENTRY_TYPE_INT16 13
217#define NVTX_PAYLOAD_ENTRY_TYPE_UINT16 14
218#define NVTX_PAYLOAD_ENTRY_TYPE_INT32 15
219#define NVTX_PAYLOAD_ENTRY_TYPE_UINT32 16
220#define NVTX_PAYLOAD_ENTRY_TYPE_INT64 17
221#define NVTX_PAYLOAD_ENTRY_TYPE_UINT64 18
222
226#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT 19
227#define NVTX_PAYLOAD_ENTRY_TYPE_DOUBLE 20
228#define NVTX_PAYLOAD_ENTRY_TYPE_LONGDOUBLE 21
229
233#define NVTX_PAYLOAD_ENTRY_TYPE_SIZE 22
234
239#define NVTX_PAYLOAD_ENTRY_TYPE_ADDRESS 23
240
244#define NVTX_PAYLOAD_ENTRY_TYPE_WCHAR 24 /* wide character (since C90) */
245#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR8 25 /* since C2x and C++20 */
246#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR16 26
247#define NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 27
248
252#define NVTX_PAYLOAD_ENTRY_TYPE_INFO_ARRAY_SIZE (NVTX_PAYLOAD_ENTRY_TYPE_CHAR32 + 1)
253
258#define NVTX_PAYLOAD_ENTRY_TYPE_BYTE 32
259
266#define NVTX_PAYLOAD_ENTRY_TYPE_INT128 33
267#define NVTX_PAYLOAD_ENTRY_TYPE_UINT128 34
268
269#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT16 42
270#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT32 43
271#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT64 44
272#define NVTX_PAYLOAD_ENTRY_TYPE_FLOAT128 45
273
274#define NVTX_PAYLOAD_ENTRY_TYPE_BF16 50
275#define NVTX_PAYLOAD_ENTRY_TYPE_TF32 52
276
280#define NVTX_PAYLOAD_ENTRY_TYPE_CATEGORY 68 /* uint32_t */
281#define NVTX_PAYLOAD_ENTRY_TYPE_COLOR_ARGB 69 /* uint32_t */
282
286#define NVTX_PAYLOAD_ENTRY_TYPE_SCOPE_ID 70 /* uint64_t */
287
291#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT32 71
292#define NVTX_PAYLOAD_ENTRY_TYPE_PID_UINT64 72
293
297#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT32 73
298#define NVTX_PAYLOAD_ENTRY_TYPE_TID_UINT64 74
299
315#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING 75 /* `char*`, system LOCALE */
316#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF8 76
317#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF16 77
318#define NVTX_PAYLOAD_ENTRY_TYPE_CSTRING_UTF32 78
319
324#define NVTX_PAYLOAD_ENTRY_TYPE_NVTX_REGISTERED_STRING_HANDLE 80
325
331#define NVTX_PAYLOAD_ENTRY_TYPE_UNION_SELECTOR 100
332
342#define NVTX_TYPE_PAYLOAD_SCHEMA_REFERENCED 1022
343
351#define NVTX_TYPE_PAYLOAD_SCHEMA_RAW 1023
352
353/* Custom (static) schema IDs. */
354#define NVTX_PAYLOAD_SCHEMA_ID_STATIC_START (1 << 24)
355
356/* Dynamic schema IDs (generated by the tool) start here. */
357#define NVTX_PAYLOAD_SCHEMA_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
358
359#endif /* NVTX_PAYLOAD_ENTRY_TYPES_V1 */
365#ifndef NVTX_PAYLOAD_SCHEMA_TYPES_V1
366#define NVTX_PAYLOAD_SCHEMA_TYPES_V1
367
374#define NVTX_PAYLOAD_SCHEMA_TYPE_INVALID 0
375#define NVTX_PAYLOAD_SCHEMA_TYPE_STATIC 1
376#define NVTX_PAYLOAD_SCHEMA_TYPE_DYNAMIC 2
377#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION 3
378#define NVTX_PAYLOAD_SCHEMA_TYPE_UNION_WITH_INTERNAL_SELECTOR 4
379
380#endif /* NVTX_PAYLOAD_SCHEMA_TYPES_V1 */
381
382
383#ifndef NVTX_PAYLOAD_SCHEMA_FLAGS_V1
384#define NVTX_PAYLOAD_SCHEMA_FLAGS_V1
385
391#define NVTX_PAYLOAD_SCHEMA_FLAG_NONE 0
392
397#define NVTX_PAYLOAD_SCHEMA_FLAG_DEEP_COPY (1 << 1)
398
405#define NVTX_PAYLOAD_SCHEMA_FLAG_REFERENCED (1 << 2)
406
411#define NVTX_PAYLOAD_SCHEMA_FLAG_COUNTER_GROUP (1 << 3)
412
417#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_PUSHPOP (2 << 3)
418#define NVTX_PAYLOAD_SCHEMA_FLAG_RANGE_STARTEND (3 << 3)
419#define NVTX_PAYLOAD_SCHEMA_FLAG_MARK (4 << 3)
420
421#endif /* NVTX_PAYLOAD_SCHEMA_FLAGS_V1 */
422
423
424#ifndef NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1
425#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1
426
431#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME (1 << 1)
432#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_TYPE (1 << 2)
433#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS (1 << 3)
434#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ENTRIES (1 << 4)
435#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NUM_ENTRIES (1 << 5)
436#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_STATIC_SIZE (1 << 6)
437#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ALIGNMENT (1 << 7)
438#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID (1 << 8)
439#define NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_EXTENSION (1 << 9)
440
441#endif /* NVTX_PAYLOAD_SCHEMA_ATTR_FIELDS_V1 */
442
443
444#ifndef NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1
445#define NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1
446
451#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NAME (1 << 1)
452#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_ENTRIES (1 << 2)
453#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_NUM_ENTRIES (1 << 3)
454#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SIZE (1 << 4)
455#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_SCHEMA_ID (1 << 5)
456#define NVTX_PAYLOAD_ENUM_ATTR_FIELD_EXTENSION (1 << 6)
457
458#endif /* NVTX_PAYLOAD_ENUM_ATTR_FIELDS_V1 */
459
464#ifndef NVTX_SCOPES_V1
465#define NVTX_SCOPES_V1
466
467#define NVTX_SCOPE_NONE 0 /* No scope specified. */
468#define NVTX_SCOPE_ROOT 1 /* The root in a hierarchy. */
469
470/* Hardware events */
471#define NVTX_SCOPE_CURRENT_HW_MACHINE 2 /* Node/machine name */
472#define NVTX_SCOPE_CURRENT_HW_SOCKET 3
473#define NVTX_SCOPE_CURRENT_HW_CPU_PHYSICAL 4 /* Physical CPU core */
474#define NVTX_SCOPE_CURRENT_HW_CPU_LOGICAL 5 /* Logical CPU core */
475/* Innermost HW execution context */
476#define NVTX_SCOPE_CURRENT_HW_INNERMOST 15
477
478/* Virtualized hardware, virtual machines */
479#define NVTX_SCOPE_CURRENT_HYPERVISOR 16
480#define NVTX_SCOPE_CURRENT_VM 17
481#define NVTX_SCOPE_CURRENT_KERNEL 18
482#define NVTX_SCOPE_CURRENT_CONTAINER 19
483#define NVTX_SCOPE_CURRENT_OS 20
484
485/* Software scopes */
486#define NVTX_SCOPE_CURRENT_SW_PROCESS 21 /* Process scope */
487#define NVTX_SCOPE_CURRENT_SW_THREAD 22 /* Thread scope */
488/* Innermost SW execution context */
489#define NVTX_SCOPE_CURRENT_SW_INNERMOST 31
490
492#define NVTX_SCOPE_ID_STATIC_START (1 << 24)
493
494/* Dynamically (tool) generated scope IDs */
495#define NVTX_SCOPE_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
496
497#endif /* NVTX_SCOPES_V1 */
498
499#ifndef NVTX_TIME_V1
500#define NVTX_TIME_V1
501
507#define NVTX_TIMESTAMP_TYPE_NONE 0
508
510#define NVTX_TIMESTAMP_TYPE_TOOL_PROVIDED 1
511
513#define NVTX_TIMESTAMP_TYPE_CPU_TSC /* RDTSC on x86, CNTVCT on ARM */ 10
514#define NVTX_TIMESTAMP_TYPE_CPU_TSC_NONVIRTUALIZED /* CNTPCT on ARM */ 11
515#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME 12
516#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_REALTIME_COARSE 13
517#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC 14
518#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_RAW 15
519#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_MONOTONIC_COARSE 16
520#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_BOOTTIME 17
521#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_PROCESS_CPUTIME_ID 18
522#define NVTX_TIMESTAMP_TYPE_CPU_CLOCK_GETTIME_THREAD_CPUTIME_ID 19
523
524#define NVTX_TIMESTAMP_TYPE_WIN_QPC 30
525#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFT 31
526#define NVTX_TIMESTAMP_TYPE_WIN_GSTAFTP 32
527
528#define NVTX_TIMESTAMP_TYPE_C_TIME 40
529#define NVTX_TIMESTAMP_TYPE_C_CLOCK 41
530#define NVTX_TIMESTAMP_TYPE_C_TIMESPEC_GET 42
531
532#define NVTX_TIMESTAMP_TYPE_CPP_STEADY_CLOCK 50
533#define NVTX_TIMESTAMP_TYPE_CPP_HIGH_RESOLUTION_CLOCK 51
534#define NVTX_TIMESTAMP_TYPE_CPP_SYSTEM_CLOCK 52
535#define NVTX_TIMESTAMP_TYPE_CPP_UTC_CLOCK 53
536#define NVTX_TIMESTAMP_TYPE_CPP_TAI_CLOCK 54
537#define NVTX_TIMESTAMP_TYPE_CPP_GPS_CLOCK 55
538#define NVTX_TIMESTAMP_TYPE_CPP_FILE_CLOCK 56
539
541#define NVTX_TIMESTAMP_TYPE_GPU_GLOBALTIMER 80 /* e.g. PTIMER */
542
544#define NVTX_TIME_DOMAIN_ID_NONE 0
545
547#define NVTX_TIME_DOMAIN_ID_STATIC_START (1 << 24)
548
549/* Dynamically (tool) generated time domain IDs */
550#define NVTX_TIME_DOMAIN_ID_DYNAMIC_START (NVTX_STATIC_CAST(uint64_t, 1) << 32)
551
553#define NVTX_TIMER_FLAG_NONE 0
554#define NVTX_TIMER_FLAG_CLOCK_MONOTONIC (1 << 1)
555#define NVTX_TIMER_FLAG_CLOCK_STEADY (1 << 2)
556
558#define NVTX_TIMER_START_UNKNOWN 0
559#define NVTX_TIMER_START_SYSTEM_BOOT 1
560#define NVTX_TIMER_START_VM_BOOT 2
561#define NVTX_TIMER_START_UNIX_EPOCH 3 /* 1 January 1970 */
562#define NVTX_TIMER_START_WIN_FILETIME 4 /* 1 January 1601 */
563
568#define NVTX_TIMER_SOURCE_SAFE_CALL_AFTER_PROCESS_TEARDOWN 0
569#define NVTX_TIMER_SOURCE_UNSAFE_CALL_AFTER_PROCESS_TEARDOWN 1
570
571#endif /* NVTX_TIME_V1 */
572
573#ifndef NVTX_BATCH_FLAGS_V1
574#define NVTX_BATCH_FLAGS_V1
575
581#define NVTX_BATCH_FLAG_TIME_SORTED 0
582#define NVTX_BATCH_FLAG_TIME_SORTED_PARTIALLY (1 << 1)
583#define NVTX_BATCH_FLAG_TIME_SORTED_PER_SCOPE (2 << 1)
584#define NVTX_BATCH_FLAG_UNSORTED (3 << 1)
585
586#endif /* NVTX_BATCH_FLAGS_V1 */
587
588#ifdef __cplusplus
589extern "C" {
590#endif /* __cplusplus */
591
592#ifndef NVTX_PAYLOAD_TYPEDEFS_V1
593#define NVTX_PAYLOAD_TYPEDEFS_V1
594
602typedef struct nvtxPayloadEntryTypeInfo_v1
603{
604 uint16_t size;
605 uint16_t align;
607
624typedef struct nvtxPayloadData_v1
625{
629 uint64_t schemaId;
630
635 size_t size;
636
640 const void* payload;
642
643
651typedef struct nvtxSemanticsHeader_v1
652{
653 uint32_t structSize;
654 uint16_t semanticId;
655 uint16_t version;
656 const struct nvtxSemanticsHeader_v1* next;
657 /* Additional fields are defined by the specific semantic extension. */
659
675typedef struct nvtxPayloadSchemaEntry_v1
676{
683 uint64_t flags;
684
691 uint64_t type;
692
698 const char* name;
699
705 const char* description;
706
725
739 uint64_t offset;
740
748
752 const void* reserved;
754
758typedef struct nvtxPayloadSchemaAttr_v1
759{
765 uint64_t fieldMask;
766
770 const char* name;
771
777 uint64_t type;
778
785 uint64_t flags;
786
794
801
811
819 size_t packAlign;
820
826 uint64_t schemaId;
827
834
846typedef struct nvtxPayloadEnum_v1
847{
851 const char* name;
852
856 uint64_t value;
857
862 int8_t isFlag;
864
870typedef struct nvtxPayloadEnumAttr_v1
871{
875 uint64_t fieldMask;
876
880 const char* name;
881
886
891
896
902 uint64_t schemaId;
903
910
911typedef struct nvtxScopeAttr_v1
912{
913 size_t structSize;
914
931 const char* path;
932
934 uint64_t parentScope;
935
941 uint64_t scopeId;
943
944#endif /* NVTX_PAYLOAD_TYPEDEFS_V1 */
945
946#ifndef NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
947#define NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1
948
950typedef struct nvtxTimeDomainAttr_v1
951{
953 uint64_t scopeId;
954
957
963 uint64_t timeDomainId;
964
966 uint64_t timerFlags;
967
970
972 uint64_t timerStart;
974
976typedef struct nvtxSyncPoint_v1
977{
978 int64_t src;
979 int64_t dst;
981
989typedef struct nvtxEventBatch_v1
990{
999
1001 size_t size;
1002
1004 const void* events;
1005
1007 uint64_t scope;
1008
1010 uint64_t flags;
1011
1013 const void* flexData;
1014
1017
1024
1025#endif /* NVTX_PAYLOAD_TYPEDEFS_DEFERRED_V1 */
1026
1027#ifndef NVTX_PAYLOAD_API_FUNCTIONS_V1
1028#define NVTX_PAYLOAD_API_FUNCTIONS_V1
1029
1036NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadSchemaRegister(
1037 nvtxDomainHandle_t domain,
1038 const nvtxPayloadSchemaAttr_t* attr);
1039
1046NVTX_DECLSPEC uint64_t NVTX_API nvtxPayloadEnumRegister(
1047 nvtxDomainHandle_t domain,
1048 const nvtxPayloadEnumAttr_t* attr);
1049
1059NVTX_DECLSPEC uint64_t NVTX_API nvtxScopeRegister(
1060 nvtxDomainHandle_t domain,
1061 const nvtxScopeAttr_t* attr);
1062
1074NVTX_DECLSPEC void NVTX_API nvtxMarkPayload(
1075 nvtxDomainHandle_t domain,
1076 const nvtxPayloadData_t* payloadData,
1077 size_t count);
1078
1090NVTX_DECLSPEC int NVTX_API nvtxRangePushPayload(
1091 nvtxDomainHandle_t domain,
1092 const nvtxPayloadData_t* payloadData,
1093 size_t count);
1094
1109NVTX_DECLSPEC int NVTX_API nvtxRangePopPayload(
1110 nvtxDomainHandle_t domain,
1111 const nvtxPayloadData_t* payloadData,
1112 size_t count);
1113
1124NVTX_DECLSPEC nvtxRangeId_t NVTX_API nvtxRangeStartPayload(
1125 nvtxDomainHandle_t domain,
1126 const nvtxPayloadData_t* payloadData,
1127 size_t count);
1128
1141NVTX_DECLSPEC void NVTX_API nvtxRangeEndPayload(
1142 nvtxDomainHandle_t domain,
1143 nvtxRangeId_t id,
1144 const nvtxPayloadData_t* payloadData,
1145 size_t count);
1146
1163NVTX_DECLSPEC uint8_t NVTX_API nvtxDomainIsEnabled(
1164 nvtxDomainHandle_t domain);
1165
1166#endif /* NVTX_PAYLOAD_API_FUNCTIONS_V1 */
1167
1168#ifndef NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1169#define NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1
1170
1176NVTX_DECLSPEC int64_t NVTX_API nvtxTimestampGet(void);
1177
1187NVTX_DECLSPEC uint64_t NVTX_API nvtxTimeDomainRegister(
1188 nvtxDomainHandle_t domain,
1189 const nvtxTimeDomainAttr_t* timeAttr);
1190
1202NVTX_DECLSPEC void NVTX_API nvtxTimerSource(
1203 nvtxDomainHandle_t domain,
1204 uint64_t timeDomainId,
1205 uint64_t flags,
1206 int64_t (*timestampProviderFn)(void));
1207
1219NVTX_DECLSPEC void NVTX_API nvtxTimerSourceWithData(
1220 nvtxDomainHandle_t domain,
1221 uint64_t timeDomainId,
1222 uint64_t flags,
1223 int64_t (*timestampProviderFn)(void* data),
1224 void* data);
1225
1240NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPoint(
1241 nvtxDomainHandle_t domain,
1242 uint64_t timeDomainId1,
1243 uint64_t timeDomainId2,
1244 int64_t timestamp1,
1245 int64_t timestamp2);
1246
1258NVTX_DECLSPEC void NVTX_API nvtxTimeSyncPointTable(
1259 nvtxDomainHandle_t domain,
1260 uint64_t timeDomainIdSrc,
1261 uint64_t timeDomainIdDst,
1262 const nvtxSyncPoint_t* syncPoints,
1263 size_t count);
1264
1277NVTX_DECLSPEC void NVTX_API nvtxTimestampConversionFactor(
1278 nvtxDomainHandle_t domain,
1279 uint64_t timeDomainIdSrc,
1280 uint64_t timeDomainIdDst,
1281 double slope,
1282 int64_t timestampSrc,
1283 int64_t timestampDst);
1284
1292NVTX_DECLSPEC void NVTX_API nvtxEventSubmit(
1293 nvtxDomainHandle_t domain,
1294 const nvtxPayloadData_t* payloadData,
1295 size_t numPayloads);
1296
1303NVTX_DECLSPEC void NVTX_API nvtxEventBatchSubmit(
1304 nvtxDomainHandle_t domain,
1305 const nvtxEventBatch_t* eventBatch);
1306
1307#endif /* NVTX_PAYLOAD_API_FUNCTIONS_DEFERRED_V1 */
1308
1320#ifndef NVTX_PAYLOAD_CALLBACK_ID_V1
1321#define NVTX_PAYLOAD_CALLBACK_ID_V1
1322
1323#define NVTX3EXT_CBID_nvtxPayloadSchemaRegister 0
1324#define NVTX3EXT_CBID_nvtxPayloadEnumRegister 1
1325#define NVTX3EXT_CBID_nvtxMarkPayload 2
1326#define NVTX3EXT_CBID_nvtxRangePushPayload 3
1327#define NVTX3EXT_CBID_nvtxRangePopPayload 4
1328#define NVTX3EXT_CBID_nvtxRangeStartPayload 5
1329#define NVTX3EXT_CBID_nvtxRangeEndPayload 6
1330#define NVTX3EXT_CBID_nvtxDomainIsEnabled 7
1331#define NVTX3EXT_CBID_nvtxScopeRegister 12
1332
1333#endif /* NVTX_PAYLOAD_CALLBACK_ID_V1 */
1334
1335#ifndef NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1336#define NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1
1337
1338#define NVTX3EXT_CBID_nvtxTimestampGet 8
1339#define NVTX3EXT_CBID_nvtxTimeDomainRegister 9
1340#define NVTX3EXT_CBID_nvtxTimerSource 10
1341#define NVTX3EXT_CBID_nvtxTimerSourceWithData 11
1342#define NVTX3EXT_CBID_nvtxTimeSyncPoint 13
1343#define NVTX3EXT_CBID_nvtxTimeSyncPointTable 14
1344#define NVTX3EXT_CBID_nvtxTimestampConversionFactor 15
1345#define NVTX3EXT_CBID_nvtxEventSubmit 16
1346#define NVTX3EXT_CBID_nvtxEventBatchSubmit 17
1347
1348#endif /* NVTX_PAYLOAD_CALLBACK_ID_DEFERRED_V1 */
1349
1350/*** Helper utilities ***/
1351
1353#ifndef NVTX_POINTER_AS_PAYLOAD_ULLVALUE
1354# ifdef __cplusplus
1355# define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) \
1356 static_cast<uint64_t>(reinterpret_cast<uintptr_t>(p))
1357# else
1358#define NVTX_POINTER_AS_PAYLOAD_ULLVALUE(p) (NVTX_STATIC_CAST(uint64_t, NVTX_STATIC_CAST(uintptr_t, p))
1359# endif
1360#endif
1361
1362#ifndef NVTX_PAYLOAD_EVTATTR_SET_DATA
1372#define NVTX_PAYLOAD_EVTATTR_SET_DATA(evtAttr, pldata_addr, schema_id, pl_addr, sz) \
1373 (pldata_addr)->schemaId = schema_id; \
1374 (pldata_addr)->size = sz; \
1375 (pldata_addr)->payload = pl_addr; \
1376 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata_addr); \
1377 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1378 (evtAttr).reserved0 = 1;
1379#endif /* NVTX_PAYLOAD_EVTATTR_SET_DATA */
1380
1381#ifndef NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE
1388#define NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE(evtAttr, pldata) \
1389 (evtAttr).payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1390 (evtAttr).reserved0 = sizeof(pldata)/sizeof(nvtxPayloadData_t); \
1391 (evtAttr).payload.ullValue = NVTX_POINTER_AS_PAYLOAD_ULLVALUE(pldata);
1392#endif /* NVTX_PAYLOAD_EVTATTR_SET_MULTIPLE */
1393
1394#ifndef NVTX_PAYLOAD_EVTATTR_SET
1395/*
1396 * Do not use this macro directly! It is a helper to attach a single payload to
1397 * an NVTX event attribute.
1398 * @warning The NVTX push, start or mark operation must not be in an outer scope.
1399 */
1400#define NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schema_id, pl_addr, sz) \
1401 nvtxPayloadData_t _NVTX_PAYLOAD_DATA_VAR[] = \
1402 {{schema_id, sz, pl_addr}}; \
1403 (evtAttr)->payload.ullValue = \
1404 NVTX_POINTER_AS_PAYLOAD_ULLVALUE(_NVTX_PAYLOAD_DATA_VAR); \
1405 (evtAttr)->payloadType = NVTX_PAYLOAD_TYPE_EXT; \
1406 (evtAttr)->reserved0 = 1;
1407#endif /* NVTX_PAYLOAD_EVTATTR_SET */
1408
1409#ifndef nvtxPayloadRangePush
1419#define nvtxPayloadRangePush(domain, evtAttr, schemaId, plAddr, size) \
1420do { \
1421 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1422 nvtxDomainRangePushEx(domain, evtAttr); \
1423} while (0)
1424#endif /* nvtxPayloadRangePush */
1425
1426#ifndef nvtxPayloadMark
1436#define nvtxPayloadMark(domain, evtAttr, schemaId, plAddr, size) \
1437do { \
1438 NVTX_PAYLOAD_EVTATTR_SET(evtAttr, schemaId, plAddr, size) \
1439 nvtxDomainMarkEx(domain, evtAttr); \
1440} while (0)
1441#endif /* nvtxPayloadMark */
1442
1443/* Macros to create versioned symbols. */
1444#ifndef NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1445#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1
1446#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID) \
1447 NAME##_v##VERSION##_bpl##COMPATID
1448#define NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, VERSION, COMPATID) \
1449 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L3(NAME, VERSION, COMPATID)
1450#define NVTX_EXT_PAYLOAD_VERSIONED_ID(NAME) \
1451 NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIER_L2(NAME, NVTX_VERSION, NVTX_EXT_PAYLOAD_COMPATID)
1452#endif /* NVTX_EXT_PAYLOAD_VERSIONED_IDENTIFIERS_V1 */
1453
1454#ifdef __GNUC__
1455#pragma GCC visibility push(internal)
1456#endif
1457
1458/* Extension types are required for the implementation and the NVTX handler. */
1459#define NVTX_EXT_TYPES_GUARD
1460#include "nvtxDetail/nvtxExtTypes.h"
1461#undef NVTX_EXT_TYPES_GUARD
1462
1463#ifndef NVTX_NO_IMPL
1464#define NVTX_EXT_IMPL_PAYLOAD_GUARD
1465#include "nvtxDetail/nvtxExtImplPayload_v1.h"
1466#undef NVTX_EXT_IMPL_PAYLOAD_GUARD
1467#endif /* NVTX_NO_IMPL */
1468
1469#ifdef __GNUC__
1470#pragma GCC visibility pop
1471#endif
1472
1473#ifdef __cplusplus
1474}
1475#endif /* __cplusplus */
Helper struct to submit a batch of events (marks or ranges).
Binary payload data, size and decoding information.
Size and alignment information for predefined payload entry types.
This type is used to describe an enumeration.
NVTX payload enumeration type attributes.
const nvtxPayloadEnum_t * entries
NVTX payload schema attributes.
uint64_t type
Payload schema type. (Mandatory).
size_t payloadStaticSize
The binary payload size in bytes for static payload schemas.
size_t packAlign
The byte alignment for packed structures.
const char * name
Name of the payload schema. (Optional)
uint64_t fieldMask
Mask of valid fields in this struct.
uint64_t flags
Payload schema flags. (Optional)
const nvtxPayloadSchemaEntry_t * entries
Entries of a payload schema. (Mandatory).
size_t numEntries
Number of entries in the payload schema. (Mandatory)
Entry in a schema.
uint64_t arrayOrUnionDetail
String length, array length or member selector for union types.
uint64_t type
Predefined payload schema entry type or custom schema ID.
uint64_t offset
Offset in the binary payload data (in bytes).
const char * description
Description of the payload entry. (Optional)
const nvtxSemanticsHeader_t * semantics
Additional semantics of the payload entry.
const char * name
Name or label of the payload entry. (Optional)
const void * reserved
Reserved for future use. Do not use it!
uint64_t flags
Flags to augment the basic type.
Header of the payload entry's semantic field.