25#ifndef OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
26#define OPENSUBDIV3_OSD_GL_XFB_EVALUATOR_H
28#include "../version.h"
30#include "../osd/opengl.h"
31#include "../osd/types.h"
32#include "../osd/bufferDescriptor.h"
35namespace OPENSUBDIV_VERSION {
40 class LimitStencilTable;
62 void *deviceContext = NULL) {
103 template <
typename DEVICE_CONTEXT>
108 DEVICE_CONTEXT deviceContext) {
109 bool interleavedDerivativeBuffers = deviceContext
110 ? deviceContext->AreInterleavedDerivativeBuffers()
112 return Create(srcDesc, dstDesc, duDesc, dvDesc,
113 interleavedDerivativeBuffers);
121 void * deviceContext) {
123 return Create(srcDesc, dstDesc, duDesc, dvDesc);
130 bool interleavedDerivativeBuffers =
false) {
132 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc))
139 template <
typename DEVICE_CONTEXT>
147 DEVICE_CONTEXT deviceContext) {
148 bool interleavedDerivativeBuffers = deviceContext
149 ? deviceContext->AreInterleavedDerivativeBuffers()
151 return Create(srcDesc, dstDesc, duDesc, dvDesc,
152 duuDesc, duvDesc, dvvDesc,
153 interleavedDerivativeBuffers);
164 void * deviceContext) {
166 return Create(srcDesc, dstDesc, duDesc, dvDesc,
167 duuDesc, duvDesc, dvvDesc);
177 bool interleavedDerivativeBuffers =
false) {
179 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc,
180 duuDesc, duvDesc, dvvDesc))
237 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
241 STENCIL_TABLE
const *stencilTable,
243 void * deviceContext = NULL) {
252 instance =
Create(srcDesc, dstDesc,
305 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
311 STENCIL_TABLE
const *stencilTable,
313 void * deviceContext = NULL) {
324 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
395 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
404 STENCIL_TABLE
const *stencilTable,
406 void * deviceContext = NULL) {
420 instance =
Create(srcDesc, dstDesc,
422 duuDesc, duvDesc, dvvDesc);
456 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
460 STENCIL_TABLE
const *stencilTable)
const {
463 dstBuffer->BindVBO(), dstDesc,
466 stencilTable->GetSizesTexture(),
467 stencilTable->GetOffsetsTexture(),
468 stencilTable->GetIndicesTexture(),
469 stencilTable->GetWeightsTexture(),
473 stencilTable->GetNumStencils());
505 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
511 STENCIL_TABLE
const *stencilTable)
const {
514 dstBuffer->BindVBO(), dstDesc,
515 duBuffer->BindVBO(), duDesc,
516 dvBuffer->BindVBO(), dvDesc,
517 stencilTable->GetSizesTexture(),
518 stencilTable->GetOffsetsTexture(),
519 stencilTable->GetIndicesTexture(),
520 stencilTable->GetWeightsTexture(),
521 stencilTable->GetDuWeightsTexture(),
522 stencilTable->GetDvWeightsTexture(),
524 stencilTable->GetNumStencils());
574 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
583 STENCIL_TABLE
const *stencilTable)
const {
586 dstBuffer->BindVBO(), dstDesc,
587 duBuffer->BindVBO(), duDesc,
588 dvBuffer->BindVBO(), dvDesc,
589 duuBuffer->BindVBO(), duuDesc,
590 duvBuffer->BindVBO(), duvDesc,
591 dvvBuffer->BindVBO(), dvvDesc,
592 stencilTable->GetSizesTexture(),
593 stencilTable->GetOffsetsTexture(),
594 stencilTable->GetIndicesTexture(),
595 stencilTable->GetWeightsTexture(),
596 stencilTable->GetDuWeightsTexture(),
597 stencilTable->GetDvWeightsTexture(),
598 stencilTable->GetDuuWeightsTexture(),
599 stencilTable->GetDuvWeightsTexture(),
600 stencilTable->GetDvvWeightsTexture(),
602 stencilTable->GetNumStencils());
645 GLuint offsetsBuffer,
646 GLuint indicesBuffer,
647 GLuint weightsBuffer,
648 GLuint duWeightsBuffer,
649 GLuint dvWeightsBuffer,
714 GLuint offsetsBuffer,
715 GLuint indicesBuffer,
716 GLuint weightsBuffer,
717 GLuint duWeightsBuffer,
718 GLuint dvWeightsBuffer,
719 GLuint duuWeightsBuffer,
720 GLuint duvWeightsBuffer,
721 GLuint dvvWeightsBuffer,
763 template <
typename SRC_BUFFER,
typename DST_BUFFER,
764 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
769 PATCHCOORD_BUFFER *patchCoords,
770 PATCH_TABLE *patchTable,
772 void * deviceContext = NULL) {
777 numPatchCoords, patchCoords,
782 instance =
Create(srcDesc, dstDesc,
788 numPatchCoords, patchCoords,
841 template <
typename SRC_BUFFER,
typename DST_BUFFER,
842 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
849 PATCHCOORD_BUFFER *patchCoords,
850 PATCH_TABLE *patchTable,
852 void * deviceContext = NULL) {
859 numPatchCoords, patchCoords,
864 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc);
870 numPatchCoords, patchCoords,
941 template <
typename SRC_BUFFER,
typename DST_BUFFER,
942 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
952 PATCHCOORD_BUFFER *patchCoords,
953 PATCH_TABLE *patchTable,
955 void * deviceContext = NULL) {
965 numPatchCoords, patchCoords,
970 instance =
Create(srcDesc, dstDesc,
972 duuDesc, duvDesc, dvvDesc);
981 numPatchCoords, patchCoords,
1014 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1015 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1020 PATCHCOORD_BUFFER *patchCoords,
1021 PATCH_TABLE *patchTable)
const {
1024 dstBuffer->BindVBO(), dstDesc,
1028 patchCoords->BindVBO(),
1029 patchTable->GetPatchArrays(),
1030 patchTable->GetPatchIndexTextureBuffer(),
1031 patchTable->GetPatchParamTextureBuffer());
1068 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1069 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1076 PATCHCOORD_BUFFER *patchCoords,
1077 PATCH_TABLE *patchTable)
const {
1080 dstBuffer->BindVBO(), dstDesc,
1081 duBuffer->BindVBO(), duDesc,
1082 dvBuffer->BindVBO(), dvDesc,
1084 patchCoords->BindVBO(),
1085 patchTable->GetPatchArrays(),
1086 patchTable->GetPatchIndexTextureBuffer(),
1087 patchTable->GetPatchParamTextureBuffer());
1142 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1143 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1153 PATCHCOORD_BUFFER *patchCoords,
1154 PATCH_TABLE *patchTable)
const {
1157 dstBuffer->BindVBO(), dstDesc,
1158 duBuffer->BindVBO(), duDesc,
1159 dvBuffer->BindVBO(), dvDesc,
1160 duuBuffer->BindVBO(), duuDesc,
1161 duvBuffer->BindVBO(), duvDesc,
1162 dvvBuffer->BindVBO(), dvvDesc,
1164 patchCoords->BindVBO(),
1165 patchTable->GetPatchArrays(),
1166 patchTable->GetPatchIndexTextureBuffer(),
1167 patchTable->GetPatchParamTextureBuffer());
1175 GLuint patchCoordsBuffer,
1177 GLuint patchIndexBuffer,
1178 GLuint patchParamsBuffer)
const;
1188 GLuint patchCoordsBuffer,
1190 GLuint patchIndexBuffer,
1191 GLuint patchParamsBuffer)
const;
1225 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1226 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1231 PATCHCOORD_BUFFER *patchCoords,
1232 PATCH_TABLE *patchTable,
1234 void * deviceContext = NULL) {
1240 numPatchCoords, patchCoords,
1244 (void)deviceContext;
1245 instance =
Create(srcDesc, dstDesc,
1252 numPatchCoords, patchCoords,
1285 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1286 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1291 PATCHCOORD_BUFFER *patchCoords,
1292 PATCH_TABLE *patchTable)
const {
1295 dstBuffer->BindVBO(), dstDesc,
1299 patchCoords->BindVBO(),
1300 patchTable->GetVaryingPatchArrays(),
1301 patchTable->GetVaryingPatchIndexTextureBuffer(),
1302 patchTable->GetPatchParamTextureBuffer());
1349 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1350 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1357 PATCHCOORD_BUFFER *patchCoords,
1358 PATCH_TABLE *patchTable,
1360 void * deviceContext = NULL) {
1368 numPatchCoords, patchCoords,
1372 (void)deviceContext;
1373 instance =
Create(srcDesc, dstDesc,
1381 numPatchCoords, patchCoords,
1426 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1427 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1434 PATCHCOORD_BUFFER *patchCoords,
1435 PATCH_TABLE *patchTable)
const {
1438 dstBuffer->BindVBO(), dstDesc,
1439 duBuffer->BindVBO(), duDesc,
1440 dvBuffer->BindVBO(), dvDesc,
1442 patchCoords->BindVBO(),
1443 patchTable->GetVaryingPatchArrays(),
1444 patchTable->GetVaryingPatchIndexTextureBuffer(),
1445 patchTable->GetPatchParamTextureBuffer());
1510 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1511 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1521 PATCHCOORD_BUFFER *patchCoords,
1522 PATCH_TABLE *patchTable,
1524 void * deviceContext = NULL) {
1535 numPatchCoords, patchCoords,
1539 (void)deviceContext;
1540 instance =
Create(srcDesc, dstDesc,
1542 duuDesc, duvDesc, dvvDesc);
1552 numPatchCoords, patchCoords,
1615 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1616 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1626 PATCHCOORD_BUFFER *patchCoords,
1627 PATCH_TABLE *patchTable)
const {
1630 dstBuffer->BindVBO(), dstDesc,
1631 duBuffer->BindVBO(), duDesc,
1632 dvBuffer->BindVBO(), dvDesc,
1633 duuBuffer->BindVBO(), duuDesc,
1634 duvBuffer->BindVBO(), duvDesc,
1635 dvvBuffer->BindVBO(), dvvDesc,
1637 patchCoords->BindVBO(),
1638 patchTable->GetVaryingPatchArrays(),
1639 patchTable->GetVaryingPatchIndexTextureBuffer(),
1640 patchTable->GetPatchParamTextureBuffer());
1677 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1678 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1683 PATCHCOORD_BUFFER *patchCoords,
1684 PATCH_TABLE *patchTable,
1687 void * deviceContext = NULL) {
1693 numPatchCoords, patchCoords,
1694 patchTable, fvarChannel);
1697 (void)deviceContext;
1698 instance =
Create(srcDesc, dstDesc,
1705 numPatchCoords, patchCoords,
1706 patchTable, fvarChannel);
1740 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1741 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1746 PATCHCOORD_BUFFER *patchCoords,
1747 PATCH_TABLE *patchTable,
1748 int fvarChannel = 0)
const {
1751 dstBuffer->BindVBO(), dstDesc,
1755 patchCoords->BindVBO(),
1756 patchTable->GetFVarPatchArrays(fvarChannel),
1757 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
1758 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
1807 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1808 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1815 PATCHCOORD_BUFFER *patchCoords,
1816 PATCH_TABLE *patchTable,
1819 void * deviceContext = NULL) {
1827 numPatchCoords, patchCoords,
1828 patchTable, fvarChannel);
1831 (void)deviceContext;
1832 instance =
Create(srcDesc, dstDesc,
1840 numPatchCoords, patchCoords,
1841 patchTable, fvarChannel);
1887 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1888 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1895 PATCHCOORD_BUFFER *patchCoords,
1896 PATCH_TABLE *patchTable,
1897 int fvarChannel = 0)
const {
1900 dstBuffer->BindVBO(), dstDesc,
1901 duBuffer->BindVBO(), duDesc,
1902 dvBuffer->BindVBO(), dvDesc,
1904 patchCoords->BindVBO(),
1905 patchTable->GetFVarPatchArrays(fvarChannel),
1906 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
1907 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
1974 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1975 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1985 PATCHCOORD_BUFFER *patchCoords,
1986 PATCH_TABLE *patchTable,
1989 void * deviceContext = NULL) {
2000 numPatchCoords, patchCoords,
2001 patchTable, fvarChannel);
2004 (void)deviceContext;
2005 instance =
Create(srcDesc, dstDesc,
2007 duuDesc, duvDesc, dvvDesc);
2017 numPatchCoords, patchCoords,
2018 patchTable, fvarChannel);
2082 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2083 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
2093 PATCHCOORD_BUFFER *patchCoords,
2094 PATCH_TABLE *patchTable,
2095 int fvarChannel = 0)
const {
2098 dstBuffer->BindVBO(), dstDesc,
2099 duBuffer->BindVBO(), duDesc,
2100 dvBuffer->BindVBO(), dvDesc,
2101 duuBuffer->BindVBO(), duuDesc,
2102 duvBuffer->BindVBO(), duvDesc,
2103 dvvBuffer->BindVBO(), dvvDesc,
2105 patchCoords->BindVBO(),
2106 patchTable->GetFVarPatchArrays(fvarChannel),
2107 patchTable->GetFVarPatchIndexTextureBuffer(fvarChannel),
2108 patchTable->GetFVarPatchParamTextureBuffer(fvarChannel));
2131 GLuint _srcBufferTexture;
2132 GLuint _patchArraysUBO;
2133 bool _interleavedDerivativeBuffers;
2135 struct _StencilKernel {
2145 bool interleavedDerivativeBuffers);
2147 GLint uniformSrcBufferTexture;
2148 GLint uniformSrcOffset;
2150 GLint uniformSizesTexture;
2151 GLint uniformOffsetsTexture;
2152 GLint uniformIndicesTexture;
2153 GLint uniformWeightsTexture;
2154 GLint uniformDuWeightsTexture;
2155 GLint uniformDvWeightsTexture;
2156 GLint uniformDuuWeightsTexture;
2157 GLint uniformDuvWeightsTexture;
2158 GLint uniformDvvWeightsTexture;
2163 struct _PatchKernel {
2173 bool interleavedDerivativeBuffers);
2175 GLint uniformSrcBufferTexture;
2176 GLint uniformSrcOffset;
2178 GLint uniformPatchArraysUBOBinding;
2179 GLint uniformPatchParamTexture;
2180 GLint uniformPatchIndexTexture;
2188using 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.
GLuint GetSizesTexture() const
static GLStencilTableTBO * Create(Far::StencilTable const *stencilTable, void *deviceContext=NULL)
GLuint GetDvvWeightsTexture() const
int GetNumStencils() const
GLuint GetDuvWeightsTexture() const
GLuint GetDuuWeightsTexture() const
GLuint GetIndicesTexture() const
GLStencilTableTBO(Far::StencilTable const *stencilTable)
GLStencilTableTBO(Far::LimitStencilTable const *limitStencilTable)
GLuint GetWeightsTexture() const
static GLStencilTableTBO * Create(Far::LimitStencilTable const *limitStencilTable, void *deviceContext=NULL)
GLuint GetDvWeightsTexture() const
GLuint GetDuWeightsTexture() const
GLuint GetOffsetsTexture() 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.
bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
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...
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 ...
bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint duuBuffer, BufferDescriptor const &duuDesc, GLuint duvBuffer, BufferDescriptor const &duvDesc, GLuint dvvBuffer, BufferDescriptor const &dvvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint dvWeightsBuffer, GLuint duuWeightsBuffer, GLuint duvWeightsBuffer, GLuint dvvWeightsBuffer, int start, int end) const
Dispatch the GLSL XFB kernel on on GPU asynchronously returns false if the kernel hasn't been compile...
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 ...
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 ...
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 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.
bool EvalPatches(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, GLuint patchCoordsBuffer, const PatchArrayVector &patchArrays, GLuint patchIndexBuffer, GLuint patchParamsBuffer) const
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 ...
bool EvalStencils(GLuint srcBuffer, BufferDescriptor const &srcDesc, GLuint dstBuffer, BufferDescriptor const &dstDesc, GLuint duBuffer, BufferDescriptor const &duDesc, GLuint dvBuffer, BufferDescriptor const &dvDesc, GLuint sizesBuffer, GLuint offsetsBuffer, GLuint indicesBuffer, GLuint weightsBuffer, GLuint duWeightsBuffer, GLuint 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 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 ...