Changeset View
Changeset View
Standalone View
Standalone View
intern/opensubdiv/internal/evaluator/gl_compute_evaluator.cc
| Show First 20 Lines • Show All 390 Lines • ▼ Show 20 Lines | if (dvWeightsBuffer) | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 9, dvWeightsBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 9, dvWeightsBuffer); | ||||
| if (duuWeightsBuffer) | if (duuWeightsBuffer) | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 13, duuWeightsBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 13, duuWeightsBuffer); | ||||
| if (duvWeightsBuffer) | if (duvWeightsBuffer) | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 14, duvWeightsBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 14, duvWeightsBuffer); | ||||
| if (dvvWeightsBuffer) | if (dvvWeightsBuffer) | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 15, dvvWeightsBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 15, dvvWeightsBuffer); | ||||
| GLint activeProgram; | |||||
| glGetIntegerv(GL_CURRENT_PROGRAM, &activeProgram); | |||||
| glUseProgram(_stencilKernel.program); | glUseProgram(_stencilKernel.program); | ||||
| glUniform1i(_stencilKernel.uniformStart, start); | glUniform1i(_stencilKernel.uniformStart, start); | ||||
| glUniform1i(_stencilKernel.uniformEnd, end); | glUniform1i(_stencilKernel.uniformEnd, end); | ||||
| glUniform1i(_stencilKernel.uniformSrcOffset, srcDesc.offset); | glUniform1i(_stencilKernel.uniformSrcOffset, srcDesc.offset); | ||||
| glUniform1i(_stencilKernel.uniformDstOffset, dstDesc.offset); | glUniform1i(_stencilKernel.uniformDstOffset, dstDesc.offset); | ||||
| if (_stencilKernel.uniformDuDesc > 0) { | if (_stencilKernel.uniformDuDesc > 0) { | ||||
| glUniform3i(_stencilKernel.uniformDuDesc, duDesc.offset, duDesc.length, duDesc.stride); | glUniform3i(_stencilKernel.uniformDuDesc, duDesc.offset, duDesc.length, duDesc.stride); | ||||
| } | } | ||||
| if (_stencilKernel.uniformDvDesc > 0) { | if (_stencilKernel.uniformDvDesc > 0) { | ||||
| glUniform3i(_stencilKernel.uniformDvDesc, dvDesc.offset, dvDesc.length, dvDesc.stride); | glUniform3i(_stencilKernel.uniformDvDesc, dvDesc.offset, dvDesc.length, dvDesc.stride); | ||||
| } | } | ||||
| if (_stencilKernel.uniformDuuDesc > 0) { | if (_stencilKernel.uniformDuuDesc > 0) { | ||||
| glUniform3i(_stencilKernel.uniformDuuDesc, duuDesc.offset, duuDesc.length, duuDesc.stride); | glUniform3i(_stencilKernel.uniformDuuDesc, duuDesc.offset, duuDesc.length, duuDesc.stride); | ||||
| } | } | ||||
| if (_stencilKernel.uniformDuvDesc > 0) { | if (_stencilKernel.uniformDuvDesc > 0) { | ||||
| glUniform3i(_stencilKernel.uniformDuvDesc, duvDesc.offset, duvDesc.length, duvDesc.stride); | glUniform3i(_stencilKernel.uniformDuvDesc, duvDesc.offset, duvDesc.length, duvDesc.stride); | ||||
| } | } | ||||
| if (_stencilKernel.uniformDvvDesc > 0) { | if (_stencilKernel.uniformDvvDesc > 0) { | ||||
| glUniform3i(_stencilKernel.uniformDvvDesc, dvvDesc.offset, dvvDesc.length, dvvDesc.stride); | glUniform3i(_stencilKernel.uniformDvvDesc, dvvDesc.offset, dvvDesc.length, dvvDesc.stride); | ||||
| } | } | ||||
| DispatchCompute(count); | DispatchCompute(count); | ||||
| glUseProgram(0); | glUseProgram(activeProgram); | ||||
| glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT); | glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT); | ||||
| for (int i = 0; i < 16; ++i) { | for (int i = 0; i < 16; ++i) { | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, i, 0); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, i, 0); | ||||
| } | } | ||||
| return true; | return true; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | bool GLComputeEvaluator::EvalPatches(GLuint srcBuffer, | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, dvBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, dvBuffer); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 10, duuBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 10, duuBuffer); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 11, duvBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 11, duvBuffer); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 12, dvvBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 12, dvvBuffer); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 5, patchCoordsBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 5, patchCoordsBuffer); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 6, patchIndexBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 6, patchIndexBuffer); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 7, patchParamsBuffer); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 7, patchParamsBuffer); | ||||
| GLint activeProgram; | |||||
| glGetIntegerv(GL_CURRENT_PROGRAM, &activeProgram); | |||||
| glUseProgram(_patchKernel.program); | glUseProgram(_patchKernel.program); | ||||
| glUniform1i(_patchKernel.uniformSrcOffset, srcDesc.offset); | glUniform1i(_patchKernel.uniformSrcOffset, srcDesc.offset); | ||||
| glUniform1i(_patchKernel.uniformDstOffset, dstDesc.offset); | glUniform1i(_patchKernel.uniformDstOffset, dstDesc.offset); | ||||
| int patchArraySize = sizeof(PatchArray); | int patchArraySize = sizeof(PatchArray); | ||||
| glBindBuffer(GL_SHADER_STORAGE_BUFFER, _patchArraysSSBO); | glBindBuffer(GL_SHADER_STORAGE_BUFFER, _patchArraysSSBO); | ||||
| glBufferData( | glBufferData( | ||||
| Show All 17 Lines | if (_patchKernel.uniformDuvDesc > 0) { | ||||
| glUniform3i(_patchKernel.uniformDuvDesc, duvDesc.offset, duvDesc.length, duvDesc.stride); | glUniform3i(_patchKernel.uniformDuvDesc, duvDesc.offset, duvDesc.length, duvDesc.stride); | ||||
| } | } | ||||
| if (_patchKernel.uniformDvvDesc > 0) { | if (_patchKernel.uniformDvvDesc > 0) { | ||||
| glUniform3i(_patchKernel.uniformDvvDesc, dvvDesc.offset, dvvDesc.length, dvvDesc.stride); | glUniform3i(_patchKernel.uniformDvvDesc, dvvDesc.offset, dvvDesc.length, dvvDesc.stride); | ||||
| } | } | ||||
| DispatchCompute(numPatchCoords); | DispatchCompute(numPatchCoords); | ||||
| glUseProgram(0); | glUseProgram(activeProgram); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, 0); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, 0); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, 0); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, 0); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, 0); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, 0); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, 0); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, 0); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, 0); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, 0); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 5, 0); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 5, 0); | ||||
| glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 6, 0); | glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 6, 0); | ||||
| ▲ Show 20 Lines • Show All 102 Lines • Show Last 20 Lines | |||||