void OsdCudaComputeController::ApplyVertexEdits( FarKernelBatch const &batch, void * clientdata) const { OsdCudaComputeContext * context = static_cast<OsdCudaComputeContext*>(clientdata); assert(context); const OsdCudaHEditTable *edit = context->GetEditTable(batch.GetTableIndex()); assert(edit); const OsdCudaTable * primvarIndices = edit->GetPrimvarIndices(); const OsdCudaTable * editValues = edit->GetEditValues(); if (edit->GetOperation() == FarVertexEdit::Add) { OsdCudaEditVertexAdd( context->GetCurrentVertexBuffer(), context->GetVertexDescriptor().numVertexElements-3, edit->GetPrimvarOffset(), edit->GetPrimvarWidth(), batch.GetVertexOffset(), batch.GetTableOffset(), batch.GetStart(), batch.GetEnd(), static_cast<int*>(primvarIndices->GetCudaMemory()), static_cast<float*>(editValues->GetCudaMemory())); } else if (edit->GetOperation() == FarVertexEdit::Set) { // XXXX TODO } }
void OsdCudaComputeController::ApplyLoopVertexVerticesKernelB( FarKernelBatch const &batch, void * clientdata) const { OsdCudaComputeContext * context = static_cast<OsdCudaComputeContext*>(clientdata); assert(context); const OsdCudaTable * V_ITa = context->GetTable(FarSubdivisionTables<OsdVertex>::V_ITa); const OsdCudaTable * V_IT = context->GetTable(FarSubdivisionTables<OsdVertex>::V_IT); const OsdCudaTable * V_W = context->GetTable(FarSubdivisionTables<OsdVertex>::V_W); assert(V_ITa); assert(V_IT); assert(V_W); OsdCudaComputeLoopVertexB( context->GetCurrentVertexBuffer(), context->GetCurrentVaryingBuffer(), context->GetVertexDescriptor().numVertexElements-3, context->GetVertexDescriptor().numVaryingElements, static_cast<int*>(V_ITa->GetCudaMemory()), static_cast<int*>(V_IT->GetCudaMemory()), static_cast<float*>(V_W->GetCudaMemory()), batch.GetVertexOffset(), batch.GetTableOffset(), batch.GetStart(), batch.GetEnd()); }
void OsdCudaKernelDispatcher::ApplyVertexEdits( FarMesh<OsdVertex> *mesh, int offset, int level, void * clientdata) const { OsdCudaComputeContext * context = static_cast<OsdCudaComputeContext*>(clientdata); assert(context); int numEditTables = context->GetNumEditTables(); for (int i=0; i < numEditTables; ++i) { const OsdCudaHEditTable * edit = context->GetEditTable(i); assert(edit); const OsdCudaTable * primvarIndices = edit->GetPrimvarIndices(); const OsdCudaTable * editValues = edit->GetEditValues(); if (edit->GetOperation() == FarVertexEdit::Add) { OsdCudaEditVertexAdd( context->GetCurrentVertexBuffer(), context->GetCurrentVertexNumElements()-3, edit->GetPrimvarOffset(), edit->GetPrimvarWidth(), primvarIndices->GetNumElements(level-1), static_cast<int*>(primvarIndices->GetCudaMemory()) + primvarIndices->GetMarker(level-1), static_cast<float*>(editValues->GetCudaMemory()) + editValues->GetMarker(level-1)); } else if (edit->GetOperation() == FarVertexEdit::Set) { // XXXX TODO } } }
void OsdCudaKernelDispatcher::ApplyLoopVertexVerticesKernelB( FarMesh<OsdVertex> * mesh, int offset, int level, int start, int end, void * clientdata) const { OsdCudaComputeContext * context = static_cast<OsdCudaComputeContext*>(clientdata); assert(context); const OsdCudaTable * V_ITa = context->GetTable(Table::V_ITa); const OsdCudaTable * V_IT = context->GetTable(Table::V_IT); const OsdCudaTable * V_W = context->GetTable(Table::V_W); assert(V_ITa); assert(V_IT); assert(V_W); OsdCudaComputeLoopVertexB( context->GetCurrentVertexBuffer(), context->GetCurrentVaryingBuffer(), context->GetCurrentVertexNumElements()-3, context->GetCurrentVaryingNumElements(), static_cast<int*>(V_ITa->GetCudaMemory()) + V_ITa->GetMarker(level-1), static_cast<int*>(V_IT->GetCudaMemory()) + V_IT->GetMarker(level-1), static_cast<float*>(V_W->GetCudaMemory()) + V_W->GetMarker(level-1), offset, start, end); }
void OsdCudaComputeController::ApplyBilinearEdgeVerticesKernel( FarKernelBatch const &batch, void * clientdata) const { OsdCudaComputeContext * context = static_cast<OsdCudaComputeContext*>(clientdata); assert(context); const OsdCudaTable * E_IT = context->GetTable(FarSubdivisionTables<OsdVertex>::E_IT); assert(E_IT); OsdCudaComputeBilinearEdge( context->GetCurrentVertexBuffer(), context->GetCurrentVaryingBuffer(), context->GetVertexDescriptor().numVertexElements-3, context->GetVertexDescriptor().numVaryingElements, static_cast<int*>(E_IT->GetCudaMemory()), batch.GetVertexOffset(), batch.GetTableOffset(), batch.GetStart(), batch.GetEnd()); }
void OsdCudaKernelDispatcher::ApplyBilinearEdgeVerticesKernel( FarMesh<OsdVertex> * mesh, int offset, int level, int start, int end, void * clientdata) const { OsdCudaComputeContext * context = static_cast<OsdCudaComputeContext*>(clientdata); assert(context); const OsdCudaTable * E_IT = context->GetTable(Table::E_IT); assert(E_IT); OsdCudaComputeBilinearEdge( context->GetCurrentVertexBuffer(), context->GetCurrentVaryingBuffer(), context->GetCurrentVertexNumElements()-3, context->GetCurrentVaryingNumElements(), static_cast<int*>(E_IT->GetCudaMemory()) + E_IT->GetMarker(level-1), offset, start, end); }