Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "../client/gles2_implementation.h" | 7 #include "../client/gles2_implementation.h" |
| 8 #include <GLES2/gles2_command_buffer.h> | 8 #include <GLES2/gles2_command_buffer.h> |
| 9 #include "../client/mapped_memory.h" | 9 #include "../client/mapped_memory.h" |
| 10 #include "../common/gles2_cmd_utils.h" | 10 #include "../common/gles2_cmd_utils.h" |
| (...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 793 GPU_CLIENT_LOG("[" << this << "] glSwapBuffers()"); | 793 GPU_CLIENT_LOG("[" << this << "] glSwapBuffers()"); |
| 794 // TODO(piman): Strictly speaking we'd want to insert the token after the | 794 // TODO(piman): Strictly speaking we'd want to insert the token after the |
| 795 // swap, but the state update with the updated token might not have happened | 795 // swap, but the state update with the updated token might not have happened |
| 796 // by the time the SwapBuffer callback gets called, forcing us to synchronize | 796 // by the time the SwapBuffer callback gets called, forcing us to synchronize |
| 797 // with the GPU process more than needed. So instead, make it happen before. | 797 // with the GPU process more than needed. So instead, make it happen before. |
| 798 // All it means is that we could be slightly looser on the kMaxSwapBuffers | 798 // All it means is that we could be slightly looser on the kMaxSwapBuffers |
| 799 // semantics if the client doesn't use the callback mechanism, and by chance | 799 // semantics if the client doesn't use the callback mechanism, and by chance |
| 800 // the scheduler yields between the InsertToken and the SwapBuffers. | 800 // the scheduler yields between the InsertToken and the SwapBuffers. |
| 801 swap_buffers_tokens_.push(helper_->InsertToken()); | 801 swap_buffers_tokens_.push(helper_->InsertToken()); |
| 802 helper_->SwapBuffers(); | 802 helper_->SwapBuffers(); |
| 803 helper_->YieldScheduler(); | |
| 804 helper_->CommandBufferHelper::Flush(); | 803 helper_->CommandBufferHelper::Flush(); |
| 805 // Wait if we added too many swap buffers. | 804 // Wait if we added too many swap buffers. |
| 806 if (swap_buffers_tokens_.size() > kMaxSwapBuffers) { | 805 if (swap_buffers_tokens_.size() > kMaxSwapBuffers) { |
| 807 helper_->WaitForToken(swap_buffers_tokens_.front()); | 806 helper_->WaitForToken(swap_buffers_tokens_.front()); |
| 808 swap_buffers_tokens_.pop(); | 807 swap_buffers_tokens_.pop(); |
| 809 } | 808 } |
| 810 } | 809 } |
| 811 | 810 |
| 812 void GLES2Implementation::CopyTextureToParentTextureCHROMIUM( | 811 void GLES2Implementation::CopyTextureToParentTextureCHROMIUM( |
| 813 GLuint client_child_id, GLuint client_parent_id) { | 812 GLuint client_child_id, GLuint client_parent_id) { |
| 814 GPU_CLIENT_LOG("[" << this << "] glCopyTextureToParentTextureCHROMIUM(" | 813 GPU_CLIENT_LOG("[" << this << "] glCopyTextureToParentTextureCHROMIUM(" |
| 815 << client_child_id << ", " | 814 << client_child_id << ", " |
| 816 << client_parent_id << ")"); | 815 << client_parent_id << ")"); |
| 817 helper_->CopyTextureToParentTextureCHROMIUM(client_child_id, | 816 helper_->CopyTextureToParentTextureCHROMIUM(client_child_id, |
| 818 client_parent_id); | 817 client_parent_id); |
| 819 } | 818 } |
| 820 | 819 |
| 820 void GLES2Implementation::ResizeCHROMIUM(GLuint width, GLuint height) { | |
| 821 GPU_CLIENT_LOG("[" << this << "] glResizeCHROMIUM(" | |
| 822 << width << ", " << height << ")"); | |
| 823 helper_->ResizeCHROMIUM(width, height); | |
| 824 | |
| 825 // ResizeCHROMIUM might unschedule. Make sure it is flushed so that subsequent | |
| 826 // commands are not issued out-of-order with other command buffers. | |
| 827 helper_->CommandBufferHelper::Flush(); | |
|
piman
2011/07/09 20:40:22
It took me a while to figure this out, even with t
jbates
2011/07/11 18:39:50
I'm not sure why this Flush is needed. Why does ge
apatrick_chromium
2011/07/11 21:25:45
It's complicated and confusing and liable to cause
| |
| 828 } | |
| 829 | |
| 821 void GLES2Implementation::GenSharedIdsCHROMIUM( | 830 void GLES2Implementation::GenSharedIdsCHROMIUM( |
| 822 GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) { | 831 GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) { |
| 823 GPU_CLIENT_LOG("[" << this << "] glGenSharedIdsCHROMIUMTextures(" | 832 GPU_CLIENT_LOG("[" << this << "] glGenSharedIdsCHROMIUMTextures(" |
| 824 << namespace_id << ", " << id_offset << ", " << n << ", " << | 833 << namespace_id << ", " << id_offset << ", " << n << ", " << |
| 825 static_cast<void*>(ids) << ")"); | 834 static_cast<void*>(ids) << ")"); |
| 826 GPU_CLIENT_LOG_CODE_BLOCK({ | 835 GPU_CLIENT_LOG_CODE_BLOCK({ |
| 827 for (GLsizei i = 0; i < n; ++i) { | 836 for (GLsizei i = 0; i < n; ++i) { |
| 828 GPU_CLIENT_LOG(" " << i << ": " << ids[i]); | 837 GPU_CLIENT_LOG(" " << i << ": " << ids[i]); |
| 829 } | 838 } |
| 830 }); | 839 }); |
| (...skipping 1310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2141 GPU_CLIENT_LOG(" returned"); | 2150 GPU_CLIENT_LOG(" returned"); |
| 2142 GPU_CLIENT_LOG_CODE_BLOCK({ | 2151 GPU_CLIENT_LOG_CODE_BLOCK({ |
| 2143 for (int i = 0; i < num_results; ++i) { | 2152 for (int i = 0; i < num_results; ++i) { |
| 2144 GPU_CLIENT_LOG(" " << i << ": " << (results[i])); | 2153 GPU_CLIENT_LOG(" " << i << ": " << (results[i])); |
| 2145 } | 2154 } |
| 2146 }); | 2155 }); |
| 2147 } | 2156 } |
| 2148 | 2157 |
| 2149 } // namespace gles2 | 2158 } // namespace gles2 |
| 2150 } // namespace gpu | 2159 } // namespace gpu |
| OLD | NEW |