Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(641)

Side by Side Diff: src/gpu/gl/GrGLGpu.cpp

Issue 2301523003: Have GrSurfaceProxys and GrGpuResources draw from the same pool of unique ids (Closed)
Patch Set: update to ToT Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/effects/GrSingleTextureEffect.h ('k') | src/gpu/gl/GrGLRenderTarget.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "GrGLGpu.h" 8 #include "GrGLGpu.h"
9 #include "GrGLBuffer.h" 9 #include "GrGLBuffer.h"
10 #include "GrGLGLSL.h" 10 #include "GrGLGLSL.h"
(...skipping 2131 matching lines...) Expand 10 before | Expand all | Expand 10 after
2142 this->handleDirtyContext(); 2142 this->handleDirtyContext();
2143 2143
2144 // Index buffer state is tied to the vertex array. 2144 // Index buffer state is tied to the vertex array.
2145 if (kIndex_GrBufferType == type) { 2145 if (kIndex_GrBufferType == type) {
2146 this->bindVertexArray(0); 2146 this->bindVertexArray(0);
2147 } 2147 }
2148 2148
2149 SkASSERT(type >= 0 && type <= kLast_GrBufferType); 2149 SkASSERT(type >= 0 && type <= kLast_GrBufferType);
2150 auto& bufferState = fHWBufferState[type]; 2150 auto& bufferState = fHWBufferState[type];
2151 2151
2152 if (buffer->getUniqueID() != bufferState.fBoundBufferUniqueID) { 2152 if (buffer->uniqueID() != bufferState.fBoundBufferUniqueID) {
2153 if (buffer->isCPUBacked()) { 2153 if (buffer->isCPUBacked()) {
2154 if (!bufferState.fBufferZeroKnownBound) { 2154 if (!bufferState.fBufferZeroKnownBound) {
2155 GL_CALL(BindBuffer(bufferState.fGLTarget, 0)); 2155 GL_CALL(BindBuffer(bufferState.fGLTarget, 0));
2156 } 2156 }
2157 } else { 2157 } else {
2158 const GrGLBuffer* glBuffer = static_cast<const GrGLBuffer*>(buffer); 2158 const GrGLBuffer* glBuffer = static_cast<const GrGLBuffer*>(buffer);
2159 GL_CALL(BindBuffer(bufferState.fGLTarget, glBuffer->bufferID())); 2159 GL_CALL(BindBuffer(bufferState.fGLTarget, glBuffer->bufferID()));
2160 } 2160 }
2161 bufferState.fBufferZeroKnownBound = buffer->isCPUBacked(); 2161 bufferState.fBufferZeroKnownBound = buffer->isCPUBacked();
2162 bufferState.fBoundBufferUniqueID = buffer->getUniqueID(); 2162 bufferState.fBoundBufferUniqueID = buffer->uniqueID();
2163 } 2163 }
2164 2164
2165 return bufferState.fGLTarget; 2165 return bufferState.fGLTarget;
2166 } 2166 }
2167 2167
2168 void GrGLGpu::notifyBufferReleased(const GrGLBuffer* buffer) { 2168 void GrGLGpu::notifyBufferReleased(const GrGLBuffer* buffer) {
2169 if (buffer->hasAttachedToTexture()) { 2169 if (buffer->hasAttachedToTexture()) {
2170 // Detach this buffer from any textures to ensure the underlying memory is freed. 2170 // Detach this buffer from any textures to ensure the underlying memory is freed.
2171 uint32_t uniqueID = buffer->getUniqueID(); 2171 uint32_t uniqueID = buffer->uniqueID();
2172 for (int i = fHWMaxUsedBufferTextureUnit; i >= 0; --i) { 2172 for (int i = fHWMaxUsedBufferTextureUnit; i >= 0; --i) {
2173 auto& buffTex = fHWBufferTextures[i]; 2173 auto& buffTex = fHWBufferTextures[i];
2174 if (uniqueID != buffTex.fAttachedBufferUniqueID) { 2174 if (uniqueID != buffTex.fAttachedBufferUniqueID) {
2175 continue; 2175 continue;
2176 } 2176 }
2177 if (i == fHWMaxUsedBufferTextureUnit) { 2177 if (i == fHWMaxUsedBufferTextureUnit) {
2178 --fHWMaxUsedBufferTextureUnit; 2178 --fHWMaxUsedBufferTextureUnit;
2179 } 2179 }
2180 2180
2181 this->setTextureUnit(i); 2181 this->setTextureUnit(i);
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
2649 SkASSERT(fMSAAEnabled != kYes_TriState); 2649 SkASSERT(fMSAAEnabled != kYes_TriState);
2650 GL_CALL(Enable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); 2650 GL_CALL(Enable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE));
2651 this->stampPLSSetupRect(SkRect::MakeXYWH(-100.0f, -100.0f, 0.01f, 0.01f) ); 2651 this->stampPLSSetupRect(SkRect::MakeXYWH(-100.0f, -100.0f, 0.01f, 0.01f) );
2652 GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); 2652 GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE));
2653 } 2653 }
2654 } 2654 }
2655 2655
2656 void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bounds, bool disableSRGB) { 2656 void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bounds, bool disableSRGB) {
2657 SkASSERT(target); 2657 SkASSERT(target);
2658 2658
2659 uint32_t rtID = target->getUniqueID(); 2659 uint32_t rtID = target->uniqueID();
2660 if (fHWBoundRenderTargetUniqueID != rtID) { 2660 if (fHWBoundRenderTargetUniqueID != rtID) {
2661 fStats.incRenderTargetBinds(); 2661 fStats.incRenderTargetBinds();
2662 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, target->renderFBOID())); 2662 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, target->renderFBOID()));
2663 #ifdef SK_DEBUG 2663 #ifdef SK_DEBUG
2664 // don't do this check in Chromium -- this is causing 2664 // don't do this check in Chromium -- this is causing
2665 // lots of repeated command buffer flushes when the compositor is 2665 // lots of repeated command buffer flushes when the compositor is
2666 // rendering with Ganesh, which is really slow; even too slow for 2666 // rendering with Ganesh, which is really slow; even too slow for
2667 // Debug mode. 2667 // Debug mode.
2668 if (kChromium_GrGLDriver != this->glContext().driver()) { 2668 if (kChromium_GrGLDriver != this->glContext().driver()) {
2669 GrGLenum status; 2669 GrGLenum status;
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
3171 #endif 3171 #endif
3172 3172
3173 // If we created a rt/tex and rendered to it without using a texture and now we're texturing 3173 // If we created a rt/tex and rendered to it without using a texture and now we're texturing
3174 // from the rt it will still be the last bound texture, but it needs resolvi ng. So keep this 3174 // from the rt it will still be the last bound texture, but it needs resolvi ng. So keep this
3175 // out of the "last != next" check. 3175 // out of the "last != next" check.
3176 GrGLRenderTarget* texRT = static_cast<GrGLRenderTarget*>(texture->asRenderTa rget()); 3176 GrGLRenderTarget* texRT = static_cast<GrGLRenderTarget*>(texture->asRenderTa rget());
3177 if (texRT) { 3177 if (texRT) {
3178 this->onResolveRenderTarget(texRT); 3178 this->onResolveRenderTarget(texRT);
3179 } 3179 }
3180 3180
3181 uint32_t textureID = texture->getUniqueID(); 3181 uint32_t textureID = texture->uniqueID();
3182 GrGLenum target = texture->target(); 3182 GrGLenum target = texture->target();
3183 if (fHWBoundTextureUniqueIDs[unitIdx] != textureID) { 3183 if (fHWBoundTextureUniqueIDs[unitIdx] != textureID) {
3184 this->setTextureUnit(unitIdx); 3184 this->setTextureUnit(unitIdx);
3185 GL_CALL(BindTexture(target, texture->textureID())); 3185 GL_CALL(BindTexture(target, texture->textureID()));
3186 fHWBoundTextureUniqueIDs[unitIdx] = textureID; 3186 fHWBoundTextureUniqueIDs[unitIdx] = textureID;
3187 } 3187 }
3188 3188
3189 ResetTimestamp timestamp; 3189 ResetTimestamp timestamp;
3190 const GrGLTexture::TexParams& oldTexParams = texture->getCachedTexParams(&ti mestamp); 3190 const GrGLTexture::TexParams& oldTexParams = texture->getCachedTexParams(&ti mestamp);
3191 bool setAll = timestamp < this->getResetTimestamp(); 3191 bool setAll = timestamp < this->getResetTimestamp();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
3289 return; 3289 return;
3290 } 3290 }
3291 } 3291 }
3292 3292
3293 this->setTextureUnit(unitIdx); 3293 this->setTextureUnit(unitIdx);
3294 GL_CALL(BindTexture(GR_GL_TEXTURE_BUFFER, buffTex.fTextureID)); 3294 GL_CALL(BindTexture(GR_GL_TEXTURE_BUFFER, buffTex.fTextureID));
3295 3295
3296 buffTex.fKnownBound = true; 3296 buffTex.fKnownBound = true;
3297 } 3297 }
3298 3298
3299 if (buffer->getUniqueID() != buffTex.fAttachedBufferUniqueID || 3299 if (buffer->uniqueID() != buffTex.fAttachedBufferUniqueID ||
3300 buffTex.fTexelConfig != texelConfig) { 3300 buffTex.fTexelConfig != texelConfig) {
3301 3301
3302 this->setTextureUnit(unitIdx); 3302 this->setTextureUnit(unitIdx);
3303 GL_CALL(TexBuffer(GR_GL_TEXTURE_BUFFER, 3303 GL_CALL(TexBuffer(GR_GL_TEXTURE_BUFFER,
3304 this->glCaps().configSizedInternalFormat(texelConfig), 3304 this->glCaps().configSizedInternalFormat(texelConfig),
3305 buffer->bufferID())); 3305 buffer->bufferID()));
3306 3306
3307 buffTex.fTexelConfig = texelConfig; 3307 buffTex.fTexelConfig = texelConfig;
3308 buffTex.fAttachedBufferUniqueID = buffer->getUniqueID(); 3308 buffTex.fAttachedBufferUniqueID = buffer->uniqueID();
3309 3309
3310 if (this->glCaps().textureSwizzleSupport() && 3310 if (this->glCaps().textureSwizzleSupport() &&
3311 this->glCaps().configSwizzle(texelConfig) != buffTex.fSwizzle) { 3311 this->glCaps().configSwizzle(texelConfig) != buffTex.fSwizzle) {
3312 GrGLenum glSwizzle[4]; 3312 GrGLenum glSwizzle[4];
3313 get_tex_param_swizzle(texelConfig, this->glCaps(), glSwizzle); 3313 get_tex_param_swizzle(texelConfig, this->glCaps(), glSwizzle);
3314 this->setTextureSwizzle(unitIdx, GR_GL_TEXTURE_BUFFER, glSwizzle); 3314 this->setTextureSwizzle(unitIdx, GR_GL_TEXTURE_BUFFER, glSwizzle);
3315 buffTex.fSwizzle = this->glCaps().configSwizzle(texelConfig); 3315 buffTex.fSwizzle = this->glCaps().configSwizzle(texelConfig);
3316 } 3316 }
3317 3317
3318 buffer->setHasAttachedToTexture(); 3318 buffer->setHasAttachedToTexture();
(...skipping 1350 matching lines...) Expand 10 before | Expand all | Expand 10 after
4669 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || 4669 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() ||
4670 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { 4670 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) {
4671 copyParams->fFilter = GrTextureParams::kNone_FilterMode; 4671 copyParams->fFilter = GrTextureParams::kNone_FilterMode;
4672 copyParams->fWidth = texture->width(); 4672 copyParams->fWidth = texture->width();
4673 copyParams->fHeight = texture->height(); 4673 copyParams->fHeight = texture->height();
4674 return true; 4674 return true;
4675 } 4675 }
4676 } 4676 }
4677 return false; 4677 return false;
4678 } 4678 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrSingleTextureEffect.h ('k') | src/gpu/gl/GrGLRenderTarget.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698