25#ifndef OPENSUBDIV3_OSD_CPU_EVALUATOR_H
26#define OPENSUBDIV3_OSD_CPU_EVALUATOR_H
28#include "../version.h"
29#include "../osd/bufferDescriptor.h"
30#include "../osd/types.h"
35namespace 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());
127 const float * weights,
167 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
173 STENCIL_TABLE
const *stencilTable,
175 void * deviceContext = NULL) {
180 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
181 dstBuffer->BindCpuBuffer(), dstDesc,
182 duBuffer->BindCpuBuffer(), duDesc,
183 dvBuffer->BindCpuBuffer(), dvDesc,
184 &stencilTable->GetSizes()[0],
185 &stencilTable->GetOffsets()[0],
186 &stencilTable->GetControlIndices()[0],
187 &stencilTable->GetWeights()[0],
188 &stencilTable->GetDuWeights()[0],
189 &stencilTable->GetDvWeights()[0],
191 stencilTable->GetNumStencils());
242 const float * weights,
243 const float * duWeights,
244 const float * dvWeights,
302 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
311 STENCIL_TABLE
const *stencilTable,
313 void * deviceContext = NULL) {
318 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
319 dstBuffer->BindCpuBuffer(), dstDesc,
320 duBuffer->BindCpuBuffer(), duDesc,
321 dvBuffer->BindCpuBuffer(), dvDesc,
322 duuBuffer->BindCpuBuffer(), duuDesc,
323 duvBuffer->BindCpuBuffer(), duvDesc,
324 dvvBuffer->BindCpuBuffer(), dvvDesc,
325 &stencilTable->GetSizes()[0],
326 &stencilTable->GetOffsets()[0],
327 &stencilTable->GetControlIndices()[0],
328 &stencilTable->GetWeights()[0],
329 &stencilTable->GetDuWeights()[0],
330 &stencilTable->GetDvWeights()[0],
331 &stencilTable->GetDuuWeights()[0],
332 &stencilTable->GetDuvWeights()[0],
333 &stencilTable->GetDvvWeights()[0],
335 stencilTable->GetNumStencils());
410 const float * weights,
411 const float * duWeights,
412 const float * dvWeights,
413 const float * duuWeights,
414 const float * duvWeights,
415 const float * dvvWeights,
452 template <
typename SRC_BUFFER,
typename DST_BUFFER,
453 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
458 PATCHCOORD_BUFFER *patchCoords,
459 PATCH_TABLE *patchTable,
461 void * deviceContext = NULL) {
466 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
467 dstBuffer->BindCpuBuffer(), dstDesc,
469 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
470 patchTable->GetPatchArrayBuffer(),
471 patchTable->GetPatchIndexBuffer(),
472 patchTable->GetPatchParamBuffer());
515 template <
typename SRC_BUFFER,
typename DST_BUFFER,
516 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
523 PATCHCOORD_BUFFER *patchCoords,
524 PATCH_TABLE *patchTable,
526 void * deviceContext = NULL) {
536 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
537 dstBuffer->BindCpuBuffer(), dstDesc,
538 duBuffer->BindCpuBuffer(), duDesc,
539 dvBuffer->BindCpuBuffer(), dvDesc,
541 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
542 patchTable->GetPatchArrayBuffer(),
543 patchTable->GetPatchIndexBuffer(),
544 patchTable->GetPatchParamBuffer());
605 template <
typename SRC_BUFFER,
typename DST_BUFFER,
606 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
616 PATCHCOORD_BUFFER *patchCoords,
617 PATCH_TABLE *patchTable,
619 void * deviceContext = NULL) {
629 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
630 dstBuffer->BindCpuBuffer(), dstDesc,
631 duBuffer->BindCpuBuffer(), duDesc,
632 dvBuffer->BindCpuBuffer(), dvDesc,
633 duuBuffer->BindCpuBuffer(), duuDesc,
634 duvBuffer->BindCpuBuffer(), duvDesc,
635 dvvBuffer->BindCpuBuffer(), dvvDesc,
637 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
638 patchTable->GetPatchArrayBuffer(),
639 patchTable->GetPatchIndexBuffer(),
640 patchTable->GetPatchParamBuffer());
676 const int *patchIndexBuffer,
724 const int *patchIndexBuffer,
790 const int *patchIndexBuffer,
821 template <
typename SRC_BUFFER,
typename DST_BUFFER,
822 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
827 PATCHCOORD_BUFFER *patchCoords,
828 PATCH_TABLE *patchTable,
830 void * deviceContext = NULL) {
835 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
836 dstBuffer->BindCpuBuffer(), dstDesc,
838 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
839 patchTable->GetVaryingPatchArrayBuffer(),
840 patchTable->GetVaryingPatchIndexBuffer(),
841 patchTable->GetPatchParamBuffer());
884 template <
typename SRC_BUFFER,
typename DST_BUFFER,
885 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
892 PATCHCOORD_BUFFER *patchCoords,
893 PATCH_TABLE *patchTable,
895 void * deviceContext = NULL) {
900 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
901 dstBuffer->BindCpuBuffer(), dstDesc,
902 duBuffer->BindCpuBuffer(), duDesc,
903 dvBuffer->BindCpuBuffer(), dvDesc,
905 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
906 patchTable->GetVaryingPatchArrayBuffer(),
907 patchTable->GetVaryingPatchIndexBuffer(),
908 patchTable->GetPatchParamBuffer());
969 template <
typename SRC_BUFFER,
typename DST_BUFFER,
970 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
980 PATCHCOORD_BUFFER *patchCoords,
981 PATCH_TABLE *patchTable,
983 void * deviceContext = NULL) {
988 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
989 dstBuffer->BindCpuBuffer(), dstDesc,
990 duBuffer->BindCpuBuffer(), duDesc,
991 dvBuffer->BindCpuBuffer(), dvDesc,
992 duuBuffer->BindCpuBuffer(), duuDesc,
993 duvBuffer->BindCpuBuffer(), duvDesc,
994 dvvBuffer->BindCpuBuffer(), dvvDesc,
996 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
997 patchTable->GetVaryingPatchArrayBuffer(),
998 patchTable->GetVaryingPatchIndexBuffer(),
999 patchTable->GetPatchParamBuffer());
1032 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1033 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1038 PATCHCOORD_BUFFER *patchCoords,
1039 PATCH_TABLE *patchTable,
1042 void * deviceContext = NULL) {
1045 (void)deviceContext;
1047 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
1048 dstBuffer->BindCpuBuffer(), dstDesc,
1050 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
1051 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1052 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1053 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1098 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1099 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1106 PATCHCOORD_BUFFER *patchCoords,
1107 PATCH_TABLE *patchTable,
1110 void * deviceContext = NULL) {
1113 (void)deviceContext;
1115 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
1116 dstBuffer->BindCpuBuffer(), dstDesc,
1117 duBuffer->BindCpuBuffer(), duDesc,
1118 dvBuffer->BindCpuBuffer(), dvDesc,
1120 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
1121 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1122 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1123 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1186 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1187 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1197 PATCHCOORD_BUFFER *patchCoords,
1198 PATCH_TABLE *patchTable,
1201 void * deviceContext = NULL) {
1204 (void)deviceContext;
1206 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
1207 dstBuffer->BindCpuBuffer(), dstDesc,
1208 duBuffer->BindCpuBuffer(), duDesc,
1209 dvBuffer->BindCpuBuffer(), dvDesc,
1210 duuBuffer->BindCpuBuffer(), duuDesc,
1211 duvBuffer->BindCpuBuffer(), duvDesc,
1212 dvvBuffer->BindCpuBuffer(), dvvDesc,
1214 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
1215 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1216 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1217 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1236using namespace OPENSUBDIV_VERSION;
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
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 ...
static bool EvalPatchesFaceVarying(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, 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 ...
static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, int start, int end)
Static eval stencils function which takes raw CPU pointers for input and output.
static bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, 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 ...
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, 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(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, const float *duWeights, const float *dvWeights, int start, int end)
Static eval stencils function with derivatives, which takes raw CPU pointers for input and output.
static bool EvalStencils(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu, BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc, float *dvv, BufferDescriptor const &dvvDesc, const int *sizes, const int *offsets, const int *indices, const float *weights, const float *duWeights, const float *dvWeights, const float *duuWeights, const float *duvWeights, const float *dvvWeights, int start, int end)
Static eval stencils function with derivatives, which takes raw CPU pointers for input and output.
static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, float *duu, BufferDescriptor const &duuDesc, float *duv, BufferDescriptor const &duvDesc, float *dvv, BufferDescriptor const &dvvDesc, int numPatchCoords, PatchCoord const *patchCoords, PatchArray const *patchArrays, const int *patchIndexBuffer, PatchParam const *patchParamBuffer)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
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 ...
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(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, float *du, BufferDescriptor const &duDesc, float *dv, BufferDescriptor const &dvDesc, int numPatchCoords, PatchCoord const *patchCoords, PatchArray const *patchArrays, const int *patchIndexBuffer, PatchParam const *patchParamBuffer)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
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, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, 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 bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const PatchCoord *patchCoords, const PatchArray *patchArrays, const int *patchIndexBuffer, const PatchParam *patchParamBuffer)
Static limit eval function. It takes an array of PatchCoord and evaluate limit values on given PatchT...
static bool EvalPatchesVarying(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. This function has a same signature as other device kernels have so that ...
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 void Synchronize(void *)
synchronize all asynchronous computation invoked on this device.
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, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, 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 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...
Coordinates set on a patch table.