8#ifndef OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
9#define OPENSUBDIV3_OSD_GL_COMPUTE_EVALUATOR_H
11#include "../version.h"
17namespace OPENSUBDIV_VERSION {
22 class LimitStencilTable;
35 using ID =
unsigned int;
38 void *deviceContext = NULL) {
44 void *deviceContext = NULL) {
82 using ID =
unsigned int;
89 void * deviceContext = NULL) {
90 return Create(srcDesc, dstDesc, duDesc, dvDesc,
104 void * deviceContext = NULL) {
107 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc,
108 duuDesc, duvDesc, dvvDesc))
153 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
157 STENCIL_TABLE
const *stencilTable,
159 void * deviceContext = NULL) {
168 instance =
Create(srcDesc, dstDesc,
221 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
227 STENCIL_TABLE
const *stencilTable,
229 void * deviceContext = NULL) {
240 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
311 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
320 STENCIL_TABLE
const *stencilTable,
322 void * deviceContext = NULL) {
336 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc,
337 duuDesc, duvDesc, dvvDesc);
371 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
375 STENCIL_TABLE
const *stencilTable)
const {
377 dstBuffer->BindVBO(), dstDesc,
380 stencilTable->GetSizesBuffer(),
381 stencilTable->GetOffsetsBuffer(),
382 stencilTable->GetIndicesBuffer(),
383 stencilTable->GetWeightsBuffer(),
387 stencilTable->GetNumStencils());
419 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
425 STENCIL_TABLE
const *stencilTable)
const {
427 dstBuffer->BindVBO(), dstDesc,
428 duBuffer->BindVBO(), duDesc,
429 dvBuffer->BindVBO(), dvDesc,
430 stencilTable->GetSizesBuffer(),
431 stencilTable->GetOffsetsBuffer(),
432 stencilTable->GetIndicesBuffer(),
433 stencilTable->GetWeightsBuffer(),
434 stencilTable->GetDuWeightsBuffer(),
435 stencilTable->GetDvWeightsBuffer(),
437 stencilTable->GetNumStencils());
487 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
496 STENCIL_TABLE
const *stencilTable)
const {
498 dstBuffer->BindVBO(), dstDesc,
499 duBuffer->BindVBO(), duDesc,
500 dvBuffer->BindVBO(), dvDesc,
501 duuBuffer->BindVBO(), duuDesc,
502 duvBuffer->BindVBO(), duvDesc,
503 dvvBuffer->BindVBO(), dvvDesc,
504 stencilTable->GetSizesBuffer(),
505 stencilTable->GetOffsetsBuffer(),
506 stencilTable->GetIndicesBuffer(),
507 stencilTable->GetWeightsBuffer(),
508 stencilTable->GetDuWeightsBuffer(),
509 stencilTable->GetDvWeightsBuffer(),
510 stencilTable->GetDuuWeightsBuffer(),
511 stencilTable->GetDuvWeightsBuffer(),
512 stencilTable->GetDvvWeightsBuffer(),
514 stencilTable->GetNumStencils());
675 template <
typename SRC_BUFFER,
typename DST_BUFFER,
676 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
681 PATCHCOORD_BUFFER *patchCoords,
682 PATCH_TABLE *patchTable,
684 void * deviceContext = NULL) {
689 numPatchCoords, patchCoords,
694 instance =
Create(srcDesc, dstDesc,
700 numPatchCoords, patchCoords,
753 template <
typename SRC_BUFFER,
typename DST_BUFFER,
754 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
761 PATCHCOORD_BUFFER *patchCoords,
762 PATCH_TABLE *patchTable,
764 void * deviceContext = NULL) {
771 numPatchCoords, patchCoords,
776 instance =
Create(srcDesc, dstDesc,
783 numPatchCoords, patchCoords,
854 template <
typename SRC_BUFFER,
typename DST_BUFFER,
855 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
865 PATCHCOORD_BUFFER *patchCoords,
866 PATCH_TABLE *patchTable,
868 void * deviceContext = NULL) {
878 numPatchCoords, patchCoords,
883 instance =
Create(srcDesc, dstDesc,
885 duuDesc, duvDesc, dvvDesc);
894 numPatchCoords, patchCoords,
927 template <
typename SRC_BUFFER,
typename DST_BUFFER,
928 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
933 PATCHCOORD_BUFFER *patchCoords,
934 PATCH_TABLE *patchTable)
const {
937 dstBuffer->BindVBO(), dstDesc,
941 patchCoords->BindVBO(),
942 patchTable->GetPatchArrays(),
943 patchTable->GetPatchIndexBuffer(),
944 patchTable->GetPatchParamBuffer());
981 template <
typename SRC_BUFFER,
typename DST_BUFFER,
982 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
989 PATCHCOORD_BUFFER *patchCoords,
990 PATCH_TABLE *patchTable)
const {
993 dstBuffer->BindVBO(), dstDesc,
994 duBuffer->BindVBO(), duDesc,
995 dvBuffer->BindVBO(), dvDesc,
997 patchCoords->BindVBO(),
998 patchTable->GetPatchArrays(),
999 patchTable->GetPatchIndexBuffer(),
1000 patchTable->GetPatchParamBuffer());
1055 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1056 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1066 PATCHCOORD_BUFFER *patchCoords,
1067 PATCH_TABLE *patchTable)
const {
1070 dstBuffer->BindVBO(), dstDesc,
1071 duBuffer->BindVBO(), duDesc,
1072 dvBuffer->BindVBO(), dvDesc,
1073 duuBuffer->BindVBO(), duuDesc,
1074 duvBuffer->BindVBO(), duvDesc,
1075 dvvBuffer->BindVBO(), dvvDesc,
1077 patchCoords->BindVBO(),
1078 patchTable->GetPatchArrays(),
1079 patchTable->GetPatchIndexBuffer(),
1080 patchTable->GetPatchParamBuffer());
1088 ID patchCoordsBuffer,
1090 ID patchIndexBuffer,
1091 ID patchParamsBuffer)
const;
1101 ID patchCoordsBuffer,
1103 ID patchIndexBuffer,
1104 ID patchParamsBuffer)
const;
1138 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1139 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1144 PATCHCOORD_BUFFER *patchCoords,
1145 PATCH_TABLE *patchTable,
1147 void * deviceContext = NULL) {
1153 numPatchCoords, patchCoords,
1157 (void)deviceContext;
1158 instance =
Create(srcDesc, dstDesc,
1165 numPatchCoords, patchCoords,
1198 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1199 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1204 PATCHCOORD_BUFFER *patchCoords,
1205 PATCH_TABLE *patchTable)
const {
1208 dstBuffer->BindVBO(), dstDesc,
1212 patchCoords->BindVBO(),
1213 patchTable->GetVaryingPatchArrays(),
1214 patchTable->GetVaryingPatchIndexBuffer(),
1215 patchTable->GetPatchParamBuffer());
1262 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1263 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1270 PATCHCOORD_BUFFER *patchCoords,
1271 PATCH_TABLE *patchTable,
1273 void * deviceContext = NULL) {
1281 numPatchCoords, patchCoords,
1285 (void)deviceContext;
1286 instance =
Create(srcDesc, dstDesc,
1294 numPatchCoords, patchCoords,
1339 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1340 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1347 PATCHCOORD_BUFFER *patchCoords,
1348 PATCH_TABLE *patchTable)
const {
1351 dstBuffer->BindVBO(), dstDesc,
1352 duBuffer->BindVBO(), duDesc,
1353 dvBuffer->BindVBO(), dvDesc,
1355 patchCoords->BindVBO(),
1356 patchTable->GetVaryingPatchArrays(),
1357 patchTable->GetVaryingPatchIndexBuffer(),
1358 patchTable->GetPatchParamBuffer());
1423 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1424 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1434 PATCHCOORD_BUFFER *patchCoords,
1435 PATCH_TABLE *patchTable,
1437 void * deviceContext = NULL) {
1448 numPatchCoords, patchCoords,
1452 (void)deviceContext;
1453 instance =
Create(srcDesc, dstDesc,
1455 duuDesc, duvDesc, dvvDesc);
1465 numPatchCoords, patchCoords,
1528 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1529 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1539 PATCHCOORD_BUFFER *patchCoords,
1540 PATCH_TABLE *patchTable)
const {
1543 dstBuffer->BindVBO(), dstDesc,
1544 duBuffer->BindVBO(), duDesc,
1545 dvBuffer->BindVBO(), dvDesc,
1546 duuBuffer->BindVBO(), duuDesc,
1547 duvBuffer->BindVBO(), duvDesc,
1548 dvvBuffer->BindVBO(), dvvDesc,
1550 patchCoords->BindVBO(),
1551 patchTable->GetVaryingPatchArrays(),
1552 patchTable->GetVaryingPatchIndexBuffer(),
1553 patchTable->GetPatchParamBuffer());
1590 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1591 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1596 PATCHCOORD_BUFFER *patchCoords,
1597 PATCH_TABLE *patchTable,
1600 void * deviceContext = NULL) {
1606 numPatchCoords, patchCoords,
1607 patchTable, fvarChannel);
1610 (void)deviceContext;
1611 instance =
Create(srcDesc, dstDesc,
1618 numPatchCoords, patchCoords,
1619 patchTable, fvarChannel);
1653 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1654 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1659 PATCHCOORD_BUFFER *patchCoords,
1660 PATCH_TABLE *patchTable,
1661 int fvarChannel = 0)
const {
1664 dstBuffer->BindVBO(), dstDesc,
1668 patchCoords->BindVBO(),
1669 patchTable->GetFVarPatchArrays(fvarChannel),
1670 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1671 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1720 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1721 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1728 PATCHCOORD_BUFFER *patchCoords,
1729 PATCH_TABLE *patchTable,
1732 void * deviceContext = NULL) {
1740 numPatchCoords, patchCoords,
1741 patchTable, fvarChannel);
1744 (void)deviceContext;
1745 instance =
Create(srcDesc, dstDesc,
1753 numPatchCoords, patchCoords,
1754 patchTable, fvarChannel);
1800 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1801 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1808 PATCHCOORD_BUFFER *patchCoords,
1809 PATCH_TABLE *patchTable,
1810 int fvarChannel = 0)
const {
1813 dstBuffer->BindVBO(), dstDesc,
1814 duBuffer->BindVBO(), duDesc,
1815 dvBuffer->BindVBO(), dvDesc,
1817 patchCoords->BindVBO(),
1818 patchTable->GetFVarPatchArrays(fvarChannel),
1819 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1820 patchTable->GetFVarPatchParamBuffer(fvarChannel));
1887 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1888 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1898 PATCHCOORD_BUFFER *patchCoords,
1899 PATCH_TABLE *patchTable,
1902 void * deviceContext = NULL) {
1913 numPatchCoords, patchCoords,
1914 patchTable, fvarChannel);
1917 (void)deviceContext;
1918 instance =
Create(srcDesc, dstDesc,
1920 duuDesc, duvDesc, dvvDesc);
1930 numPatchCoords, patchCoords,
1931 patchTable, fvarChannel);
1995 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1996 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
2006 PATCHCOORD_BUFFER *patchCoords,
2007 PATCH_TABLE *patchTable,
2008 int fvarChannel = 0)
const {
2011 dstBuffer->BindVBO(), dstDesc,
2012 duBuffer->BindVBO(), duDesc,
2013 dvBuffer->BindVBO(), dvDesc,
2014 duuBuffer->BindVBO(), duuDesc,
2015 duvBuffer->BindVBO(), duvDesc,
2016 dvvBuffer->BindVBO(), dvvDesc,
2018 patchCoords->BindVBO(),
2019 patchTable->GetFVarPatchArrays(fvarChannel),
2020 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
2021 patchTable->GetFVarPatchParamBuffer(fvarChannel));
2044 struct _StencilKernel {
2058 ID uniformSrcOffset;
2059 ID uniformDstOffset;
2067 struct _PatchKernel {
2079 ID uniformSrcOffset;
2080 ID uniformDstOffset;
2081 ID uniformPatchArray;
2090 ID _patchArraysSSBO;
2096using namespace OPENSUBDIV_VERSION;
std::vector< PatchArray > PatchArrayVector
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....
GL stencil table (Shader Storage buffer)
ID GetSizesBuffer() const
ID GetIndicesBuffer() const
GLStencilTableSSBO(Far::LimitStencilTable const *limitStencilTable)
ID GetDuuWeightsBuffer() const
ID GetOffsetsBuffer() const
int GetNumStencils() const
ID GetDuWeightsBuffer() const
GLStencilTableSSBO(Far::StencilTable const *stencilTable)
static GLStencilTableSSBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
ID GetWeightsBuffer() const
ID GetDvWeightsBuffer() const
static GLStencilTableSSBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
ID GetDuvWeightsBuffer() const
ID GetDvvWeightsBuffer() const
bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
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, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
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
Generic stencil function.
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLComputeEvaluator 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, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
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
Generic stencil function.
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, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
~GLComputeEvaluator()
Destructor. note that the GL context must be made current.
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) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
bool EvalStencils(ID srcBuffer, BufferDescriptor const &srcDesc, ID dstBuffer, BufferDescriptor const &dstDesc, ID duBuffer, BufferDescriptor const &duDesc, ID dvBuffer, BufferDescriptor const &dvDesc, ID sizesBuffer, ID offsetsBuffer, ID indicesBuffer, ID weightsBuffer, ID duWeightsBuffer, ID dvWeightsBuffer, int start, int end) const
Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
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, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
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, GLComputeEvaluator 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, GLComputeEvaluator 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, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
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) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
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=0) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatches(ID srcBuffer, BufferDescriptor const &srcDesc, ID dstBuffer, BufferDescriptor const &dstDesc, ID duBuffer, BufferDescriptor const &duDesc, ID dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, ID patchCoordsBuffer, const PatchArrayVector &patchArrays, ID patchIndexBuffer, ID patchParamsBuffer) const
bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatches(ID srcBuffer, BufferDescriptor const &srcDesc, ID dstBuffer, BufferDescriptor const &dstDesc, ID duBuffer, BufferDescriptor const &duDesc, ID dvBuffer, BufferDescriptor const &dvDesc, ID duuBuffer, BufferDescriptor const &duuDesc, ID duvBuffer, BufferDescriptor const &duvDesc, ID dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, ID patchCoordsBuffer, const PatchArrayVector &patchArrays, ID patchIndexBuffer, ID patchParamsBuffer) const
bool EvalStencils(ID srcBuffer, BufferDescriptor const &srcDesc, ID dstBuffer, BufferDescriptor const &dstDesc, ID duBuffer, BufferDescriptor const &duDesc, ID dvBuffer, BufferDescriptor const &dvDesc, ID duuBuffer, BufferDescriptor const &duuDesc, ID duvBuffer, BufferDescriptor const &duvDesc, ID dvvBuffer, BufferDescriptor const &dvvDesc, ID sizesBuffer, ID offsetsBuffer, ID indicesBuffer, ID weightsBuffer, ID duWeightsBuffer, ID dvWeightsBuffer, ID duuWeightsBuffer, ID duvWeightsBuffer, ID dvvWeightsBuffer, int start, int end) const
Dispatch the GLSL compute kernel on GPU asynchronously returns false if the kernel hasn't been compil...
GLComputeEvaluator()
Constructor.
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) const
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, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
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=0) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, 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, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
static void Synchronize(void *deviceContext)
Wait the dispatched kernel finishes.
bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc=BufferDescriptor(), BufferDescriptor const &dvDesc=BufferDescriptor(), BufferDescriptor const &duuDesc=BufferDescriptor(), BufferDescriptor const &duvDesc=BufferDescriptor(), BufferDescriptor const &dvvDesc=BufferDescriptor())
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) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static GLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void *deviceContext=NULL)
bool EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0) const
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, GLComputeEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...