void
OsdGLSLTransformFeedbackKernelBundle::ApplyLoopVertexVerticesKernelB(
    GLuint vertexBuffer, int numVertexElements,
    GLuint varyingBuffer, int numVaryingElements,
    int vertexOffset, int tableOffset, int start, int end) {

    glUniformSubroutinesuiv(GL_VERTEX_SHADER, 1, &_subComputeLoopVertexB);
    transformGpuBufferData(vertexBuffer, numVertexElements,
                           varyingBuffer, numVaryingElements,
                           vertexOffset, tableOffset, start, end);
}
void
OsdGLSLTransformFeedbackKernelBundle::ApplyLoopEdgeVerticesKernel(
    GLuint vertexBuffer, GLuint varyingBuffer,
    int vertexOffset, int varyingOffset,
    int offset, int tableOffset, int start, int end) {

    glUniformSubroutinesuiv(GL_VERTEX_SHADER, 1, &_subComputeEdge);
    transformGpuBufferData(vertexBuffer, varyingBuffer,
                           vertexOffset, varyingOffset,
                           offset, tableOffset, start, end);
}
void
OsdGLSLTransformFeedbackKernelBundle::ApplyCatmarkVertexVerticesKernelA(
    GLuint vertexBuffer, int numVertexElements,
    GLuint varyingBuffer, int numVaryingElements,
    int vertexOffset, int tableOffset, int start, int end, bool pass) {

    glUniformSubroutinesuiv(GL_VERTEX_SHADER, 1, &_subComputeVertexA);
    glUniform1i(_uniformVertexPass, pass ? 1 : 0);
    transformGpuBufferData(vertexBuffer, numVertexElements,
                           varyingBuffer, numVaryingElements,
                           vertexOffset, tableOffset, start, end);
}
void
OsdGLSLTransformFeedbackKernelBundle::ApplyBilinearVertexVerticesKernel(
    GLuint vertexBuffer, int numVertexElements,
    GLuint varyingBuffer, int numVaryingElements,
    int V_ITa_ofs, int offset, int start, int end) {

    glUniformSubroutinesuiv(GL_VERTEX_SHADER, 1, &_subComputeVertex);
    glUniform1i(_uniformTableOffsets[Table::V_ITa], V_ITa_ofs);
    transformGpuBufferData(vertexBuffer, numVertexElements,
                           varyingBuffer, numVaryingElements,
                           offset, start, end);
}
void
OsdGLSLTransformFeedbackKernelBundle::ApplyCatmarkEdgeVerticesKernel(
    GLuint vertexBuffer, int numVertexElements,
    GLuint varyingBuffer, int numVaryingElements,
    int E_IT_ofs, int E_W_ofs, int offset, int start, int end) {

    glUniformSubroutinesuiv(GL_VERTEX_SHADER, 1, &_subComputeEdge);
    glUniform1i(_uniformTableOffsets[Table::E_IT], E_IT_ofs);
    glUniform1i(_uniformTableOffsets[Table::E_W], E_W_ofs);
    transformGpuBufferData(vertexBuffer, numVertexElements,
                           varyingBuffer, numVaryingElements,
                           offset, start, end);
}