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

Side by Side Diff: gpu/command_buffer/client/gles2_implementation.cc

Issue 1233233002: Added support for TimeStamp queries using QueryCounterEXT. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed GetQueryivEXT test with QueryCounter Created 5 years, 5 months 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
OLDNEW
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 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 return true; 711 return true;
712 case GL_PIXEL_UNPACK_TRANSFER_BUFFER_BINDING_CHROMIUM: 712 case GL_PIXEL_UNPACK_TRANSFER_BUFFER_BINDING_CHROMIUM:
713 *params = bound_pixel_unpack_transfer_buffer_id_; 713 *params = bound_pixel_unpack_transfer_buffer_id_;
714 return true; 714 return true;
715 case GL_READ_FRAMEBUFFER_BINDING: 715 case GL_READ_FRAMEBUFFER_BINDING:
716 if (IsChromiumFramebufferMultisampleAvailable()) { 716 if (IsChromiumFramebufferMultisampleAvailable()) {
717 *params = bound_read_framebuffer_; 717 *params = bound_read_framebuffer_;
718 return true; 718 return true;
719 } 719 }
720 break; 720 break;
721 // TODO(dyen): Also support GL_GPU_DISJOINT_EXT.
722 case GL_TIMESTAMP_EXT: 721 case GL_TIMESTAMP_EXT:
723 // We convert all GPU timestamps to CPU time. 722 // We convert all GPU timestamps to CPU time.
724 *params = base::saturated_cast<GLint>( 723 *params = base::saturated_cast<GLint>(
725 (base::TraceTicks::Now() - base::TraceTicks()).InMicroseconds() 724 (base::TraceTicks::Now() - base::TraceTicks()).InMicroseconds()
726 * base::Time::kNanosecondsPerMicrosecond); 725 * base::Time::kNanosecondsPerMicrosecond);
727 return true; 726 return true;
728 727
729 // Non-cached parameters. 728 // Non-cached parameters.
730 case GL_ALIASED_LINE_WIDTH_RANGE: 729 case GL_ALIASED_LINE_WIDTH_RANGE:
731 case GL_ALIASED_POINT_SIZE_RANGE: 730 case GL_ALIASED_POINT_SIZE_RANGE:
(...skipping 4124 matching lines...) Expand 10 before | Expand all | Expand 10 after
4856 // queries across contexts? 4855 // queries across contexts?
4857 return query_tracker_->GetQuery(id) != NULL; 4856 return query_tracker_->GetQuery(id) != NULL;
4858 } 4857 }
4859 4858
4860 void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) { 4859 void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) {
4861 GPU_CLIENT_SINGLE_THREAD_CHECK(); 4860 GPU_CLIENT_SINGLE_THREAD_CHECK();
4862 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] BeginQueryEXT(" 4861 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] BeginQueryEXT("
4863 << GLES2Util::GetStringQueryTarget(target) 4862 << GLES2Util::GetStringQueryTarget(target)
4864 << ", " << id << ")"); 4863 << ", " << id << ")");
4865 4864
4866 // Check capabilities
4867 switch (target) { 4865 switch (target) {
4868 case GL_COMMANDS_ISSUED_CHROMIUM: 4866 case GL_COMMANDS_ISSUED_CHROMIUM:
4869 case GL_LATENCY_QUERY_CHROMIUM: 4867 case GL_LATENCY_QUERY_CHROMIUM:
4870 case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM: 4868 case GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM:
4871 case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM: 4869 case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM:
4872 case GL_GET_ERROR_QUERY_CHROMIUM: 4870 case GL_GET_ERROR_QUERY_CHROMIUM:
4873 break; 4871 break;
4874 case GL_COMMANDS_COMPLETED_CHROMIUM: 4872 case GL_COMMANDS_COMPLETED_CHROMIUM:
4875 if (!capabilities_.sync_query) { 4873 if (!capabilities_.sync_query) {
4876 SetGLError( 4874 SetGLError(
4877 GL_INVALID_OPERATION, "glBeginQueryEXT", 4875 GL_INVALID_OPERATION, "glBeginQueryEXT",
4878 "not enabled for commands completed queries"); 4876 "not enabled for commands completed queries");
4879 return; 4877 return;
4880 } 4878 }
4881 break; 4879 break;
4882 case GL_ANY_SAMPLES_PASSED: 4880 case GL_ANY_SAMPLES_PASSED:
4883 case GL_ANY_SAMPLES_PASSED_CONSERVATIVE: 4881 case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
4884 if (!capabilities_.occlusion_query_boolean) { 4882 if (!capabilities_.occlusion_query_boolean) {
4885 SetGLError( 4883 SetGLError(
4886 GL_INVALID_OPERATION, "glBeginQueryEXT", 4884 GL_INVALID_OPERATION, "glBeginQueryEXT",
4887 "not enabled for occlusion queries"); 4885 "not enabled for occlusion queries");
4888 return; 4886 return;
4889 } 4887 }
4890 break; 4888 break;
4891 // TODO(dyen): Also support GL_TIMESTAMP.
4892 case GL_TIME_ELAPSED_EXT: 4889 case GL_TIME_ELAPSED_EXT:
4893 if (!capabilities_.timer_queries) { 4890 if (!capabilities_.timer_queries) {
4894 SetGLError( 4891 SetGLError(
4895 GL_INVALID_OPERATION, "glBeginQueryEXT", 4892 GL_INVALID_OPERATION, "glBeginQueryEXT",
4896 "not enabled for timing queries"); 4893 "not enabled for timing queries");
4897 return; 4894 return;
4898 } 4895 }
4899 break; 4896 break;
4900 default: 4897 default:
4901 SetGLError( 4898 SetGLError(
4902 GL_INVALID_OPERATION, "glBeginQueryEXT", "unknown query target"); 4899 GL_INVALID_ENUM, "glBeginQueryEXT", "unknown query target");
4903 return; 4900 return;
4904 } 4901 }
4905 4902
4906 // if any outstanding queries INV_OP 4903 // if any outstanding queries INV_OP
4907 if (query_tracker_->GetCurrentQuery(target)) { 4904 if (query_tracker_->GetCurrentQuery(target)) {
4908 SetGLError( 4905 SetGLError(
4909 GL_INVALID_OPERATION, "glBeginQueryEXT", "query already in progress"); 4906 GL_INVALID_OPERATION, "glBeginQueryEXT", "query already in progress");
4910 return; 4907 return;
4911 } 4908 }
4912 4909
4913 // id = 0 INV_OP
4914 if (id == 0) { 4910 if (id == 0) {
4915 SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT", "id is 0"); 4911 SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT", "id is 0");
4916 return; 4912 return;
4917 } 4913 }
4918 4914
4919 // if not GENned INV_OPERATION
4920 if (!query_id_allocator_->InUse(id)) { 4915 if (!query_id_allocator_->InUse(id)) {
4921 SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT", "invalid id"); 4916 SetGLError(GL_INVALID_OPERATION, "glBeginQueryEXT", "invalid id");
4922 return; 4917 return;
4923 } 4918 }
4924 4919
4925 if (query_tracker_->BeginQuery(id, target, this)) 4920 if (query_tracker_->BeginQuery(id, target, this))
4926 CheckGLError(); 4921 CheckGLError();
4927 } 4922 }
4928 4923
4929 void GLES2Implementation::EndQueryEXT(GLenum target) { 4924 void GLES2Implementation::EndQueryEXT(GLenum target) {
4930 GPU_CLIENT_SINGLE_THREAD_CHECK(); 4925 GPU_CLIENT_SINGLE_THREAD_CHECK();
4931 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] EndQueryEXT(" 4926 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] EndQueryEXT("
4932 << GLES2Util::GetStringQueryTarget(target) << ")"); 4927 << GLES2Util::GetStringQueryTarget(target) << ")");
4933 // Don't do anything if the context is lost. 4928 // Don't do anything if the context is lost.
4934 if (helper_->IsContextLost()) { 4929 if (helper_->IsContextLost()) {
4935 return; 4930 return;
4936 } 4931 }
4937 4932
4938 if (query_tracker_->EndQuery(target, this)) 4933 if (query_tracker_->EndQuery(target, this))
4939 CheckGLError(); 4934 CheckGLError();
4940 } 4935 }
4941 4936
4937 void GLES2Implementation::QueryCounterEXT(GLuint id, GLenum target) {
4938 GPU_CLIENT_SINGLE_THREAD_CHECK();
4939 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] QueryCounterEXT("
4940 << id
4941 << ", " << GLES2Util::GetStringQueryTarget(target) << ")");
4942
4943 switch (target) {
4944 case GL_TIMESTAMP_EXT:
4945 if (!capabilities_.timer_queries) {
4946 SetGLError(
4947 GL_INVALID_OPERATION, "glQueryCounterEXT",
4948 "not enabled for timing queries");
4949 return;
4950 }
4951 break;
4952 default:
4953 SetGLError(
4954 GL_INVALID_ENUM, "glQueryCounterEXT", "unknown query target");
4955 return;
4956 }
4957
4958 if (id == 0) {
4959 SetGLError(GL_INVALID_OPERATION, "glQueryCounterEXT", "id is 0");
4960 return;
4961 }
4962
4963 if (!query_id_allocator_->InUse(id)) {
4964 SetGLError(GL_INVALID_OPERATION, "glQueryCounterEXT", "invalid id");
4965 return;
4966 }
4967
4968 if (query_tracker_->QueryCounter(id, target, this))
4969 CheckGLError();
4970 }
4971
4942 void GLES2Implementation::GetQueryivEXT( 4972 void GLES2Implementation::GetQueryivEXT(
4943 GLenum target, GLenum pname, GLint* params) { 4973 GLenum target, GLenum pname, GLint* params) {
4944 GPU_CLIENT_SINGLE_THREAD_CHECK(); 4974 GPU_CLIENT_SINGLE_THREAD_CHECK();
4945 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] GetQueryivEXT(" 4975 GPU_CLIENT_LOG("[" << GetLogPrefix() << "] GetQueryivEXT("
4946 << GLES2Util::GetStringQueryTarget(target) << ", " 4976 << GLES2Util::GetStringQueryTarget(target) << ", "
4947 << GLES2Util::GetStringQueryParameter(pname) << ", " 4977 << GLES2Util::GetStringQueryParameter(pname) << ", "
4948 << static_cast<const void*>(params) << ")"); 4978 << static_cast<const void*>(params) << ")");
4949 if (pname == GL_QUERY_COUNTER_BITS_EXT) { 4979 if (pname == GL_QUERY_COUNTER_BITS_EXT) {
4950 // We convert all queries to CPU time so we support 64 bits. 4980 // We convert all queries to CPU time so we support 64 bits.
4951 *params = 64; 4981 *params = 64;
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after
5994 CheckGLError(); 6024 CheckGLError();
5995 } 6025 }
5996 6026
5997 // Include the auto-generated part of this file. We split this because it means 6027 // Include the auto-generated part of this file. We split this because it means
5998 // we can easily edit the non-auto generated parts right here in this file 6028 // we can easily edit the non-auto generated parts right here in this file
5999 // instead of having to edit some template or the code generator. 6029 // instead of having to edit some template or the code generator.
6000 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" 6030 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h"
6001 6031
6002 } // namespace gles2 6032 } // namespace gles2
6003 } // namespace gpu 6033 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/client/gles2_cmd_helper_autogen.h ('k') | gpu/command_buffer/client/gles2_implementation_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698