8#ifndef OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
9#define OPENSUBDIV3_OSD_CUDA_EVALUATOR_H
11#include "../version.h"
18namespace OPENSUBDIV_VERSION {
23 class LimitStencilTable;
38 void *deviceContext = NULL) {
43 void *deviceContext = NULL) {
108 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
112 STENCIL_TABLE
const *stencilTable,
113 const void *instance = NULL,
114 void * deviceContext = NULL) {
118 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
119 dstBuffer->BindCudaBuffer(), dstDesc,
120 (
int const *)stencilTable->GetSizesBuffer(),
121 (
int const *)stencilTable->GetOffsetsBuffer(),
122 (
int const *)stencilTable->GetIndicesBuffer(),
123 (
float const *)stencilTable->GetWeightsBuffer(),
125 stencilTable->GetNumStencils());
160 const float * weights,
200 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
206 STENCIL_TABLE
const *stencilTable,
208 void * deviceContext = NULL) {
213 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
214 dstBuffer->BindCudaBuffer(), dstDesc,
215 duBuffer->BindCudaBuffer(), duDesc,
216 dvBuffer->BindCudaBuffer(), dvDesc,
217 (
int const *)stencilTable->GetSizesBuffer(),
218 (
int const *)stencilTable->GetOffsetsBuffer(),
219 (
int const *)stencilTable->GetIndicesBuffer(),
220 (
float const *)stencilTable->GetWeightsBuffer(),
221 (
float const *)stencilTable->GetDuWeightsBuffer(),
222 (
float const *)stencilTable->GetDvWeightsBuffer(),
224 stencilTable->GetNumStencils());
275 const float * weights,
276 const float * duWeights,
277 const float * dvWeights,
335 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
344 STENCIL_TABLE
const *stencilTable,
346 void * deviceContext = NULL) {
351 return EvalStencils(srcBuffer->BindCudaBuffer(), srcDesc,
352 dstBuffer->BindCudaBuffer(), dstDesc,
353 duBuffer->BindCudaBuffer(), duDesc,
354 dvBuffer->BindCudaBuffer(), dvDesc,
355 duuBuffer->BindCudaBuffer(), duuDesc,
356 duvBuffer->BindCudaBuffer(), duvDesc,
357 dvvBuffer->BindCudaBuffer(), dvvDesc,
358 (
int const *)stencilTable->GetSizesBuffer(),
359 (
int const *)stencilTable->GetOffsetsBuffer(),
360 (
int const *)stencilTable->GetIndicesBuffer(),
361 (
float const *)stencilTable->GetWeightsBuffer(),
362 (
float const *)stencilTable->GetDuWeightsBuffer(),
363 (
float const *)stencilTable->GetDvWeightsBuffer(),
364 (
float const *)stencilTable->GetDuuWeightsBuffer(),
365 (
float const *)stencilTable->GetDuvWeightsBuffer(),
366 (
float const *)stencilTable->GetDvvWeightsBuffer(),
368 stencilTable->GetNumStencils());
443 const float * weights,
444 const float * duWeights,
445 const float * dvWeights,
446 const float * duuWeights,
447 const float * duvWeights,
448 const float * dvvWeights,
485 template <
typename SRC_BUFFER,
typename DST_BUFFER,
486 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
491 PATCHCOORD_BUFFER *patchCoords,
492 PATCH_TABLE *patchTable,
494 void * deviceContext = NULL) {
499 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
500 dstBuffer->BindCudaBuffer(), dstDesc,
502 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
503 (
const PatchArray *)patchTable->GetPatchArrayBuffer(),
504 (
const int *)patchTable->GetPatchIndexBuffer(),
505 (
const PatchParam *)patchTable->GetPatchParamBuffer());
546 template <
typename SRC_BUFFER,
typename DST_BUFFER,
547 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
554 PATCHCOORD_BUFFER *patchCoords,
555 PATCH_TABLE *patchTable,
557 void * deviceContext = NULL) {
562 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
563 dstBuffer->BindCudaBuffer(), dstDesc,
564 duBuffer->BindCudaBuffer(), duDesc,
565 dvBuffer->BindCudaBuffer(), dvDesc,
567 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
568 (
const PatchArray *)patchTable->GetPatchArrayBuffer(),
569 (
const int *)patchTable->GetPatchIndexBuffer(),
570 (
const PatchParam *)patchTable->GetPatchParamBuffer());
629 template <
typename SRC_BUFFER,
typename DST_BUFFER,
630 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
640 PATCHCOORD_BUFFER *patchCoords,
641 PATCH_TABLE *patchTable,
643 void * deviceContext = NULL) {
648 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
649 dstBuffer->BindCudaBuffer(), dstDesc,
650 duBuffer->BindCudaBuffer(), duDesc,
651 dvBuffer->BindCudaBuffer(), dvDesc,
652 duuBuffer->BindCudaBuffer(), duuDesc,
653 duvBuffer->BindCudaBuffer(), duvDesc,
654 dvvBuffer->BindCudaBuffer(), dvvDesc,
656 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
657 (
const PatchArray *)patchTable->GetPatchArrayBuffer(),
658 (
const int *)patchTable->GetPatchIndexBuffer(),
659 (
const PatchParam *)patchTable->GetPatchParamBuffer());
695 const int *patchIndices,
743 const int *patchIndices,
809 const int *patchIndices,
840 template <
typename SRC_BUFFER,
typename DST_BUFFER,
841 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
846 PATCHCOORD_BUFFER *patchCoords,
847 PATCH_TABLE *patchTable,
849 void * deviceContext = NULL) {
854 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
855 dstBuffer->BindCudaBuffer(), dstDesc,
857 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
858 (
const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
859 (
const int *)patchTable->GetVaryingPatchIndexBuffer(),
860 (
const PatchParam *)patchTable->GetPatchParamBuffer());
903 template <
typename SRC_BUFFER,
typename DST_BUFFER,
904 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
911 PATCHCOORD_BUFFER *patchCoords,
912 PATCH_TABLE *patchTable,
914 void * deviceContext = NULL) {
919 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
920 dstBuffer->BindCudaBuffer(), dstDesc,
921 duBuffer->BindCudaBuffer(), duDesc,
922 dvBuffer->BindCudaBuffer(), dvDesc,
924 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
925 (
const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
926 (
const int *)patchTable->GetVaryingPatchIndexBuffer(),
927 (
const PatchParam *)patchTable->GetPatchParamBuffer());
988 template <
typename SRC_BUFFER,
typename DST_BUFFER,
989 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
999 PATCHCOORD_BUFFER *patchCoords,
1000 PATCH_TABLE *patchTable,
1002 void * deviceContext = NULL) {
1005 (void)deviceContext;
1007 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
1008 dstBuffer->BindCudaBuffer(), dstDesc,
1009 duBuffer->BindCudaBuffer(), duDesc,
1010 dvBuffer->BindCudaBuffer(), dvDesc,
1011 duuBuffer->BindCudaBuffer(), duuDesc,
1012 duvBuffer->BindCudaBuffer(), duvDesc,
1013 dvvBuffer->BindCudaBuffer(), dvvDesc,
1015 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
1016 (
const PatchArray *)patchTable->GetVaryingPatchArrayBuffer(),
1017 (
const int *)patchTable->GetVaryingPatchIndexBuffer(),
1018 (
const PatchParam *)patchTable->GetPatchParamBuffer());
1051 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1052 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1057 PATCHCOORD_BUFFER *patchCoords,
1058 PATCH_TABLE *patchTable,
1061 void * deviceContext = NULL) {
1064 (void)deviceContext;
1066 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
1067 dstBuffer->BindCudaBuffer(), dstDesc,
1069 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
1070 (
const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1071 (
const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1072 (
const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
1117 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1118 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1125 PATCHCOORD_BUFFER *patchCoords,
1126 PATCH_TABLE *patchTable,
1129 void * deviceContext = NULL) {
1132 (void)deviceContext;
1134 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
1135 dstBuffer->BindCudaBuffer(), dstDesc,
1136 duBuffer->BindCudaBuffer(), duDesc,
1137 dvBuffer->BindCudaBuffer(), dvDesc,
1139 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
1140 (
const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1141 (
const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1142 (
const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
1205 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1206 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1216 PATCHCOORD_BUFFER *patchCoords,
1217 PATCH_TABLE *patchTable,
1220 void * deviceContext = NULL) {
1223 (void)deviceContext;
1225 return EvalPatches(srcBuffer->BindCudaBuffer(), srcDesc,
1226 dstBuffer->BindCudaBuffer(), dstDesc,
1227 duBuffer->BindCudaBuffer(), duDesc,
1228 dvBuffer->BindCudaBuffer(), dvDesc,
1229 duuBuffer->BindCudaBuffer(), duuDesc,
1230 duvBuffer->BindCudaBuffer(), duvDesc,
1231 dvvBuffer->BindCudaBuffer(), dvvDesc,
1233 (
const PatchCoord *)patchCoords->BindCudaBuffer(),
1234 (
const PatchArray *)patchTable->GetFVarPatchArrayBuffer(fvarChannel),
1235 (
const int *)patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1236 (
const PatchParam *)patchTable->GetFVarPatchParamBuffer(fvarChannel));
1251using namespace OPENSUBDIV_VERSION;
Stencil table class wrapping the template for compatibility.
Limit stencil table class wrapping the template for compatibility.
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
void * GetDuvWeightsBuffer() const
void * GetDuWeightsBuffer() const
void * GetDvvWeightsBuffer() const
void * GetOffsetsBuffer() const
CudaStencilTable(Far::LimitStencilTable const *limitStencilTable)
void * GetDvWeightsBuffer() const
int GetNumStencils() const
void * GetDuuWeightsBuffer() const
void * GetWeightsBuffer() const
static CudaStencilTable * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
void * GetSizesBuffer() const
void * GetIndicesBuffer() const
CudaStencilTable(Far::StencilTable const *stencilTable)
static CudaStencilTable * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
static bool EvalPatches(const float *src, BufferDescriptor const &srcDesc, float *dst, BufferDescriptor const &dstDesc, int numPatchCoords, const PatchCoord *patchCoords, const PatchArray *patchArrays, const int *patchIndices, const PatchParam *patchParams)
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, CudaEvaluator const *instance, 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, CudaEvaluator const *instance, 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, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, const CudaEvaluator *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, const int *sizes, const int *offsets, const int *indices, const float *weights, int start, int end)
Static eval stencils function which takes raw cuda buffers 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, CudaEvaluator const *instance, 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 CudaEvaluator *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, 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 *patchIndices, PatchParam const *patchParams)
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, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, CudaEvaluator const *instance, 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, STENCIL_TABLE const *stencilTable, const void *instance=NULL, void *deviceContext=NULL)
Generic static compute function. This function has a same signature as other device kernels have so t...
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 cuda 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 cuda pointers for input and output.
static void Synchronize(void *deviceContext=NULL)
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 *patchIndices, PatchParam const *patchParams)
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, 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, CudaEvaluator const *instance, 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, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CudaEvaluator const *instance, 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, 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, CudaEvaluator const *instance, 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, CudaEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function with derivatives. This function has a same signature as other device kern...
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, CudaEvaluator const *instance, 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.