5#ifndef OPENSUBDIV_GPU_COMPUTE_EVALUATOR_H_
6#define OPENSUBDIV_GPU_COMPUTE_EVALUATOR_H_
8#include <opensubdiv/osd/bufferDescriptor.h>
9#include <opensubdiv/osd/types.h>
10#include <opensubdiv/version.h>
15class LimitStencilTable;
31 void *deviceContext =
nullptr)
37 void *deviceContext =
nullptr)
66 return du_weights_buf;
70 return dv_weights_buf;
74 return duu_weights_buf;
78 return duv_weights_buf;
82 return dvv_weights_buf;
112 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
113 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
114 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
115 OpenSubdiv::Osd::BufferDescriptor
const & ,
116 OpenSubdiv::Osd::BufferDescriptor
const & ,
117 OpenSubdiv::Osd::BufferDescriptor
const & ,
118 void *deviceContext =
nullptr)
120 return Create(srcDesc, dstDesc, duDesc, dvDesc, deviceContext);
124 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
125 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
126 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
130 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc)) {
176 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
178 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
179 DST_BUFFER *dstBuffer,
180 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
181 STENCIL_TABLE
const *stencilTable,
183 void *deviceContext =
nullptr)
187 return instance->
EvalStencils(srcBuffer, srcDesc, dstBuffer, dstDesc, stencilTable);
192 instance =
Create(srcDesc,
194 OpenSubdiv::Osd::BufferDescriptor(),
195 OpenSubdiv::Osd::BufferDescriptor());
197 bool r = instance->
EvalStencils(srcBuffer, srcDesc, dstBuffer, dstDesc, stencilTable);
243 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
245 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
246 DST_BUFFER *dstBuffer,
247 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
248 DST_BUFFER *duBuffer,
249 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
250 DST_BUFFER *dvBuffer,
251 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
252 STENCIL_TABLE
const *stencilTable,
254 void *deviceContext =
nullptr)
271 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
305 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
307 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
308 DST_BUFFER *dstBuffer,
309 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
310 STENCIL_TABLE
const *stencilTable)
const
314 dstBuffer->get_vertex_buffer(),
317 OpenSubdiv::Osd::BufferDescriptor(),
319 OpenSubdiv::Osd::BufferDescriptor(),
320 stencilTable->GetSizesBuffer(),
321 stencilTable->GetOffsetsBuffer(),
322 stencilTable->GetIndicesBuffer(),
323 stencilTable->GetWeightsBuffer(),
327 stencilTable->GetNumStencils());
359 template<
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
361 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
362 DST_BUFFER *dstBuffer,
363 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
364 DST_BUFFER *duBuffer,
365 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
366 DST_BUFFER *dvBuffer,
367 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
368 STENCIL_TABLE
const *stencilTable)
const
372 dstBuffer->get_vertex_buffer(),
374 duBuffer->get_vertex_buffer(),
376 dvBuffer->get_vertex_buffer(),
378 stencilTable->GetSizesBuffer(),
379 stencilTable->GetOffsetsBuffer(),
380 stencilTable->GetIndicesBuffer(),
381 stencilTable->GetWeightsBuffer(),
382 stencilTable->GetDuWeightsBuffer(),
383 stencilTable->GetDvWeightsBuffer(),
385 stencilTable->GetNumStencils());
424 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
426 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
428 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
430 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
478 template<
typename SRC_BUFFER,
480 typename PATCHCOORD_BUFFER,
481 typename PATCH_TABLE>
483 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
484 DST_BUFFER *dstBuffer,
485 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
487 PATCHCOORD_BUFFER *patchCoords,
488 PATCH_TABLE *patchTable,
490 void *deviceContext =
nullptr)
495 srcBuffer, srcDesc, dstBuffer, dstDesc, numPatchCoords, patchCoords, patchTable);
499 instance =
Create(srcDesc,
501 OpenSubdiv::Osd::BufferDescriptor(),
502 OpenSubdiv::Osd::BufferDescriptor());
505 srcBuffer, srcDesc, dstBuffer, dstDesc, numPatchCoords, patchCoords, patchTable);
556 template<
typename SRC_BUFFER,
558 typename PATCHCOORD_BUFFER,
559 typename PATCH_TABLE>
561 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
562 DST_BUFFER *dstBuffer,
563 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
564 DST_BUFFER *duBuffer,
565 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
566 DST_BUFFER *dvBuffer,
567 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
569 PATCHCOORD_BUFFER *patchCoords,
570 PATCH_TABLE *patchTable,
572 void *deviceContext =
nullptr)
590 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
633 template<
typename SRC_BUFFER,
635 typename PATCHCOORD_BUFFER,
636 typename PATCH_TABLE>
638 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
639 DST_BUFFER *dstBuffer,
640 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
642 PATCHCOORD_BUFFER *patchCoords,
643 PATCH_TABLE *patchTable)
648 dstBuffer->get_vertex_buffer(),
651 OpenSubdiv::Osd::BufferDescriptor(),
653 OpenSubdiv::Osd::BufferDescriptor(),
655 patchCoords->get_vertex_buffer(),
656 patchTable->GetPatchArrays(),
657 patchTable->GetPatchIndexBuffer(),
658 patchTable->GetPatchParamBuffer());
695 template<
typename SRC_BUFFER,
697 typename PATCHCOORD_BUFFER,
698 typename PATCH_TABLE>
700 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
701 DST_BUFFER *dstBuffer,
702 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
703 DST_BUFFER *duBuffer,
704 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
705 DST_BUFFER *dvBuffer,
706 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
708 PATCHCOORD_BUFFER *patchCoords,
709 PATCH_TABLE *patchTable)
714 dstBuffer->get_vertex_buffer(),
716 duBuffer->get_vertex_buffer(),
718 dvBuffer->get_vertex_buffer(),
721 patchCoords->get_vertex_buffer(),
722 patchTable->GetPatchArrays(),
723 patchTable->GetPatchIndexBuffer(),
724 patchTable->GetPatchParamBuffer());
728 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
730 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
732 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
734 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
737 const OpenSubdiv::Osd::PatchArrayVector &patchArrays,
773 template<
typename SRC_BUFFER,
775 typename PATCHCOORD_BUFFER,
776 typename PATCH_TABLE>
778 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
779 DST_BUFFER *dstBuffer,
780 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
782 PATCHCOORD_BUFFER *patchCoords,
783 PATCH_TABLE *patchTable,
785 void *deviceContext =
nullptr)
789 srcBuffer, srcDesc, dstBuffer, dstDesc, numPatchCoords, patchCoords, patchTable);
794 instance =
Create(srcDesc,
796 OpenSubdiv::Osd::BufferDescriptor(),
797 OpenSubdiv::Osd::BufferDescriptor());
800 srcBuffer, srcDesc, dstBuffer, dstDesc, numPatchCoords, patchCoords, patchTable);
831 template<
typename SRC_BUFFER,
833 typename PATCHCOORD_BUFFER,
834 typename PATCH_TABLE>
836 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
837 DST_BUFFER *dstBuffer,
838 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
840 PATCHCOORD_BUFFER *patchCoords,
841 PATCH_TABLE *patchTable)
846 dstBuffer->get_vertex_buffer(),
849 OpenSubdiv::Osd::BufferDescriptor(),
851 OpenSubdiv::Osd::BufferDescriptor(),
853 patchCoords->get_vertex_buffer(),
854 patchTable->GetVaryingPatchArrays(),
855 patchTable->GetVaryingPatchIndexBuffer(),
856 patchTable->GetPatchParamBuffer());
903 template<
typename SRC_BUFFER,
905 typename PATCHCOORD_BUFFER,
906 typename PATCH_TABLE>
908 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
909 DST_BUFFER *dstBuffer,
910 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
911 DST_BUFFER *duBuffer,
912 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
913 DST_BUFFER *dvBuffer,
914 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
916 PATCHCOORD_BUFFER *patchCoords,
917 PATCH_TABLE *patchTable,
919 void *deviceContext =
nullptr)
937 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
992 template<
typename SRC_BUFFER,
994 typename PATCHCOORD_BUFFER,
995 typename PATCH_TABLE>
997 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
998 DST_BUFFER *dstBuffer,
999 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1000 DST_BUFFER *duBuffer,
1001 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1002 DST_BUFFER *dvBuffer,
1003 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1005 PATCHCOORD_BUFFER *patchCoords,
1006 PATCH_TABLE *patchTable)
1009 return EvalPatches(srcBuffer->get_vertex_buffer(),
1011 dstBuffer->get_vertex_buffer(),
1013 duBuffer->get_vertex_buffer(),
1015 dvBuffer->get_vertex_buffer(),
1018 patchCoords->get_vertex_buffer(),
1019 patchTable->GetVaryingPatchArrays(),
1020 patchTable->GetVaryingPatchIndexBuffer(),
1021 patchTable->GetPatchParamBuffer());
1058 template<
typename SRC_BUFFER,
1059 typename DST_BUFFER,
1060 typename PATCHCOORD_BUFFER,
1061 typename PATCH_TABLE>
1063 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1064 DST_BUFFER *dstBuffer,
1065 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1067 PATCHCOORD_BUFFER *patchCoords,
1068 PATCH_TABLE *patchTable,
1071 void *deviceContext =
nullptr)
1085 (void)deviceContext;
1086 instance =
Create(srcDesc,
1088 OpenSubdiv::Osd::BufferDescriptor(),
1089 OpenSubdiv::Osd::BufferDescriptor());
1131 template<
typename SRC_BUFFER,
1132 typename DST_BUFFER,
1133 typename PATCHCOORD_BUFFER,
1134 typename PATCH_TABLE>
1136 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1137 DST_BUFFER *dstBuffer,
1138 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1140 PATCHCOORD_BUFFER *patchCoords,
1141 PATCH_TABLE *patchTable,
1142 int fvarChannel = 0)
1145 return EvalPatches(srcBuffer->get_vertex_buffer(),
1147 dstBuffer->get_vertex_buffer(),
1150 OpenSubdiv::Osd::BufferDescriptor(),
1152 OpenSubdiv::Osd::BufferDescriptor(),
1154 patchCoords->get_vertex_buffer(),
1155 patchTable->GetFVarPatchArrays(fvarChannel),
1156 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1157 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1206 template<
typename SRC_BUFFER,
1207 typename DST_BUFFER,
1208 typename PATCHCOORD_BUFFER,
1209 typename PATCH_TABLE>
1211 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1212 DST_BUFFER *dstBuffer,
1213 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1214 DST_BUFFER *duBuffer,
1215 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1216 DST_BUFFER *dvBuffer,
1217 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1219 PATCHCOORD_BUFFER *patchCoords,
1220 PATCH_TABLE *patchTable,
1223 void *deviceContext =
nullptr)
1241 (void)deviceContext;
1242 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
1300 template<
typename SRC_BUFFER,
1301 typename DST_BUFFER,
1302 typename PATCHCOORD_BUFFER,
1303 typename PATCH_TABLE>
1305 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1306 DST_BUFFER *dstBuffer,
1307 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1308 DST_BUFFER *duBuffer,
1309 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1310 DST_BUFFER *dvBuffer,
1311 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1313 PATCHCOORD_BUFFER *patchCoords,
1314 PATCH_TABLE *patchTable,
1315 int fvarChannel = 0)
1318 return EvalPatches(srcBuffer->get_vertex_buffer(),
1320 dstBuffer->get_vertex_buffer(),
1322 duBuffer->get_vertex_buffer(),
1324 dvBuffer->get_vertex_buffer(),
1327 patchCoords->get_vertex_buffer(),
1328 patchTable->GetFVarPatchArrays(fvarChannel),
1329 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1330 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1342 OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1343 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1344 OpenSubdiv::Osd::BufferDescriptor
const &duDesc = OpenSubdiv::Osd::BufferDescriptor(),
1345 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc = OpenSubdiv::Osd::BufferDescriptor());
1351 struct _StencilKernel {
1354 bool Compile(OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1355 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1356 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1357 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1360 int uniformStart = 0;
1362 int uniformSrcOffset = 0;
1363 int uniformDstOffset = 0;
1364 int uniformDuDesc = 0;
1365 int uniformDvDesc = 0;
1368 struct _PatchKernel {
1371 bool Compile(OpenSubdiv::Osd::BufferDescriptor
const &srcDesc,
1372 OpenSubdiv::Osd::BufferDescriptor
const &dstDesc,
1373 OpenSubdiv::Osd::BufferDescriptor
const &duDesc,
1374 OpenSubdiv::Osd::BufferDescriptor
const &dvDesc,
1377 int uniformSrcOffset = 0;
1378 int uniformDstOffset = 0;
1379 int uniformDuDesc = 0;
1380 int uniformDvDesc = 0;
1384 gpu::StorageBuf *_patchArraysSSBO =
nullptr;
1386 int GetDispatchSize(
int count)
const;
static GPUComputeEvaluator * Create(OpenSubdiv::Osd::BufferDescriptor const &srcDesc, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, OpenSubdiv::Osd::BufferDescriptor const &duDesc, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, void *=nullptr)
bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
bool EvalStencils(gpu::VertBuf *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, gpu::VertBuf *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, gpu::VertBuf *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, gpu::VertBuf *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, gpu::StorageBuf *sizesBuffer, gpu::StorageBuf *offsetsBuffer, gpu::StorageBuf *indicesBuffer, gpu::StorageBuf *weightsBuffer, gpu::StorageBuf *duWeightsBuffer, gpu::StorageBuf *dvWeightsBuffer, int start, int end) const
Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
static bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GPUComputeEvaluator *instance, void *deviceContext=nullptr)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GPUComputeEvaluator *instance, void *deviceContext=nullptr)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, GPUComputeEvaluator *instance, void *deviceContext=nullptr)
Generic static stencil function. This function has a same signature as other device kernels have so t...
bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
GPUComputeEvaluator()
Constructor.
bool Compile(OpenSubdiv::Osd::BufferDescriptor const &srcDesc, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, OpenSubdiv::Osd::BufferDescriptor const &duDesc=OpenSubdiv::Osd::BufferDescriptor(), OpenSubdiv::Osd::BufferDescriptor const &dvDesc=OpenSubdiv::Osd::BufferDescriptor())
static void Synchronize(void *deviceContext)
Wait the dispatched kernel finishes.
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GPUComputeEvaluator *instance, void *deviceContext=nullptr)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static GPUComputeEvaluator * Create(OpenSubdiv::Osd::BufferDescriptor const &srcDesc, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, OpenSubdiv::Osd::BufferDescriptor const &duDesc, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, OpenSubdiv::Osd::BufferDescriptor const &, OpenSubdiv::Osd::BufferDescriptor const &, OpenSubdiv::Osd::BufferDescriptor const &, void *deviceContext=nullptr)
static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GPUComputeEvaluator *instance, void *deviceContext=nullptr)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatches(gpu::VertBuf *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, gpu::VertBuf *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, gpu::VertBuf *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, gpu::VertBuf *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, gpu::VertBuf *patchCoordsBuffer, const OpenSubdiv::Osd::PatchArrayVector &patchArrays, gpu::StorageBuf *patchIndexBuffer, gpu::StorageBuf *patchParamsBuffer)
~GPUComputeEvaluator()
Destructor. note that the GL context must be made current.
static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GPUComputeEvaluator *instance, void *deviceContext=nullptr)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
static bool EvalStencils(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, GPUComputeEvaluator *instance, void *deviceContext=nullptr)
Generic static stencil function. This function has a same signature as other device kernels have so t...
static bool EvalPatches(SRC_BUFFER *srcBuffer, OpenSubdiv::Osd::BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, OpenSubdiv::Osd::BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, OpenSubdiv::Osd::BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, OpenSubdiv::Osd::BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GPUComputeEvaluator *instance, void *deviceContext=nullptr)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
GPUStencilTableSSBO(OpenSubdiv::Far::StencilTable const *stencilTable)
gpu::StorageBuf * GetOffsetsBuffer() const
int GetNumStencils() const
gpu::StorageBuf * GetDuWeightsBuffer() const
static GPUStencilTableSSBO * Create(OpenSubdiv::Far::LimitStencilTable const *limitStencilTable, void *deviceContext=nullptr)
GPUStencilTableSSBO(OpenSubdiv::Far::LimitStencilTable const *limitStencilTable)
gpu::StorageBuf * GetDuuWeightsBuffer() const
gpu::StorageBuf * GetDuvWeightsBuffer() const
gpu::StorageBuf * GetSizesBuffer() const
gpu::StorageBuf * GetDvWeightsBuffer() const
static GPUStencilTableSSBO * Create(OpenSubdiv::Far::StencilTable const *stencilTable, void *deviceContext=nullptr)
gpu::StorageBuf * GetDvvWeightsBuffer() const
gpu::StorageBuf * GetIndicesBuffer() const
gpu::StorageBuf * GetWeightsBuffer() const