RavEngine
Loading...
Searching...
No Matches
NvFlow.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2014-2022 NVIDIA Corporation. All rights reserved.
26
27#ifndef NV_FLOW_H
28#define NV_FLOW_H
29
30#include "NvFlowContext.h"
31#include "shaders/NvFlowShaderTypes.h"
32
34
35typedef enum NvFlowPinDir
36{
37 eNvFlowPinDir_in = 0,
38 eNvFlowPinDir_out = 1,
39
40 eNvFlowPinDir_count = 2,
41 eNvFlowPinDir_maxEnum = 0x7FFFFFFF
42}NvFlowPinDir;
43
44struct NvFlowOp;
45typedef struct NvFlowOp NvFlowOp;
46
47struct NvFlowOpGraph;
48typedef struct NvFlowOpGraph NvFlowOpGraph;
49
50struct NvFlowOpGenericPinsIn;
51typedef struct NvFlowOpGenericPinsIn NvFlowOpGenericPinsIn;
52
53struct NvFlowOpGenericPinsOut;
54typedef struct NvFlowOpGenericPinsOut NvFlowOpGenericPinsOut;
55
56struct NvFlowOpExecuteGroup;
57typedef struct NvFlowOpExecuteGroup NvFlowOpExecuteGroup;
58
59NV_FLOW_REFLECT_STRUCT_OPAQUE_IMPL(NvFlowOpGraph)
60
62{
63 NvFlowOpExecuteGroup* group;
64 const char* name;
66
69
70typedef struct NvFlowOpInterface
71{
72 NV_FLOW_REFLECT_INTERFACE();
73
74 const char* opTypename;
75 const NvFlowOpGraph* opGraph;
76 const NvFlowReflectDataType* pinsIn;
77 const NvFlowReflectDataType* pinsOut;
78 const NvFlowOpExecuteGroupDesc* executeGroupDescs;
79 NvFlowUint64 executeGroupCount;
80
81 NvFlowOp*(NV_FLOW_ABI* create)(const NvFlowOpInterface* opInterface, const NvFlowOpGenericPinsIn* in, NvFlowOpGenericPinsOut* out);
82
83 void(NV_FLOW_ABI* destroy)(NvFlowOp* op, const NvFlowOpGenericPinsIn* in, NvFlowOpGenericPinsOut* out);
84
85 void(NV_FLOW_ABI* execute)(NvFlowOp* op, const NvFlowOpGenericPinsIn* in, NvFlowOpGenericPinsOut* out);
86
87 void(NV_FLOW_ABI* executeGroup)(NvFlowOp* op, NvFlowOpExecuteGroup* group, const NvFlowOpGenericPinsIn* in, NvFlowOpGenericPinsOut* out);
89
90#define NV_FLOW_REFLECT_TYPE NvFlowOpInterface
91NV_FLOW_REFLECT_BEGIN()
92NV_FLOW_REFLECT_POINTER(char, opTypename, 0, 0)
93NV_FLOW_REFLECT_POINTER(NvFlowOpGraph, opGraph, 0, 0)
94NV_FLOW_REFLECT_POINTER(NvFlowReflectDataType, pinsIn, 0, 0)
95NV_FLOW_REFLECT_POINTER(NvFlowReflectDataType, pinsOut, 0, 0)
96NV_FLOW_REFLECT_FUNCTION_POINTER(create, 0, 0)
97NV_FLOW_REFLECT_FUNCTION_POINTER(destroy, 0, 0)
98NV_FLOW_REFLECT_FUNCTION_POINTER(execute, 0, 0)
99NV_FLOW_REFLECT_FUNCTION_POINTER(executeGroup, 0, 0)
100NV_FLOW_REFLECT_END(0)
101NV_FLOW_REFLECT_INTERFACE_IMPL()
102#undef NV_FLOW_REFLECT_TYPE
103
104#define NV_FLOW_OP_IMPL(name, nameImpl) \
105 NvFlowOp* NvFlowOp_##nameImpl##_createGeneric(const NvFlowOpInterface* opInterface, const NvFlowOpGenericPinsIn* in, NvFlowOpGenericPinsOut* out) \
106 { \
107 return (NvFlowOp*)nameImpl##_create(opInterface, (const name##PinsIn*)in, (name##PinsOut*)out); \
108 } \
109 void NvFlowOp_##nameImpl##_destroyGeneric(NvFlowOp* op, const NvFlowOpGenericPinsIn* in, NvFlowOpGenericPinsOut* out) \
110 { \
111 nameImpl##_destroy((nameImpl*)op, (const name##PinsIn*)in, (name##PinsOut*)out); \
112 } \
113 void NvFlowOp_##nameImpl##_executeGeneric(NvFlowOp* op, const NvFlowOpGenericPinsIn* in, NvFlowOpGenericPinsOut* out) \
114 { \
115 nameImpl##_execute((nameImpl*)op, (const name##PinsIn*)in, (name##PinsOut*)out); \
116 } \
117 void NvFlowOp_##nameImpl##_executeGroupGeneric(NvFlowOp* op, NvFlowOpExecuteGroup* group, const NvFlowOpGenericPinsIn* in, NvFlowOpGenericPinsOut* out) \
118 { \
119 nameImpl##_execute((nameImpl*)op, (const name##PinsIn*)in, (name##PinsOut*)out); \
120 } \
121 NvFlowOpInterface* NvFlowOp_##nameImpl##_getOpInterface() \
122 { \
123 static const NvFlowOpExecuteGroupDesc executeGroupDesc = {0, 0}; \
124 static NvFlowOpInterface iface = { \
125 NV_FLOW_REFLECT_INTERFACE_INIT(NvFlowOpInterface), \
126 #name, \
127 0, \
128 &name##PinsIn_NvFlowReflectDataType, \
129 &name##PinsOut_NvFlowReflectDataType, \
130 &executeGroupDesc, \
131 1u, \
132 NvFlowOp_##nameImpl##_createGeneric, \
133 NvFlowOp_##nameImpl##_destroyGeneric, \
134 NvFlowOp_##nameImpl##_executeGeneric, \
135 NvFlowOp_##nameImpl##_executeGroupGeneric \
136 }; \
137 return &iface; \
138 }
139
140#define NV_FLOW_OP_TYPED(name) \
141 typedef struct name \
142 { \
143 NvFlowOpInterface opInterface; \
144 NvFlowOp* op; \
145 }name; \
146 NV_FLOW_INLINE NvFlowBool32 NV_FLOW_REFLECT_XCONCAT(name,_init)(name* ptr, NvFlowOpInterface* opInterface, const NV_FLOW_REFLECT_XCONCAT(name,PinsIn)* pinsIn, NV_FLOW_REFLECT_XCONCAT(name,PinsOut)* pinsOut) \
147 { \
148 NvFlowOpInterface_duplicate(&ptr->opInterface, opInterface); \
149 if (NvFlowReflectStringCompare(ptr->opInterface.opTypename, #name) == 0) \
150 { \
151 ptr->op = ptr->opInterface.create(&ptr->opInterface, (const NvFlowOpGenericPinsIn*)pinsIn, (NvFlowOpGenericPinsOut*)pinsOut); \
152 return NV_FLOW_TRUE; \
153 } \
154 ptr->opInterface.create = 0; \
155 ptr->opInterface.destroy = 0; \
156 ptr->opInterface.execute = 0; \
157 ptr->opInterface.executeGroup = 0; \
158 ptr->op = 0; \
159 return NV_FLOW_FALSE; \
160 } \
161 NV_FLOW_INLINE void name##_destroy(name* ptr, const NV_FLOW_REFLECT_XCONCAT(name,PinsIn)* pinsIn, NV_FLOW_REFLECT_XCONCAT(name,PinsOut)* pinsOut) \
162 { \
163 ptr->opInterface.destroy(ptr->op, (const NvFlowOpGenericPinsIn*)pinsIn, (NvFlowOpGenericPinsOut*)pinsOut); \
164 } \
165 NV_FLOW_INLINE void name##_execute(name* ptr, const NV_FLOW_REFLECT_XCONCAT(name,PinsIn)* pinsIn, NV_FLOW_REFLECT_XCONCAT(name,PinsOut)* pinsOut) \
166 { \
167 ptr->opInterface.execute(ptr->op, (const NvFlowOpGenericPinsIn*)pinsIn, (NvFlowOpGenericPinsOut*)pinsOut); \
168 }
169
171
172// Reserved, not in use yet
173struct NvFlowOpGraphInterface;
174typedef struct NvFlowOpGraphInterface NvFlowOpGraphInterface;
175
177
178// Reserved, not in use yet
179struct NvFlowOpRuntimeInterface;
180typedef struct NvFlowOpRuntimeInterface NvFlowOpRuntimeInterface;
181
183
184struct NvFlowSparse;
185typedef struct NvFlowSparse NvFlowSparse;
186
187NV_FLOW_REFLECT_STRUCT_OPAQUE_IMPL(NvFlowSparse)
188
189typedef struct NvFlowSparseParams
190{
192 NvFlowUint layerCount;
194 NvFlowUint levelCount;
195 NvFlowInt4* locations;
196 NvFlowUint64 locationCount;
197 NvFlowUint2* tableRanges;
198 NvFlowUint64 tableRangeCount;
200
201NV_FLOW_INLINE NvFlowUint NvFlowSparseParams_layerToLayerParamIdx(const NvFlowSparseParams* params, int layer)
202{
203 NvFlowUint retLayerParamIdx = ~0u;
204 for (NvFlowUint layerParamIdx = 0u; layerParamIdx < params->layerCount; layerParamIdx++)
205 {
206 if (params->layers[layerParamIdx].layer == layer)
207 {
208 retLayerParamIdx = layerParamIdx;
209 break;
210 }
211 }
212 return retLayerParamIdx;
213}
214
215NV_FLOW_INLINE NvFlowUint NvFlowSparseParams_locationToBlockIdx(const NvFlowSparseParams* params, NvFlowInt4 location)
216{
217 const NvFlowSparseLevelParams* tableParams = &params->levels[0u];
218 NvFlowUint3 bucketIdx = {
219 (NvFlowUint)location.x & tableParams->tableDimLessOne.x,
220 (NvFlowUint)location.y & tableParams->tableDimLessOne.y,
221 (NvFlowUint)location.z & tableParams->tableDimLessOne.z
222 };
223 NvFlowUint bucketIdx1D = (bucketIdx.z << (tableParams->tableDimBits_xy)) |
224 (bucketIdx.y << tableParams->tableDimBits_x) |
225 (bucketIdx.x);
226 NvFlowUint2 range = params->tableRanges[bucketIdx1D];
227 NvFlowUint outBlockIdx = ~0u;
228 for (NvFlowUint blockIdx = range.x; blockIdx < range.y; blockIdx++)
229 {
230 NvFlowInt4 compareLocation = params->locations[blockIdx];
231 if (compareLocation.x == location.x &&
232 compareLocation.y == location.y &&
233 compareLocation.z == location.z &&
234 compareLocation.w == location.w)
235 {
236 outBlockIdx = blockIdx;
237 break;
238 }
239 }
240 return outBlockIdx;
241}
242
243NV_FLOW_INLINE NvFlowBool32 NvFlowBlockIdxToLocation(const NvFlowSparseParams* params, NvFlowUint blockIdx, NvFlowInt4* out_location)
244{
245 NvFlowBool32 ret;
246 if (blockIdx < params->locationCount)
247 {
248 *out_location = params->locations[blockIdx];
249 ret = NV_FLOW_TRUE;
250 }
251 else
252 {
253 out_location->x = 0x40000000;
254 out_location->y = 0x40000000;
255 out_location->z = 0x40000000;
256 out_location->w = 0x40000000;
257 ret = NV_FLOW_FALSE;
258 }
259 return ret;
260}
261
262// TODO, maybe expand
263#define NV_FLOW_REFLECT_TYPE NvFlowSparseParams
264NV_FLOW_REFLECT_BEGIN()
265NV_FLOW_REFLECT_VALUE(NvFlowUint, layerCount, 0, 0)
266NV_FLOW_REFLECT_VALUE(NvFlowUint, levelCount, 0, 0)
267NV_FLOW_REFLECT_END(0)
268#undef NV_FLOW_REFLECT_TYPE
269
270// TODO, maybe expand
271#define NV_FLOW_REFLECT_TYPE NvFlowSparseLevelParams
272NV_FLOW_REFLECT_BEGIN()
273NV_FLOW_REFLECT_VALUE(NvFlowUint, numLocations, 0, 0)
274NV_FLOW_REFLECT_VALUE(NvFlowUint, numLayers, 0, 0)
275NV_FLOW_REFLECT_END(0)
276#undef NV_FLOW_REFLECT_TYPE
277
279{
280 NvFlowTextureTransient* textureTransient;
281 NvFlowBufferTransient* sparseBuffer;
282 NvFlowSparseParams sparseParams;
283 NvFlowUint levelIdx;
284 NvFlowFormat format;
286
287NV_FLOW_REFLECT_STRUCT_OPAQUE_IMPL(NvFlowTextureTransient)
288NV_FLOW_REFLECT_STRUCT_OPAQUE_IMPL(NvFlowBufferTransient)
289
290#define NV_FLOW_REFLECT_TYPE NvFlowSparseTexture
291NV_FLOW_REFLECT_BEGIN()
292NV_FLOW_REFLECT_POINTER(NvFlowTextureTransient, textureTransient, 0, 0)
293NV_FLOW_REFLECT_POINTER(NvFlowBufferTransient, sparseBuffer, 0, 0)
294NV_FLOW_REFLECT_VALUE(NvFlowSparseParams, sparseParams, 0, 0)
295NV_FLOW_REFLECT_VALUE(NvFlowUint, levelIdx, 0, 0)
296NV_FLOW_REFLECT_ENUM(format, 0, 0)
297NV_FLOW_REFLECT_END(0)
298#undef NV_FLOW_REFLECT_TYPE
299
300NV_FLOW_INLINE void NvFlowSparseTexture_passThrough(NvFlowSparseTexture* dst, const NvFlowSparseTexture* src)
301{
302 *dst = *src;
303}
304
305NV_FLOW_INLINE void NvFlowSparseTexture_duplicateWithFormat(NvFlowContextInterface* contextInterface, NvFlowContext* context, NvFlowSparseTexture* dst, const NvFlowSparseTexture* src, NvFlowFormat format)
306{
307 *dst = *src;
308
309 NvFlowSparseLevelParams* levelParams = &dst->sparseParams.levels[dst->levelIdx];
310
311 NvFlowTextureDesc texDesc = { eNvFlowTextureType_3d };
312 texDesc.textureType = eNvFlowTextureType_3d;
313 texDesc.usageFlags = eNvFlowTextureUsage_rwTexture | eNvFlowTextureUsage_texture;
314 texDesc.format = format;
315 texDesc.width = levelParams->dim.x;
316 texDesc.height = levelParams->dim.y;
317 texDesc.depth = levelParams->dim.z;
318 texDesc.mipLevels = 1u;
319
320 dst->textureTransient = contextInterface->getTextureTransient(context, &texDesc);
321}
322
323NV_FLOW_INLINE void NvFlowSparseTexture_duplicate(NvFlowContextInterface* contextInterface, NvFlowContext* context, NvFlowSparseTexture* dst, const NvFlowSparseTexture* src)
324{
325 NvFlowSparseTexture_duplicateWithFormat(contextInterface, context, dst, src, src->format);
326}
327
329{
330 NvFlowFloat3 blockSizeWorld;
331 int layer;
332 NvFlowBool32 forceClear;
333 NvFlowBool32 forceDisableEmitters;
334 NvFlowBool32 forceDisableCoreSimulation;
336
338{
339 NV_FLOW_REFLECT_INTERFACE();
340
341 NvFlowSparse*(NV_FLOW_ABI* create)(NvFlowContextInterface* contextInterface, NvFlowContext* context, NvFlowUint maxLocations);
342
343 void(NV_FLOW_ABI* destroy)(NvFlowContext* context, NvFlowSparse* sparse);
344
345 void(NV_FLOW_ABI* reset)(NvFlowContext* context, NvFlowSparse* sparse, NvFlowUint maxLocations);
346
347 void(NV_FLOW_ABI* updateLayers)(NvFlowSparse* sparse, NvFlowSparseUpdateLayerParams* layers, NvFlowUint numLayers);
348
349 void(NV_FLOW_ABI* updateLocations)(NvFlowSparse* sparse, NvFlowInt4* locations, NvFlowUint numLocations, NvFlowUint3 baseBlockDimBits, NvFlowUint minLifetime);
350
351 void(NV_FLOW_ABI* updateLayerDeltaTimes)(NvFlowSparse* sparse, float* layerDeltaTimes, NvFlowUint64 layerDeltaTimeCount);
352
353 NvFlowBool32(NV_FLOW_ABI* getParams)(NvFlowSparse* sparse, NvFlowSparseParams* out);
354
355 void(NV_FLOW_ABI* addPasses)(NvFlowContext* context, NvFlowSparse* sparse, NvFlowBufferTransient** pBufferTransient);
356
357 void(NV_FLOW_ABI* addPassesNanoVdb)(
358 NvFlowContext* context,
359 NvFlowSparse* sparse,
360 NvFlowUint gridType,
361 NvFlowUint levelIdx,
363 NvFlowBufferTransient** pNanoVdbBufferTransient,
364 NvFlowBufferTransient** pCacheBufferTransient
365 );
366
367 void(NV_FLOW_ABI* addPassesNanoVdbComputeStats)(
368 NvFlowContext* context,
369 NvFlowSparse* sparse,
370 const NvFlowSparseNanoVdbParams* params,
371 NvFlowBufferTransient* nanoVdbBufferTransient,
372 NvFlowBufferTransient* cacheBufferTransient,
373 NvFlowBufferTransient* targetNanoVdbBuffer
374 );
375
376 void(NV_FLOW_ABI* addPassesMigrate)(
377 NvFlowContext* context,
378 NvFlowSparse* sparse,
379 const int* clearLayers,
380 NvFlowUint64 clearLayerCount,
381 NvFlowBool32* clearedNoMigrateOut,
382 NvFlowTextureTransient* oldTextureTransient,
383 const NvFlowTextureDesc* oldTexDesc,
384 NvFlowFormat targetFormat,
385 NvFlowUint targetLevelIdx,
386 NvFlowSparseTexture* valueOut,
387 NvFlowTextureDesc* texDescOut
388 );
389
390 NvFlowBufferTransient*(NV_FLOW_ABI* getSparseBuffer)(NvFlowContext* context, NvFlowSparse* sparse);
392
393#define NV_FLOW_REFLECT_TYPE NvFlowSparseInterface
394NV_FLOW_REFLECT_BEGIN()
395NV_FLOW_REFLECT_FUNCTION_POINTER(create, 0, 0)
396NV_FLOW_REFLECT_FUNCTION_POINTER(destroy, 0, 0)
397NV_FLOW_REFLECT_FUNCTION_POINTER(reset, 0, 0)
398NV_FLOW_REFLECT_FUNCTION_POINTER(updateLayers, 0, 0)
399NV_FLOW_REFLECT_FUNCTION_POINTER(updateLocations, 0, 0)
400NV_FLOW_REFLECT_FUNCTION_POINTER(updateLayerDeltaTimes, 0, 0)
401NV_FLOW_REFLECT_FUNCTION_POINTER(getParams, 0, 0)
402NV_FLOW_REFLECT_FUNCTION_POINTER(addPasses, 0, 0)
403NV_FLOW_REFLECT_FUNCTION_POINTER(addPassesNanoVdb, 0, 0)
404NV_FLOW_REFLECT_FUNCTION_POINTER(addPassesNanoVdbComputeStats, 0, 0)
405NV_FLOW_REFLECT_FUNCTION_POINTER(addPassesMigrate, 0, 0)
406NV_FLOW_REFLECT_FUNCTION_POINTER(getSparseBuffer, 0, 0)
407NV_FLOW_REFLECT_END(0)
408NV_FLOW_REFLECT_INTERFACE_IMPL()
409#undef NV_FLOW_REFLECT_TYPE
410
412
414{
415 NvFlowBool32 enabled;
416 NvFlowBool32 statisticsEnabled;
417 NvFlowBool32 readbackEnabled;
418 NvFlowBool32 temperatureEnabled;
419 NvFlowBool32 fuelEnabled;
420 NvFlowBool32 burnEnabled;
421 NvFlowBool32 smokeEnabled;
422 NvFlowBool32 velocityEnabled;
423 NvFlowBool32 divergenceEnabled;
425
426#define NvFlowSparseNanoVdbExportParams_default_init { \
427 NV_FLOW_FALSE, /*enabled*/ \
428 NV_FLOW_TRUE, /*statisticsEnabled*/ \
429 NV_FLOW_FALSE, /*readbackEnabled*/ \
430 NV_FLOW_FALSE, /*temperatureEnabled*/ \
431 NV_FLOW_FALSE, /*fuelEnabled*/ \
432 NV_FLOW_FALSE, /*burnEnabled*/ \
433 NV_FLOW_TRUE, /*smokeEnabled*/ \
434 NV_FLOW_FALSE, /*velocityEnabled*/ \
435 NV_FLOW_FALSE, /*divergenceEnabled*/ \
436}
437static const NvFlowSparseNanoVdbExportParams NvFlowSparseNanoVdbExportParams_default = NvFlowSparseNanoVdbExportParams_default_init;
438
439#define NV_FLOW_REFLECT_TYPE NvFlowSparseNanoVdbExportParams
440NV_FLOW_REFLECT_BEGIN()
441NV_FLOW_REFLECT_VALUE(NvFlowBool32, enabled, 0, 0)
442NV_FLOW_REFLECT_VALUE(NvFlowBool32, statisticsEnabled, 0, 0)
443NV_FLOW_REFLECT_VALUE(NvFlowBool32, readbackEnabled, 0, 0)
444NV_FLOW_REFLECT_VALUE(NvFlowBool32, temperatureEnabled, 0, 0)
445NV_FLOW_REFLECT_VALUE(NvFlowBool32, fuelEnabled, 0, 0)
446NV_FLOW_REFLECT_VALUE(NvFlowBool32, burnEnabled, 0, 0)
447NV_FLOW_REFLECT_VALUE(NvFlowBool32, smokeEnabled, 0, 0)
448NV_FLOW_REFLECT_VALUE(NvFlowBool32, velocityEnabled, 0, 0)
449NV_FLOW_REFLECT_VALUE(NvFlowBool32, divergenceEnabled, 0, 0)
450NV_FLOW_REFLECT_END(&NvFlowSparseNanoVdbExportParams_default)
451#undef NV_FLOW_REFLECT_TYPE
452
454{
455 NvFlowContextInterface* contextInterface;
456 NvFlowContext* context;
457 NvFlowSparseInterface* sparseInterface;
458 NvFlowSparse* sparse;
459 const NvFlowSparseNanoVdbExportParams** params;
460 NvFlowUint64 paramCount;
461 NvFlowSparseTexture velocity;
462 NvFlowSparseTexture density;
464
466{
467 NvFlowUint64 globalFrameCompleted;
468 NvFlowUint8* temperatureNanoVdbReadback;
469 NvFlowUint64 temperatureNanoVdbReadbackSize;
470 NvFlowUint8* fuelNanoVdbReadback;
471 NvFlowUint64 fuelNanoVdbReadbackSize;
472 NvFlowUint8* burnNanoVdbReadback;
473 NvFlowUint64 burnNanoVdbReadbackSize;
474 NvFlowUint8* smokeNanoVdbReadback;
475 NvFlowUint64 smokeNanoVdbReadbackSize;
476 NvFlowUint8* velocityNanoVdbReadback;
477 NvFlowUint64 velocityNanoVdbReadbackSize;
478 NvFlowUint8* divergenceNanoVdbReadback;
479 NvFlowUint64 divergenceNanoVdbReadbackSize;
481
482#define NvFlowSparseNanoVdbExportReadback_default_init { \
483 ~0llu, /*globalFrameCompleted*/ \
484 0, /*temperatureNanoVdbReadback*/ \
485 0, /*temperatureNanoVdbReadbackSize*/ \
486 0, /*fuelNanoVdbReadback*/ \
487 0, /*fuelNanoVdbReadbackSize*/ \
488 0, /*burnNanoVdbReadback*/ \
489 0, /*burnNanoVdbReadbackSize*/ \
490 0, /*smokeNanoVdbReadback*/ \
491 0, /*smokeNanoVdbReadbackSize*/ \
492 0, /*velocityNanoVdbReadback*/ \
493 0, /*velocityNanoVdbReadbackSize*/ \
494 0, /*divergenceNanoVdbReadback*/ \
495 0, /*divergenceNanoVdbReadbackSize*/ \
496}
497static const NvFlowSparseNanoVdbExportReadback NvFlowSparseNanoVdbExportReadback_default = NvFlowSparseNanoVdbExportReadback_default_init;
498
499#define NV_FLOW_REFLECT_TYPE NvFlowSparseNanoVdbExportReadback
500NV_FLOW_REFLECT_BEGIN()
501NV_FLOW_REFLECT_VALUE(NvFlowUint64, globalFrameCompleted, 0, 0)
502NV_FLOW_REFLECT_ARRAY(NvFlowUint8, temperatureNanoVdbReadback, temperatureNanoVdbReadbackSize, 0, 0)
503NV_FLOW_REFLECT_ARRAY(NvFlowUint8, fuelNanoVdbReadback, fuelNanoVdbReadbackSize, 0, 0)
504NV_FLOW_REFLECT_ARRAY(NvFlowUint8, burnNanoVdbReadback, burnNanoVdbReadbackSize, 0, 0)
505NV_FLOW_REFLECT_ARRAY(NvFlowUint8, smokeNanoVdbReadback, smokeNanoVdbReadbackSize, 0, 0)
506NV_FLOW_REFLECT_ARRAY(NvFlowUint8, velocityNanoVdbReadback, velocityNanoVdbReadbackSize, 0, 0)
507NV_FLOW_REFLECT_ARRAY(NvFlowUint8, divergenceNanoVdbReadback, divergenceNanoVdbReadbackSize, 0, 0)
508NV_FLOW_REFLECT_END(&NvFlowSparseNanoVdbExportReadback_default)
509#undef NV_FLOW_REFLECT_TYPE
510
512{
513 NvFlowBufferTransient* temperatureNanoVdb;
514 NvFlowBufferTransient* fuelNanoVdb;
515 NvFlowBufferTransient* burnNanoVdb;
516 NvFlowBufferTransient* smokeNanoVdb;
517 NvFlowBufferTransient* velocityNanoVdb;
518 NvFlowBufferTransient* divergenceNanoVdb;
519
521 NvFlowUint64 readbackCount;
523
524#define NV_FLOW_REFLECT_TYPE NvFlowSparseNanoVdbExportPinsIn
525NV_FLOW_REFLECT_BEGIN()
526NV_FLOW_REFLECT_POINTER(NvFlowContextInterface, contextInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
527NV_FLOW_REFLECT_POINTER(NvFlowContext, context, eNvFlowReflectHint_pinEnabledGlobal, 0)
528NV_FLOW_REFLECT_POINTER(NvFlowSparseInterface, sparseInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
529NV_FLOW_REFLECT_POINTER(NvFlowSparse, sparse, eNvFlowReflectHint_pinEnabled, 0)
530NV_FLOW_REFLECT_POINTER_ARRAY(NvFlowSparseNanoVdbExportParams, params, paramCount, eNvFlowReflectHint_pinEnabled, 0)
531NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
532NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, density, eNvFlowReflectHint_pinEnabled, 0)
533NV_FLOW_REFLECT_END(0)
534#undef NV_FLOW_REFLECT_TYPE
535
536#define NV_FLOW_REFLECT_TYPE NvFlowSparseNanoVdbExportPinsOut
537NV_FLOW_REFLECT_BEGIN()
538NV_FLOW_REFLECT_POINTER(NvFlowBufferTransient, temperatureNanoVdb, eNvFlowReflectHint_pinEnabled, 0)
539NV_FLOW_REFLECT_POINTER(NvFlowBufferTransient, fuelNanoVdb, eNvFlowReflectHint_pinEnabled, 0)
540NV_FLOW_REFLECT_POINTER(NvFlowBufferTransient, burnNanoVdb, eNvFlowReflectHint_pinEnabled, 0)
541NV_FLOW_REFLECT_POINTER(NvFlowBufferTransient, smokeNanoVdb, eNvFlowReflectHint_pinEnabled, 0)
542NV_FLOW_REFLECT_POINTER(NvFlowBufferTransient, velocityNanoVdb, eNvFlowReflectHint_pinEnabled, 0)
543NV_FLOW_REFLECT_POINTER(NvFlowBufferTransient, divergenceNanoVdb, eNvFlowReflectHint_pinEnabled, 0)
544NV_FLOW_REFLECT_ARRAY(NvFlowSparseNanoVdbExportReadback, readbacks, readbackCount, eNvFlowReflectHint_pinEnabled, 0)
545NV_FLOW_REFLECT_END(0)
546#undef NV_FLOW_REFLECT_TYPE
547
548NV_FLOW_OP_TYPED(NvFlowSparseNanoVdbExport)
549
550
551
553{
554 float secondOrderBlendThreshold;
555 float secondOrderBlendFactor;
556 float damping;
557 float fade;
559
560#define NvFlowAdvectionChannelParams_default_init { \
561 0.5f, /*secondOrderBlendThreshold*/ \
562 0.001f, /*secondOrderBlendFactor*/ \
563 0.01f, /*damping*/ \
564 0.f /*fade*/ \
565}
566static const NvFlowAdvectionChannelParams NvFlowAdvectionChannelParams_default = NvFlowAdvectionChannelParams_default_init;
567
568#define NV_FLOW_REFLECT_TYPE NvFlowAdvectionChannelParams
569NV_FLOW_REFLECT_BEGIN()
570NV_FLOW_REFLECT_VALUE(float, secondOrderBlendThreshold, 0, 0)
571NV_FLOW_REFLECT_VALUE(float, secondOrderBlendFactor, 0, 0)
572NV_FLOW_REFLECT_VALUE(float, damping, 0, 0)
573NV_FLOW_REFLECT_VALUE(float, fade, 0, 0)
574NV_FLOW_REFLECT_END(&NvFlowAdvectionChannelParams_default)
575#undef NV_FLOW_REFLECT_TYPE
576
605
606#define NvFlowAdvectionCombustionParams_default_init { \
607 NV_FLOW_TRUE, /*enabled*/ \
608 NV_FLOW_TRUE, /*downsampleEnabled*/ \
609 NV_FLOW_TRUE, /*combustionEnabled*/ \
610 NV_FLOW_FALSE, /*forceFadeEnabled*/ \
611 {0.001f, 0.5f, 0.01f, 1.00f}, /*velocity : {secondOrderBlendThreshold, secondOrderBlendFactor, damping, fade}*/ \
612 {0.001f, 0.5f, 0.01f, 1.00f}, /*divergence : {secondOrderBlendThreshold, secondOrderBlendFactor, damping, fade}*/ \
613 {0.001f, 0.9f, 0.00f, 0.00f}, /*temperature : {secondOrderBlendThreshold, secondOrderBlendFactor, damping, fade}*/ \
614 {0.001f, 0.9f, 0.00f, 0.00f}, /*fuel : {secondOrderBlendThreshold, secondOrderBlendFactor, damping, fade}*/ \
615 {0.001f, 0.9f, 0.00f, 0.00f}, /*burn : {secondOrderBlendThreshold, secondOrderBlendFactor, damping, fade}*/ \
616 {0.001f, 0.9f, 0.30f, 0.65f}, /*smoke : {secondOrderBlendThreshold, secondOrderBlendFactor, damping, fade}*/ \
617 0.05f, /*ignitionTemp*/ \
618 4.f, /*burnPerTemp*/ \
619 0.25f, /*fuelPerBurn*/ \
620 5.f, /*tempPerBurn*/ \
621 3.f, /*smokePerBurn*/ \
622 0.f, /*divergencePerBurn*/ \
623 2.f, /*buoyancyPerTemp*/ \
624 0.f, /*buoyancyPerSmoke*/ \
625 1.f, /*buoyancyMaxSmoke*/ \
626 1.5f, /*coolingRate*/ \
627 0.f, /*gravity.x*/ \
628 0.f, /*gravity.y*/ \
629 -100.f, /*gravity.z*/ \
630 0u /*globalFetch*/ \
631}
632static const NvFlowAdvectionCombustionParams NvFlowAdvectionCombustionParams_default = NvFlowAdvectionCombustionParams_default_init;
633
634#define NV_FLOW_REFLECT_TYPE NvFlowAdvectionCombustionParams
635NV_FLOW_REFLECT_BEGIN()
636NV_FLOW_REFLECT_VALUE(NvFlowBool32, enabled, 0, 0)
637NV_FLOW_REFLECT_VALUE(NvFlowBool32, downsampleEnabled, 0, 0)
638NV_FLOW_REFLECT_VALUE(NvFlowBool32, combustionEnabled, 0, 0)
639NV_FLOW_REFLECT_VALUE(NvFlowBool32, forceFadeEnabled, 0, 0)
640NV_FLOW_REFLECT_VALUE(NvFlowAdvectionChannelParams, velocity, 0, 0)
641NV_FLOW_REFLECT_VALUE(NvFlowAdvectionChannelParams, divergence, 0, 0)
642NV_FLOW_REFLECT_VALUE(NvFlowAdvectionChannelParams, temperature, 0, 0)
643NV_FLOW_REFLECT_VALUE(NvFlowAdvectionChannelParams, fuel, 0, 0)
644NV_FLOW_REFLECT_VALUE(NvFlowAdvectionChannelParams, burn, 0, 0)
645NV_FLOW_REFLECT_VALUE(NvFlowAdvectionChannelParams, smoke, 0, 0)
646NV_FLOW_REFLECT_VALUE(float, ignitionTemp, 0, 0)
647NV_FLOW_REFLECT_VALUE(float, burnPerTemp, 0, 0)
648NV_FLOW_REFLECT_VALUE(float, fuelPerBurn, 0, 0)
649NV_FLOW_REFLECT_VALUE(float, tempPerBurn, 0, 0)
650NV_FLOW_REFLECT_VALUE(float, smokePerBurn, 0, 0)
651NV_FLOW_REFLECT_VALUE(float, divergencePerBurn, 0, 0)
652NV_FLOW_REFLECT_VALUE(float, buoyancyPerTemp, 0, 0)
653NV_FLOW_REFLECT_VALUE(float, buoyancyPerSmoke, 0, 0)
654NV_FLOW_REFLECT_VALUE(float, buoyancyMaxSmoke, 0, 0)
655NV_FLOW_REFLECT_VALUE(float, coolingRate, 0, 0)
656NV_FLOW_REFLECT_VALUE(NvFlowFloat3, gravity, 0, 0)
657NV_FLOW_REFLECT_VALUE(NvFlowBool32, globalFetch, 0, 0)
658NV_FLOW_REFLECT_END(&NvFlowAdvectionCombustionParams_default)
659#undef NV_FLOW_REFLECT_TYPE
660
662{
663 NvFlowContextInterface* contextInterface;
664 NvFlowContext* context;
665 float deltaTime;
666 NvFlowSparseTexture velocity;
668
673
674#define NV_FLOW_REFLECT_TYPE NvFlowAdvectionSimplePinsIn
675NV_FLOW_REFLECT_BEGIN()
676NV_FLOW_REFLECT_POINTER(NvFlowContextInterface, contextInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
677NV_FLOW_REFLECT_POINTER(NvFlowContext, context, eNvFlowReflectHint_pinEnabledGlobal, 0)
678NV_FLOW_REFLECT_VALUE(float, deltaTime, eNvFlowReflectHint_pinEnabledGlobal, 0)
679NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
680NV_FLOW_REFLECT_END(0)
681#undef NV_FLOW_REFLECT_TYPE
682
683#define NV_FLOW_REFLECT_TYPE NvFlowAdvectionSimplePinsOut
684NV_FLOW_REFLECT_BEGIN()
685NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
686NV_FLOW_REFLECT_END(0)
687#undef NV_FLOW_REFLECT_TYPE
688
689NV_FLOW_OP_TYPED(NvFlowAdvectionSimple)
690
692{
693 NvFlowContextInterface* contextInterface;
694 NvFlowContext* context;
695 float deltaTime;
696 const NvFlowAdvectionCombustionParams** params;
697 NvFlowUint64 paramCount;
698 NvFlowSparseTexture velocity;
699 NvFlowSparseTexture density;
700 NvFlowSparseTexture densityTemp;
702
707
708#define NV_FLOW_REFLECT_TYPE NvFlowAdvectionCombustionDensityPinsIn
709NV_FLOW_REFLECT_BEGIN()
710NV_FLOW_REFLECT_POINTER(NvFlowContextInterface, contextInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
711NV_FLOW_REFLECT_POINTER(NvFlowContext, context, eNvFlowReflectHint_pinEnabledGlobal, 0)
712NV_FLOW_REFLECT_VALUE(float, deltaTime, eNvFlowReflectHint_pinEnabledGlobal, 0)
713NV_FLOW_REFLECT_POINTER_ARRAY(NvFlowAdvectionCombustionParams, params, paramCount, eNvFlowReflectHint_pinEnabled, 0)
714NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
715NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, density, eNvFlowReflectHint_pinEnabled, 0)
716NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, densityTemp, eNvFlowReflectHint_pinEnabledMutable, 0)
717NV_FLOW_REFLECT_END(0)
718#undef NV_FLOW_REFLECT_TYPE
719
720#define NV_FLOW_REFLECT_TYPE NvFlowAdvectionCombustionDensityPinsOut
721NV_FLOW_REFLECT_BEGIN()
722NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, density, eNvFlowReflectHint_pinEnabled, 0)
723NV_FLOW_REFLECT_END(0)
724#undef NV_FLOW_REFLECT_TYPE
725
726NV_FLOW_OP_TYPED(NvFlowAdvectionCombustionDensity)
727
729{
730 NvFlowContextInterface* contextInterface;
731 NvFlowContext* context;
732 float deltaTime;
733 const NvFlowAdvectionCombustionParams** params;
734 NvFlowUint64 paramCount;
735 NvFlowSparseTexture velocity;
736 NvFlowSparseTexture velocityTemp;
737 NvFlowSparseTexture density;
738 NvFlowSparseTexture densityCoarse;
740
746
747#define NV_FLOW_REFLECT_TYPE NvFlowAdvectionCombustionVelocityPinsIn
748NV_FLOW_REFLECT_BEGIN()
749NV_FLOW_REFLECT_POINTER(NvFlowContextInterface, contextInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
750NV_FLOW_REFLECT_POINTER(NvFlowContext, context, eNvFlowReflectHint_pinEnabledGlobal, 0)
751NV_FLOW_REFLECT_VALUE(float, deltaTime, eNvFlowReflectHint_pinEnabledGlobal, 0)
752NV_FLOW_REFLECT_POINTER_ARRAY(NvFlowAdvectionCombustionParams, params, paramCount, eNvFlowReflectHint_pinEnabled, 0)
753NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
754NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocityTemp, eNvFlowReflectHint_pinEnabledMutable, 0)
755NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, density, eNvFlowReflectHint_pinEnabled, 0)
756NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, densityCoarse, eNvFlowReflectHint_pinEnabled, 0)
757NV_FLOW_REFLECT_END(0)
758#undef NV_FLOW_REFLECT_TYPE
759
760#define NV_FLOW_REFLECT_TYPE NvFlowAdvectionCombustionVelocityPinsOut
761NV_FLOW_REFLECT_BEGIN()
762NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
763NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, densityCoarse, eNvFlowReflectHint_pinEnabled, 0)
764NV_FLOW_REFLECT_END(0)
765#undef NV_FLOW_REFLECT_TYPE
766
767NV_FLOW_OP_TYPED(NvFlowAdvectionCombustionVelocity)
768
769
770
772{
773 NvFlowBool32 enabled;
775
776#define NvFlowPressureParams_default_init { \
777 NV_FLOW_TRUE, /*enabled*/ \
778}
779static const NvFlowPressureParams NvFlowPressureParams_default = NvFlowPressureParams_default_init;
780
781#define NV_FLOW_REFLECT_TYPE NvFlowPressureParams
782NV_FLOW_REFLECT_BEGIN()
783NV_FLOW_REFLECT_VALUE(NvFlowBool32, enabled, 0, 0)
784NV_FLOW_REFLECT_END(&NvFlowPressureParams_default)
785#undef NV_FLOW_REFLECT_TYPE
786
788{
789 NvFlowContextInterface* contextInterface;
790 NvFlowContext* context;
791 const NvFlowPressureParams** params;
792 NvFlowUint64 paramCount;
793 NvFlowSparseTexture velocity;
795
800
801#define NV_FLOW_REFLECT_TYPE NvFlowPressurePinsIn
802NV_FLOW_REFLECT_BEGIN()
803NV_FLOW_REFLECT_POINTER(NvFlowContextInterface, contextInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
804NV_FLOW_REFLECT_POINTER(NvFlowContext, context, eNvFlowReflectHint_pinEnabledGlobal, 0)
805NV_FLOW_REFLECT_POINTER_ARRAY(NvFlowPressureParams, params, paramCount, eNvFlowReflectHint_pinEnabled, 0)
806NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
807NV_FLOW_REFLECT_END(0)
808#undef NV_FLOW_REFLECT_TYPE
809
810#define NV_FLOW_REFLECT_TYPE NvFlowPressurePinsOut
811NV_FLOW_REFLECT_BEGIN()
812NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
813NV_FLOW_REFLECT_END(0)
814#undef NV_FLOW_REFLECT_TYPE
815
816NV_FLOW_OP_TYPED(NvFlowPressure)
817
818
819
821{
822 NvFlowBool32 enabled;
823 float forceScale;
824 float velocityMask;
825 float constantMask;
826 float densityMask;
827 float velocityLogScale;
828 float velocityLinearMask;
829 float temperatureMask;
830 float fuelMask;
831 float burnMask;
832 float smokeMask;
834
835#define NvFlowVorticityParams_default_init { \
836 NV_FLOW_TRUE, /*enabled*/ \
837 0.6f, /*forceScale*/ \
838 1.f, /*velocityMask*/ \
839 0.f, /*constantMask*/ \
840 0.f, /*densityMask*/ \
841 1.f, /*velocityLogScale*/ \
842 0.f, /*velocityLinearMask*/ \
843 0.f, /*temperatureMask*/ \
844 0.f, /*fuelMask*/ \
845 0.f, /*burnMask*/ \
846 0.f /*smokeMask*/ \
847}
848static const NvFlowVorticityParams NvFlowVorticityParams_default = NvFlowVorticityParams_default_init;
849
850#define NV_FLOW_REFLECT_TYPE NvFlowVorticityParams
851NV_FLOW_REFLECT_BEGIN()
852NV_FLOW_REFLECT_VALUE(NvFlowBool32, enabled, 0, 0)
853NV_FLOW_REFLECT_VALUE(float, forceScale, 0, 0)
854NV_FLOW_REFLECT_VALUE(float, velocityMask, 0, 0)
855NV_FLOW_REFLECT_VALUE(float, constantMask, 0, 0)
856NV_FLOW_REFLECT_VALUE(float, densityMask, 0, 0)
857NV_FLOW_REFLECT_VALUE(float, velocityLogScale, 0, 0)
858NV_FLOW_REFLECT_VALUE(float, velocityLinearMask, 0, 0)
859NV_FLOW_REFLECT_VALUE(float, temperatureMask, 0, 0)
860NV_FLOW_REFLECT_VALUE(float, fuelMask, 0, 0)
861NV_FLOW_REFLECT_VALUE(float, burnMask, 0, 0)
862NV_FLOW_REFLECT_VALUE(float, smokeMask, 0, 0)
863NV_FLOW_REFLECT_END(&NvFlowVorticityParams_default)
864#undef NV_FLOW_REFLECT_TYPE
865
867{
868 NvFlowContextInterface* contextInterface;
869 NvFlowContext* context;
870 float deltaTime;
871 const NvFlowVorticityParams** params;
872 NvFlowUint64 paramCount;
873 NvFlowSparseTexture velocity;
874 NvFlowSparseTexture coarseDensity;
876
881
882#define NV_FLOW_REFLECT_TYPE NvFlowVorticityPinsIn
883NV_FLOW_REFLECT_BEGIN()
884NV_FLOW_REFLECT_POINTER(NvFlowContextInterface, contextInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
885NV_FLOW_REFLECT_POINTER(NvFlowContext, context, eNvFlowReflectHint_pinEnabledGlobal, 0)
886NV_FLOW_REFLECT_VALUE(float, deltaTime, eNvFlowReflectHint_pinEnabledGlobal, 0)
887NV_FLOW_REFLECT_POINTER_ARRAY(NvFlowVorticityParams, params, paramCount, eNvFlowReflectHint_pinEnabled, 0)
888NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
889NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, coarseDensity, eNvFlowReflectHint_pinEnabled, 0)
890NV_FLOW_REFLECT_END(0)
891#undef NV_FLOW_REFLECT_TYPE
892
893#define NV_FLOW_REFLECT_TYPE NvFlowVorticityPinsOut
894NV_FLOW_REFLECT_BEGIN()
895NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
896NV_FLOW_REFLECT_END(0)
897#undef NV_FLOW_REFLECT_TYPE
898
899NV_FLOW_OP_TYPED(NvFlowVorticity)
900
901
902
904{
905 float smokeThreshold;
906 float speedThreshold;
907 float speedThresholdMinSmoke;
908 NvFlowBool32 enableNeighborAllocation;
910
911#define NvFlowSummaryAllocateParams_default_init { \
912 0.02f, /*smokeThreshold*/ \
913 1.f, /*speedThreshold*/ \
914 0.f, /*speedThresholdMinSmoke*/ \
915 NV_FLOW_TRUE, /*enableNeighborAllocation*/ \
916}
917static const NvFlowSummaryAllocateParams NvFlowSummaryAllocateParams_default = NvFlowSummaryAllocateParams_default_init;
918
919#define NV_FLOW_REFLECT_TYPE NvFlowSummaryAllocateParams
920NV_FLOW_REFLECT_BEGIN()
921NV_FLOW_REFLECT_VALUE(float, smokeThreshold, 0, 0)
922NV_FLOW_REFLECT_VALUE(float, speedThreshold, 0, 0)
923NV_FLOW_REFLECT_VALUE(float, speedThresholdMinSmoke, 0, 0)
924NV_FLOW_REFLECT_VALUE(NvFlowBool32, enableNeighborAllocation, 0, 0)
925NV_FLOW_REFLECT_END(&NvFlowSummaryAllocateParams_default)
926#undef NV_FLOW_REFLECT_TYPE
927
929{
930 void* data;
932
933NV_FLOW_REFLECT_STRUCT_OPAQUE_IMPL(NvFlowSummaryFeedback)
934
936{
937 NvFlowContextInterface* contextInterface;
938 NvFlowContext* context;
939 NvFlowSummaryFeedback feedback;
940 NvFlowSparseTexture velocity;
941 NvFlowSparseTexture densityCoarse;
942 const NvFlowSummaryAllocateParams** params;
943 NvFlowUint64 paramCount;
945
947{
948 NvFlowUint unused;
950
951#define NV_FLOW_REFLECT_TYPE NvFlowSummaryPinsIn
952NV_FLOW_REFLECT_BEGIN()
953NV_FLOW_REFLECT_POINTER(NvFlowContextInterface, contextInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
954NV_FLOW_REFLECT_POINTER(NvFlowContext, context, eNvFlowReflectHint_pinEnabledGlobal, 0)
955NV_FLOW_REFLECT_VALUE(NvFlowSummaryFeedback, feedback, eNvFlowReflectHint_pinEnabled, 0)
956NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, velocity, eNvFlowReflectHint_pinEnabled, 0)
957NV_FLOW_REFLECT_VALUE(NvFlowSparseTexture, densityCoarse, eNvFlowReflectHint_pinEnabled, 0)
958NV_FLOW_REFLECT_POINTER_ARRAY(NvFlowSummaryAllocateParams, params, paramCount, eNvFlowReflectHint_pinEnabled, 0)
959NV_FLOW_REFLECT_END(0)
960#undef NV_FLOW_REFLECT_TYPE
961
962#define NV_FLOW_REFLECT_TYPE NvFlowSummaryPinsOut
963NV_FLOW_REFLECT_BEGIN()
964NV_FLOW_REFLECT_VALUE(NvFlowUint, unused, eNvFlowReflectHint_none, 0)
965NV_FLOW_REFLECT_END(0)
966#undef NV_FLOW_REFLECT_TYPE
967
968NV_FLOW_OP_TYPED(NvFlowSummary)
969
971{
972 NvFlowContextInterface* contextInterface;
973 NvFlowContext* context;
974 NvFlowSparseParams sparseParams;
975 const NvFlowSummaryAllocateParams** params;
976 NvFlowUint64 paramCount;
978
980{
981 NvFlowSummaryFeedback feedback;
982 NvFlowInt4* locations;
983 NvFlowUint64 locationCount;
985
986#define NV_FLOW_REFLECT_TYPE NvFlowSummaryAllocatePinsIn
987NV_FLOW_REFLECT_BEGIN()
988NV_FLOW_REFLECT_POINTER(NvFlowContextInterface, contextInterface, eNvFlowReflectHint_pinEnabledGlobal, 0)
989NV_FLOW_REFLECT_POINTER(NvFlowContext, context, eNvFlowReflectHint_pinEnabledGlobal, 0)
990NV_FLOW_REFLECT_VALUE(NvFlowSparseParams, sparseParams, eNvFlowReflectHint_pinEnabled, 0)
991NV_FLOW_REFLECT_POINTER_ARRAY(NvFlowSummaryAllocateParams, params, paramCount, eNvFlowReflectHint_pinEnabled, 0)
992NV_FLOW_REFLECT_END(0)
993#undef NV_FLOW_REFLECT_TYPE
994
995#define NV_FLOW_REFLECT_TYPE NvFlowSummaryAllocatePinsOut
996NV_FLOW_REFLECT_BEGIN()
997NV_FLOW_REFLECT_VALUE(NvFlowSummaryFeedback, feedback, eNvFlowReflectHint_pinEnabled, 0)
998NV_FLOW_REFLECT_ARRAY(NvFlowInt4, locations, locationCount, eNvFlowReflectHint_pinEnabled, 0)
999NV_FLOW_REFLECT_END(0)
1000#undef NV_FLOW_REFLECT_TYPE
1001
1002NV_FLOW_OP_TYPED(NvFlowSummaryAllocate)
1003
1004
1005
1006typedef struct NvFlowOpList
1007{
1008 NV_FLOW_REFLECT_INTERFACE();
1009
1010 NvFlowOpGraphInterface* (NV_FLOW_ABI* getOpGraphInterface)();
1011
1012 NvFlowOpRuntimeInterface* (NV_FLOW_ABI* getOpRuntimeInterface)();
1013
1014 NvFlowSparseInterface* (NV_FLOW_ABI* getSparseInterface)();
1015
1016 NvFlowOpInterface* (NV_FLOW_ABI* pSparseNanoVdbExport)();
1017
1018 NvFlowOpInterface* (NV_FLOW_ABI* pAdvectionSimple)();
1019
1020 NvFlowOpInterface* (NV_FLOW_ABI* pAdvectionCombustionDensity)();
1021
1022 NvFlowOpInterface* (NV_FLOW_ABI* pAdvectionCombustionVelocity)();
1023
1024 NvFlowOpInterface* (NV_FLOW_ABI* pPressure)();
1025
1026 NvFlowOpInterface* (NV_FLOW_ABI* pVorticity)();
1027
1028 NvFlowOpInterface* (NV_FLOW_ABI* pSummary)();
1029
1030 NvFlowOpInterface* (NV_FLOW_ABI* pSummaryAllocate)();
1032
1033#define NV_FLOW_REFLECT_TYPE NvFlowOpList
1034NV_FLOW_REFLECT_BEGIN()
1035NV_FLOW_REFLECT_FUNCTION_POINTER(getOpGraphInterface, 0, 0)
1036NV_FLOW_REFLECT_FUNCTION_POINTER(getOpRuntimeInterface, 0, 0)
1037NV_FLOW_REFLECT_FUNCTION_POINTER(getSparseInterface, 0, 0)
1038NV_FLOW_REFLECT_FUNCTION_POINTER(pSparseNanoVdbExport, 0, 0)
1039NV_FLOW_REFLECT_FUNCTION_POINTER(pAdvectionSimple, 0, 0)
1040NV_FLOW_REFLECT_FUNCTION_POINTER(pAdvectionCombustionDensity, 0, 0)
1041NV_FLOW_REFLECT_FUNCTION_POINTER(pAdvectionCombustionVelocity, 0, 0)
1042NV_FLOW_REFLECT_FUNCTION_POINTER(pPressure, 0, 0)
1043NV_FLOW_REFLECT_FUNCTION_POINTER(pVorticity, 0, 0)
1044NV_FLOW_REFLECT_FUNCTION_POINTER(pSummary, 0, 0)
1045NV_FLOW_REFLECT_FUNCTION_POINTER(pSummaryAllocate, 0, 0)
1046NV_FLOW_REFLECT_END(0)
1047NV_FLOW_REFLECT_INTERFACE_IMPL()
1048#undef NV_FLOW_REFLECT_TYPE
1049
1050typedef NvFlowOpList* (NV_FLOW_ABI* PFN_NvFlowGetOpList)();
1051
1052NV_FLOW_API NvFlowOpList* NvFlowGetOpList();
1053
1054#endif
Definition base.h:1940
********************************* Advect ***************************************
Definition NvFlow.h:553
Definition NvFlow.h:578
NvFlowBool32 globalFetch
Global fetch, removes velocity clamping.
Definition NvFlow.h:603
float buoyancyMaxSmoke
Smoke clamp value applied before computing smoke buoyancy.
Definition NvFlow.h:599
float tempPerBurn
Temperature increase per unit burn.
Definition NvFlow.h:594
float burnPerTemp
Burn amount per unit temperature above ignitionTemp.
Definition NvFlow.h:592
NvFlowBool32 downsampleEnabled
Allows density downsample in velocity advection to be disabled.
Definition NvFlow.h:580
float buoyancyPerTemp
Buoyant force per unit temperature.
Definition NvFlow.h:597
NvFlowBool32 forceFadeEnabled
Force fade to apply even when advection disabled.
Definition NvFlow.h:582
NvFlowBool32 combustionEnabled
Allows combustion to be disabled.
Definition NvFlow.h:581
float fuelPerBurn
Fuel consumed per unit burn.
Definition NvFlow.h:593
float divergencePerBurn
Expansion per unit burn.
Definition NvFlow.h:596
float buoyancyPerSmoke
Buoyant force per unit smoke.
Definition NvFlow.h:598
NvFlowBool32 enabled
Allows advection to be disabled when not in use.
Definition NvFlow.h:579
float ignitionTemp
Minimum temperature for combustion.
Definition NvFlow.h:591
float smokePerBurn
Density increase per unit burn.
Definition NvFlow.h:595
float coolingRate
Cooling rate, exponential.
Definition NvFlow.h:600
Definition NvFlow.h:662
Definition NvFlow.h:670
Definition NvFlowContext.h:362
Definition NvFlow.h:62
Definition NvFlow.h:71
********************************* NvFlowOpList ***************************************
Definition NvFlow.h:1007
********************************* Pressure ***************************************
Definition NvFlow.h:772
Definition NvFlow.h:788
Definition NvFlow.h:797
Definition NvFlowReflect.h:182
Definition NvFlow.h:338
Definition NvFlowShaderTypes.h:155
Definition NvFlowShaderTypes.h:117
********************************* SparseNanoVdbExport ***************************************
Definition NvFlow.h:414
Definition NvFlow.h:454
Definition NvFlow.h:512
Definition NvFlow.h:466
Definition NvFlowShaderTypes.h:176
Definition NvFlow.h:190
Definition NvFlow.h:279
Definition NvFlow.h:329
********************************* Summary ***************************************
Definition NvFlow.h:904
Definition NvFlow.h:971
Definition NvFlow.h:980
Definition NvFlow.h:929
Definition NvFlow.h:936
Definition NvFlow.h:947
Definition NvFlowContext.h:137
********************************* Vorticity ***************************************
Definition NvFlow.h:821
Definition NvFlow.h:867
Definition NvFlow.h:878