8#ifndef OPENSUBDIV3_OSD_CL_EVALUATOR_H
9#define OPENSUBDIV3_OSD_CL_EVALUATOR_H
11#include "../version.h"
18namespace OPENSUBDIV_VERSION {
23 class LimitStencilTable;
37 template <
typename DEVICE_CONTEXT>
39 DEVICE_CONTEXT context) {
43 template <
typename DEVICE_CONTEXT>
46 DEVICE_CONTEXT context) {
47 return new CLStencilTable(limitStencilTable, context->GetContext());
51 cl_context clContext);
53 cl_context clContext);
88 template <
typename DEVICE_CONTEXT>
93 DEVICE_CONTEXT deviceContext) {
94 return Create(srcDesc, dstDesc, duDesc, dvDesc,
95 deviceContext->GetContext(),
96 deviceContext->GetCommandQueue());
103 cl_context clContext,
104 cl_command_queue clCommandQueue) {
106 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc))
113 template <
typename DEVICE_CONTEXT>
121 DEVICE_CONTEXT deviceContext) {
122 return Create(srcDesc, dstDesc, duDesc, dvDesc,
123 duuDesc, duvDesc, dvvDesc,
124 deviceContext->GetContext(),
125 deviceContext->GetCommandQueue());
135 cl_context clContext,
136 cl_command_queue clCommandQueue) {
138 if (instance->
Compile(srcDesc, dstDesc, duDesc, dvDesc,
139 duuDesc, duvDesc, dvvDesc))
200 template <
typename SRC_BUFFER,
typename DST_BUFFER,
201 typename STENCIL_TABLE,
typename DEVICE_CONTEXT>
205 STENCIL_TABLE
const *stencilTable,
207 DEVICE_CONTEXT deviceContext,
208 unsigned int numStartEvents=0,
209 const cl_event* startEvents=NULL,
210 cl_event* endEvent=NULL) {
216 numStartEvents, startEvents, endEvent);
219 instance =
Create(srcDesc, dstDesc,
227 numStartEvents, startEvents, endEvent);
290 template <
typename SRC_BUFFER,
typename DST_BUFFER,
291 typename STENCIL_TABLE,
typename DEVICE_CONTEXT>
297 STENCIL_TABLE
const *stencilTable,
299 DEVICE_CONTEXT deviceContext,
300 unsigned int numStartEvents=0,
301 const cl_event* startEvents=NULL,
302 cl_event* endEvent=NULL) {
310 numStartEvents, startEvents, endEvent);
313 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc,
321 numStartEvents, startEvents, endEvent);
402 template <
typename SRC_BUFFER,
typename DST_BUFFER,
403 typename STENCIL_TABLE,
typename DEVICE_CONTEXT>
412 STENCIL_TABLE
const *stencilTable,
414 DEVICE_CONTEXT deviceContext,
415 unsigned int numStartEvents=0,
416 const cl_event* startEvents=NULL,
417 cl_event* endEvent=NULL) {
428 numStartEvents, startEvents, endEvent);
431 instance =
Create(srcDesc, dstDesc,
433 duuDesc, duvDesc, dvvDesc,
444 numStartEvents, startEvents, endEvent);
482 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
486 STENCIL_TABLE
const *stencilTable,
487 unsigned int numStartEvents=0,
488 const cl_event* startEvents=NULL,
489 cl_event* endEvent=NULL)
const {
490 return EvalStencils(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
491 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
492 stencilTable->GetSizesBuffer(),
493 stencilTable->GetOffsetsBuffer(),
494 stencilTable->GetIndicesBuffer(),
495 stencilTable->GetWeightsBuffer(),
497 stencilTable->GetNumStencils(),
498 numStartEvents, startEvents, endEvent);
543 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
549 STENCIL_TABLE
const *stencilTable,
550 unsigned int numStartEvents=0,
551 const cl_event* startEvents=NULL,
552 cl_event* endEvent=NULL)
const {
553 return EvalStencils(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
554 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
555 duBuffer->BindCLBuffer(_clCommandQueue), duDesc,
556 dvBuffer->BindCLBuffer(_clCommandQueue), dvDesc,
557 stencilTable->GetSizesBuffer(),
558 stencilTable->GetOffsetsBuffer(),
559 stencilTable->GetIndicesBuffer(),
560 stencilTable->GetWeightsBuffer(),
561 stencilTable->GetDuWeightsBuffer(),
562 stencilTable->GetDvWeightsBuffer(),
564 stencilTable->GetNumStencils(),
565 numStartEvents, startEvents, endEvent);
628 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
637 STENCIL_TABLE
const *stencilTable,
638 unsigned int numStartEvents=0,
639 const cl_event* startEvents=NULL,
640 cl_event* endEvent=NULL)
const {
641 return EvalStencils(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
642 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
643 duBuffer->BindCLBuffer(_clCommandQueue), duDesc,
644 dvBuffer->BindCLBuffer(_clCommandQueue), dvDesc,
645 duuBuffer->BindCLBuffer(_clCommandQueue), duuDesc,
646 duvBuffer->BindCLBuffer(_clCommandQueue), duvDesc,
647 dvvBuffer->BindCLBuffer(_clCommandQueue), dvvDesc,
648 stencilTable->GetSizesBuffer(),
649 stencilTable->GetOffsetsBuffer(),
650 stencilTable->GetIndicesBuffer(),
651 stencilTable->GetWeightsBuffer(),
652 stencilTable->GetDuWeightsBuffer(),
653 stencilTable->GetDvWeightsBuffer(),
654 stencilTable->GetDuuWeightsBuffer(),
655 stencilTable->GetDuvWeightsBuffer(),
656 stencilTable->GetDvvWeightsBuffer(),
658 stencilTable->GetNumStencils(),
659 numStartEvents, startEvents, endEvent);
672 unsigned int numStartEvents=0,
673 const cl_event* startEvents=NULL,
674 cl_event* endEvent=NULL)
const;
736 unsigned int numStartEvents=0,
737 const cl_event* startEvents=NULL,
738 cl_event* endEvent=NULL)
const;
824 unsigned int numStartEvents=0,
825 const cl_event* startEvents=NULL,
826 cl_event* endEvent=NULL)
const;
882 template <
typename SRC_BUFFER,
typename DST_BUFFER,
883 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
884 typename DEVICE_CONTEXT>
889 PATCHCOORD_BUFFER *patchCoords,
890 PATCH_TABLE *patchTable,
892 DEVICE_CONTEXT deviceContext,
893 unsigned int numStartEvents=0,
894 const cl_event* startEvents=NULL,
895 cl_event* endEvent=NULL) {
900 numPatchCoords, patchCoords,
902 numStartEvents, startEvents, endEvent);
906 instance =
Create(srcDesc, dstDesc,
913 numPatchCoords, patchCoords,
915 numStartEvents, startEvents, endEvent);
983 template <
typename SRC_BUFFER,
typename DST_BUFFER,
984 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
985 typename DEVICE_CONTEXT>
992 PATCHCOORD_BUFFER *patchCoords,
993 PATCH_TABLE *patchTable,
995 DEVICE_CONTEXT deviceContext,
996 unsigned int numStartEvents=0,
997 const cl_event* startEvents=NULL,
998 cl_event* endEvent=NULL) {
1005 numPatchCoords, patchCoords,
1007 numStartEvents, startEvents, endEvent);
1010 (void)deviceContext;
1011 instance =
Create(srcDesc, dstDesc, duDesc, dvDesc, deviceContext);
1013 bool r = instance->
EvalPatches(srcBuffer, srcDesc,
1017 numPatchCoords, patchCoords,
1019 numStartEvents, startEvents, endEvent);
1105 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1106 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
1107 typename DEVICE_CONTEXT>
1117 PATCHCOORD_BUFFER *patchCoords,
1118 PATCH_TABLE *patchTable,
1120 DEVICE_CONTEXT deviceContext,
1121 unsigned int numStartEvents=0,
1122 const cl_event* startEvents=NULL,
1123 cl_event* endEvent=NULL) {
1133 numPatchCoords, patchCoords,
1135 numStartEvents, startEvents, endEvent);
1138 (void)deviceContext;
1139 instance =
Create(srcDesc, dstDesc,
1141 duuDesc, duvDesc, dvvDesc,
1144 bool r = instance->
EvalPatches(srcBuffer, srcDesc,
1151 numPatchCoords, patchCoords,
1153 numStartEvents, startEvents, endEvent);
1198 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1199 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1204 PATCHCOORD_BUFFER *patchCoords,
1205 PATCH_TABLE *patchTable,
1206 unsigned int numStartEvents=0,
1207 const cl_event* startEvents=NULL,
1208 cl_event* endEvent=NULL)
const {
1210 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
1211 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
1215 patchCoords->BindCLBuffer(_clCommandQueue),
1216 patchTable->GetPatchArrayBuffer(),
1217 patchTable->GetPatchIndexBuffer(),
1218 patchTable->GetPatchParamBuffer(),
1219 numStartEvents, startEvents, endEvent);
1269 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1270 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1277 PATCHCOORD_BUFFER *patchCoords,
1278 PATCH_TABLE *patchTable,
1279 unsigned int numStartEvents=0,
1280 const cl_event* startEvents=NULL,
1281 cl_event* endEvent=NULL)
const {
1283 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
1284 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
1285 duBuffer->BindCLBuffer(_clCommandQueue), duDesc,
1286 dvBuffer->BindCLBuffer(_clCommandQueue), dvDesc,
1288 patchCoords->BindCLBuffer(_clCommandQueue),
1289 patchTable->GetPatchArrayBuffer(),
1290 patchTable->GetPatchIndexBuffer(),
1291 patchTable->GetPatchParamBuffer(),
1292 numStartEvents, startEvents, endEvent);
1360 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1361 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1371 PATCHCOORD_BUFFER *patchCoords,
1372 PATCH_TABLE *patchTable,
1373 unsigned int numStartEvents=0,
1374 const cl_event* startEvents=NULL,
1375 cl_event* endEvent=NULL)
const {
1377 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
1378 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
1379 duBuffer->BindCLBuffer(_clCommandQueue), duDesc,
1380 dvBuffer->BindCLBuffer(_clCommandQueue), dvDesc,
1381 duuBuffer->BindCLBuffer(_clCommandQueue), duuDesc,
1382 duvBuffer->BindCLBuffer(_clCommandQueue), duvDesc,
1383 dvvBuffer->BindCLBuffer(_clCommandQueue), dvvDesc,
1385 patchCoords->BindCLBuffer(_clCommandQueue),
1386 patchTable->GetPatchArrayBuffer(),
1387 patchTable->GetPatchIndexBuffer(),
1388 patchTable->GetPatchParamBuffer(),
1389 numStartEvents, startEvents, endEvent);
1397 cl_mem patchCoordsBuffer,
1398 cl_mem patchArrayBuffer,
1399 cl_mem patchIndexBuffer,
1400 cl_mem patchParamsBuffer,
1401 unsigned int numStartEvents=0,
1402 const cl_event* startEvents=NULL,
1403 cl_event* endEvent=NULL)
const;
1413 cl_mem patchCoordsBuffer,
1414 cl_mem patchArrayBuffer,
1415 cl_mem patchIndexBuffer,
1416 cl_mem patchParamsBuffer,
1417 unsigned int numStartEvents=0,
1418 const cl_event* startEvents=NULL,
1419 cl_event* endEvent=NULL)
const;
1469 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1470 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
1471 typename DEVICE_CONTEXT>
1476 PATCHCOORD_BUFFER *patchCoords,
1477 PATCH_TABLE *patchTable,
1479 DEVICE_CONTEXT deviceContext,
1480 unsigned int numStartEvents=0,
1481 const cl_event* startEvents=NULL,
1482 cl_event* endEvent=NULL) {
1488 numPatchCoords, patchCoords,
1490 numStartEvents, startEvents, endEvent);
1493 (void)deviceContext;
1494 instance =
Create(srcDesc, dstDesc,
1502 numPatchCoords, patchCoords,
1504 numStartEvents, startEvents, endEvent);
1549 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1550 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1555 PATCHCOORD_BUFFER *patchCoords,
1556 PATCH_TABLE *patchTable,
1557 unsigned int numStartEvents=0,
1558 const cl_event* startEvents=NULL,
1559 cl_event* endEvent=NULL)
const {
1561 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
1562 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
1566 patchCoords->BindCLBuffer(_clCommandQueue),
1567 patchTable->GetVaryingPatchArrayBuffer(),
1568 patchTable->GetVaryingPatchIndexBuffer(),
1569 patchTable->GetPatchParamBuffer(),
1570 numStartEvents, startEvents, endEvent);
1633 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1634 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
1635 typename DEVICE_CONTEXT>
1642 PATCHCOORD_BUFFER *patchCoords,
1643 PATCH_TABLE *patchTable,
1645 DEVICE_CONTEXT deviceContext,
1646 unsigned int numStartEvents=0,
1647 const cl_event* startEvents=NULL,
1648 cl_event* endEvent=NULL) {
1656 numPatchCoords, patchCoords,
1658 numStartEvents, startEvents, endEvent);
1661 (void)deviceContext;
1662 instance =
Create(srcDesc, dstDesc,
1671 numPatchCoords, patchCoords,
1673 numStartEvents, startEvents, endEvent);
1730 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1731 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1738 PATCHCOORD_BUFFER *patchCoords,
1739 PATCH_TABLE *patchTable,
1740 unsigned int numStartEvents=0,
1741 const cl_event* startEvents=NULL,
1742 cl_event* endEvent=NULL)
const {
1744 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
1745 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
1746 duBuffer->BindCLBuffer(_clCommandQueue), duDesc,
1747 dvBuffer->BindCLBuffer(_clCommandQueue), dvDesc,
1749 patchCoords->BindCLBuffer(_clCommandQueue),
1750 patchTable->GetVaryingPatchArrayBuffer(),
1751 patchTable->GetVaryingPatchIndexBuffer(),
1752 patchTable->GetPatchParamBuffer(),
1753 numStartEvents, startEvents, endEvent);
1834 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1835 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
1836 typename DEVICE_CONTEXT>
1846 PATCHCOORD_BUFFER *patchCoords,
1847 PATCH_TABLE *patchTable,
1849 DEVICE_CONTEXT deviceContext,
1850 unsigned int numStartEvents=0,
1851 const cl_event* startEvents=NULL,
1852 cl_event* endEvent=NULL) {
1863 numPatchCoords, patchCoords,
1865 numStartEvents, startEvents, endEvent);
1868 (void)deviceContext;
1869 instance =
Create(srcDesc, dstDesc,
1871 duuDesc, duvDesc, dvvDesc,
1882 numPatchCoords, patchCoords,
1884 numStartEvents, startEvents, endEvent);
1959 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1960 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1970 PATCHCOORD_BUFFER *patchCoords,
1971 PATCH_TABLE *patchTable,
1972 unsigned int numStartEvents=0,
1973 const cl_event* startEvents=NULL,
1974 cl_event* endEvent=NULL)
const {
1976 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
1977 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
1978 duBuffer->BindCLBuffer(_clCommandQueue), duDesc,
1979 dvBuffer->BindCLBuffer(_clCommandQueue), dvDesc,
1980 duuBuffer->BindCLBuffer(_clCommandQueue), duuDesc,
1981 duvBuffer->BindCLBuffer(_clCommandQueue), duvDesc,
1982 dvvBuffer->BindCLBuffer(_clCommandQueue), dvvDesc,
1984 patchCoords->BindCLBuffer(_clCommandQueue),
1985 patchTable->GetVaryingPatchArrayBuffer(),
1986 patchTable->GetVaryingPatchIndexBuffer(),
1987 patchTable->GetPatchParamBuffer(),
1988 numStartEvents, startEvents, endEvent);
2041 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2042 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
2043 typename DEVICE_CONTEXT>
2048 PATCHCOORD_BUFFER *patchCoords,
2049 PATCH_TABLE *patchTable,
2052 DEVICE_CONTEXT deviceContext,
2053 unsigned int numStartEvents=0,
2054 const cl_event* startEvents=NULL,
2055 cl_event* endEvent=NULL) {
2061 numPatchCoords, patchCoords,
2062 patchTable, fvarChannel,
2063 numStartEvents, startEvents, endEvent);
2066 (void)deviceContext;
2067 instance =
Create(srcDesc, dstDesc,
2075 numPatchCoords, patchCoords,
2076 patchTable, fvarChannel,
2077 numStartEvents, startEvents, endEvent);
2124 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2125 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
2130 PATCHCOORD_BUFFER *patchCoords,
2131 PATCH_TABLE *patchTable,
2132 int fvarChannel = 0,
2133 unsigned int numStartEvents=0,
2134 const cl_event* startEvents=NULL,
2135 cl_event* endEvent=NULL)
const {
2137 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
2138 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
2142 patchCoords->BindCLBuffer(_clCommandQueue),
2143 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
2144 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
2145 patchTable->GetFVarPatchParamBuffer(fvarChannel),
2146 numStartEvents, startEvents, endEvent);
2211 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2212 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
2213 typename DEVICE_CONTEXT>
2220 PATCHCOORD_BUFFER *patchCoords,
2221 PATCH_TABLE *patchTable,
2224 DEVICE_CONTEXT deviceContext,
2225 unsigned int numStartEvents=0,
2226 const cl_event* startEvents=NULL,
2227 cl_event* endEvent=NULL) {
2235 numPatchCoords, patchCoords,
2236 patchTable, fvarChannel,
2237 numStartEvents, startEvents, endEvent);
2240 (void)deviceContext;
2241 instance =
Create(srcDesc, dstDesc,
2242 duDesc, dvDesc, deviceContext);
2249 numPatchCoords, patchCoords,
2250 patchTable, fvarChannel,
2251 numStartEvents, startEvents, endEvent);
2310 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2311 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
2318 PATCHCOORD_BUFFER *patchCoords,
2319 PATCH_TABLE *patchTable,
2320 int fvarChannel = 0,
2321 unsigned int numStartEvents=0,
2322 const cl_event* startEvents=NULL,
2323 cl_event* endEvent=NULL)
const {
2325 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
2326 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
2327 duBuffer->BindCLBuffer(_clCommandQueue), duDesc,
2328 dvBuffer->BindCLBuffer(_clCommandQueue), dvDesc,
2330 patchCoords->BindCLBuffer(_clCommandQueue),
2331 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
2332 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
2333 patchTable->GetFVarPatchParamBuffer(fvarChannel),
2334 numStartEvents, startEvents, endEvent);
2417 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2418 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE,
2419 typename DEVICE_CONTEXT>
2429 PATCHCOORD_BUFFER *patchCoords,
2430 PATCH_TABLE *patchTable,
2433 DEVICE_CONTEXT deviceContext,
2434 unsigned int numStartEvents=0,
2435 const cl_event* startEvents=NULL,
2436 cl_event* endEvent=NULL) {
2447 numPatchCoords, patchCoords,
2448 patchTable, fvarChannel,
2449 numStartEvents, startEvents, endEvent);
2452 (void)deviceContext;
2453 instance =
Create(srcDesc, dstDesc,
2455 duuDesc, duvDesc, dvvDesc,
2466 numPatchCoords, patchCoords,
2467 patchTable, fvarChannel,
2468 numStartEvents, startEvents, endEvent);
2545 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2546 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
2556 PATCHCOORD_BUFFER *patchCoords,
2557 PATCH_TABLE *patchTable,
2558 int fvarChannel = 0,
2559 unsigned int numStartEvents=0,
2560 const cl_event* startEvents=NULL,
2561 cl_event* endEvent=NULL)
const {
2563 return EvalPatches(srcBuffer->BindCLBuffer(_clCommandQueue), srcDesc,
2564 dstBuffer->BindCLBuffer(_clCommandQueue), dstDesc,
2565 duBuffer->BindCLBuffer(_clCommandQueue), duDesc,
2566 dvBuffer->BindCLBuffer(_clCommandQueue), dvDesc,
2567 duuBuffer->BindCLBuffer(_clCommandQueue), duuDesc,
2568 duvBuffer->BindCLBuffer(_clCommandQueue), duvDesc,
2569 dvvBuffer->BindCLBuffer(_clCommandQueue), dvvDesc,
2571 patchCoords->BindCLBuffer(_clCommandQueue),
2572 patchTable->GetFVarPatchArrayBuffer(fvarChannel),
2573 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
2574 patchTable->GetFVarPatchParamBuffer(fvarChannel),
2575 numStartEvents, startEvents, endEvent);
2595 template <
typename DEVICE_CONTEXT>
2603 cl_context _clContext;
2604 cl_command_queue _clCommandQueue;
2605 cl_program _program;
2606 cl_kernel _stencilKernel;
2607 cl_kernel _stencilDerivKernel;
2608 cl_kernel _patchKernel;
2614using 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....
cl_mem GetDvvWeightsBuffer() const
CLStencilTable(Far::StencilTable const *stencilTable, cl_context clContext)
cl_mem GetOffsetsBuffer() const
static CLStencilTable * Create(Far::LimitStencilTable const *limitStencilTable, DEVICE_CONTEXT context)
cl_mem GetIndicesBuffer() const
int GetNumStencils() const
cl_mem GetSizesBuffer() const
cl_mem GetDuuWeightsBuffer() const
cl_mem GetDvWeightsBuffer() const
cl_mem GetDuvWeightsBuffer() const
cl_mem GetDuWeightsBuffer() const
static CLStencilTable * Create(Far::StencilTable const *stencilTable, DEVICE_CONTEXT context)
CLStencilTable(Far::LimitStencilTable const *limitStencilTable, cl_context clContext)
cl_mem GetWeightsBuffer() 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, STENCIL_TABLE const *stencilTable, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
static void Synchronize(cl_command_queue queue)
~CLEvaluator()
Destructor.
bool EvalStencils(cl_mem src, BufferDescriptor const &srcDesc, cl_mem dst, BufferDescriptor const &dstDesc, cl_mem du, BufferDescriptor const &duDesc, cl_mem dv, BufferDescriptor const &dvDesc, cl_mem sizes, cl_mem offsets, cl_mem indices, cl_mem weights, cl_mem duWeights, cl_mem dvWeights, int start, int end, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
Dispatch the CL compute kernel asynchronously. returns false if the kernel hasn't been compiled yet.
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
static CLEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, cl_context clContext, cl_command_queue clCommandQueue)
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, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
bool EvalPatches(cl_mem src, BufferDescriptor const &srcDesc, cl_mem dst, BufferDescriptor const &dstDesc, cl_mem du, BufferDescriptor const &duDesc, cl_mem dv, BufferDescriptor const &dvDesc, int numPatchCoords, cl_mem patchCoordsBuffer, cl_mem patchArrayBuffer, cl_mem patchIndexBuffer, cl_mem patchParamsBuffer, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
Generic stencil function.
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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
static CLEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, DEVICE_CONTEXT deviceContext)
Generic creator template.
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, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static CLEvaluator * 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.
bool EvalPatches(cl_mem src, BufferDescriptor const &srcDesc, cl_mem dst, BufferDescriptor const &dstDesc, cl_mem du, BufferDescriptor const &duDesc, cl_mem dv, BufferDescriptor const &dvDesc, cl_mem duu, BufferDescriptor const &duuDesc, cl_mem duv, BufferDescriptor const &duvDesc, cl_mem dvv, BufferDescriptor const &dvvDesc, int numPatchCoords, cl_mem patchCoordsBuffer, cl_mem patchArrayBuffer, cl_mem patchIndexBuffer, cl_mem patchParamsBuffer, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
bool EvalStencils(cl_mem src, BufferDescriptor const &srcDesc, cl_mem dst, BufferDescriptor const &dstDesc, cl_mem du, BufferDescriptor const &duDesc, cl_mem dv, BufferDescriptor const &dvDesc, cl_mem duu, BufferDescriptor const &duuDesc, cl_mem duv, BufferDescriptor const &duvDesc, cl_mem dvv, BufferDescriptor const &dvvDesc, cl_mem sizes, cl_mem offsets, cl_mem indices, cl_mem weights, cl_mem duWeights, cl_mem dvWeights, cl_mem duuWeights, cl_mem duvWeights, cl_mem dvvWeights, int start, int end, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
Dispatch the CL compute kernel asynchronously. returns false if the kernel hasn't been compiled yet.
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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) 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, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static void Synchronize(DEVICE_CONTEXT deviceContext)
Wait the OpenCL kernels finish.
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, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=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, DST_BUFFER *duuBuffer, BufferDescriptor const &duuDesc, DST_BUFFER *duvBuffer, BufferDescriptor const &duvDesc, DST_BUFFER *dvvBuffer, BufferDescriptor const &dvvDesc, STENCIL_TABLE const *stencilTable, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL)
Generic static stencil function. This function has a same signature as other device kernels have so t...
bool EvalStencils(cl_mem src, BufferDescriptor const &srcDesc, cl_mem dst, BufferDescriptor const &dstDesc, cl_mem sizes, cl_mem offsets, cl_mem indices, cl_mem weights, int start, int end, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
static bool EvalPatchesVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL)
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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) 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, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL)
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static CLEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, cl_context clContext, cl_command_queue clCommandQueue)
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, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=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, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) 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, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=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, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) 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, CLEvaluator const *instance, DEVICE_CONTEXT deviceContext, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
Generic stencil function.
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, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
CLEvaluator(cl_context context, cl_command_queue queue)
Constructor.
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 EvalPatchesFaceVarying(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel=0, unsigned int numStartEvents=0, const cl_event *startEvents=NULL, cl_event *endEvent=NULL) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...