8#ifndef OPENSUBDIV3_OSD_OMP_EVALUATOR_H
9#define OPENSUBDIV3_OSD_OMP_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, OmpEvaluator 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 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, OmpEvaluator 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 OmpEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
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 EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator 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, OmpEvaluator 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, 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 EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, const OmpEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function. This function has a same signature as other device kernels hav...
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, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
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, OmpEvaluator 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, 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, OmpEvaluator const *instance=NULL, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
static void Synchronize(void *deviceContext=NULL)
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 OmpEvaluator *instance=NULL, void *deviceContext=NULL)
Generic static eval stencils function with derivatives. This function has a same signature as other d...
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, OmpEvaluator 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(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 void SetNumThreads(int numThreads)
Deprecated. Client code should initialize OpenMP.
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 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, OmpEvaluator 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.