Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:45:12

0001 /*
0002  * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
0003  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0004  *
0005  * Licensed under the Apache License, Version 2.0 (the "License");
0006  * you may not use this file except in compliance with the License.
0007  * You may obtain a copy of the License at
0008  *
0009  *     http://www.apache.org/licenses/LICENSE-2.0
0010  *
0011  * Unless required by applicable law or agreed to in writing, software
0012  * distributed under the License is distributed on an "AS IS" BASIS,
0013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0014  * See the License for the specific language governing permissions and
0015  * limitations under the License.
0016  *
0017  * Licensed under the Apache License v2.0 with LLVM Exceptions.
0018  * See https://nvidia.github.io/NVTX/LICENSE.txt for license information.
0019  */
0020 
0021 #if defined(NVTX_AS_SYSTEM_HEADER)
0022 #if defined(__clang__)
0023 #pragma clang system_header
0024 #elif defined(__GNUC__) || defined(__NVCOMPILER)
0025 #pragma GCC system_header
0026 #elif defined(_MSC_VER)
0027 #pragma system_header
0028 #endif
0029 #endif
0030 
0031 #ifndef NVTX_EXT_PAYLOAD_HELPER_INTERNAL_H
0032 #define NVTX_EXT_PAYLOAD_HELPER_INTERNAL_H
0033 
0034 /* General helper macros */
0035 #include "nvtxExtHelperMacros.h"
0036 
0037 /* Get variable name with line number (almost unique per file). */
0038 #define _NVTX_PAYLOAD_DATA_VAR NVTX_EXT_CONCAT(nvtxDFDB,__LINE__)
0039 
0040 /* Create real arguments from just pasting tokens next to each other. */
0041 #define _NVTX_PAYLOAD_PASS_THROUGH(...) __VA_ARGS__
0042 
0043 /* Avoid prefixing `NVTX_PAYLOAD_ENTRY_` for nested payloads. */
0044 #define NVTX_PAYLOAD_ENTRY_THROWAWAY
0045 #define _NVTX_PAYLOAD_NESTED(id) THROWAWAY id
0046 
0047 /*
0048  * Create the NVTX binary payloads schema attributes.
0049  *
0050  * @param struct_id The name of the struct.
0051  * @param schema_name The name of the schema.
0052  * @param schema_flags Additional schema flags
0053  * @param mask_add Fields to be added to the mask.
0054  * @param num_entries The number schema entries.
0055  */
0056 #define NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, schema_id, mask_add, num_entries) \
0057     nvtxPayloadSchemaAttr_t struct_id##Attr = { \
0058         /*.fieldMask = */NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_TYPE | mask_add \
0059             NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_ENTRIES | \
0060             NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NUM_ENTRIES | \
0061             NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_STATIC_SIZE, \
0062         /*.name = */schema_name, \
0063         /*.type = */NVTX_PAYLOAD_SCHEMA_TYPE_STATIC, \
0064         /*.flags = */schema_flags, \
0065         /*.entries = */struct_id##Schema, /*.numEntries = */num_entries, \
0066         /*.payloadStaticSize = */sizeof(struct_id), \
0067         /*.packAlign = */0, /*.schemaId = */schema_id, \
0068         /*.extension = */NVTX_NULLPTR};
0069 
0070 
0071 /*****************************************************************/
0072 /*** Helper for `NVTX_DEFINE_SCHEMA_FOR_STRUCT[_AND_REGISTER]` ***/
0073 
0074 /* First part of schema entry for different number of arguments. */
0075 #define _NVTX_PAYLOAD_SCHEMA_EF2(member, etype) \
0076     0, NVTX_PAYLOAD_ENTRY_##etype, NVTX_NULLPTR, NVTX_NULLPTR, 0,
0077 #define _NVTX_PAYLOAD_SCHEMA_EF3(member, etype, name) \
0078     0, NVTX_PAYLOAD_ENTRY_##etype, name, NVTX_NULLPTR, 0,
0079 #define _NVTX_PAYLOAD_SCHEMA_EF4(member, etype, name, desc) \
0080     0, NVTX_PAYLOAD_ENTRY_##etype, name, desc, 0,
0081 #define _NVTX_PAYLOAD_SCHEMA_EF5(member, etype, name, desc, arraylen) \
0082     0, NVTX_PAYLOAD_ENTRY_##etype, name, desc, arraylen,
0083 #define _NVTX_PAYLOAD_SCHEMA_EF6(member, etype, name, desc, arraylen, flags) \
0084     NVTX_PAYLOAD_ENTRY_FLAG_##flags, NVTX_PAYLOAD_ENTRY_##etype, name, desc, arraylen,
0085 
0086 #define _NVTX_PAYLOAD_SCHEMA_ENTRY_FRONT(...) \
0087     NVTX_EXT_CONCAT(_NVTX_PAYLOAD_SCHEMA_EF, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)
0088 
0089 /* Second part of schema entry (append struct member).
0090    (At least two arguments are passed (`member` and `etype`). */
0091 #define _NVTX_PAYLOAD_SCHEMA_ENTRY_END(member, ...) member
0092 
0093 /* Resolve to schema entry. `entry` is `(ctype, name, ...)`. */
0094 #define _NVTX_PAYLOAD_SCHEMA_ENTRY(struct_id, entry) \
0095     {_NVTX_PAYLOAD_SCHEMA_ENTRY_FRONT entry \
0096     offsetof(struct_id, _NVTX_PAYLOAD_SCHEMA_ENTRY_END entry), \
0097     NVTX_NULLPTR, NVTX_NULLPTR},
0098 
0099 /* Handle up to 16 schema entries. */
0100 #define _NVTX_PAYLOAD_SME1(s,e1)      _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1)
0101 #define _NVTX_PAYLOAD_SME2(s,e1,...)  _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME1(s,__VA_ARGS__)
0102 #define _NVTX_PAYLOAD_SME3(s,e1,...)  _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME2(s,__VA_ARGS__)
0103 #define _NVTX_PAYLOAD_SME4(s,e1,...)  _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME3(s,__VA_ARGS__)
0104 #define _NVTX_PAYLOAD_SME5(s,e1,...)  _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME4(s,__VA_ARGS__)
0105 #define _NVTX_PAYLOAD_SME6(s,e1,...)  _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME5(s,__VA_ARGS__)
0106 #define _NVTX_PAYLOAD_SME7(s,e1,...)  _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME6(s,__VA_ARGS__)
0107 #define _NVTX_PAYLOAD_SME8(s,e1,...)  _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME7(s,__VA_ARGS__)
0108 #define _NVTX_PAYLOAD_SME9(s,e1,...)  _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME8(s,__VA_ARGS__)
0109 #define _NVTX_PAYLOAD_SME10(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME9(s,__VA_ARGS__)
0110 #define _NVTX_PAYLOAD_SME11(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME10(s,__VA_ARGS__)
0111 #define _NVTX_PAYLOAD_SME12(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME11(s,__VA_ARGS__)
0112 #define _NVTX_PAYLOAD_SME13(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME12(s,__VA_ARGS__)
0113 #define _NVTX_PAYLOAD_SME14(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME13(s,__VA_ARGS__)
0114 #define _NVTX_PAYLOAD_SME15(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME14(s,__VA_ARGS__)
0115 #define _NVTX_PAYLOAD_SME16(s,e1,...) _NVTX_PAYLOAD_SCHEMA_ENTRY(s,e1) _NVTX_PAYLOAD_SME15(s,__VA_ARGS__)
0116 
0117 #define _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, ...) \
0118   nvtxPayloadSchemaEntry_t struct_id##Schema[] = { \
0119     NVTX_EXT_CONCAT(_NVTX_PAYLOAD_SME, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(struct_id, __VA_ARGS__) \
0120     {0, 0, NVTX_NULLPTR, NVTX_NULLPTR, 0, 0, NVTX_NULLPTR, NVTX_NULLPTR} \
0121   };
0122 
0123 /*
0124  * Handle optional parameters for `NVTX_DEFINE_SCHEMA_FOR_STRUCT[_AND_REGISTER]`.
0125  */
0126 #define _NVTX_DEFINE_S4S_6(struct_id, schema_name, prefix, schema_flags, schema_id, entries) \
0127     prefix _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0128     prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, schema_id, \
0129         NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID |,\
0130         NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries))
0131 #define _NVTX_DEFINE_S4S_5(struct_id, schema_name, prefix, schema_flags, entries) \
0132     prefix _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0133     prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, 0, \
0134         NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS |, \
0135         NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries))
0136 #define _NVTX_DEFINE_S4S_4(struct_id, schema_name, prefix, entries) \
0137     prefix _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0138     prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, NVTX_PAYLOAD_SCHEMA_FLAG_NONE, 0, \
0139         NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME |, \
0140         NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries))
0141 #define _NVTX_DEFINE_S4S_3(struct_id, schema_name, entries) \
0142     _NVTX_DEFINE_S4S_4(struct_id, schema_name, /*prefix*/, entries)
0143 #define _NVTX_DEFINE_S4S_2(struct_id, entries) \
0144     _NVTX_PAYLOAD_SCHEMA_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0145     NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, NVTX_NULLPTR, NVTX_PAYLOAD_SCHEMA_FLAG_NONE, 0, ,\
0146         NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries))
0147 
0148 #define _NVTX_DEFINE_SCHEMA_FOR_STRUCT(struct_id, ...) \
0149     NVTX_EXT_CONCAT(_NVTX_DEFINE_S4S_, \
0150         NVTX_EXT_NUM_ARGS(struct_id, __VA_ARGS__))(struct_id, __VA_ARGS__)
0151 
0152 /*** END: Helper for `NVTX_PAYLOAD_STATIC_SCHEMA_{DEFINE,SETUP}` ***/
0153 
0154 
0155 /******************************************************************/
0156 /*** Helper for `NVTX_DEFINE_STRUCT_WITH_SCHEMA[_AND_REGISTER]` ***/
0157 
0158 /* Extract struct member for fixed-size arrays. */
0159 #define _NVTX_PAYLOAD_STRUCT_ARR_MEM1(name) name
0160 #define _NVTX_PAYLOAD_STRUCT_ARR_MEM2(name, count) name[count]
0161 
0162 /* Extract type and member name and handle special case of fixed-size array. */
0163 #define _NVTX_PAYLOAD_STRUCT_E2(type, member) type member;
0164 #define _NVTX_PAYLOAD_STRUCT_E3(type, member, etype) type member;
0165 #define _NVTX_PAYLOAD_STRUCT_E4(type, member, etype, name) type member;
0166 #define _NVTX_PAYLOAD_STRUCT_E5(type, member, etype, name, desc) type member;
0167 #define _NVTX_PAYLOAD_STRUCT_E6(type, member, etype, name, desc, arraylen) \
0168     type NVTX_EXT_CONCAT(_NVTX_PAYLOAD_STRUCT_ARR_MEM, NVTX_EXT_NUM_ARGS member) member;
0169 #define _NVTX_PAYLOAD_STRUCT_E7(type, member, etype, name, desc, arraylen, flags) \
0170     _NVTX_PAYLOAD_STRUCT_E6(type, member, etype, name, desc, arraylen)
0171 
0172 /* Handle different number of arguments per struct entry. */
0173 #define _NVTX_PAYLOAD_STRUCT_ENTRY_(...) \
0174     NVTX_EXT_CONCAT(_NVTX_PAYLOAD_STRUCT_E, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)
0175 
0176 /* Handle up to 16 struct members. */
0177 #define _NVTX_PAYLOAD_STRUCT_ENTRY(entry) _NVTX_PAYLOAD_STRUCT_ENTRY_ entry
0178 #define _NVTX_PAYLOAD_STRUCT1(e1)       _NVTX_PAYLOAD_STRUCT_ENTRY(e1)
0179 #define _NVTX_PAYLOAD_STRUCT2(e1, ...)  _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT1(__VA_ARGS__)
0180 #define _NVTX_PAYLOAD_STRUCT3(e1, ...)  _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT2(__VA_ARGS__)
0181 #define _NVTX_PAYLOAD_STRUCT4(e1, ...)  _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT3(__VA_ARGS__)
0182 #define _NVTX_PAYLOAD_STRUCT5(e1, ...)  _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT4(__VA_ARGS__)
0183 #define _NVTX_PAYLOAD_STRUCT6(e1, ...)  _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT5(__VA_ARGS__)
0184 #define _NVTX_PAYLOAD_STRUCT7(e1, ...)  _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT6(__VA_ARGS__)
0185 #define _NVTX_PAYLOAD_STRUCT8(e1, ...)  _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT7(__VA_ARGS__)
0186 #define _NVTX_PAYLOAD_STRUCT9(e1, ...)  _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT8(__VA_ARGS__)
0187 #define _NVTX_PAYLOAD_STRUCT10(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT9(__VA_ARGS__)
0188 #define _NVTX_PAYLOAD_STRUCT11(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT10(__VA_ARGS__)
0189 #define _NVTX_PAYLOAD_STRUCT12(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT11(__VA_ARGS__)
0190 #define _NVTX_PAYLOAD_STRUCT13(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT12(__VA_ARGS__)
0191 #define _NVTX_PAYLOAD_STRUCT14(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT13(__VA_ARGS__)
0192 #define _NVTX_PAYLOAD_STRUCT15(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT14(__VA_ARGS__)
0193 #define _NVTX_PAYLOAD_STRUCT16(e1, ...) _NVTX_PAYLOAD_STRUCT_ENTRY(e1) _NVTX_PAYLOAD_STRUCT15(__VA_ARGS__)
0194 
0195 /* Generate the typedef. */
0196 #define _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, ...) \
0197   typedef struct { \
0198       NVTX_EXT_CONCAT(_NVTX_PAYLOAD_STRUCT, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__) \
0199   } struct_id;
0200 
0201 /* Generate first part of the schema entry. */
0202 #define _NVTX_PAYLOAD_INIT_SCHEMA_N3(type, memberId, etype) \
0203     0, NVTX_PAYLOAD_ENTRY_##etype, NVTX_NULLPTR, NVTX_NULLPTR, 0,
0204 #define _NVTX_PAYLOAD_INIT_SCHEMA_N4(type, memberId, etype, name) \
0205     0, NVTX_PAYLOAD_ENTRY_##etype, name, NVTX_NULLPTR, 0,
0206 #define _NVTX_PAYLOAD_INIT_SCHEMA_N5(type, memberId, etype, name, desc) \
0207     0, NVTX_PAYLOAD_ENTRY_##etype, name, desc, 0,
0208 #define _NVTX_PAYLOAD_INIT_SCHEMA_N6(type, memberId, etype, name, desc, arraylen) \
0209     0, NVTX_PAYLOAD_ENTRY_##etype, name, desc, arraylen,
0210 #define _NVTX_PAYLOAD_INIT_SCHEMA_N7(type, memberId, etype, name, desc, arraylen, flags) \
0211     NVTX_PAYLOAD_ENTRY_FLAG_##flags, NVTX_PAYLOAD_ENTRY_##etype, name, desc, arraylen,
0212 
0213 #define _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY_FRONT(...) \
0214     NVTX_EXT_CONCAT(_NVTX_PAYLOAD_INIT_SCHEMA_N, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)
0215 
0216 #define _NVTX_PAYLOAD_ARRAY_MEMBER1(name) name
0217 #define _NVTX_PAYLOAD_ARRAY_MEMBER2(name, count) name
0218 
0219 /* Resolve to last part of schema entry (append struct member). */
0220 #define _NVTX_PAYLOAD_INIT_SCHEMA_NX3(type, memberId, ...) memberId
0221 #define _NVTX_PAYLOAD_INIT_SCHEMA_NX4(type, memberId, ...) memberId
0222 #define _NVTX_PAYLOAD_INIT_SCHEMA_NX5(type, memberId, ...) memberId
0223 #define _NVTX_PAYLOAD_INIT_SCHEMA_NX6(type, memberId, ...) \
0224     NVTX_EXT_CONCAT(_NVTX_PAYLOAD_ARRAY_MEMBER, NVTX_EXT_NUM_ARGS memberId) memberId
0225 #define _NVTX_PAYLOAD_INIT_SCHEMA_NX7(type, memberId, ...) \
0226     _NVTX_PAYLOAD_INIT_SCHEMA_NX6(type, memberId, __VA_ARGS__)
0227 
0228 #define _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY_END(...) \
0229     NVTX_EXT_CONCAT(_NVTX_PAYLOAD_INIT_SCHEMA_NX, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)
0230 
0231 /* Resolve to schema entry. `entry` is `(ctype, name, ...)`. */
0232 #define _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(struct_id, entry) \
0233     {_NVTX_PAYLOAD_SCHEMA_INIT_ENTRY_FRONT entry \
0234     offsetof(struct_id, _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY_END entry)},
0235 
0236 /* Handle up to 16 schema entries. */
0237 #define _NVTX_PAYLOAD_INIT_SME1(s, e1)       _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1)
0238 #define _NVTX_PAYLOAD_INIT_SME2(s, e1, ...)  _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME1(s, __VA_ARGS__)
0239 #define _NVTX_PAYLOAD_INIT_SME3(s, e1, ...)  _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME2(s, __VA_ARGS__)
0240 #define _NVTX_PAYLOAD_INIT_SME4(s, e1, ...)  _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME3(s, __VA_ARGS__)
0241 #define _NVTX_PAYLOAD_INIT_SME5(s, e1, ...)  _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME4(s, __VA_ARGS__)
0242 #define _NVTX_PAYLOAD_INIT_SME6(s, e1, ...)  _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME5(s, __VA_ARGS__)
0243 #define _NVTX_PAYLOAD_INIT_SME7(s, e1, ...)  _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME6(s, __VA_ARGS__)
0244 #define _NVTX_PAYLOAD_INIT_SME8(s, e1, ...)  _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME7(s, __VA_ARGS__)
0245 #define _NVTX_PAYLOAD_INIT_SME9(s, e1, ...)  _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME8(s, __VA_ARGS__)
0246 #define _NVTX_PAYLOAD_INIT_SME10(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME9(s, __VA_ARGS__)
0247 #define _NVTX_PAYLOAD_INIT_SME11(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME10(s, __VA_ARGS__)
0248 #define _NVTX_PAYLOAD_INIT_SME12(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME11(s, __VA_ARGS__)
0249 #define _NVTX_PAYLOAD_INIT_SME13(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME12(s, __VA_ARGS__)
0250 #define _NVTX_PAYLOAD_INIT_SME14(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME13(s, __VA_ARGS__)
0251 #define _NVTX_PAYLOAD_INIT_SME15(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME14(s, __VA_ARGS__)
0252 #define _NVTX_PAYLOAD_INIT_SME16(s, e1, ...) _NVTX_PAYLOAD_SCHEMA_INIT_ENTRY(s, e1) _NVTX_PAYLOAD_INIT_SME15(s, __VA_ARGS__)
0253 
0254 #define _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, ...) \
0255   nvtxPayloadSchemaEntry_t struct_id##Schema[] = { \
0256     NVTX_EXT_CONCAT(_NVTX_PAYLOAD_INIT_SME, NVTX_EXT_NUM_ARGS(__VA_ARGS__))(struct_id, __VA_ARGS__) \
0257     {0, 0, NVTX_NULLPTR, NVTX_NULLPTR, 0, 0, NVTX_NULLPTR, NVTX_NULLPTR} \
0258   };
0259 
0260 /*
0261  * Handle optional parameters for `NVTX_DEFINE_STRUCT_WITH_SCHEMA[_AND_REGISTER]`.
0262  */
0263 #define _NVTX_DEFINE_SWS_6(struct_id, schema_name, prefix, schema_flags, schema_id, entries) \
0264   _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0265   prefix _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0266   prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, schema_id, \
0267       NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS | \
0268       NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_SCHEMA_ID |, \
0269       NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries))
0270 #define _NVTX_DEFINE_SWS_5(struct_id, schema_name, prefix, schema_flags, entries) \
0271   _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0272   prefix _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0273   prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, schema_flags, 0, \
0274       NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME | NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_FLAGS |, \
0275       NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries))
0276 #define _NVTX_DEFINE_SWS_4(struct_id, schema_name, prefix, entries) \
0277   _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0278   prefix _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0279   prefix NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, schema_name, NVTX_PAYLOAD_SCHEMA_FLAG_NONE, 0, \
0280       NVTX_PAYLOAD_SCHEMA_ATTR_FIELD_NAME |, \
0281       NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries))
0282 #define _NVTX_DEFINE_SWS_3(struct_id, schema_name, entries) \
0283   _NVTX_DEFINE_SWS_4(struct_id, schema_name, /* no prefix */, entries)
0284 #define _NVTX_DEFINE_SWS_2(struct_id, entries) \
0285   _NVTX_PAYLOAD_TYPEDEF_STRUCT(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0286   _NVTX_PAYLOAD_SCHEMA_INIT_ENTRIES(struct_id, _NVTX_PAYLOAD_PASS_THROUGH entries) \
0287   NVTX_PAYLOAD_SCHEMA_ATTR(struct_id, NVTX_NULLPTR, NVTX_PAYLOAD_SCHEMA_FLAG_NONE, 0, , \
0288       NVTX_EXT_NUM_ARGS(_NVTX_PAYLOAD_PASS_THROUGH entries))
0289 
0290 #define _NVTX_DEFINE_STRUCT_WITH_SCHEMA(struct_id, ...) \
0291     NVTX_EXT_CONCAT(_NVTX_DEFINE_SWS_, \
0292         NVTX_EXT_NUM_ARGS(struct_id, __VA_ARGS__))(struct_id, __VA_ARGS__)
0293 
0294 /*** END: Helper for `NVTX_PAYLOAD_STATIC_SCHEMA_{INIT,CREATE}` */
0295 
0296 #endif /* NVTX_EXT_PAYLOAD_HELPER_INTERNAL_H */