Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
index b34e6909a82681ff189bf3e9dd063074748a2a8b..15e5376177728fd2a28759bf2c0923effd2f46c4 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -60,6 +60,7 @@ |
#include "gpu/command_buffer/service/query_manager.h" |
#include "gpu/command_buffer/service/renderbuffer_manager.h" |
#include "gpu/command_buffer/service/sampler_manager.h" |
+#include "gpu/command_buffer/service/service_discardable_manager.h" |
#include "gpu/command_buffer/service/shader_manager.h" |
#include "gpu/command_buffer/service/shader_translator.h" |
#include "gpu/command_buffer/service/texture_manager.h" |
@@ -4211,6 +4212,9 @@ void GLES2DecoderImpl::DeleteTexturesHelper(GLsizei n, |
->UnbindTexture(GL_FRAMEBUFFER, texture_ref); |
} |
} |
+ |
+ GetContextGroup()->discardable_manager()->OnTextureDeleted(client_id, |
+ group_.get()); |
RemoveTexture(client_id); |
} |
} |
@@ -19576,6 +19580,43 @@ void GLES2DecoderImpl::RestoreAllExternalTextureBindingsIfNeeded() { |
texture_manager()->GetServiceIdGeneration(); |
} |
+error::Error GLES2DecoderImpl::HandleInitializeDiscardableTextureCHROMIUM( |
+ uint32_t immediate_data_size, |
+ const volatile void* cmd_data) { |
+ const volatile gles2::cmds::InitializeDiscardableTextureCHROMIUM& c = |
+ *static_cast< |
+ const volatile gles2::cmds::InitializeDiscardableTextureCHROMIUM*>( |
+ cmd_data); |
+ TextureRef* texture = texture_manager()->GetTexture(c.texture_id); |
+ if (!texture) { |
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, |
+ "glInitializeDiscardableTextureCHROMIUM", |
+ "Invalid texture ID"); |
+ return error::kNoError; |
+ } |
+ size_t size = texture->texture()->estimated_size(); |
+ ServiceDiscardableHandle handle(GetSharedMemoryBuffer(c.shm_id), c.shm_offset, |
+ c.shm_id); |
+ GetContextGroup()->discardable_manager()->InsertLockedTexture( |
+ c.texture_id, size, group_.get(), std::move(handle)); |
+ return error::kNoError; |
+} |
+ |
+error::Error GLES2DecoderImpl::HandleUnlockDiscardableTextureCHROMIUM( |
+ uint32_t immediate_data_size, |
+ const volatile void* cmd_data) { |
+ const volatile gles2::cmds::UnlockDiscardableTextureCHROMIUM& c = |
+ *static_cast< |
+ const volatile gles2::cmds::UnlockDiscardableTextureCHROMIUM*>( |
+ cmd_data); |
+ if (!GetContextGroup()->discardable_manager()->UnlockTexture(c.texture_id, |
+ group_.get())) { |
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glUnlockDiscardableTextureCHROMIUM", |
+ "Texture ID not initialized"); |
+ } |
+ return error::kNoError; |
+} |
+ |
// Include the auto-generated part of this file. We split this because it means |
// we can easily edit the non-auto generated parts right here in this file |
// instead of having to edit some template or the code generator. |