OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // A class to emulate GLES2 over command buffers. | 5 // A class to emulate GLES2 over command buffers. |
6 | 6 |
7 #include "gpu/command_buffer/client/gles2_implementation.h" | 7 #include "gpu/command_buffer/client/gles2_implementation.h" |
8 | 8 |
9 #include <GLES2/gl2.h> | 9 #include <GLES2/gl2.h> |
10 #include <GLES2/gl2ext.h> | 10 #include <GLES2/gl2ext.h> |
(...skipping 2362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2373 "glCompressedTexSubImage2D", offset, image_size); | 2373 "glCompressedTexSubImage2D", offset, image_size); |
2374 if (buffer && buffer->shm_id() != -1) { | 2374 if (buffer && buffer->shm_id() != -1) { |
2375 helper_->CompressedTexSubImage2D( | 2375 helper_->CompressedTexSubImage2D( |
2376 target, level, xoffset, yoffset, width, height, format, image_size, | 2376 target, level, xoffset, yoffset, width, height, format, image_size, |
2377 buffer->shm_id(), buffer->shm_offset() + offset); | 2377 buffer->shm_id(), buffer->shm_offset() + offset); |
2378 buffer->set_last_usage_token(helper_->InsertToken()); | 2378 buffer->set_last_usage_token(helper_->InsertToken()); |
2379 CheckGLError(); | 2379 CheckGLError(); |
2380 } | 2380 } |
2381 return; | 2381 return; |
2382 } | 2382 } |
2383 SetBucketContents(kResultBucketId, data, image_size); | 2383 if (bound_pixel_unpack_buffer_) { |
2384 helper_->CompressedTexSubImage2DBucket( | 2384 helper_->CompressedTexSubImage2D( |
2385 target, level, xoffset, yoffset, width, height, format, kResultBucketId); | 2385 target, level, xoffset, yoffset, width, height, format, image_size, |
2386 // Free the bucket. This is not required but it does free up the memory. | 2386 0, ToGLuint(data)); |
2387 // and we don't have to wait for the result so from the client's perspective | 2387 } else { |
2388 // it's cheap. | 2388 SetBucketContents(kResultBucketId, data, image_size); |
2389 helper_->SetBucketSize(kResultBucketId, 0); | 2389 helper_->CompressedTexSubImage2DBucket( |
| 2390 target, level, xoffset, yoffset, width, height, format, |
| 2391 kResultBucketId); |
| 2392 // Free the bucket. This is not required but it does free up the memory. |
| 2393 // and we don't have to wait for the result so from the client's perspective |
| 2394 // it's cheap. |
| 2395 helper_->SetBucketSize(kResultBucketId, 0); |
| 2396 } |
2390 CheckGLError(); | 2397 CheckGLError(); |
2391 } | 2398 } |
2392 | 2399 |
2393 void GLES2Implementation::CompressedTexImage3D( | 2400 void GLES2Implementation::CompressedTexImage3D( |
2394 GLenum target, GLint level, GLenum internalformat, GLsizei width, | 2401 GLenum target, GLint level, GLenum internalformat, GLsizei width, |
2395 GLsizei height, GLsizei depth, GLint border, GLsizei image_size, | 2402 GLsizei height, GLsizei depth, GLint border, GLsizei image_size, |
2396 const void* data) { | 2403 const void* data) { |
2397 GPU_CLIENT_SINGLE_THREAD_CHECK(); | 2404 GPU_CLIENT_SINGLE_THREAD_CHECK(); |
2398 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCompressedTexImage3D(" | 2405 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCompressedTexImage3D(" |
2399 << GLES2Util::GetStringTexture3DTarget(target) << ", " << level << ", " | 2406 << GLES2Util::GetStringTexture3DTarget(target) << ", " << level << ", " |
(...skipping 16 matching lines...) Expand all Loading... |
2416 bound_pixel_unpack_transfer_buffer_id_, | 2423 bound_pixel_unpack_transfer_buffer_id_, |
2417 "glCompressedTexImage3D", offset, image_size); | 2424 "glCompressedTexImage3D", offset, image_size); |
2418 if (buffer && buffer->shm_id() != -1) { | 2425 if (buffer && buffer->shm_id() != -1) { |
2419 helper_->CompressedTexImage3D( | 2426 helper_->CompressedTexImage3D( |
2420 target, level, internalformat, width, height, depth, image_size, | 2427 target, level, internalformat, width, height, depth, image_size, |
2421 buffer->shm_id(), buffer->shm_offset() + offset); | 2428 buffer->shm_id(), buffer->shm_offset() + offset); |
2422 buffer->set_last_usage_token(helper_->InsertToken()); | 2429 buffer->set_last_usage_token(helper_->InsertToken()); |
2423 } | 2430 } |
2424 return; | 2431 return; |
2425 } | 2432 } |
2426 if (data) { | 2433 if (bound_pixel_unpack_buffer_) { |
| 2434 helper_->CompressedTexImage3D( |
| 2435 target, level, internalformat, width, height, depth, image_size, |
| 2436 0, ToGLuint(data)); |
| 2437 } else if (data) { |
2427 SetBucketContents(kResultBucketId, data, image_size); | 2438 SetBucketContents(kResultBucketId, data, image_size); |
2428 helper_->CompressedTexImage3DBucket(target, level, internalformat, width, | 2439 helper_->CompressedTexImage3DBucket(target, level, internalformat, width, |
2429 height, depth, kResultBucketId); | 2440 height, depth, kResultBucketId); |
2430 // Free the bucket. This is not required but it does free up the memory. | 2441 // Free the bucket. This is not required but it does free up the memory. |
2431 // and we don't have to wait for the result so from the client's perspective | 2442 // and we don't have to wait for the result so from the client's perspective |
2432 // it's cheap. | 2443 // it's cheap. |
2433 helper_->SetBucketSize(kResultBucketId, 0); | 2444 helper_->SetBucketSize(kResultBucketId, 0); |
2434 } else { | 2445 } else { |
2435 helper_->CompressedTexImage3D(target, level, internalformat, width, height, | 2446 helper_->CompressedTexImage3D(target, level, internalformat, width, height, |
2436 depth, image_size, 0, 0); | 2447 depth, image_size, 0, 0); |
(...skipping 28 matching lines...) Expand all Loading... |
2465 if (buffer && buffer->shm_id() != -1) { | 2476 if (buffer && buffer->shm_id() != -1) { |
2466 helper_->CompressedTexSubImage3D( | 2477 helper_->CompressedTexSubImage3D( |
2467 target, level, xoffset, yoffset, zoffset, | 2478 target, level, xoffset, yoffset, zoffset, |
2468 width, height, depth, format, image_size, | 2479 width, height, depth, format, image_size, |
2469 buffer->shm_id(), buffer->shm_offset() + offset); | 2480 buffer->shm_id(), buffer->shm_offset() + offset); |
2470 buffer->set_last_usage_token(helper_->InsertToken()); | 2481 buffer->set_last_usage_token(helper_->InsertToken()); |
2471 CheckGLError(); | 2482 CheckGLError(); |
2472 } | 2483 } |
2473 return; | 2484 return; |
2474 } | 2485 } |
2475 SetBucketContents(kResultBucketId, data, image_size); | 2486 if (bound_pixel_unpack_buffer_) { |
2476 helper_->CompressedTexSubImage3DBucket( | 2487 helper_->CompressedTexSubImage3D( |
2477 target, level, xoffset, yoffset, zoffset, width, height, depth, format, | 2488 target, level, xoffset, yoffset, zoffset, width, height, depth, format, |
2478 kResultBucketId); | 2489 image_size, 0, ToGLuint(data)); |
2479 // Free the bucket. This is not required but it does free up the memory. | 2490 } else { |
2480 // and we don't have to wait for the result so from the client's perspective | 2491 SetBucketContents(kResultBucketId, data, image_size); |
2481 // it's cheap. | 2492 helper_->CompressedTexSubImage3DBucket( |
2482 helper_->SetBucketSize(kResultBucketId, 0); | 2493 target, level, xoffset, yoffset, zoffset, width, height, depth, format, |
| 2494 kResultBucketId); |
| 2495 // Free the bucket. This is not required but it does free up the memory. |
| 2496 // and we don't have to wait for the result so from the client's perspective |
| 2497 // it's cheap. |
| 2498 helper_->SetBucketSize(kResultBucketId, 0); |
| 2499 } |
2483 CheckGLError(); | 2500 CheckGLError(); |
2484 } | 2501 } |
2485 | 2502 |
2486 PixelStoreParams GLES2Implementation::GetUnpackParameters(Dimension dimension) { | 2503 PixelStoreParams GLES2Implementation::GetUnpackParameters(Dimension dimension) { |
2487 PixelStoreParams params; | 2504 PixelStoreParams params; |
2488 params.alignment = unpack_alignment_; | 2505 params.alignment = unpack_alignment_; |
2489 params.row_length = unpack_row_length_; | 2506 params.row_length = unpack_row_length_; |
2490 params.skip_pixels = unpack_skip_pixels_; | 2507 params.skip_pixels = unpack_skip_pixels_; |
2491 params.skip_rows = unpack_skip_rows_; | 2508 params.skip_rows = unpack_skip_rows_; |
2492 if (dimension == k3D) { | 2509 if (dimension == k3D) { |
(...skipping 4515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7008 cached_extensions_.clear(); | 7025 cached_extensions_.clear(); |
7009 } | 7026 } |
7010 | 7027 |
7011 // Include the auto-generated part of this file. We split this because it means | 7028 // Include the auto-generated part of this file. We split this because it means |
7012 // we can easily edit the non-auto generated parts right here in this file | 7029 // we can easily edit the non-auto generated parts right here in this file |
7013 // instead of having to edit some template or the code generator. | 7030 // instead of having to edit some template or the code generator. |
7014 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" | 7031 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" |
7015 | 7032 |
7016 } // namespace gles2 | 7033 } // namespace gles2 |
7017 } // namespace gpu | 7034 } // namespace gpu |
OLD | NEW |