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

Unified Diff: gpu/perftests/texture_upload_perftest.cc

Issue 939553002: gpu: Render to a framebuffer object instead of an offscreen surface in gpu_perftests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Get rid of FramebufferObject class. Created 5 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/perftests/texture_upload_perftest.cc
diff --git a/gpu/perftests/texture_upload_perftest.cc b/gpu/perftests/texture_upload_perftest.cc
index f691c9e76d91f1b744f2609309ba91266e15f8b2..36de48ab776816401ae9ad91ff4f7ab290a605b4 100644
--- a/gpu/perftests/texture_upload_perftest.cc
+++ b/gpu/perftests/texture_upload_perftest.cc
@@ -96,12 +96,30 @@ class TextureUploadPerfTest : public testing::Test {
void SetUp() override {
// Initialize an offscreen surface and a gl context.
gfx::GLSurface::InitializeOneOff();
- surface_ = gfx::GLSurface::CreateOffscreenGLSurface(size_);
+ surface_ = gfx::GLSurface::CreateOffscreenGLSurface(gfx::Size(4, 4));
gl_context_ = gfx::GLContext::CreateGLContext(NULL, // share_group
surface_.get(),
gfx::PreferIntegratedGpu);
-
ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
+ glGenTextures(1, &color_texture_);
+ glBindTexture(GL_TEXTURE_2D, color_texture_);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size_.width(), size_.height(), 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
+
+ glGenFramebuffersEXT(1, &framebuffer_object_);
+ glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer_object_);
+
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D, color_texture_, 0);
+ DCHECK_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
+ glCheckFramebufferStatusEXT(GL_FRAMEBUFFER));
+
+ glViewport(0, 0, size_.width(), size_.height());
+
if (gpu_timing_.Initialize(gl_context_.get())) {
LOG(INFO) << "Gpu timing initialized with timer type: "
<< gpu_timing_.GetTimerTypeName();
@@ -110,7 +128,6 @@ class TextureUploadPerfTest : public testing::Test {
} else {
LOG(WARNING) << "Can't initialize gpu timing";
}
-
// Prepare a simple program and a vertex buffer that will be
// used to draw a quad on the offscreen surface.
vertex_shader_ = LoadShader(GL_VERTEX_SHADER, kVertexShader);
@@ -154,6 +171,13 @@ class TextureUploadPerfTest : public testing::Test {
if (vertex_buffer_ != 0) {
glDeleteShader(vertex_buffer_);
}
+ if (framebuffer_object_ != 0) {
reveman 2015/02/18 16:21:33 nit: I think just "if (framebuffer_object_)" is pr
Daniele Castagna 2015/02/18 18:47:07 We don't need them. I checked the documentation fo
+ glBindFramebufferEXT(GL_FRAMEBUFFER, 0);
+ glDeleteFramebuffersEXT(1, &framebuffer_object_);
+ }
+ if (color_texture_ != 0) {
reveman 2015/02/18 16:21:33 nit: maybe remove "!= 0"
Daniele Castagna 2015/02/18 18:47:07 Removed all the if (blabla_ != 0)
+ glDeleteTextures(1, &color_texture_);
+ }
gl_context_ = nullptr;
surface_ = nullptr;
@@ -167,6 +191,8 @@ class TextureUploadPerfTest : public testing::Test {
const GLenum format,
const GLenum type) {
ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
+ DCHECK_GT(framebuffer_object_, 0u);
reveman 2015/02/18 16:21:33 nit: DCHECK_NE as less than 0 is not possible
Daniele Castagna 2015/02/18 18:47:07 Done.
+ glBindFramebufferEXT(GL_FRAMEBUFFER, framebuffer_object_);
MeasurementTimers total_timers(&gpu_timing_);
GLuint texture_id = 0;
@@ -178,8 +204,8 @@ class TextureUploadPerfTest : public testing::Test {
glTexImage2D(GL_TEXTURE_2D, 0, format, size_.width(), size_.height(), 0,
format, type, &pixels[0]);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
CheckNoGlError();
@@ -222,11 +248,13 @@ class TextureUploadPerfTest : public testing::Test {
return measurements;
}
- const gfx::Size size_; // for the offscreen surface and the texture
+ const gfx::Size size_; // for the fbo and the texture
scoped_refptr<gfx::GLContext> gl_context_;
scoped_refptr<gfx::GLSurface> surface_;
GPUTiming gpu_timing_;
+ GLuint color_texture_ = 0;
+ GLuint framebuffer_object_ = 0;
GLuint vertex_shader_ = 0;
GLuint fragment_shader_ = 0;
GLuint program_object_ = 0;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698