| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/texture_definition.h" | 5 #include "gpu/command_buffer/service/texture_definition.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <list> | 9 #include <list> |
| 10 | 10 |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 bool needs_wait_before_read; | 147 bool needs_wait_before_read; |
| 148 }; | 148 }; |
| 149 std::list<ClientInfo> client_infos_; | 149 std::list<ClientInfo> client_infos_; |
| 150 gl::GLImage* write_client_; | 150 gl::GLImage* write_client_; |
| 151 | 151 |
| 152 DISALLOW_COPY_AND_ASSIGN(NativeImageBufferEGL); | 152 DISALLOW_COPY_AND_ASSIGN(NativeImageBufferEGL); |
| 153 }; | 153 }; |
| 154 | 154 |
| 155 scoped_refptr<NativeImageBufferEGL> NativeImageBufferEGL::Create( | 155 scoped_refptr<NativeImageBufferEGL> NativeImageBufferEGL::Create( |
| 156 GLuint texture_id) { | 156 GLuint texture_id) { |
| 157 EGLDisplay egl_display = gfx::GLSurfaceEGL::GetHardwareDisplay(); | 157 EGLDisplay egl_display = gl::GLSurfaceEGL::GetHardwareDisplay(); |
| 158 EGLContext egl_context = eglGetCurrentContext(); | 158 EGLContext egl_context = eglGetCurrentContext(); |
| 159 | 159 |
| 160 DCHECK_NE(EGL_NO_CONTEXT, egl_context); | 160 DCHECK_NE(EGL_NO_CONTEXT, egl_context); |
| 161 DCHECK_NE(EGL_NO_DISPLAY, egl_display); | 161 DCHECK_NE(EGL_NO_DISPLAY, egl_display); |
| 162 DCHECK(glIsTexture(texture_id)); | 162 DCHECK(glIsTexture(texture_id)); |
| 163 | 163 |
| 164 DCHECK(gfx::g_driver_egl.ext.b_EGL_KHR_image_base && | 164 DCHECK(gl::g_driver_egl.ext.b_EGL_KHR_image_base && |
| 165 gfx::g_driver_egl.ext.b_EGL_KHR_gl_texture_2D_image && | 165 gl::g_driver_egl.ext.b_EGL_KHR_gl_texture_2D_image && |
| 166 gfx::g_driver_gl.ext.b_GL_OES_EGL_image); | 166 gl::g_driver_gl.ext.b_GL_OES_EGL_image); |
| 167 | 167 |
| 168 const EGLint egl_attrib_list[] = { | 168 const EGLint egl_attrib_list[] = { |
| 169 EGL_GL_TEXTURE_LEVEL_KHR, 0, EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE}; | 169 EGL_GL_TEXTURE_LEVEL_KHR, 0, EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE}; |
| 170 EGLClientBuffer egl_buffer = reinterpret_cast<EGLClientBuffer>(texture_id); | 170 EGLClientBuffer egl_buffer = reinterpret_cast<EGLClientBuffer>(texture_id); |
| 171 EGLenum egl_target = EGL_GL_TEXTURE_2D_KHR; | 171 EGLenum egl_target = EGL_GL_TEXTURE_2D_KHR; |
| 172 | 172 |
| 173 EGLImageKHR egl_image = eglCreateImageKHR( | 173 EGLImageKHR egl_image = eglCreateImageKHR( |
| 174 egl_display, egl_context, egl_target, egl_buffer, egl_attrib_list); | 174 egl_display, egl_context, egl_target, egl_buffer, egl_attrib_list); |
| 175 | 175 |
| 176 if (egl_image == EGL_NO_IMAGE_KHR) { | 176 if (egl_image == EGL_NO_IMAGE_KHR) { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 | 256 |
| 257 DISALLOW_COPY_AND_ASSIGN(NativeImageBufferStub); | 257 DISALLOW_COPY_AND_ASSIGN(NativeImageBufferStub); |
| 258 }; | 258 }; |
| 259 | 259 |
| 260 bool g_avoid_egl_target_texture_reuse = false; | 260 bool g_avoid_egl_target_texture_reuse = false; |
| 261 | 261 |
| 262 } // anonymous namespace | 262 } // anonymous namespace |
| 263 | 263 |
| 264 // static | 264 // static |
| 265 scoped_refptr<NativeImageBuffer> NativeImageBuffer::Create(GLuint texture_id) { | 265 scoped_refptr<NativeImageBuffer> NativeImageBuffer::Create(GLuint texture_id) { |
| 266 switch (gfx::GetGLImplementation()) { | 266 switch (gl::GetGLImplementation()) { |
| 267 #if !defined(OS_MACOSX) | 267 #if !defined(OS_MACOSX) |
| 268 case gfx::kGLImplementationEGLGLES2: | 268 case gl::kGLImplementationEGLGLES2: |
| 269 return NativeImageBufferEGL::Create(texture_id); | 269 return NativeImageBufferEGL::Create(texture_id); |
| 270 #endif | 270 #endif |
| 271 case gfx::kGLImplementationMockGL: | 271 case gl::kGLImplementationMockGL: |
| 272 return new NativeImageBufferStub; | 272 return new NativeImageBufferStub; |
| 273 default: | 273 default: |
| 274 NOTREACHED(); | 274 NOTREACHED(); |
| 275 return NULL; | 275 return NULL; |
| 276 } | 276 } |
| 277 } | 277 } |
| 278 | 278 |
| 279 // static | 279 // static |
| 280 void TextureDefinition::AvoidEGLTargetTextureReuse() { | 280 void TextureDefinition::AvoidEGLTargetTextureReuse() { |
| 281 g_avoid_egl_target_texture_reuse = true; | 281 g_avoid_egl_target_texture_reuse = true; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 GLuint texture_id; | 370 GLuint texture_id; |
| 371 glGenTextures(1, &texture_id); | 371 glGenTextures(1, &texture_id); |
| 372 | 372 |
| 373 Texture* texture(new Texture(texture_id)); | 373 Texture* texture(new Texture(texture_id)); |
| 374 UpdateTextureInternal(texture); | 374 UpdateTextureInternal(texture); |
| 375 | 375 |
| 376 return texture; | 376 return texture; |
| 377 } | 377 } |
| 378 | 378 |
| 379 void TextureDefinition::UpdateTextureInternal(Texture* texture) const { | 379 void TextureDefinition::UpdateTextureInternal(Texture* texture) const { |
| 380 gfx::ScopedTextureBinder texture_binder(target_, texture->service_id()); | 380 gl::ScopedTextureBinder texture_binder(target_, texture->service_id()); |
| 381 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter_); | 381 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter_); |
| 382 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter_); | 382 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter_); |
| 383 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s_); | 383 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s_); |
| 384 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t_); | 384 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t_); |
| 385 | 385 |
| 386 if (image_buffer_.get()) { | 386 if (image_buffer_.get()) { |
| 387 gl::GLImage* existing_image = texture->GetLevelImage(target_, 0); | 387 gl::GLImage* existing_image = texture->GetLevelImage(target_, 0); |
| 388 // Don't need to re-bind if already bound before. | 388 // Don't need to re-bind if already bound before. |
| 389 if (!existing_image || !image_buffer_->IsClient(existing_image)) { | 389 if (!existing_image || !image_buffer_->IsClient(existing_image)) { |
| 390 image_buffer_->BindToTexture(target_); | 390 image_buffer_->BindToTexture(target_); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 return true; | 465 return true; |
| 466 } | 466 } |
| 467 | 467 |
| 468 bool TextureDefinition::SafeToRenderFrom() const { | 468 bool TextureDefinition::SafeToRenderFrom() const { |
| 469 return level_info_.cleared_rect.Contains( | 469 return level_info_.cleared_rect.Contains( |
| 470 gfx::Rect(level_info_.width, level_info_.height)); | 470 gfx::Rect(level_info_.width, level_info_.height)); |
| 471 } | 471 } |
| 472 | 472 |
| 473 } // namespace gles2 | 473 } // namespace gles2 |
| 474 } // namespace gpu | 474 } // namespace gpu |
| OLD | NEW |