8#ifndef OPENSUBDIV3_OSD_CPU_EVALUATOR_H
9#define OPENSUBDIV3_OSD_CPU_EVALUATOR_H
11#include "../version.h"
18namespace OPENSUBDIV_VERSION {
54 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
58 STENCIL_TABLE
const *stencilTable,
60 void * deviceContext = NULL) {
65 if (stencilTable->GetNumStencils() == 0)
69 dstBuffer->BindCpuBuffer(), dstDesc,
70 &stencilTable->GetSizes()[0],
71 &stencilTable->GetOffsets()[0],
72 &stencilTable->GetControlIndices()[0],
73 &stencilTable->GetWeights()[0],
75 stencilTable->GetNumStencils());
110 const float * weights,
150 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
156 STENCIL_TABLE
const *stencilTable,
158 void * deviceContext = NULL) {
163 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
164 dstBuffer->BindCpuBuffer(), dstDesc,
165 duBuffer->BindCpuBuffer(), duDesc,
166 dvBuffer->BindCpuBuffer(), dvDesc,
167 &stencilTable->GetSizes()[0],
168 &stencilTable->GetOffsets()[0],
169 &stencilTable->GetControlIndices()[0],
170 &stencilTable->GetWeights()[0],
171 &stencilTable->GetDuWeights()[0],
172 &stencilTable->GetDvWeights()[0],
174 stencilTable->GetNumStencils());
225 const float * weights,
226 const float * duWeights,
227 const float * dvWeights,
285 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
294 STENCIL_TABLE
const *stencilTable,
296 void * deviceContext = NULL) {
301 return EvalStencils(srcBuffer->BindCpuBuffer(), srcDesc,
302 dstBuffer->BindCpuBuffer(), dstDesc,
303 duBuffer->BindCpuBuffer(), duDesc,
304 dvBuffer->BindCpuBuffer(), dvDesc,
305 duuBuffer->BindCpuBuffer(), duuDesc,
306 duvBuffer->BindCpuBuffer(), duvDesc,
307 dvvBuffer->BindCpuBuffer(), dvvDesc,
308 &stencilTable->GetSizes()[0],
309 &stencilTable->GetOffsets()[0],
310 &stencilTable->GetControlIndices()[0],
311 &stencilTable->GetWeights()[0],
312 &stencilTable->GetDuWeights()[0],
313 &stencilTable->GetDvWeights()[0],
314 &stencilTable->GetDuuWeights()[0],
315 &stencilTable->GetDuvWeights()[0],
316 &stencilTable->GetDvvWeights()[0],
318 stencilTable->GetNumStencils());
393 const float * weights,
394 const float * duWeights,
395 const float * dvWeights,
396 const float * duuWeights,
397 const float * duvWeights,
398 const float * dvvWeights,
435 template <
typename SRC_BUFFER,
typename DST_BUFFER,
436 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
441 PATCHCOORD_BUFFER *patchCoords,
442 PATCH_TABLE *patchTable,
444 void * deviceContext = NULL) {
449 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
450 dstBuffer->BindCpuBuffer(), dstDesc,
452 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
453 patchTable->GetPatchArrayBuffer(),
454 patchTable->GetPatchIndexBuffer(),
455 patchTable->GetPatchParamBuffer());
498 template <
typename SRC_BUFFER,
typename DST_BUFFER,
499 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
506 PATCHCOORD_BUFFER *patchCoords,
507 PATCH_TABLE *patchTable,
509 void * deviceContext = NULL) {
519 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
520 dstBuffer->BindCpuBuffer(), dstDesc,
521 duBuffer->BindCpuBuffer(), duDesc,
522 dvBuffer->BindCpuBuffer(), dvDesc,
524 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
525 patchTable->GetPatchArrayBuffer(),
526 patchTable->GetPatchIndexBuffer(),
527 patchTable->GetPatchParamBuffer());
588 template <
typename SRC_BUFFER,
typename DST_BUFFER,
589 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
599 PATCHCOORD_BUFFER *patchCoords,
600 PATCH_TABLE *patchTable,
602 void * deviceContext = NULL) {
612 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
613 dstBuffer->BindCpuBuffer(), dstDesc,
614 duBuffer->BindCpuBuffer(), duDesc,
615 dvBuffer->BindCpuBuffer(), dvDesc,
616 duuBuffer->BindCpuBuffer(), duuDesc,
617 duvBuffer->BindCpuBuffer(), duvDesc,
618 dvvBuffer->BindCpuBuffer(), dvvDesc,
620 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
621 patchTable->GetPatchArrayBuffer(),
622 patchTable->GetPatchIndexBuffer(),
623 patchTable->GetPatchParamBuffer());
659 const int *patchIndexBuffer,
707 const int *patchIndexBuffer,
773 const int *patchIndexBuffer,
804 template <
typename SRC_BUFFER,
typename DST_BUFFER,
805 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
810 PATCHCOORD_BUFFER *patchCoords,
811 PATCH_TABLE *patchTable,
813 void * deviceContext = NULL) {
818 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
819 dstBuffer->BindCpuBuffer(), dstDesc,
821 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
822 patchTable->GetVaryingPatchArrayBuffer(),
823 patchTable->GetVaryingPatchIndexBuffer(),
824 patchTable->GetPatchParamBuffer());
867 template <
typename SRC_BUFFER,
typename DST_BUFFER,
868 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
875 PATCHCOORD_BUFFER *patchCoords,
876 PATCH_TABLE *patchTable,
878 void * deviceContext = NULL) {
883 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
884 dstBuffer->BindCpuBuffer(), dstDesc,
885 duBuffer->BindCpuBuffer(), duDesc,
886 dvBuffer->BindCpuBuffer(), dvDesc,
888 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
889 patchTable->GetVaryingPatchArrayBuffer(),
890 patchTable->GetVaryingPatchIndexBuffer(),
891 patchTable->GetPatchParamBuffer());
952 template <
typename SRC_BUFFER,
typename DST_BUFFER,
953 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
963 PATCHCOORD_BUFFER *patchCoords,
964 PATCH_TABLE *patchTable,
966 void * deviceContext = NULL) {
971 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
972 dstBuffer->BindCpuBuffer(), dstDesc,
973 duBuffer->BindCpuBuffer(), duDesc,
974 dvBuffer->BindCpuBuffer(), dvDesc,
975 duuBuffer->BindCpuBuffer(), duuDesc,
976 duvBuffer->BindCpuBuffer(), duvDesc,
977 dvvBuffer->BindCpuBuffer(), dvvDesc,
979 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
980 patchTable->GetVaryingPatchArrayBuffer(),
981 patchTable->GetVaryingPatchIndexBuffer(),
982 patchTable->GetPatchParamBuffer());
1015 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1016 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1021 PATCHCOORD_BUFFER *patchCoords,
1022 PATCH_TABLE *patchTable,
1025 void * deviceContext = NULL) {
1028 (void)deviceContext;
1030 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
1031 dstBuffer->BindCpuBuffer(), dstDesc,
1033 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
1034 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1035 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1036 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1081 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1082 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1089 PATCHCOORD_BUFFER *patchCoords,
1090 PATCH_TABLE *patchTable,
1093 void * deviceContext = NULL) {
1096 (void)deviceContext;
1098 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
1099 dstBuffer->BindCpuBuffer(), dstDesc,
1100 duBuffer->BindCpuBuffer(), duDesc,
1101 dvBuffer->BindCpuBuffer(), dvDesc,
1103 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
1104 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1105 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1106 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1169 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1170 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1180 PATCHCOORD_BUFFER *patchCoords,
1181 PATCH_TABLE *patchTable,
1184 void * deviceContext = NULL) {
1187 (void)deviceContext;
1189 return EvalPatches(srcBuffer->BindCpuBuffer(), srcDesc,
1190 dstBuffer->BindCpuBuffer(), dstDesc,
1191 duBuffer->BindCpuBuffer(), duDesc,
1192 dvBuffer->BindCpuBuffer(), dvDesc,
1193 duuBuffer->BindCpuBuffer(), duuDesc,
1194 duvBuffer->BindCpuBuffer(), duvDesc,
1195 dvvBuffer->BindCpuBuffer(), dvvDesc,
1197 (
const PatchCoord*)patchCoords->BindCpuBuffer(),
1198 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1199 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1200 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1219using 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.