8#ifndef OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H 
    9#define OPENSUBDIV3_OSD_D3D11_COMPUTE_EVALUATOR_H 
   11#include "../version.h" 
   13struct ID3D11DeviceContext;
 
   15struct ID3D11ComputeShader;
 
   16struct ID3D11ClassLinkage;
 
   17struct ID3D11ClassInstance;
 
   18struct ID3D11ShaderResourceView;
 
   19struct ID3D11UnorderedAccessView;
 
   24namespace OPENSUBDIV_VERSION {
 
   41    template <
typename DEVICE_CONTEXT>
 
   43                                      DEVICE_CONTEXT context) {
 
 
   48                                      ID3D11DeviceContext *deviceContext) {
 
 
   53                       ID3D11DeviceContext *deviceContext);
 
   58    ID3D11ShaderResourceView *
GetSizesSRV()
 const { 
return _sizes; }
 
   65    ID3D11ShaderResourceView *_sizes;
 
   66    ID3D11ShaderResourceView *_offsets;
 
   67    ID3D11ShaderResourceView *_indices;
 
   68    ID3D11ShaderResourceView *_weights;
 
   69    ID3D11Buffer *_sizesBuffer;
 
   70    ID3D11Buffer *_offsetsBuffer;
 
   71    ID3D11Buffer *_indicesBuffer;
 
   72    ID3D11Buffer *_weightsBuffer;
 
 
   87                                          ID3D11DeviceContext *deviceContext);
 
   96                                          ID3D11DeviceContext *deviceContext);
 
  131    template <
typename SRC_BUFFER, 
typename DST_BUFFER, 
typename STENCIL_TABLE>
 
  135        STENCIL_TABLE 
const *stencilTable,
 
  137        ID3D11DeviceContext * deviceContext) {
 
  146            instance = 
Create(srcDesc, dstDesc,
 
 
  164    template <
typename SRC_BUFFER, 
typename DST_BUFFER, 
typename STENCIL_TABLE>
 
  168        STENCIL_TABLE 
const *stencilTable,
 
  169        ID3D11DeviceContext *deviceContext)
 const {
 
  170        return EvalStencils(srcBuffer->BindD3D11UAV(deviceContext), srcDesc,
 
  171                            dstBuffer->BindD3D11UAV(deviceContext), dstDesc,
 
  172                            stencilTable->GetSizesSRV(),
 
  173                            stencilTable->GetOffsetsSRV(),
 
  174                            stencilTable->GetIndicesSRV(),
 
  175                            stencilTable->GetWeightsSRV(),
 
  177                             stencilTable->GetNumStencils(),
 
 
  185                      ID3D11UnorderedAccessView *dstUAV,
 
  187                      ID3D11ShaderResourceView *sizesSRV,
 
  188                      ID3D11ShaderResourceView *offsetsSRV,
 
  189                      ID3D11ShaderResourceView *indicesSRV,
 
  190                      ID3D11ShaderResourceView *weightsSRV,
 
  193                      ID3D11DeviceContext *deviceContext) 
const;
 
  198                 ID3D11DeviceContext *deviceContext);
 
  204    ID3D11ComputeShader * _computeShader;
 
  205    ID3D11ClassLinkage  * _classLinkage;
 
  206    ID3D11ClassInstance * _singleBufferKernel;
 
  207    ID3D11ClassInstance * _separateBufferKernel;
 
  208    ID3D11Buffer        * _uniformArgs; 
 
 
  216using namespace OPENSUBDIV_VERSION;
 
Stencil table class wrapping the template for compatibility.
 
BufferDescriptor is a struct which describes buffer elements in interleaved data buffers....
 
static D3D11StencilTable * Create(Far::StencilTable const *stencilTable, DEVICE_CONTEXT context)
 
ID3D11ShaderResourceView * GetOffsetsSRV() const
 
int GetNumStencils() const
 
ID3D11ShaderResourceView * GetIndicesSRV() const
 
D3D11StencilTable(Far::StencilTable const *stencilTable, ID3D11DeviceContext *deviceContext)
 
static D3D11StencilTable * Create(Far::StencilTable const *stencilTable, ID3D11DeviceContext *deviceContext)
 
ID3D11ShaderResourceView * GetSizesSRV() const
 
ID3D11ShaderResourceView * GetWeightsSRV() const
 
static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, ID3D11DeviceContext *deviceContext)
 
static bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, D3D11ComputeEvaluator const *instance, ID3D11DeviceContext *deviceContext)
Generic static compute function. This function has a same signature as other device kernels have so t...
 
static D3D11ComputeEvaluator * Create(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, BufferDescriptor const &duDesc, BufferDescriptor const &dvDesc, BufferDescriptor const &duuDesc, BufferDescriptor const &duvDesc, BufferDescriptor const &dvvDesc, ID3D11DeviceContext *deviceContext)
 
static void Synchronize(ID3D11DeviceContext *deviceContext)
Wait the dispatched kernel finishes.
 
bool EvalStencils(SRC_BUFFER *srcBuffer, BufferDescriptor const &srcDesc, DST_BUFFER *dstBuffer, BufferDescriptor const &dstDesc, STENCIL_TABLE const *stencilTable, ID3D11DeviceContext *deviceContext) const
 
bool Compile(BufferDescriptor const &srcDesc, BufferDescriptor const &dstDesc, ID3D11DeviceContext *deviceContext)
Configure DX kernel. Returns false if it fails to compile the kernel.
 
D3D11ComputeEvaluator()
Constructor.
 
~D3D11ComputeEvaluator()
Destructor.
 
bool EvalStencils(ID3D11UnorderedAccessView *srcSRV, BufferDescriptor const &srcDesc, ID3D11UnorderedAccessView *dstUAV, BufferDescriptor const &dstDesc, ID3D11ShaderResourceView *sizesSRV, ID3D11ShaderResourceView *offsetsSRV, ID3D11ShaderResourceView *indicesSRV, ID3D11ShaderResourceView *weightsSRV, int start, int end, ID3D11DeviceContext *deviceContext) const