8#ifndef OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
9#define OPENSUBDIV3_OSD_MTL_COMPUTE_EVALUATOR_H
11#include "../version.h"
20@protocol MTLComputePipelineState;
23namespace OPENSUBDIV_VERSION {
28 class LimitStencilTable;
36 template<
typename STENCIL_TABLE,
typename DEVICE_CONTEXT>
38 DEVICE_CONTEXT context)
61 id<MTLBuffer> _sizesBuffer;
62 id<MTLBuffer> _offsetsBuffer;
63 id<MTLBuffer> _indicesBuffer;
64 id<MTLBuffer> _weightsBuffer;
65 id<MTLBuffer> _duWeightsBuffer;
66 id<MTLBuffer> _dvWeightsBuffer;
67 id<MTLBuffer> _duuWeightsBuffer;
68 id<MTLBuffer> _duvWeightsBuffer;
69 id<MTLBuffer> _dvvWeightsBuffer;
131 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
135 STENCIL_TABLE
const *stencilTable,
146 instance = Create(srcDesc, dstDesc,
202 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
208 STENCIL_TABLE
const *stencilTable,
221 instance = Create(srcDesc, dstDesc, duDesc, dvDesc, context);
294 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
303 STENCIL_TABLE
const *stencilTable,
319 instance = Create(srcDesc, dstDesc, duDesc, dvDesc,
320 duuDesc, duvDesc, dvvDesc, context);
358 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
362 STENCIL_TABLE
const *stencilTable,
365 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
366 dstBuffer->BindMTLBuffer(context), dstDesc,
369 stencilTable->GetSizesBuffer(),
370 stencilTable->GetOffsetsBuffer(),
371 stencilTable->GetIndicesBuffer(),
372 stencilTable->GetWeightsBuffer(),
376 stencilTable->GetNumStencils(),
412 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
418 STENCIL_TABLE
const *stencilTable,
421 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
422 dstBuffer->BindMTLBuffer(context), dstDesc,
423 duBuffer->BindMTLBuffer(context), duDesc,
424 dvBuffer->BindMTLBuffer(context), dvDesc,
425 stencilTable->GetSizesBuffer(),
426 stencilTable->GetOffsetsBuffer(),
427 stencilTable->GetIndicesBuffer(),
428 stencilTable->GetWeightsBuffer(),
429 stencilTable->GetDuWeightsBuffer(),
430 stencilTable->GetDvWeightsBuffer(),
432 stencilTable->GetNumStencils(),
486 template <
typename SRC_BUFFER,
typename DST_BUFFER,
typename STENCIL_TABLE>
495 STENCIL_TABLE
const *stencilTable,
498 return EvalStencils(srcBuffer->BindMTLBuffer(context), srcDesc,
499 dstBuffer->BindMTLBuffer(context), dstDesc,
500 duBuffer->BindMTLBuffer(context), duDesc,
501 dvBuffer->BindMTLBuffer(context), dvDesc,
502 duuBuffer->BindMTLBuffer(context), duuDesc,
503 duvBuffer->BindMTLBuffer(context), duvDesc,
504 dvvBuffer->BindMTLBuffer(context), dvvDesc,
505 stencilTable->GetSizesBuffer(),
506 stencilTable->GetOffsetsBuffer(),
507 stencilTable->GetIndicesBuffer(),
508 stencilTable->GetWeightsBuffer(),
509 stencilTable->GetDuWeightsBuffer(),
510 stencilTable->GetDvWeightsBuffer(),
511 stencilTable->GetDuuWeightsBuffer(),
512 stencilTable->GetDuvWeightsBuffer(),
513 stencilTable->GetDvvWeightsBuffer(),
515 stencilTable->GetNumStencils(),
561 id<MTLBuffer> sizesBuffer,
562 id<MTLBuffer> offsetsBuffer,
563 id<MTLBuffer> indicesBuffer,
564 id<MTLBuffer> weightsBuffer,
565 id<MTLBuffer> duWeightsBuffer,
566 id<MTLBuffer> dvWeightsBuffer,
634 id<MTLBuffer> sizesBuffer,
635 id<MTLBuffer> offsetsBuffer,
636 id<MTLBuffer> indicesBuffer,
637 id<MTLBuffer> weightsBuffer,
638 id<MTLBuffer> duWeightsBuffer,
639 id<MTLBuffer> dvWeightsBuffer,
640 id<MTLBuffer> duuWeightsBuffer,
641 id<MTLBuffer> duvWeightsBuffer,
642 id<MTLBuffer> dvvWeightsBuffer,
686 template <
typename SRC_BUFFER,
typename DST_BUFFER,
687 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
692 PATCHCOORD_BUFFER *patchCoords,
693 PATCH_TABLE *patchTable,
700 numPatchCoords, patchCoords,
705 instance = Create(srcDesc, dstDesc,
712 numPatchCoords, patchCoords,
767 template <
typename SRC_BUFFER,
typename DST_BUFFER,
768 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
775 PATCHCOORD_BUFFER *patchCoords,
776 PATCH_TABLE *patchTable,
785 numPatchCoords, patchCoords,
790 instance = Create(srcDesc, dstDesc,
791 duDesc, dvDesc, context);
797 numPatchCoords, patchCoords,
870 template <
typename SRC_BUFFER,
typename DST_BUFFER,
871 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
881 PATCHCOORD_BUFFER *patchCoords,
882 PATCH_TABLE *patchTable,
894 numPatchCoords, patchCoords,
899 instance = Create(srcDesc, dstDesc,
901 duuDesc, duvDesc, dvvDesc, context);
910 numPatchCoords, patchCoords,
947 template <
typename SRC_BUFFER,
typename DST_BUFFER,
948 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
953 PATCHCOORD_BUFFER *patchCoords,
954 PATCH_TABLE *patchTable,
957 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
958 dstBuffer->BindMTLBuffer(context), dstDesc,
962 patchCoords->BindMTLBuffer(context),
963 patchTable->GetPatchArrays(),
964 patchTable->GetPatchIndexBuffer(),
965 patchTable->GetPatchParamBuffer(),
1006 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1007 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1014 PATCHCOORD_BUFFER *patchCoords,
1015 PATCH_TABLE *patchTable,
1018 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
1019 dstBuffer->BindMTLBuffer(context), dstDesc,
1020 duBuffer->BindMTLBuffer(context), duDesc,
1021 dvBuffer->BindMTLBuffer(context), dvDesc,
1023 patchCoords->BindMTLBuffer(context),
1024 patchTable->GetPatchArrays(),
1025 patchTable->GetPatchIndexBuffer(),
1026 patchTable->GetPatchParamBuffer(),
1085 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1086 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1096 PATCHCOORD_BUFFER *patchCoords,
1097 PATCH_TABLE *patchTable,
1100 return EvalPatches(srcBuffer->BindMTLBuffer(context), srcDesc,
1101 dstBuffer->BindMTLBuffer(context), dstDesc,
1102 duBuffer->BindMTLBuffer(context), duDesc,
1103 dvBuffer->BindMTLBuffer(context), dvDesc,
1104 duuBuffer->BindMTLBuffer(context), duuDesc,
1105 duvBuffer->BindMTLBuffer(context), duvDesc,
1106 dvvBuffer->BindMTLBuffer(context), dvvDesc,
1108 patchCoords->BindMTLBuffer(context),
1109 patchTable->GetPatchArrays(),
1110 patchTable->GetPatchIndexBuffer(),
1111 patchTable->GetPatchParamBuffer(),
1120 id<MTLBuffer> patchCoordsBuffer,
1122 id<MTLBuffer> patchIndexBuffer,
1123 id<MTLBuffer> patchParamsBuffer,
1134 id<MTLBuffer> patchCoordsBuffer,
1136 id<MTLBuffer> patchIndexBuffer,
1137 id<MTLBuffer> patchParamsBuffer,
1173 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1174 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1179 PATCHCOORD_BUFFER *patchCoords,
1180 PATCH_TABLE *patchTable,
1188 numPatchCoords, patchCoords,
1193 instance = Create(srcDesc, dstDesc,
1201 numPatchCoords, patchCoords,
1238 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1239 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1244 PATCHCOORD_BUFFER *patchCoords,
1245 PATCH_TABLE *patchTable,
1248 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
1249 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
1253 patchCoords->BindMTLBuffer(deviceContext),
1254 patchTable->GetVaryingPatchArrays(),
1255 patchTable->GetVaryingPatchIndexBuffer(),
1256 patchTable->GetPatchParamBuffer(),
1306 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1307 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1314 PATCHCOORD_BUFFER *patchCoords,
1315 PATCH_TABLE *patchTable,
1325 numPatchCoords, patchCoords,
1330 instance = Create(srcDesc, dstDesc,
1339 numPatchCoords, patchCoords,
1388 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1389 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1396 PATCHCOORD_BUFFER *patchCoords,
1397 PATCH_TABLE *patchTable,
1400 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
1401 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
1402 duBuffer->BindMTLBuffer(deviceContext), duDesc,
1403 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
1405 patchCoords->BindMTLBuffer(deviceContext),
1406 patchTable->GetVaryingPatchArrays(),
1407 patchTable->GetVaryingPatchIndexBuffer(),
1408 patchTable->GetPatchParamBuffer(),
1477 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1478 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1488 PATCHCOORD_BUFFER *patchCoords,
1489 PATCH_TABLE *patchTable,
1502 numPatchCoords, patchCoords,
1507 instance = Create(srcDesc, dstDesc,
1509 duuDesc, duvDesc, dvvDesc,
1520 numPatchCoords, patchCoords,
1587 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1588 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1598 PATCHCOORD_BUFFER *patchCoords,
1599 PATCH_TABLE *patchTable,
1602 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
1603 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
1604 duBuffer->BindMTLBuffer(deviceContext), duDesc,
1605 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
1606 duuBuffer->BindMTLBuffer(deviceContext), duuDesc,
1607 duvBuffer->BindMTLBuffer(deviceContext), duvDesc,
1608 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc,
1610 patchCoords->BindMTLBuffer(deviceContext),
1611 patchTable->GetVaryingPatchArrays(),
1612 patchTable->GetVaryingPatchIndexBuffer(),
1613 patchTable->GetPatchParamBuffer(),
1653 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1654 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1659 PATCHCOORD_BUFFER *patchCoords,
1660 PATCH_TABLE *patchTable,
1669 numPatchCoords, patchCoords,
1675 instance = Create(srcDesc, dstDesc,
1683 numPatchCoords, patchCoords,
1723 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1724 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1729 PATCHCOORD_BUFFER *patchCoords,
1730 PATCH_TABLE *patchTable,
1734 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
1735 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
1739 patchCoords->BindMTLBuffer(deviceContext),
1740 patchTable->GetFVarPatchArrays(fvarChannel),
1741 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1742 patchTable->GetFVarPatchParamBuffer(fvarChannel),
1794 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1795 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1802 PATCHCOORD_BUFFER *patchCoords,
1803 PATCH_TABLE *patchTable,
1814 numPatchCoords, patchCoords,
1820 instance = Create(srcDesc, dstDesc,
1829 numPatchCoords, patchCoords,
1881 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1882 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1889 PATCHCOORD_BUFFER *patchCoords,
1890 PATCH_TABLE *patchTable,
1894 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
1895 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
1896 duBuffer->BindMTLBuffer(deviceContext), duDesc,
1897 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
1899 patchCoords->BindMTLBuffer(deviceContext),
1900 patchTable->GetFVarPatchArrays(fvarChannel),
1901 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
1902 patchTable->GetFVarPatchParamBuffer(fvarChannel),
1972 template <
typename SRC_BUFFER,
typename DST_BUFFER,
1973 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
1983 PATCHCOORD_BUFFER *patchCoords,
1984 PATCH_TABLE *patchTable,
1998 numPatchCoords, patchCoords,
2004 instance = Create(srcDesc, dstDesc,
2006 duuDesc, duvDesc, dvvDesc,
2017 numPatchCoords, patchCoords,
2087 template <
typename SRC_BUFFER,
typename DST_BUFFER,
2088 typename PATCHCOORD_BUFFER,
typename PATCH_TABLE>
2098 PATCHCOORD_BUFFER *patchCoords,
2099 PATCH_TABLE *patchTable,
2103 return EvalPatches(srcBuffer->BindMTLBuffer(deviceContext), srcDesc,
2104 dstBuffer->BindMTLBuffer(deviceContext), dstDesc,
2105 duBuffer->BindMTLBuffer(deviceContext), duDesc,
2106 dvBuffer->BindMTLBuffer(deviceContext), dvDesc,
2107 duuBuffer->BindMTLBuffer(deviceContext), duuDesc,
2108 duvBuffer->BindMTLBuffer(deviceContext), duvDesc,
2109 dvvBuffer->BindMTLBuffer(deviceContext), dvvDesc,
2111 patchCoords->BindMTLBuffer(deviceContext),
2112 patchTable->GetFVarPatchArrays(fvarChannel),
2113 patchTable->GetFVarPatchIndexBuffer(fvarChannel),
2114 patchTable->GetFVarPatchParamBuffer(fvarChannel),
2135 id<MTLLibrary> _computeLibrary;
2136 id<MTLComputePipelineState> _evalStencils;
2137 id<MTLComputePipelineState> _evalPatches;
2138 id<MTLBuffer> _parameterBuffer;
2146using 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....
MTLStencilTable(Far::LimitStencilTable const *stencilTable, MTLContext *context)
id< MTLBuffer > GetDuWeightsBuffer() const
id< MTLBuffer > GetDvvWeightsBuffer() const
MTLStencilTable(Far::StencilTable const *stencilTable, MTLContext *context)
id< MTLBuffer > GetDuuWeightsBuffer() const
id< MTLBuffer > GetDuvWeightsBuffer() const
int GetNumStencils() const
id< MTLBuffer > GetIndicesBuffer() const
id< MTLBuffer > GetSizesBuffer() const
id< MTLBuffer > GetOffsetsBuffer() const
id< MTLBuffer > GetWeightsBuffer() const
static MTLStencilTable * Create(STENCIL_TABLE *stencilTable, DEVICE_CONTEXT context)
id< MTLBuffer > GetDvWeightsBuffer() const
bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, id< MTLBuffer > sizesBuffer, id< MTLBuffer > offsetsBuffer, id< MTLBuffer > indicesBuffer, id< MTLBuffer > weightsBuffer, id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > dvWeightsBuffer, id< MTLBuffer > duuWeightsBuffer, id< MTLBuffer > duvWeightsBuffer, id< MTLBuffer > dvvWeightsBuffer, int start, int end, MTLContext *context) const
Dispatch the MTL compute kernel 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, MTLComputeEvaluator *instance, MTLContext *context)
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, MTLComputeEvaluator const *instance, MTLContext *context)
Generic static stencil function. This function has a same signature as other device kernels have so t...
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
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, MTLComputeEvaluator const *instance, MTLContext *context)
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, STENCIL_TABLE const *stencilTable, MTLComputeEvaluator const *instance, MTLContext *context)
Generic static stencil function. This function has a same signature as other device kernels have so t...
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, MTLContext *deviceContext) 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, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
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, MTLContext *context) const
Generic stencil function.
bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > duuBuffer, BufferDescriptor const &duuDesc, id< MTLBuffer > duvBuffer, BufferDescriptor const &duvDesc, id< MTLBuffer > dvvBuffer, BufferDescriptor const &dvvDesc, int numPatchCoords, id< MTLBuffer > patchCoordsBuffer, const PatchArrayVector &patchArrays, id< MTLBuffer > patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext *context) const
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static void Synchronize(MTLContext *context)
Wait for the dispatched kernel to finish.
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, MTLContext *context) const
Generic stencil function.
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, MTLComputeEvaluator *instance, MTLContext *context)
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, MTLContext *deviceContext) 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, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
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, MTLContext *context) const
Generic stencil function.
bool EvalStencils(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, id< MTLBuffer > sizesBuffer, id< MTLBuffer > offsetsBuffer, id< MTLBuffer > indicesBuffer, id< MTLBuffer > weightsBuffer, id< MTLBuffer > duWeightsBuffer, id< MTLBuffer > dvWeightsBuffer, int start, int end, MTLContext *context) const
Dispatch the MTL compute kernel 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, DST_BUFFER *duBuffer, BufferDescriptor const &duDesc, DST_BUFFER *dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, PATCHCOORD_BUFFER *patchCoords, PATCH_TABLE *patchTable, int fvarChannel, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
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, MTLContext *context) const
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, MTLComputeEvaluator const *instance, MTLContext *context)
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, MTLComputeEvaluator const *instance, MTLContext *deviceContext)
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, 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, MTLContext *context) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
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, MTLContext *context) const
Generic limit eval function with derivatives. This function has a same signature as other device kern...
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, MTLContext *deviceContext) const
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, MTLContext *deviceContext) const
Generic limit eval function. This function has a same signature as other device kernels have so that ...
static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, MTLContext *context)
static MTLComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, MTLContext *context)
bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, MTLContext *context)
Configure compute pipline state. Returns false if it fails to create the pipeline state.
bool EvalPatches(id< MTLBuffer > srcBuffer, BufferDescriptor const &srcDesc, id< MTLBuffer > dstBuffer, BufferDescriptor const &dstDesc, id< MTLBuffer > duBuffer, BufferDescriptor const &duDesc, id< MTLBuffer > dvBuffer, BufferDescriptor const &dvDesc, int numPatchCoords, id< MTLBuffer > patchCoordsBuffer, const PatchArrayVector &patchArrays, id< MTLBuffer > patchIndexBuffer, id< MTLBuffer > patchParamsBuffer, MTLContext *context) const