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

Unified Diff: gpu/command_buffer/client/gles2_implementation.cc

Issue 634083002: gpu: Compositor management of GpuMemoryBuffer instances. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cc-pre-chromium-image-refactor
Patch Set: rebase Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/client/gles2_implementation.cc
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index aabfa4517399d704eea0ace814a1c35af5214718..d68034f6294d20fd97348c7cb0da8aaf4bf50def 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -18,14 +18,12 @@
#include "base/bind.h"
#include "gpu/command_buffer/client/buffer_tracker.h"
#include "gpu/command_buffer/client/gpu_control.h"
-#include "gpu/command_buffer/client/gpu_memory_buffer_tracker.h"
#include "gpu/command_buffer/client/program_info_manager.h"
#include "gpu/command_buffer/client/query_tracker.h"
#include "gpu/command_buffer/client/transfer_buffer.h"
#include "gpu/command_buffer/client/vertex_array_object_manager.h"
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
#include "gpu/command_buffer/common/trace_event.h"
-#include "ui/gfx/gpu_memory_buffer.h"
#if defined(__native_client__) && !defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
#define GLES2_SUPPORT_CLIENT_SIDE_ARRAYS
@@ -191,7 +189,6 @@ bool GLES2Implementation::Initialize(
query_tracker_.reset(new QueryTracker(mapped_memory_.get()));
buffer_tracker_.reset(new BufferTracker(mapped_memory_.get()));
- gpu_memory_buffer_tracker_.reset(new GpuMemoryBufferTracker(gpu_control_));
query_id_allocator_.reset(new IdAllocator());
#if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
@@ -3937,10 +3934,10 @@ bool ValidImageUsage(GLenum usage) {
} // namespace
-GLuint GLES2Implementation::CreateImageCHROMIUMHelper(GLsizei width,
+GLuint GLES2Implementation::CreateImageCHROMIUMHelper(ClientBuffer buffer,
+ GLsizei width,
GLsizei height,
- GLenum internalformat,
- GLenum usage) {
+ GLenum internalformat) {
if (width <= 0) {
SetGLError(GL_INVALID_VALUE, "glCreateImageCHROMIUM", "width <= 0");
return 0;
@@ -3950,48 +3947,44 @@ GLuint GLES2Implementation::CreateImageCHROMIUMHelper(GLsizei width,
SetGLError(GL_INVALID_VALUE, "glCreateImageCHROMIUM", "height <= 0");
return 0;
}
+
+ if (!ValidImageFormat(internalformat)) {
+ SetGLError(GL_INVALID_VALUE, "glCreateImageCHROMIUM", "invalid format");
+ return 0;
+ }
+
// Flush the command stream to ensure ordering in case the newly
// returned image_id has recently been in use with a different buffer.
helper_->CommandBufferHelper::Flush();
-
- // Create new buffer.
- GLuint buffer_id = gpu_memory_buffer_tracker_->CreateBuffer(
- width, height, internalformat, usage);
- if (buffer_id == 0) {
- SetGLError(GL_OUT_OF_MEMORY, "glCreateImageCHROMIUM", "out of GPU memory.");
+ int32_t image_id =
+ gpu_control_->CreateImage(buffer, width, height, internalformat);
+ if (image_id < 0) {
+ SetGLError(GL_OUT_OF_MEMORY, "glCreateImageCHROMIUM", "image_id < 0");
return 0;
}
- return buffer_id;
+ return image_id;
}
-GLuint GLES2Implementation::CreateImageCHROMIUM(GLsizei width,
+GLuint GLES2Implementation::CreateImageCHROMIUM(ClientBuffer buffer,
+ GLsizei width,
GLsizei height,
- GLenum internalformat,
- GLenum usage) {
+ GLenum internalformat) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG(
- "[" << GetLogPrefix() << "] glCreateImageCHROMIUM(" << width << ", "
- << height << ", "
- << GLES2Util::GetStringTextureInternalFormat(internalformat) << ", "
- << GLES2Util::GetStringTextureInternalFormat(usage) << ")");
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateImageCHROMIUM(" << width
+ << ", " << height << ", "
+ << GLES2Util::GetStringImageInternalFormat(internalformat)
+ << ")");
GLuint image_id =
- CreateImageCHROMIUMHelper(width, height, internalformat, usage);
+ CreateImageCHROMIUMHelper(buffer, width, height, internalformat);
CheckGLError();
return image_id;
}
void GLES2Implementation::DestroyImageCHROMIUMHelper(GLuint image_id) {
- gfx::GpuMemoryBuffer* gpu_buffer = gpu_memory_buffer_tracker_->GetBuffer(
- image_id);
- if (!gpu_buffer) {
- SetGLError(GL_INVALID_OPERATION, "glDestroyImageCHROMIUM", "invalid image");
- return;
- }
-
// Flush the command stream to make sure all pending commands
// that may refer to the image_id are executed on the service side.
helper_->CommandBufferHelper::Flush();
- gpu_memory_buffer_tracker_->RemoveBuffer(image_id);
+ gpu_control_->DestroyImage(image_id);
}
void GLES2Implementation::DestroyImageCHROMIUM(GLuint image_id) {
@@ -4002,93 +3995,6 @@ void GLES2Implementation::DestroyImageCHROMIUM(GLuint image_id) {
CheckGLError();
}
-void GLES2Implementation::UnmapImageCHROMIUMHelper(GLuint image_id) {
- gfx::GpuMemoryBuffer* gpu_buffer = gpu_memory_buffer_tracker_->GetBuffer(
- image_id);
- if (!gpu_buffer) {
- SetGLError(GL_INVALID_OPERATION, "glUnmapImageCHROMIUM", "invalid image");
- return;
- }
-
- if (!gpu_buffer->IsMapped()) {
- SetGLError(GL_INVALID_OPERATION, "glUnmapImageCHROMIUM", "not mapped");
- return;
- }
- gpu_buffer->Unmap();
-}
-
-void GLES2Implementation::UnmapImageCHROMIUM(GLuint image_id) {
- GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUnmapImageCHROMIUM("
- << image_id << ")");
-
- UnmapImageCHROMIUMHelper(image_id);
- CheckGLError();
-}
-
-void* GLES2Implementation::MapImageCHROMIUMHelper(GLuint image_id) {
- gfx::GpuMemoryBuffer* gpu_buffer = gpu_memory_buffer_tracker_->GetBuffer(
- image_id);
- if (!gpu_buffer) {
- SetGLError(GL_INVALID_OPERATION, "glMapImageCHROMIUM", "invalid image");
- return NULL;
- }
-
- if (gpu_buffer->IsMapped()) {
- SetGLError(GL_INVALID_OPERATION, "glMapImageCHROMIUM", "already mapped");
- return NULL;
- }
-
- return gpu_buffer->Map();
-}
-
-void* GLES2Implementation::MapImageCHROMIUM(GLuint image_id) {
- GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapImageCHROMIUM(" << image_id
- << ")");
-
- void* mapped = MapImageCHROMIUMHelper(image_id);
- CheckGLError();
- return mapped;
-}
-
-void GLES2Implementation::GetImageParameterivCHROMIUMHelper(
- GLuint image_id, GLenum pname, GLint* params) {
- if (pname != GL_IMAGE_ROWBYTES_CHROMIUM) {
- SetGLError(GL_INVALID_ENUM, "glGetImageParameterivCHROMIUM",
- "invalid parameter");
- return;
- }
-
- gfx::GpuMemoryBuffer* gpu_buffer = gpu_memory_buffer_tracker_->GetBuffer(
- image_id);
- if (!gpu_buffer) {
- SetGLError(GL_INVALID_OPERATION, "glGetImageParameterivCHROMIUM",
- "invalid image");
- return;
- }
-
- if (!gpu_buffer->IsMapped()) {
- SetGLError(
- GL_INVALID_OPERATION, "glGetImageParameterivCHROMIUM", "not mapped");
- return;
- }
-
- *params = gpu_buffer->GetStride();
-}
-
-void GLES2Implementation::GetImageParameterivCHROMIUM(
- GLuint image_id, GLenum pname, GLint* params) {
- GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glImageParameterivCHROMIUM("
- << image_id << ", "
- << GLES2Util::GetStringBufferParameter(pname) << ", "
- << static_cast<const void*>(params) << ")");
- GetImageParameterivCHROMIUMHelper(image_id, pname, params);
- CheckGLError();
-}
-
GLuint GLES2Implementation::CreateGpuMemoryBufferImageCHROMIUMHelper(
GLsizei width,
GLsizei height,
@@ -4124,20 +4030,15 @@ GLuint GLES2Implementation::CreateGpuMemoryBufferImageCHROMIUMHelper(
// Flush the command stream to ensure ordering in case the newly
// returned image_id has recently been in use with a different buffer.
helper_->CommandBufferHelper::Flush();
-
- // Create new buffer.
- GLuint buffer_id = gpu_memory_buffer_tracker_->CreateBuffer(
- width,
- height,
- internalformat == GL_RGBA ? GL_RGBA8_OES : GL_RGB8_OES,
- usage);
- if (buffer_id == 0) {
+ int32_t image_id = gpu_control_->CreateGpuMemoryBufferImage(
+ width, height, internalformat, usage);
+ if (image_id < 0) {
SetGLError(GL_OUT_OF_MEMORY,
"glCreateGpuMemoryBufferImageCHROMIUM",
- "out of GPU memory");
+ "image_id < 0");
return 0;
}
- return buffer_id;
+ return image_id;
}
GLuint GLES2Implementation::CreateGpuMemoryBufferImageCHROMIUM(
« no previous file with comments | « gpu/command_buffer/client/gles2_implementation.h ('k') | gpu/command_buffer/client/gles2_implementation_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698