25 #ifndef OPENSUBDIV3_OSD_CPU_EVALUATOR_H 26 #define OPENSUBDIV3_OSD_CPU_EVALUATOR_H 28 #include "../version.h" 31 #include "../osd/bufferDescriptor.h" 32 #include "../osd/types.h" 35 namespace OPENSUBDIV_VERSION {
71 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
75 STENCIL_TABLE
const *stencilTable,
77 void * deviceContext = NULL) {
82 if (stencilTable->GetNumStencils() == 0)
86 dstBuffer->BindCpuBuffer(), dstDesc,
87 &stencilTable->GetSizes()[0],
88 &stencilTable->GetOffsets()[0],
89 &stencilTable->GetControlIndices()[0],
90 &stencilTable->GetWeights()[0],
92 stencilTable->GetNumStencils());
128 const float * weights,
168 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
174 STENCIL_TABLE
const *stencilTable,
176 void * deviceContext = NULL) {
181 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
182 dstBuffer->BindCpuBuffer(), dstDesc,
183 duBuffer->BindCpuBuffer(), duDesc,
184 dvBuffer->BindCpuBuffer(), dvDesc,
185 &stencilTable->GetSizes()[0],
186 &stencilTable->GetOffsets()[0],
187 &stencilTable->GetControlIndices()[0],
188 &stencilTable->GetWeights()[0],
189 &stencilTable->GetDuWeights()[0],
190 &stencilTable->GetDvWeights()[0],
192 stencilTable->GetNumStencils());
243 const float * weights,
244 const float * duWeights,
245 const float * dvWeights,
282 template <
typename SRC_BUFFER,
typename DST_BUFFER,
283 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
288 PATCHCOORD_BUFFER *patchCoords,
289 PATCH_TABLE *patchTable,
291 void * deviceContext = NULL) {
296 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
297 dstBuffer->BindCpuBuffer(), dstDesc,
299 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
300 patchTable->GetPatchArrayBuffer(),
301 patchTable->GetPatchIndexBuffer(),
302 patchTable->GetPatchParamBuffer());
345 template <
typename SRC_BUFFER,
typename DST_BUFFER,
346 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
353 PATCHCOORD_BUFFER *patchCoords,
354 PATCH_TABLE *patchTable,
356 void * deviceContext = NULL) {
365 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
366 dstBuffer->BindCpuBuffer(), dstDesc,
367 duBuffer->BindCpuBuffer(), duDesc,
368 dvBuffer->BindCpuBuffer(), dvDesc,
370 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
371 patchTable->GetPatchArrayBuffer(),
372 patchTable->GetPatchIndexBuffer(),
373 patchTable->GetPatchParamBuffer());
409 const int *patchIndexBuffer,
457 const int *patchIndexBuffer,
488 template <
typename SRC_BUFFER,
typename DST_BUFFER,
489 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
494 PATCHCOORD_BUFFER *patchCoords,
495 PATCH_TABLE *patchTable,
497 void * deviceContext = NULL) {
502 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
503 dstBuffer->BindCpuBuffer(), dstDesc,
505 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
506 patchTable->GetVaryingPatchArrayBuffer(),
507 patchTable->GetVaryingPatchIndexBuffer(),
508 patchTable->GetPatchParamBuffer());
541 template <
typename SRC_BUFFER,
typename DST_BUFFER,
542 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
547 PATCHCOORD_BUFFER *patchCoords,
548 PATCH_TABLE *patchTable,
551 void * deviceContext = NULL) {
556 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
557 dstBuffer->BindCpuBuffer(), dstDesc,
559 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
560 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
561 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
562 patchTable->GetFVarPatchParamBuffer(fvarChannel));
581 using namespace OPENSUBDIV_VERSION;
586 #endif // OPENSUBDIV3_OSD_CPU_EVALUATOR_H
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, const CpuEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
static void Synchronize(void *)
synchronize all asynchronous computation invoked on this device.
static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers. Almost all Osd Evaluator APIs take BufferDescriptors along with device-specific buffer objects.
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const CpuEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function. This function has a same signature as other device kernels hav...
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CpuEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
Coordinates set on a patch table.