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 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" | 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "base/numerics/safe_math.h" | 24 #include "base/numerics/safe_math.h" |
25 #include "base/strings/string_number_conversions.h" | 25 #include "base/strings/string_number_conversions.h" |
26 #include "base/strings/stringprintf.h" | 26 #include "base/strings/stringprintf.h" |
27 #include "base/trace_event/trace_event.h" | 27 #include "base/trace_event/trace_event.h" |
28 #include "base/trace_event/trace_event_synthetic_delay.h" | 28 #include "base/trace_event/trace_event_synthetic_delay.h" |
29 #include "build/build_config.h" | 29 #include "build/build_config.h" |
30 #include "gpu/command_buffer/common/debug_marker_manager.h" | 30 #include "gpu/command_buffer/common/debug_marker_manager.h" |
31 #include "gpu/command_buffer/common/gles2_cmd_format.h" | 31 #include "gpu/command_buffer/common/gles2_cmd_format.h" |
32 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 32 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
33 #include "gpu/command_buffer/common/mailbox.h" | 33 #include "gpu/command_buffer/common/mailbox.h" |
| 34 #include "gpu/command_buffer/common/sync_token.h" |
34 #include "gpu/command_buffer/service/buffer_manager.h" | 35 #include "gpu/command_buffer/service/buffer_manager.h" |
35 #include "gpu/command_buffer/service/context_group.h" | 36 #include "gpu/command_buffer/service/context_group.h" |
36 #include "gpu/command_buffer/service/context_state.h" | 37 #include "gpu/command_buffer/service/context_state.h" |
37 #include "gpu/command_buffer/service/error_state.h" | 38 #include "gpu/command_buffer/service/error_state.h" |
38 #include "gpu/command_buffer/service/feature_info.h" | 39 #include "gpu/command_buffer/service/feature_info.h" |
39 #include "gpu/command_buffer/service/framebuffer_manager.h" | 40 #include "gpu/command_buffer/service/framebuffer_manager.h" |
40 #include "gpu/command_buffer/service/gl_stream_texture_image.h" | 41 #include "gpu/command_buffer/service/gl_stream_texture_image.h" |
41 #include "gpu/command_buffer/service/gl_utils.h" | 42 #include "gpu/command_buffer/service/gl_utils.h" |
42 #include "gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa
_intel.h" | 43 #include "gpu/command_buffer/service/gles2_cmd_apply_framebuffer_attachment_cmaa
_intel.h" |
43 #include "gpu/command_buffer/service/gles2_cmd_clear_framebuffer.h" | 44 #include "gpu/command_buffer/service/gles2_cmd_clear_framebuffer.h" |
(...skipping 543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 void BeginDecoding() override; | 588 void BeginDecoding() override; |
588 void EndDecoding() override; | 589 void EndDecoding() override; |
589 | 590 |
590 ErrorState* GetErrorState() override; | 591 ErrorState* GetErrorState() override; |
591 const ContextState* GetContextState() override { return &state_; } | 592 const ContextState* GetContextState() override { return &state_; } |
592 scoped_refptr<ShaderTranslatorInterface> GetTranslator(GLenum type) override; | 593 scoped_refptr<ShaderTranslatorInterface> GetTranslator(GLenum type) override; |
593 | 594 |
594 void SetShaderCacheCallback(const ShaderCacheCallback& callback) override; | 595 void SetShaderCacheCallback(const ShaderCacheCallback& callback) override; |
595 void SetFenceSyncReleaseCallback( | 596 void SetFenceSyncReleaseCallback( |
596 const FenceSyncReleaseCallback& callback) override; | 597 const FenceSyncReleaseCallback& callback) override; |
597 void SetWaitFenceSyncCallback(const WaitFenceSyncCallback& callback) override; | 598 void SetWaitSyncTokenCallback(const WaitSyncTokenCallback& callback) override; |
598 | 599 |
599 void SetDescheduleUntilFinishedCallback( | 600 void SetDescheduleUntilFinishedCallback( |
600 const NoParamCallback& callback) override; | 601 const NoParamCallback& callback) override; |
601 void SetRescheduleAfterFinishedCallback( | 602 void SetRescheduleAfterFinishedCallback( |
602 const NoParamCallback& callback) override; | 603 const NoParamCallback& callback) override; |
603 | 604 |
604 void SetIgnoreCachedStateForTest(bool ignore) override; | 605 void SetIgnoreCachedStateForTest(bool ignore) override; |
605 void SetForceShaderNameHashingForTest(bool force) override; | 606 void SetForceShaderNameHashingForTest(bool force) override; |
606 uint32_t GetAndClearBackbufferClearBitsForTest() override; | 607 uint32_t GetAndClearBackbufferClearBitsForTest() override; |
607 void ProcessFinishedAsyncTransfers(); | 608 void ProcessFinishedAsyncTransfers(); |
(...skipping 1684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2292 // Whether the client requested an offscreen buffer with an alpha channel. | 2293 // Whether the client requested an offscreen buffer with an alpha channel. |
2293 bool offscreen_buffer_should_have_alpha_; | 2294 bool offscreen_buffer_should_have_alpha_; |
2294 | 2295 |
2295 std::unique_ptr<QueryManager> query_manager_; | 2296 std::unique_ptr<QueryManager> query_manager_; |
2296 | 2297 |
2297 std::unique_ptr<VertexArrayManager> vertex_array_manager_; | 2298 std::unique_ptr<VertexArrayManager> vertex_array_manager_; |
2298 | 2299 |
2299 std::unique_ptr<ImageManager> image_manager_; | 2300 std::unique_ptr<ImageManager> image_manager_; |
2300 | 2301 |
2301 FenceSyncReleaseCallback fence_sync_release_callback_; | 2302 FenceSyncReleaseCallback fence_sync_release_callback_; |
2302 WaitFenceSyncCallback wait_fence_sync_callback_; | 2303 WaitSyncTokenCallback wait_sync_token_callback_; |
2303 NoParamCallback deschedule_until_finished_callback_; | 2304 NoParamCallback deschedule_until_finished_callback_; |
2304 NoParamCallback reschedule_after_finished_callback_; | 2305 NoParamCallback reschedule_after_finished_callback_; |
2305 | 2306 |
2306 ShaderCacheCallback shader_cache_callback_; | 2307 ShaderCacheCallback shader_cache_callback_; |
2307 | 2308 |
2308 // The format of the back buffer_ | 2309 // The format of the back buffer_ |
2309 GLenum back_buffer_color_format_; | 2310 GLenum back_buffer_color_format_; |
2310 bool back_buffer_has_depth_; | 2311 bool back_buffer_has_depth_; |
2311 bool back_buffer_has_stencil_; | 2312 bool back_buffer_has_stencil_; |
2312 | 2313 |
(...skipping 2332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4645 void GLES2DecoderImpl::SetShaderCacheCallback( | 4646 void GLES2DecoderImpl::SetShaderCacheCallback( |
4646 const ShaderCacheCallback& callback) { | 4647 const ShaderCacheCallback& callback) { |
4647 shader_cache_callback_ = callback; | 4648 shader_cache_callback_ = callback; |
4648 } | 4649 } |
4649 | 4650 |
4650 void GLES2DecoderImpl::SetFenceSyncReleaseCallback( | 4651 void GLES2DecoderImpl::SetFenceSyncReleaseCallback( |
4651 const FenceSyncReleaseCallback& callback) { | 4652 const FenceSyncReleaseCallback& callback) { |
4652 fence_sync_release_callback_ = callback; | 4653 fence_sync_release_callback_ = callback; |
4653 } | 4654 } |
4654 | 4655 |
4655 void GLES2DecoderImpl::SetWaitFenceSyncCallback( | 4656 void GLES2DecoderImpl::SetWaitSyncTokenCallback( |
4656 const WaitFenceSyncCallback& callback) { | 4657 const WaitSyncTokenCallback& callback) { |
4657 wait_fence_sync_callback_ = callback; | 4658 wait_sync_token_callback_ = callback; |
4658 } | 4659 } |
4659 | 4660 |
4660 void GLES2DecoderImpl::SetDescheduleUntilFinishedCallback( | 4661 void GLES2DecoderImpl::SetDescheduleUntilFinishedCallback( |
4661 const NoParamCallback& callback) { | 4662 const NoParamCallback& callback) { |
4662 deschedule_until_finished_callback_ = callback; | 4663 deschedule_until_finished_callback_ = callback; |
4663 } | 4664 } |
4664 | 4665 |
4665 void GLES2DecoderImpl::SetRescheduleAfterFinishedCallback( | 4666 void GLES2DecoderImpl::SetRescheduleAfterFinishedCallback( |
4666 const NoParamCallback& callback) { | 4667 const NoParamCallback& callback) { |
4667 reschedule_after_finished_callback_ = callback; | 4668 reschedule_after_finished_callback_ = callback; |
(...skipping 11117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15785 | 15786 |
15786 gpu::CommandBufferNamespace namespace_id = | 15787 gpu::CommandBufferNamespace namespace_id = |
15787 static_cast<gpu::CommandBufferNamespace>(c.namespace_id); | 15788 static_cast<gpu::CommandBufferNamespace>(c.namespace_id); |
15788 if ((namespace_id < static_cast<int32_t>(kMinNamespaceId)) || | 15789 if ((namespace_id < static_cast<int32_t>(kMinNamespaceId)) || |
15789 (namespace_id >= static_cast<int32_t>(kMaxNamespaceId))) { | 15790 (namespace_id >= static_cast<int32_t>(kMaxNamespaceId))) { |
15790 namespace_id = gpu::CommandBufferNamespace::INVALID; | 15791 namespace_id = gpu::CommandBufferNamespace::INVALID; |
15791 } | 15792 } |
15792 const CommandBufferId command_buffer_id = | 15793 const CommandBufferId command_buffer_id = |
15793 CommandBufferId::FromUnsafeValue(c.command_buffer_id()); | 15794 CommandBufferId::FromUnsafeValue(c.command_buffer_id()); |
15794 const uint64_t release = c.release_count(); | 15795 const uint64_t release = c.release_count(); |
15795 if (wait_fence_sync_callback_.is_null()) | 15796 if (wait_sync_token_callback_.is_null()) |
15796 return error::kNoError; | 15797 return error::kNoError; |
15797 | 15798 |
15798 return wait_fence_sync_callback_.Run(namespace_id, command_buffer_id, release) | 15799 gpu::SyncToken sync_token; |
15799 ? error::kNoError | 15800 sync_token.Set(namespace_id, 0, command_buffer_id, release); |
15800 : error::kDeferCommandUntilLater; | 15801 return wait_sync_token_callback_.Run(sync_token) |
| 15802 ? error::kDeferCommandUntilLater |
| 15803 : error::kNoError; |
15801 } | 15804 } |
15802 | 15805 |
15803 error::Error GLES2DecoderImpl::HandleDiscardBackbufferCHROMIUM( | 15806 error::Error GLES2DecoderImpl::HandleDiscardBackbufferCHROMIUM( |
15804 uint32_t immediate_data_size, | 15807 uint32_t immediate_data_size, |
15805 const volatile void* cmd_data) { | 15808 const volatile void* cmd_data) { |
15806 if (surface_->DeferDraws()) | 15809 if (surface_->DeferDraws()) |
15807 return error::kDeferCommandUntilLater; | 15810 return error::kDeferCommandUntilLater; |
15808 if (!surface_->SetBackbufferAllocation(false)) | 15811 if (!surface_->SetBackbufferAllocation(false)) |
15809 return error::kLostContext; | 15812 return error::kLostContext; |
15810 backbuffer_needs_clear_bits_ |= GL_COLOR_BUFFER_BIT; | 15813 backbuffer_needs_clear_bits_ |= GL_COLOR_BUFFER_BIT; |
(...skipping 3479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
19290 } | 19293 } |
19291 | 19294 |
19292 // Include the auto-generated part of this file. We split this because it means | 19295 // Include the auto-generated part of this file. We split this because it means |
19293 // we can easily edit the non-auto generated parts right here in this file | 19296 // we can easily edit the non-auto generated parts right here in this file |
19294 // instead of having to edit some template or the code generator. | 19297 // instead of having to edit some template or the code generator. |
19295 #include "base/macros.h" | 19298 #include "base/macros.h" |
19296 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" | 19299 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" |
19297 | 19300 |
19298 } // namespace gles2 | 19301 } // namespace gles2 |
19299 } // namespace gpu | 19302 } // namespace gpu |
OLD | NEW |