diff options
author | Chris Dalton <csmartdalton@google.com> | 2018-01-23 14:06:50 -0700 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-01-23 21:29:10 +0000 |
commit | 27059d36d63284b1af2c25e0e5a52c17485c54d7 (patch) | |
tree | d2a8bb6c085dec3d800dd0f9922412ddf968ff94 /src/gpu/gl/GrGLVertexArray.cpp | |
parent | 80747ef591ff3c09c2b610eb21258132d1ff4ef5 (diff) |
ccpr: Use primitive restart feature on ARM
Bug: skia:
Change-Id: Ia7ab55f8b6ecdd674762f5197d35e8db58f07c01
Reviewed-on: https://skia-review.googlesource.com/98180
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/gl/GrGLVertexArray.cpp')
-rw-r--r-- | src/gpu/gl/GrGLVertexArray.cpp | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/src/gpu/gl/GrGLVertexArray.cpp b/src/gpu/gl/GrGLVertexArray.cpp index fa318c58bf..dbfa0f4f4a 100644 --- a/src/gpu/gl/GrGLVertexArray.cpp +++ b/src/gpu/gl/GrGLVertexArray.cpp @@ -149,24 +149,39 @@ void GrGLAttribArrayState::set(GrGLGpu* gpu, } } -void GrGLAttribArrayState::enableVertexArrays(const GrGLGpu* gpu, int enabledCount) { +void GrGLAttribArrayState::enableVertexArrays(const GrGLGpu* gpu, int enabledCount, + EnablePrimitiveRestart enablePrimitiveRestart) { SkASSERT(enabledCount <= fAttribArrayStates.count()); - if (fEnabledCountIsValid && enabledCount == fNumEnabledArrays) { - return; - } - int firstIdxToEnable = fEnabledCountIsValid ? fNumEnabledArrays : 0; - for (int i = firstIdxToEnable; i < enabledCount; ++i) { - GR_GL_CALL(gpu->glInterface(), EnableVertexAttribArray(i)); + if (!fEnableStateIsValid || enabledCount != fNumEnabledArrays) { + int firstIdxToEnable = fEnableStateIsValid ? fNumEnabledArrays : 0; + for (int i = firstIdxToEnable; i < enabledCount; ++i) { + GR_GL_CALL(gpu->glInterface(), EnableVertexAttribArray(i)); + } + + int endIdxToDisable = fEnableStateIsValid ? fNumEnabledArrays : fAttribArrayStates.count(); + for (int i = enabledCount; i < endIdxToDisable; ++i) { + GR_GL_CALL(gpu->glInterface(), DisableVertexAttribArray(i)); + } + + fNumEnabledArrays = enabledCount; } - int endIdxToDisable = fEnabledCountIsValid ? fNumEnabledArrays : fAttribArrayStates.count(); - for (int i = enabledCount; i < endIdxToDisable; ++i) { - GR_GL_CALL(gpu->glInterface(), DisableVertexAttribArray(i)); + SkASSERT(EnablePrimitiveRestart::kNo == enablePrimitiveRestart || + gpu->caps()->usePrimitiveRestart()); + + if (gpu->caps()->usePrimitiveRestart() && + (!fEnableStateIsValid || enablePrimitiveRestart != fPrimitiveRestartEnabled)) { + if (EnablePrimitiveRestart::kYes == enablePrimitiveRestart) { + GR_GL_CALL(gpu->glInterface(), Enable(GR_GL_PRIMITIVE_RESTART_FIXED_INDEX)); + } else { + GR_GL_CALL(gpu->glInterface(), Disable(GR_GL_PRIMITIVE_RESTART_FIXED_INDEX)); + } + + fPrimitiveRestartEnabled = enablePrimitiveRestart; } - fNumEnabledArrays = enabledCount; - fEnabledCountIsValid = true; + fEnableStateIsValid = true; } /////////////////////////////////////////////////////////////////////////////////////////////////// |