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

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_srgb_converter.cc

Issue 2420813002: optimize precision for conversion from srgb to linear (Closed)
Patch Set: rebase code Created 4 years, 1 month 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 | « gpu/command_buffer/service/feature_info.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_srgb_converter.h" 5 #include "gpu/command_buffer/service/gles2_cmd_srgb_converter.h"
6 6
7 #include "gpu/command_buffer/service/texture_manager.h" 7 #include "gpu/command_buffer/service/texture_manager.h"
8 #include "ui/gl/gl_version_info.h" 8 #include "ui/gl/gl_version_info.h"
9 9
10 namespace { 10 namespace {
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 GLsizei height; 353 GLsizei height;
354 GLsizei depth; 354 GLsizei depth;
355 GLenum type = 0; 355 GLenum type = 0;
356 GLenum internal_format = 0; 356 GLenum internal_format = 0;
357 GLsizei base_level = tex->base_level(); 357 GLsizei base_level = tex->base_level();
358 tex->GetLevelSize(target, base_level, &width, &height, &depth); 358 tex->GetLevelSize(target, base_level, &width, &height, &depth);
359 tex->GetLevelType(target, base_level, &type, &internal_format); 359 tex->GetLevelType(target, base_level, &type, &internal_format);
360 const GLint mipmap_levels = 360 const GLint mipmap_levels =
361 TextureManager::ComputeMipMapCount(target, width, height, depth); 361 TextureManager::ComputeMipMapCount(target, width, height, depth);
362 362
363 // bind srgb_decoder_textures_[1] to draw framebuffer
364 glBindTexture(GL_TEXTURE_2D, srgb_converter_textures_[1]); 363 glBindTexture(GL_TEXTURE_2D, srgb_converter_textures_[1]);
365 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, 364 if (feature_info_->ext_color_buffer_float_available() &&
366 GL_UNSIGNED_BYTE, nullptr); 365 feature_info_->oes_texture_float_linear_available()) {
366 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA,
367 GL_UNSIGNED_BYTE, nullptr);
368 } else {
369 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA,
370 GL_UNSIGNED_BYTE, nullptr);
371 }
367 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, srgb_decoder_fbo_); 372 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, srgb_decoder_fbo_);
368 glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 373 glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
369 GL_TEXTURE_2D, srgb_converter_textures_[1], 0); 374 GL_TEXTURE_2D, srgb_converter_textures_[1], 0);
370 375
371 // bind texture with srgb format and render with srgb_converter_program_ 376 // bind texture with srgb format and render with srgb_converter_program_
372 glUseProgram(srgb_converter_program_); 377 glUseProgram(srgb_converter_program_);
373 glViewport(0, 0, width, height); 378 glViewport(0, 0, width, height);
374 glDisable(GL_SCISSOR_TEST); 379 glDisable(GL_SCISSOR_TEST);
375 glDisable(GL_DEPTH_TEST); 380 glDisable(GL_DEPTH_TEST);
376 glDisable(GL_STENCIL_TEST); 381 glDisable(GL_STENCIL_TEST);
377 glDisable(GL_CULL_FACE); 382 glDisable(GL_CULL_FACE);
378 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 383 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
379 glDepthMask(GL_FALSE); 384 glDepthMask(GL_FALSE);
380 glDisable(GL_BLEND); 385 glDisable(GL_BLEND);
381 glDisable(GL_DITHER); 386 glDisable(GL_DITHER);
382 387
383 glBindVertexArrayOES(srgb_converter_vao_); 388 glBindVertexArrayOES(srgb_converter_vao_);
384 glActiveTexture(GL_TEXTURE0); 389 glActiveTexture(GL_TEXTURE0);
385 glBindTexture(GL_TEXTURE_2D, tex->service_id()); 390 glBindTexture(GL_TEXTURE_2D, tex->service_id());
386 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 391 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
387 392
388 glDrawArrays(GL_TRIANGLES, 0, 6); 393 glDrawArrays(GL_TRIANGLES, 0, 6);
389 394
390 // generateMipmap for srgb_decoder_textures_[1]
391 glBindTexture(GL_TEXTURE_2D, srgb_converter_textures_[1]); 395 glBindTexture(GL_TEXTURE_2D, srgb_converter_textures_[1]);
392 glGenerateMipmapEXT(GL_TEXTURE_2D); 396 glGenerateMipmapEXT(GL_TEXTURE_2D);
393 397
394 // bind tex with rgba format and render with srgb_converter_program_ 398 // bind tex with rgba format and render with srgb_converter_program_
395 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, srgb_encoder_fbo_); 399 glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, srgb_encoder_fbo_);
396 glBindTexture(GL_TEXTURE_2D, srgb_converter_textures_[1]); 400 glBindTexture(GL_TEXTURE_2D, srgb_converter_textures_[1]);
397 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, 401 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
398 GL_NEAREST_MIPMAP_NEAREST); 402 GL_NEAREST_MIPMAP_NEAREST);
399 width >>= 1; 403 width >>= 1;
400 height >>= 1; 404 height >>= 1;
(...skipping 23 matching lines...) Expand all
424 decoder->RestoreActiveTexture(); 428 decoder->RestoreActiveTexture();
425 decoder->RestoreProgramBindings(); 429 decoder->RestoreProgramBindings();
426 decoder->RestoreBufferBindings(); 430 decoder->RestoreBufferBindings();
427 decoder->RestoreFramebufferBindings(); 431 decoder->RestoreFramebufferBindings();
428 decoder->RestoreGlobalState(); 432 decoder->RestoreGlobalState();
429 decoder->RestoreTextureState(tex->service_id()); 433 decoder->RestoreTextureState(tex->service_id());
430 } 434 }
431 435
432 } // namespace gles2. 436 } // namespace gles2.
433 } // namespace gpu 437 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/feature_info.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698