aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/GrGLVertexArray.cpp
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2018-01-23 14:06:50 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-01-23 21:29:10 +0000
commit27059d36d63284b1af2c25e0e5a52c17485c54d7 (patch)
treed2a8bb6c085dec3d800dd0f9922412ddf968ff94 /src/gpu/gl/GrGLVertexArray.cpp
parent80747ef591ff3c09c2b610eb21258132d1ff4ef5 (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.cpp39
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;
}
///////////////////////////////////////////////////////////////////////////////////////////////////