8#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
9#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
11#include "../version.h"
17namespace OPENSUBDIV_VERSION {
22 class LimitStencilTable;
36 using ID =
unsigned int;
46 void *deviceContext = NULL) {
84 using ID =
unsigned int;
89 template <
typename DEVICE_CONTEXT>
94 DEVICE_CONTEXT deviceContext) {
95 bool interleavedDerivativeBuffers = deviceContext
96 ? deviceContext->AreInterleavedDerivativeBuffers()
98 return Create(srcDesc, dstDesc, duDesc, dvDesc,
99 interleavedDerivativeBuffers);
107 void * deviceContext) {
109 return Create(srcDesc, dstDesc, duDesc, dvDesc);
116 bool interleavedDerivativeBuffers =
false) {
118 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc))
125 template <
typename DEVICE_CONTEXT>
133 DEVICE_CONTEXT deviceContext) {
134 bool interleavedDerivativeBuffers = deviceContext
135 ? deviceContext->AreInterleavedDerivativeBuffers()
137 return Create(srcDesc, dstDesc, duDesc, dvDesc,
138 duuDesc, duvDesc, dvvDesc,
139 interleavedDerivativeBuffers);
150 void * deviceContext) {
152 return Create(srcDesc, dstDesc, duDesc, dvDesc,
153 duuDesc, duvDesc, dvvDesc);
163 bool interleavedDerivativeBuffers =
false) {
165 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc,
166 duuDesc, duvDesc, dvvDesc))
223 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
227 STENCIL_TABLE
const *stencilTable,
229 void * deviceContext = NULL) {
238 instance =
Create(srcDesc, dstDesc,
291 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
297 STENCIL_TABLE
const *stencilTable,
299 void * deviceContext = NULL) {
310 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
381 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
390 STENCIL_TABLE
const *stencilTable,
392 void * deviceContext = NULL) {
406 instance =
Create(srcDesc, dstDesc,
408 duuDesc, duvDesc, dvvDesc);
442 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
446 STENCIL_TABLE
const *stencilTable)
const {
449 dstBuffer->BindVBO(), dstDesc,
452 stencilTable->GetSizesTexture(),
453 stencilTable->GetOffsetsTexture(),
454 stencilTable->GetIndicesTexture(),
455 stencilTable->GetWeightsTexture(),
459 stencilTable->GetNumStencils());
491 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
497 STENCIL_TABLE
const *stencilTable)
const {
500 dstBuffer->BindVBO(), dstDesc,
501 duBuffer->BindVBO(), duDesc,
502 dvBuffer->BindVBO(), dvDesc,
503 stencilTable->GetSizesTexture(),
504 stencilTable->GetOffsetsTexture(),
505 stencilTable->GetIndicesTexture(),
506 stencilTable->GetWeightsTexture(),
507 stencilTable->GetDuWeightsTexture(),
508 stencilTable->GetDvWeightsTexture(),
510 stencilTable->GetNumStencils());
560 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
569 STENCIL_TABLE
const *stencilTable)
const {
572 dstBuffer->BindVBO(), dstDesc,
573 duBuffer->BindVBO(), duDesc,
574 dvBuffer->BindVBO(), dvDesc,
575 duuBuffer->BindVBO(), duuDesc,
576 duvBuffer->BindVBO(), duvDesc,
577 dvvBuffer->BindVBO(), dvvDesc,
578 stencilTable->GetSizesTexture(),
579 stencilTable->GetOffsetsTexture(),
580 stencilTable->GetIndicesTexture(),
581 stencilTable->GetWeightsTexture(),
582 stencilTable->GetDuWeightsTexture(),
583 stencilTable->GetDvWeightsTexture(),
584 stencilTable->GetDuuWeightsTexture(),
585 stencilTable->GetDuvWeightsTexture(),
586 stencilTable->GetDvvWeightsTexture(),
588 stencilTable->GetNumStencils());
749 template <
typename SRC_BUFFER,
typename DST_BUFFER,
750 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
755 PATCHCOORD_BUFFER *patchCoords,
756 PATCH_TABLE *patchTable,
758 void * deviceContext = NULL) {
763 numPatchCoords, patchCoords,
768 instance =
Create(srcDesc, dstDesc,
774 numPatchCoords, patchCoords,
827 template <
typename SRC_BUFFER,
typename DST_BUFFER,
828 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
835 PATCHCOORD_BUFFER *patchCoords,
836 PATCH_TABLE *patchTable,
838 void * deviceContext = NULL) {
845 numPatchCoords, patchCoords,
850 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
856 numPatchCoords, patchCoords,
927 template <
typename SRC_BUFFER,
typename DST_BUFFER,
928 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
938 PATCHCOORD_BUFFER *patchCoords,
939 PATCH_TABLE *patchTable,
941 void * deviceContext = NULL) {
951 numPatchCoords, patchCoords,
956 instance =
Create(srcDesc, dstDesc,
958 duuDesc, duvDesc, dvvDesc);
967 numPatchCoords, patchCoords,
1000 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1001 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1006 PATCHCOORD_BUFFER *patchCoords,
1007 PATCH_TABLE *patchTable)
const {
1010 dstBuffer->BindVBO(), dstDesc,
1014 patchCoords->BindVBO(),
1015 patchTable->GetPatchArrays(),
1016 patchTable->GetPatchIndexTextureBuffer(),
1017 patchTable->GetPatchParamTextureBuffer());
1054 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1055 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1062 PATCHCOORD_BUFFER *patchCoords,
1063 PATCH_TABLE *patchTable)
const {
1066 dstBuffer->BindVBO(), dstDesc,
1067 duBuffer->BindVBO(), duDesc,
1068 dvBuffer->BindVBO(), dvDesc,
1070 patchCoords->BindVBO(),
1071 patchTable->GetPatchArrays(),
1072 patchTable->GetPatchIndexTextureBuffer(),
1073 patchTable->GetPatchParamTextureBuffer());
1128 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1129 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1139 PATCHCOORD_BUFFER *patchCoords,
1140 PATCH_TABLE *patchTable)
const {
1143 dstBuffer->BindVBO(), dstDesc,
1144 duBuffer->BindVBO(), duDesc,
1145 dvBuffer->BindVBO(), dvDesc,
1146 duuBuffer->BindVBO(), duuDesc,
1147 duvBuffer->BindVBO(), duvDesc,
1148 dvvBuffer->BindVBO(), dvvDesc,
1150 patchCoords->BindVBO(),
1151 patchTable->GetPatchArrays(),
1152 patchTable->GetPatchIndexTextureBuffer(),
1153 patchTable->GetPatchParamTextureBuffer());
1161 ID patchCoordsBuffer,
1163 ID patchIndexBuffer,
1164 ID patchParamsBuffer)
const;
1174 ID patchCoordsBuffer,
1176 ID patchIndexBuffer,
1177 ID patchParamsBuffer)
const;
1211 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1212 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1217 PATCHCOORD_BUFFER *patchCoords,
1218 PATCH_TABLE *patchTable,
1220 void * deviceContext = NULL) {
1226 numPatchCoords, patchCoords,
1230 (void)deviceContext;
1231 instance =
Create(srcDesc, dstDesc,
1238 numPatchCoords, patchCoords,
1271 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1272 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1277 PATCHCOORD_BUFFER *patchCoords,
1278 PATCH_TABLE *patchTable)
const {
1281 dstBuffer->BindVBO(), dstDesc,
1285 patchCoords->BindVBO(),
1286 patchTable->GetVaryingPatchArrays(),
1287 patchTable->GetVaryingPatchIndexTextureBuffer(),
1288 patchTable->GetPatchParamTextureBuffer());
1335 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1336 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1343 PATCHCOORD_BUFFER *patchCoords,
1344 PATCH_TABLE *patchTable,
1346 void * deviceContext = NULL) {
1354 numPatchCoords, patchCoords,
1358 (void)deviceContext;
1359 instance =
Create(srcDesc, dstDesc,
1367 numPatchCoords, patchCoords,
1412 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1413 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1420 PATCHCOORD_BUFFER *patchCoords,
1421 PATCH_TABLE *patchTable)
const {
1424 dstBuffer->BindVBO(), dstDesc,
1425 duBuffer->BindVBO(), duDesc,
1426 dvBuffer->BindVBO(), dvDesc,
1428 patchCoords->BindVBO(),
1429 patchTable->GetVaryingPatchArrays(),
1430 patchTable->GetVaryingPatchIndexTextureBuffer(),
1431 patchTable->GetPatchParamTextureBuffer());
1496 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1497 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1507 PATCHCOORD_BUFFER *patchCoords,
1508 PATCH_TABLE *patchTable,
1510 void * deviceContext = NULL) {
1521 numPatchCoords, patchCoords,
1525 (void)deviceContext;
1526 instance =
Create(srcDesc, dstDesc,
1528 duuDesc, duvDesc, dvvDesc);
1538 numPatchCoords, patchCoords,
1601 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1602 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1612 PATCHCOORD_BUFFER *patchCoords,
1613 PATCH_TABLE *patchTable)
const {
1616 dstBuffer->BindVBO(), dstDesc,
1617 duBuffer->BindVBO(), duDesc,
1618 dvBuffer->BindVBO(), dvDesc,
1619 duuBuffer->BindVBO(), duuDesc,
1620 duvBuffer->BindVBO(), duvDesc,
1621 dvvBuffer->BindVBO(), dvvDesc,
1623 patchCoords->BindVBO(),
1624 patchTable->GetVaryingPatchArrays(),
1625 patchTable->GetVaryingPatchIndexTextureBuffer(),
1626 patchTable->GetPatchParamTextureBuffer());
1663 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1664 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1669 PATCHCOORD_BUFFER *patchCoords,
1670 PATCH_TABLE *patchTable,
1673 void * deviceContext = NULL) {
1679 numPatchCoords, patchCoords,
1680 patchTable, fvarChannel);
1683 (void)deviceContext;
1684 instance =
Create(srcDesc, dstDesc,
1691 numPatchCoords, patchCoords,
1692 patchTable, fvarChannel);
1726 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1727 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1732 PATCHCOORD_BUFFER *patchCoords,
1733 PATCH_TABLE *patchTable,
1734 int fvarChannel = 0)
const {
1737 dstBuffer->BindVBO(), dstDesc,
1741 patchCoords->BindVBO(),
1742 patchTable->GetFVarPatchArrays(fvarChannel),
1743 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
1744 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
1793 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1794 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1801 PATCHCOORD_BUFFER *patchCoords,
1802 PATCH_TABLE *patchTable,
1805 void * deviceContext = NULL) {
1813 numPatchCoords, patchCoords,
1814 patchTable, fvarChannel);
1817 (void)deviceContext;
1818 instance =
Create(srcDesc, dstDesc,
1826 numPatchCoords, patchCoords,
1827 patchTable, fvarChannel);
1873 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1874 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1881 PATCHCOORD_BUFFER *patchCoords,
1882 PATCH_TABLE *patchTable,
1883 int fvarChannel = 0)
const {
1886 dstBuffer->BindVBO(), dstDesc,
1887 duBuffer->BindVBO(), duDesc,
1888 dvBuffer->BindVBO(), dvDesc,
1890 patchCoords->BindVBO(),
1891 patchTable->GetFVarPatchArrays(fvarChannel),
1892 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
1893 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
1960 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1961 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1971 PATCHCOORD_BUFFER *patchCoords,
1972 PATCH_TABLE *patchTable,
1975 void * deviceContext = NULL) {
1986 numPatchCoords, patchCoords,
1987 patchTable, fvarChannel);
1990 (void)deviceContext;
1991 instance =
Create(srcDesc, dstDesc,
1993 duuDesc, duvDesc, dvvDesc);
2003 numPatchCoords, patchCoords,
2004 patchTable, fvarChannel);
2068 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2069 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
2079 PATCHCOORD_BUFFER *patchCoords,
2080 PATCH_TABLE *patchTable,
2081 int fvarChannel = 0)
const {
2084 dstBuffer->BindVBO(), dstDesc,
2085 duBuffer->BindVBO(), duDesc,
2086 dvBuffer->BindVBO(), dvDesc,
2087 duuBuffer->BindVBO(), duuDesc,
2088 duvBuffer->BindVBO(), duvDesc,
2089 dvvBuffer->BindVBO(), dvvDesc,
2091 patchCoords->BindVBO(),
2092 patchTable->GetFVarPatchArrays(fvarChannel),
2093 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
2094 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
2117 ID _srcBufferTexture;
2119 bool _interleavedDerivativeBuffers;
2121 struct _StencilKernel {
2131 bool interleavedDerivativeBuffers);
2149 struct _PatchKernel {
2159 bool interleavedDerivativeBuffers);
2164 LOCATION uniformPatchArraysUBOBinding;
2174using 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 TextureBuffer stencil table.
ID GetDuWeightsTexture() const
static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
int GetNumStencils() const
ID GetIndicesTexture() const
ID GetDuvWeightsTexture() const
ID GetOffsetsTexture() const
ID GetSizesTexture() const
ID GetWeightsTexture() const
GLStencilTableTBO(Far::StencilTable const *stencilTable)
GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)
ID GetDvWeightsTexture() const
static GLStencilTableTBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
ID GetDvvWeightsTexture() const
ID GetDuuWeightsTexture() 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 GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, bool interleavedDerivativeBuffers=false)
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.
GLXFBEvaluator(bool interleavedDerivativeBuffers=false)
Constructor.
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 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, GLXFBEvaluator const *instance, void *deviceContext=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
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 XFB kernel on on GPU asynchronously returns false if the kernel hasn't been compile...
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, bool interleavedDerivativeBuffers=false)
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, void *deviceContext)
Specialization to allow creation without a device context.
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, GLXFBEvaluator 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, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator 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, GLXFBEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, DEVICE_CONTEXT deviceContext)
Generic creator template.
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext)
Generic creator template.
static void Synchronize(void *kernel)
Wait the dispatched kernel finishes.
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator 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 ...
static bool EvalPatches(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, GLXFBEvaluator const *instance, void *deviceContext=NULL)
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
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, GLXFBEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
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
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, GLXFBEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
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 XFB kernel on on GPU asynchronously returns false if the kernel hasn't been compile...
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...
bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable) const
Generic stencil function.
static GLXFBEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, void *deviceContext)
Specialization to allow creation without a device context.
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 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, GLXFBEvaluator 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, GLXFBEvaluator 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, GLXFBEvaluator const *instance, void *deviceContext=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
~GLXFBEvaluator()
Destructor. note that the GL context must be made current.
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 ...
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 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, GLXFBEvaluator const *instance, void *deviceContext=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...