diff options
26 files changed, 486 insertions, 287 deletions
diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h index 0639363..5a59ea1 100644 --- a/gpu/GLES2/gl2chromium_autogen.h +++ b/gpu/GLES2/gl2chromium_autogen.h @@ -17,6 +17,7 @@ #define glAttachShader GLES2_GET_FUN(AttachShader) #define glBindAttribLocation GLES2_GET_FUN(BindAttribLocation) #define glBindBuffer GLES2_GET_FUN(BindBuffer) +#define glBindBufferBase GLES2_GET_FUN(BindBufferBase) #define glBindFramebuffer GLES2_GET_FUN(BindFramebuffer) #define glBindRenderbuffer GLES2_GET_FUN(BindRenderbuffer) #define glBindSampler GLES2_GET_FUN(BindSampler) diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index 6e7b27a..f7f0c77 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -588,6 +588,16 @@ _NAMED_TYPE_INFO = { 'GL_RENDERBUFFER', ], }, + 'IndexedBufferTarget': { + 'type': 'GLenum', + 'valid': [ + 'GL_TRANSFORM_FEEDBACK_BUFFER', + 'GL_UNIFORM_BUFFER', + ], + 'invalid': [ + 'GL_RENDERBUFFER', + ], + }, 'BufferUsage': { 'type': 'GLenum', 'valid': [ @@ -1418,6 +1428,11 @@ _FUNCTION_INFO = { 'decoder_func': 'DoBindBuffer', 'gen_func': 'GenBuffersARB', }, + 'BindBufferBase': { + 'type': 'Bind', + 'id_mapping': [ 'Buffer' ], + 'unsafe': True, + }, 'BindFramebuffer': { 'type': 'Bind', 'decoder_func': 'DoBindFramebuffer', @@ -4400,7 +4415,7 @@ TEST_P(%(test_name)s, %(name)sValidArgsNewId) { self.WriteValidUnitTest(func, file, valid_test, { 'first_arg': func.GetOriginalArgs()[0].GetValidArg(func), 'first_gl_arg': func.GetOriginalArgs()[0].GetValidGLArg(func), - 'resource_type': func.GetOriginalArgs()[1].resource_type, + 'resource_type': func.GetOriginalArgs()[-1].resource_type, 'gl_gen_func_name': func.GetInfo("gen_func"), }, *extras) @@ -4456,7 +4471,7 @@ TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { name_arg = func.GetOriginalArgs()[0] else: # Bind functions that have both a target and a name (like BindTexture) - name_arg = func.GetOriginalArgs()[1] + name_arg = func.GetOriginalArgs()[-1] file.Write(code % { 'name': func.name, diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h index a947810..c28385d 100644 --- a/gpu/command_buffer/client/gles2_c_lib_autogen.h +++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h @@ -24,6 +24,9 @@ void GLES2BindAttribLocation(GLuint program, GLuint index, const char* name) { void GLES2BindBuffer(GLenum target, GLuint buffer) { gles2::GetGLContext()->BindBuffer(target, buffer); } +void GLES2BindBufferBase(GLenum target, GLuint index, GLuint buffer) { + gles2::GetGLContext()->BindBufferBase(target, index, buffer); +} void GLES2BindFramebuffer(GLenum target, GLuint framebuffer) { gles2::GetGLContext()->BindFramebuffer(target, framebuffer); } @@ -1203,6 +1206,10 @@ extern const NameToFunc g_gles2_function_table[] = { reinterpret_cast<GLES2FunctionPointer>(glBindBuffer), }, { + "glBindBufferBase", + reinterpret_cast<GLES2FunctionPointer>(glBindBufferBase), + }, + { "glBindFramebuffer", reinterpret_cast<GLES2FunctionPointer>(glBindFramebuffer), }, diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h index bcf1847..6a0acad 100644 --- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h +++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h @@ -42,6 +42,13 @@ void BindBuffer(GLenum target, GLuint buffer) { } } +void BindBufferBase(GLenum target, GLuint index, GLuint buffer) { + gles2::cmds::BindBufferBase* c = GetCmdSpace<gles2::cmds::BindBufferBase>(); + if (c) { + c->Init(target, index, buffer); + } +} + void BindFramebuffer(GLenum target, GLuint framebuffer) { gles2::cmds::BindFramebuffer* c = GetCmdSpace<gles2::cmds::BindFramebuffer>(); if (c) { diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h index a6431f5..76e7b5e 100644 --- a/gpu/command_buffer/client/gles2_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_autogen.h @@ -23,6 +23,8 @@ void BindAttribLocation(GLuint program, void BindBuffer(GLenum target, GLuint buffer) override; +void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override; + void BindFramebuffer(GLenum target, GLuint framebuffer) override; void BindRenderbuffer(GLenum target, GLuint renderbuffer) override; diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h index e7ef769..02551b4 100644 --- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h @@ -34,6 +34,17 @@ void GLES2Implementation::BindBuffer(GLenum target, GLuint buffer) { CheckGLError(); } +void GLES2Implementation::BindBufferBase(GLenum target, + GLuint index, + GLuint buffer) { + GPU_CLIENT_SINGLE_THREAD_CHECK(); + GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindBufferBase(" + << GLES2Util::GetStringIndexedBufferTarget(target) << ", " + << index << ", " << buffer << ")"); + helper_->BindBufferBase(target, index, buffer); + CheckGLError(); +} + void GLES2Implementation::BindFramebuffer(GLenum target, GLuint framebuffer) { GPU_CLIENT_SINGLE_THREAD_CHECK(); GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindFramebuffer(" diff --git a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h index f501cd9..744387d 100644 --- a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h +++ b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h @@ -39,6 +39,17 @@ TEST_F(GLES2ImplementationTest, BindBuffer) { EXPECT_TRUE(NoCommandsWritten()); } +TEST_F(GLES2ImplementationTest, BindBufferBase) { + struct Cmds { + cmds::BindBufferBase cmd; + }; + Cmds expected; + expected.cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, 3); + + gl_->BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 2, 3); + EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); +} + TEST_F(GLES2ImplementationTest, BindFramebuffer) { struct Cmds { cmds::BindFramebuffer cmd; diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h index d666d54..f8417e6 100644 --- a/gpu/command_buffer/client/gles2_interface_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_autogen.h @@ -19,6 +19,7 @@ virtual void BindAttribLocation(GLuint program, GLuint index, const char* name) = 0; virtual void BindBuffer(GLenum target, GLuint buffer) = 0; +virtual void BindBufferBase(GLenum target, GLuint index, GLuint buffer) = 0; virtual void BindFramebuffer(GLenum target, GLuint framebuffer) = 0; virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) = 0; virtual void BindSampler(GLuint unit, GLuint sampler) = 0; diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h index fa334c9..d9f995e 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h @@ -18,6 +18,7 @@ void BindAttribLocation(GLuint program, GLuint index, const char* name) override; void BindBuffer(GLenum target, GLuint buffer) override; +void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override; void BindFramebuffer(GLenum target, GLuint framebuffer) override; void BindRenderbuffer(GLenum target, GLuint renderbuffer) override; void BindSampler(GLuint unit, GLuint sampler) override; diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h index 117ea22..9bc00eb 100644 --- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h @@ -23,6 +23,10 @@ void GLES2InterfaceStub::BindAttribLocation(GLuint /* program */, } void GLES2InterfaceStub::BindBuffer(GLenum /* target */, GLuint /* buffer */) { } +void GLES2InterfaceStub::BindBufferBase(GLenum /* target */, + GLuint /* index */, + GLuint /* buffer */) { +} void GLES2InterfaceStub::BindFramebuffer(GLenum /* target */, GLuint /* framebuffer */) { } diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h index b02214d..9989ff5 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h @@ -18,6 +18,7 @@ void BindAttribLocation(GLuint program, GLuint index, const char* name) override; void BindBuffer(GLenum target, GLuint buffer) override; +void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override; void BindFramebuffer(GLenum target, GLuint framebuffer) override; void BindRenderbuffer(GLenum target, GLuint renderbuffer) override; void BindSampler(GLuint unit, GLuint sampler) override; diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h index 4efb1de..fd58cf8 100644 --- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h +++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h @@ -34,6 +34,13 @@ void GLES2TraceImplementation::BindBuffer(GLenum target, GLuint buffer) { gl_->BindBuffer(target, buffer); } +void GLES2TraceImplementation::BindBufferBase(GLenum target, + GLuint index, + GLuint buffer) { + TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BindBufferBase"); + gl_->BindBufferBase(target, index, buffer); +} + void GLES2TraceImplementation::BindFramebuffer(GLenum target, GLuint framebuffer) { TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BindFramebuffer"); diff --git a/gpu/command_buffer/cmd_buffer_functions.txt b/gpu/command_buffer/cmd_buffer_functions.txt index 69fa17f..51cd4a1 100644 --- a/gpu/command_buffer/cmd_buffer_functions.txt +++ b/gpu/command_buffer/cmd_buffer_functions.txt @@ -8,6 +8,7 @@ GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); GL_APICALL void GL_APIENTRY glAttachShader (GLidProgram program, GLidShader shader); GL_APICALL void GL_APIENTRY glBindAttribLocation (GLidProgram program, GLuint index, const char* name); GL_APICALL void GL_APIENTRY glBindBuffer (GLenumBufferTarget target, GLidBindBuffer buffer); +GL_APICALL void GL_APIENTRY glBindBufferBase (GLenumIndexedBufferTarget target, GLuint index, GLidBindBuffer buffer); GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenumFrameBufferTarget target, GLidBindFramebuffer framebuffer); GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenumRenderBufferTarget target, GLidBindRenderbuffer renderbuffer); GL_APICALL void GL_APIENTRY glBindSampler (GLuint unit, GLidBindSampler sampler); diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h index 5461042..1c235f7 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h @@ -159,6 +159,47 @@ static_assert(offsetof(BindBuffer, target) == 4, static_assert(offsetof(BindBuffer, buffer) == 8, "offset of BindBuffer buffer should be 8"); +struct BindBufferBase { + typedef BindBufferBase ValueType; + static const CommandId kCmdId = kBindBufferBase; + static const cmd::ArgFlags kArgFlags = cmd::kFixed; + static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3); + + static uint32_t ComputeSize() { + return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT + } + + void SetHeader() { header.SetCmd<ValueType>(); } + + void Init(GLenum _target, GLuint _index, GLuint _buffer) { + SetHeader(); + target = _target; + index = _index; + buffer = _buffer; + } + + void* Set(void* cmd, GLenum _target, GLuint _index, GLuint _buffer) { + static_cast<ValueType*>(cmd)->Init(_target, _index, _buffer); + return NextCmdAddress<ValueType>(cmd); + } + + gpu::CommandHeader header; + uint32_t target; + uint32_t index; + uint32_t buffer; +}; + +static_assert(sizeof(BindBufferBase) == 16, + "size of BindBufferBase should be 16"); +static_assert(offsetof(BindBufferBase, header) == 0, + "offset of BindBufferBase header should be 0"); +static_assert(offsetof(BindBufferBase, target) == 4, + "offset of BindBufferBase target should be 4"); +static_assert(offsetof(BindBufferBase, index) == 8, + "offset of BindBufferBase index should be 8"); +static_assert(offsetof(BindBufferBase, buffer) == 12, + "offset of BindBufferBase buffer should be 12"); + struct BindFramebuffer { typedef BindFramebuffer ValueType; static const CommandId kCmdId = kBindFramebuffer; diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h index 111e5ce..d664435 100644 --- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h @@ -62,6 +62,19 @@ TEST_F(GLES2FormatTest, BindBuffer) { CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd)); } +TEST_F(GLES2FormatTest, BindBufferBase) { + cmds::BindBufferBase& cmd = *GetBufferAs<cmds::BindBufferBase>(); + void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11), + static_cast<GLuint>(12), static_cast<GLuint>(13)); + EXPECT_EQ(static_cast<uint32_t>(cmds::BindBufferBase::kCmdId), + cmd.header.command); + EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u); + EXPECT_EQ(static_cast<GLenum>(11), cmd.target); + EXPECT_EQ(static_cast<GLuint>(12), cmd.index); + EXPECT_EQ(static_cast<GLuint>(13), cmd.buffer); + CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd)); +} + TEST_F(GLES2FormatTest, BindFramebuffer) { cmds::BindFramebuffer& cmd = *GetBufferAs<cmds::BindFramebuffer>(); void* next_cmd = diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h index 3079cbf..943043f 100644 --- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h @@ -16,254 +16,255 @@ OP(AttachShader) /* 257 */ \ OP(BindAttribLocationBucket) /* 258 */ \ OP(BindBuffer) /* 259 */ \ - OP(BindFramebuffer) /* 260 */ \ - OP(BindRenderbuffer) /* 261 */ \ - OP(BindSampler) /* 262 */ \ - OP(BindTexture) /* 263 */ \ - OP(BindTransformFeedback) /* 264 */ \ - OP(BlendColor) /* 265 */ \ - OP(BlendEquation) /* 266 */ \ - OP(BlendEquationSeparate) /* 267 */ \ - OP(BlendFunc) /* 268 */ \ - OP(BlendFuncSeparate) /* 269 */ \ - OP(BufferData) /* 270 */ \ - OP(BufferSubData) /* 271 */ \ - OP(CheckFramebufferStatus) /* 272 */ \ - OP(Clear) /* 273 */ \ - OP(ClearColor) /* 274 */ \ - OP(ClearDepthf) /* 275 */ \ - OP(ClearStencil) /* 276 */ \ - OP(ColorMask) /* 277 */ \ - OP(CompileShader) /* 278 */ \ - OP(CompressedTexImage2DBucket) /* 279 */ \ - OP(CompressedTexImage2D) /* 280 */ \ - OP(CompressedTexSubImage2DBucket) /* 281 */ \ - OP(CompressedTexSubImage2D) /* 282 */ \ - OP(CopyBufferSubData) /* 283 */ \ - OP(CopyTexImage2D) /* 284 */ \ - OP(CopyTexSubImage2D) /* 285 */ \ - OP(CreateProgram) /* 286 */ \ - OP(CreateShader) /* 287 */ \ - OP(CullFace) /* 288 */ \ - OP(DeleteBuffersImmediate) /* 289 */ \ - OP(DeleteFramebuffersImmediate) /* 290 */ \ - OP(DeleteProgram) /* 291 */ \ - OP(DeleteRenderbuffersImmediate) /* 292 */ \ - OP(DeleteSamplersImmediate) /* 293 */ \ - OP(DeleteShader) /* 294 */ \ - OP(DeleteTexturesImmediate) /* 295 */ \ - OP(DeleteTransformFeedbacksImmediate) /* 296 */ \ - OP(DepthFunc) /* 297 */ \ - OP(DepthMask) /* 298 */ \ - OP(DepthRangef) /* 299 */ \ - OP(DetachShader) /* 300 */ \ - OP(Disable) /* 301 */ \ - OP(DisableVertexAttribArray) /* 302 */ \ - OP(DrawArrays) /* 303 */ \ - OP(DrawElements) /* 304 */ \ - OP(Enable) /* 305 */ \ - OP(EnableVertexAttribArray) /* 306 */ \ - OP(Finish) /* 307 */ \ - OP(Flush) /* 308 */ \ - OP(FramebufferRenderbuffer) /* 309 */ \ - OP(FramebufferTexture2D) /* 310 */ \ - OP(FramebufferTextureLayer) /* 311 */ \ - OP(FrontFace) /* 312 */ \ - OP(GenBuffersImmediate) /* 313 */ \ - OP(GenerateMipmap) /* 314 */ \ - OP(GenFramebuffersImmediate) /* 315 */ \ - OP(GenRenderbuffersImmediate) /* 316 */ \ - OP(GenSamplersImmediate) /* 317 */ \ - OP(GenTexturesImmediate) /* 318 */ \ - OP(GenTransformFeedbacksImmediate) /* 319 */ \ - OP(GetActiveAttrib) /* 320 */ \ - OP(GetActiveUniform) /* 321 */ \ - OP(GetAttachedShaders) /* 322 */ \ - OP(GetAttribLocation) /* 323 */ \ - OP(GetBooleanv) /* 324 */ \ - OP(GetBufferParameteriv) /* 325 */ \ - OP(GetError) /* 326 */ \ - OP(GetFloatv) /* 327 */ \ - OP(GetFramebufferAttachmentParameteriv) /* 328 */ \ - OP(GetIntegerv) /* 329 */ \ - OP(GetInternalformativ) /* 330 */ \ - OP(GetProgramiv) /* 331 */ \ - OP(GetProgramInfoLog) /* 332 */ \ - OP(GetRenderbufferParameteriv) /* 333 */ \ - OP(GetSamplerParameterfv) /* 334 */ \ - OP(GetSamplerParameteriv) /* 335 */ \ - OP(GetShaderiv) /* 336 */ \ - OP(GetShaderInfoLog) /* 337 */ \ - OP(GetShaderPrecisionFormat) /* 338 */ \ - OP(GetShaderSource) /* 339 */ \ - OP(GetString) /* 340 */ \ - OP(GetTexParameterfv) /* 341 */ \ - OP(GetTexParameteriv) /* 342 */ \ - OP(GetUniformfv) /* 343 */ \ - OP(GetUniformiv) /* 344 */ \ - OP(GetUniformLocation) /* 345 */ \ - OP(GetVertexAttribfv) /* 346 */ \ - OP(GetVertexAttribiv) /* 347 */ \ - OP(GetVertexAttribPointerv) /* 348 */ \ - OP(Hint) /* 349 */ \ - OP(InvalidateFramebufferImmediate) /* 350 */ \ - OP(InvalidateSubFramebufferImmediate) /* 351 */ \ - OP(IsBuffer) /* 352 */ \ - OP(IsEnabled) /* 353 */ \ - OP(IsFramebuffer) /* 354 */ \ - OP(IsProgram) /* 355 */ \ - OP(IsRenderbuffer) /* 356 */ \ - OP(IsSampler) /* 357 */ \ - OP(IsShader) /* 358 */ \ - OP(IsTexture) /* 359 */ \ - OP(IsTransformFeedback) /* 360 */ \ - OP(LineWidth) /* 361 */ \ - OP(LinkProgram) /* 362 */ \ - OP(PauseTransformFeedback) /* 363 */ \ - OP(PixelStorei) /* 364 */ \ - OP(PolygonOffset) /* 365 */ \ - OP(ReadBuffer) /* 366 */ \ - OP(ReadPixels) /* 367 */ \ - OP(ReleaseShaderCompiler) /* 368 */ \ - OP(RenderbufferStorage) /* 369 */ \ - OP(ResumeTransformFeedback) /* 370 */ \ - OP(SampleCoverage) /* 371 */ \ - OP(SamplerParameterf) /* 372 */ \ - OP(SamplerParameterfvImmediate) /* 373 */ \ - OP(SamplerParameteri) /* 374 */ \ - OP(SamplerParameterivImmediate) /* 375 */ \ - OP(Scissor) /* 376 */ \ - OP(ShaderBinary) /* 377 */ \ - OP(ShaderSourceBucket) /* 378 */ \ - OP(StencilFunc) /* 379 */ \ - OP(StencilFuncSeparate) /* 380 */ \ - OP(StencilMask) /* 381 */ \ - OP(StencilMaskSeparate) /* 382 */ \ - OP(StencilOp) /* 383 */ \ - OP(StencilOpSeparate) /* 384 */ \ - OP(TexImage2D) /* 385 */ \ - OP(TexImage3D) /* 386 */ \ - OP(TexParameterf) /* 387 */ \ - OP(TexParameterfvImmediate) /* 388 */ \ - OP(TexParameteri) /* 389 */ \ - OP(TexParameterivImmediate) /* 390 */ \ - OP(TexStorage3D) /* 391 */ \ - OP(TexSubImage2D) /* 392 */ \ - OP(TexSubImage3D) /* 393 */ \ - OP(Uniform1f) /* 394 */ \ - OP(Uniform1fvImmediate) /* 395 */ \ - OP(Uniform1i) /* 396 */ \ - OP(Uniform1ivImmediate) /* 397 */ \ - OP(Uniform1ui) /* 398 */ \ - OP(Uniform1uivImmediate) /* 399 */ \ - OP(Uniform2f) /* 400 */ \ - OP(Uniform2fvImmediate) /* 401 */ \ - OP(Uniform2i) /* 402 */ \ - OP(Uniform2ivImmediate) /* 403 */ \ - OP(Uniform2ui) /* 404 */ \ - OP(Uniform2uivImmediate) /* 405 */ \ - OP(Uniform3f) /* 406 */ \ - OP(Uniform3fvImmediate) /* 407 */ \ - OP(Uniform3i) /* 408 */ \ - OP(Uniform3ivImmediate) /* 409 */ \ - OP(Uniform3ui) /* 410 */ \ - OP(Uniform3uivImmediate) /* 411 */ \ - OP(Uniform4f) /* 412 */ \ - OP(Uniform4fvImmediate) /* 413 */ \ - OP(Uniform4i) /* 414 */ \ - OP(Uniform4ivImmediate) /* 415 */ \ - OP(Uniform4ui) /* 416 */ \ - OP(Uniform4uivImmediate) /* 417 */ \ - OP(UniformMatrix2fvImmediate) /* 418 */ \ - OP(UniformMatrix2x3fvImmediate) /* 419 */ \ - OP(UniformMatrix2x4fvImmediate) /* 420 */ \ - OP(UniformMatrix3fvImmediate) /* 421 */ \ - OP(UniformMatrix3x2fvImmediate) /* 422 */ \ - OP(UniformMatrix3x4fvImmediate) /* 423 */ \ - OP(UniformMatrix4fvImmediate) /* 424 */ \ - OP(UniformMatrix4x2fvImmediate) /* 425 */ \ - OP(UniformMatrix4x3fvImmediate) /* 426 */ \ - OP(UseProgram) /* 427 */ \ - OP(ValidateProgram) /* 428 */ \ - OP(VertexAttrib1f) /* 429 */ \ - OP(VertexAttrib1fvImmediate) /* 430 */ \ - OP(VertexAttrib2f) /* 431 */ \ - OP(VertexAttrib2fvImmediate) /* 432 */ \ - OP(VertexAttrib3f) /* 433 */ \ - OP(VertexAttrib3fvImmediate) /* 434 */ \ - OP(VertexAttrib4f) /* 435 */ \ - OP(VertexAttrib4fvImmediate) /* 436 */ \ - OP(VertexAttribI4i) /* 437 */ \ - OP(VertexAttribI4ivImmediate) /* 438 */ \ - OP(VertexAttribI4ui) /* 439 */ \ - OP(VertexAttribI4uivImmediate) /* 440 */ \ - OP(VertexAttribIPointer) /* 441 */ \ - OP(VertexAttribPointer) /* 442 */ \ - OP(Viewport) /* 443 */ \ - OP(BlitFramebufferCHROMIUM) /* 444 */ \ - OP(RenderbufferStorageMultisampleCHROMIUM) /* 445 */ \ - OP(RenderbufferStorageMultisampleEXT) /* 446 */ \ - OP(FramebufferTexture2DMultisampleEXT) /* 447 */ \ - OP(TexStorage2DEXT) /* 448 */ \ - OP(GenQueriesEXTImmediate) /* 449 */ \ - OP(DeleteQueriesEXTImmediate) /* 450 */ \ - OP(BeginQueryEXT) /* 451 */ \ - OP(BeginTransformFeedback) /* 452 */ \ - OP(EndQueryEXT) /* 453 */ \ - OP(EndTransformFeedback) /* 454 */ \ - OP(InsertEventMarkerEXT) /* 455 */ \ - OP(PushGroupMarkerEXT) /* 456 */ \ - OP(PopGroupMarkerEXT) /* 457 */ \ - OP(GenVertexArraysOESImmediate) /* 458 */ \ - OP(DeleteVertexArraysOESImmediate) /* 459 */ \ - OP(IsVertexArrayOES) /* 460 */ \ - OP(BindVertexArrayOES) /* 461 */ \ - OP(SwapBuffers) /* 462 */ \ - OP(GetMaxValueInBufferCHROMIUM) /* 463 */ \ - OP(EnableFeatureCHROMIUM) /* 464 */ \ - OP(ResizeCHROMIUM) /* 465 */ \ - OP(GetRequestableExtensionsCHROMIUM) /* 466 */ \ - OP(RequestExtensionCHROMIUM) /* 467 */ \ - OP(GetProgramInfoCHROMIUM) /* 468 */ \ - OP(GetTranslatedShaderSourceANGLE) /* 469 */ \ - OP(PostSubBufferCHROMIUM) /* 470 */ \ - OP(TexImageIOSurface2DCHROMIUM) /* 471 */ \ - OP(CopyTextureCHROMIUM) /* 472 */ \ - OP(DrawArraysInstancedANGLE) /* 473 */ \ - OP(DrawElementsInstancedANGLE) /* 474 */ \ - OP(VertexAttribDivisorANGLE) /* 475 */ \ - OP(GenMailboxCHROMIUM) /* 476 */ \ - OP(ProduceTextureCHROMIUMImmediate) /* 477 */ \ - OP(ProduceTextureDirectCHROMIUMImmediate) /* 478 */ \ - OP(ConsumeTextureCHROMIUMImmediate) /* 479 */ \ - OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 480 */ \ - OP(BindUniformLocationCHROMIUMBucket) /* 481 */ \ - OP(GenValuebuffersCHROMIUMImmediate) /* 482 */ \ - OP(DeleteValuebuffersCHROMIUMImmediate) /* 483 */ \ - OP(IsValuebufferCHROMIUM) /* 484 */ \ - OP(BindValuebufferCHROMIUM) /* 485 */ \ - OP(SubscribeValueCHROMIUM) /* 486 */ \ - OP(PopulateSubscribedValuesCHROMIUM) /* 487 */ \ - OP(UniformValuebufferCHROMIUM) /* 488 */ \ - OP(BindTexImage2DCHROMIUM) /* 489 */ \ - OP(ReleaseTexImage2DCHROMIUM) /* 490 */ \ - OP(TraceBeginCHROMIUM) /* 491 */ \ - OP(TraceEndCHROMIUM) /* 492 */ \ - OP(AsyncTexSubImage2DCHROMIUM) /* 493 */ \ - OP(AsyncTexImage2DCHROMIUM) /* 494 */ \ - OP(WaitAsyncTexImage2DCHROMIUM) /* 495 */ \ - OP(WaitAllAsyncTexImage2DCHROMIUM) /* 496 */ \ - OP(DiscardFramebufferEXTImmediate) /* 497 */ \ - OP(LoseContextCHROMIUM) /* 498 */ \ - OP(InsertSyncPointCHROMIUM) /* 499 */ \ - OP(WaitSyncPointCHROMIUM) /* 500 */ \ - OP(DrawBuffersEXTImmediate) /* 501 */ \ - OP(DiscardBackbufferCHROMIUM) /* 502 */ \ - OP(ScheduleOverlayPlaneCHROMIUM) /* 503 */ \ - OP(SwapInterval) /* 504 */ \ - OP(MatrixLoadfCHROMIUMImmediate) /* 505 */ \ - OP(MatrixLoadIdentityCHROMIUM) /* 506 */ \ - OP(BlendBarrierKHR) /* 507 */ + OP(BindBufferBase) /* 260 */ \ + OP(BindFramebuffer) /* 261 */ \ + OP(BindRenderbuffer) /* 262 */ \ + OP(BindSampler) /* 263 */ \ + OP(BindTexture) /* 264 */ \ + OP(BindTransformFeedback) /* 265 */ \ + OP(BlendColor) /* 266 */ \ + OP(BlendEquation) /* 267 */ \ + OP(BlendEquationSeparate) /* 268 */ \ + OP(BlendFunc) /* 269 */ \ + OP(BlendFuncSeparate) /* 270 */ \ + OP(BufferData) /* 271 */ \ + OP(BufferSubData) /* 272 */ \ + OP(CheckFramebufferStatus) /* 273 */ \ + OP(Clear) /* 274 */ \ + OP(ClearColor) /* 275 */ \ + OP(ClearDepthf) /* 276 */ \ + OP(ClearStencil) /* 277 */ \ + OP(ColorMask) /* 278 */ \ + OP(CompileShader) /* 279 */ \ + OP(CompressedTexImage2DBucket) /* 280 */ \ + OP(CompressedTexImage2D) /* 281 */ \ + OP(CompressedTexSubImage2DBucket) /* 282 */ \ + OP(CompressedTexSubImage2D) /* 283 */ \ + OP(CopyBufferSubData) /* 284 */ \ + OP(CopyTexImage2D) /* 285 */ \ + OP(CopyTexSubImage2D) /* 286 */ \ + OP(CreateProgram) /* 287 */ \ + OP(CreateShader) /* 288 */ \ + OP(CullFace) /* 289 */ \ + OP(DeleteBuffersImmediate) /* 290 */ \ + OP(DeleteFramebuffersImmediate) /* 291 */ \ + OP(DeleteProgram) /* 292 */ \ + OP(DeleteRenderbuffersImmediate) /* 293 */ \ + OP(DeleteSamplersImmediate) /* 294 */ \ + OP(DeleteShader) /* 295 */ \ + OP(DeleteTexturesImmediate) /* 296 */ \ + OP(DeleteTransformFeedbacksImmediate) /* 297 */ \ + OP(DepthFunc) /* 298 */ \ + OP(DepthMask) /* 299 */ \ + OP(DepthRangef) /* 300 */ \ + OP(DetachShader) /* 301 */ \ + OP(Disable) /* 302 */ \ + OP(DisableVertexAttribArray) /* 303 */ \ + OP(DrawArrays) /* 304 */ \ + OP(DrawElements) /* 305 */ \ + OP(Enable) /* 306 */ \ + OP(EnableVertexAttribArray) /* 307 */ \ + OP(Finish) /* 308 */ \ + OP(Flush) /* 309 */ \ + OP(FramebufferRenderbuffer) /* 310 */ \ + OP(FramebufferTexture2D) /* 311 */ \ + OP(FramebufferTextureLayer) /* 312 */ \ + OP(FrontFace) /* 313 */ \ + OP(GenBuffersImmediate) /* 314 */ \ + OP(GenerateMipmap) /* 315 */ \ + OP(GenFramebuffersImmediate) /* 316 */ \ + OP(GenRenderbuffersImmediate) /* 317 */ \ + OP(GenSamplersImmediate) /* 318 */ \ + OP(GenTexturesImmediate) /* 319 */ \ + OP(GenTransformFeedbacksImmediate) /* 320 */ \ + OP(GetActiveAttrib) /* 321 */ \ + OP(GetActiveUniform) /* 322 */ \ + OP(GetAttachedShaders) /* 323 */ \ + OP(GetAttribLocation) /* 324 */ \ + OP(GetBooleanv) /* 325 */ \ + OP(GetBufferParameteriv) /* 326 */ \ + OP(GetError) /* 327 */ \ + OP(GetFloatv) /* 328 */ \ + OP(GetFramebufferAttachmentParameteriv) /* 329 */ \ + OP(GetIntegerv) /* 330 */ \ + OP(GetInternalformativ) /* 331 */ \ + OP(GetProgramiv) /* 332 */ \ + OP(GetProgramInfoLog) /* 333 */ \ + OP(GetRenderbufferParameteriv) /* 334 */ \ + OP(GetSamplerParameterfv) /* 335 */ \ + OP(GetSamplerParameteriv) /* 336 */ \ + OP(GetShaderiv) /* 337 */ \ + OP(GetShaderInfoLog) /* 338 */ \ + OP(GetShaderPrecisionFormat) /* 339 */ \ + OP(GetShaderSource) /* 340 */ \ + OP(GetString) /* 341 */ \ + OP(GetTexParameterfv) /* 342 */ \ + OP(GetTexParameteriv) /* 343 */ \ + OP(GetUniformfv) /* 344 */ \ + OP(GetUniformiv) /* 345 */ \ + OP(GetUniformLocation) /* 346 */ \ + OP(GetVertexAttribfv) /* 347 */ \ + OP(GetVertexAttribiv) /* 348 */ \ + OP(GetVertexAttribPointerv) /* 349 */ \ + OP(Hint) /* 350 */ \ + OP(InvalidateFramebufferImmediate) /* 351 */ \ + OP(InvalidateSubFramebufferImmediate) /* 352 */ \ + OP(IsBuffer) /* 353 */ \ + OP(IsEnabled) /* 354 */ \ + OP(IsFramebuffer) /* 355 */ \ + OP(IsProgram) /* 356 */ \ + OP(IsRenderbuffer) /* 357 */ \ + OP(IsSampler) /* 358 */ \ + OP(IsShader) /* 359 */ \ + OP(IsTexture) /* 360 */ \ + OP(IsTransformFeedback) /* 361 */ \ + OP(LineWidth) /* 362 */ \ + OP(LinkProgram) /* 363 */ \ + OP(PauseTransformFeedback) /* 364 */ \ + OP(PixelStorei) /* 365 */ \ + OP(PolygonOffset) /* 366 */ \ + OP(ReadBuffer) /* 367 */ \ + OP(ReadPixels) /* 368 */ \ + OP(ReleaseShaderCompiler) /* 369 */ \ + OP(RenderbufferStorage) /* 370 */ \ + OP(ResumeTransformFeedback) /* 371 */ \ + OP(SampleCoverage) /* 372 */ \ + OP(SamplerParameterf) /* 373 */ \ + OP(SamplerParameterfvImmediate) /* 374 */ \ + OP(SamplerParameteri) /* 375 */ \ + OP(SamplerParameterivImmediate) /* 376 */ \ + OP(Scissor) /* 377 */ \ + OP(ShaderBinary) /* 378 */ \ + OP(ShaderSourceBucket) /* 379 */ \ + OP(StencilFunc) /* 380 */ \ + OP(StencilFuncSeparate) /* 381 */ \ + OP(StencilMask) /* 382 */ \ + OP(StencilMaskSeparate) /* 383 */ \ + OP(StencilOp) /* 384 */ \ + OP(StencilOpSeparate) /* 385 */ \ + OP(TexImage2D) /* 386 */ \ + OP(TexImage3D) /* 387 */ \ + OP(TexParameterf) /* 388 */ \ + OP(TexParameterfvImmediate) /* 389 */ \ + OP(TexParameteri) /* 390 */ \ + OP(TexParameterivImmediate) /* 391 */ \ + OP(TexStorage3D) /* 392 */ \ + OP(TexSubImage2D) /* 393 */ \ + OP(TexSubImage3D) /* 394 */ \ + OP(Uniform1f) /* 395 */ \ + OP(Uniform1fvImmediate) /* 396 */ \ + OP(Uniform1i) /* 397 */ \ + OP(Uniform1ivImmediate) /* 398 */ \ + OP(Uniform1ui) /* 399 */ \ + OP(Uniform1uivImmediate) /* 400 */ \ + OP(Uniform2f) /* 401 */ \ + OP(Uniform2fvImmediate) /* 402 */ \ + OP(Uniform2i) /* 403 */ \ + OP(Uniform2ivImmediate) /* 404 */ \ + OP(Uniform2ui) /* 405 */ \ + OP(Uniform2uivImmediate) /* 406 */ \ + OP(Uniform3f) /* 407 */ \ + OP(Uniform3fvImmediate) /* 408 */ \ + OP(Uniform3i) /* 409 */ \ + OP(Uniform3ivImmediate) /* 410 */ \ + OP(Uniform3ui) /* 411 */ \ + OP(Uniform3uivImmediate) /* 412 */ \ + OP(Uniform4f) /* 413 */ \ + OP(Uniform4fvImmediate) /* 414 */ \ + OP(Uniform4i) /* 415 */ \ + OP(Uniform4ivImmediate) /* 416 */ \ + OP(Uniform4ui) /* 417 */ \ + OP(Uniform4uivImmediate) /* 418 */ \ + OP(UniformMatrix2fvImmediate) /* 419 */ \ + OP(UniformMatrix2x3fvImmediate) /* 420 */ \ + OP(UniformMatrix2x4fvImmediate) /* 421 */ \ + OP(UniformMatrix3fvImmediate) /* 422 */ \ + OP(UniformMatrix3x2fvImmediate) /* 423 */ \ + OP(UniformMatrix3x4fvImmediate) /* 424 */ \ + OP(UniformMatrix4fvImmediate) /* 425 */ \ + OP(UniformMatrix4x2fvImmediate) /* 426 */ \ + OP(UniformMatrix4x3fvImmediate) /* 427 */ \ + OP(UseProgram) /* 428 */ \ + OP(ValidateProgram) /* 429 */ \ + OP(VertexAttrib1f) /* 430 */ \ + OP(VertexAttrib1fvImmediate) /* 431 */ \ + OP(VertexAttrib2f) /* 432 */ \ + OP(VertexAttrib2fvImmediate) /* 433 */ \ + OP(VertexAttrib3f) /* 434 */ \ + OP(VertexAttrib3fvImmediate) /* 435 */ \ + OP(VertexAttrib4f) /* 436 */ \ + OP(VertexAttrib4fvImmediate) /* 437 */ \ + OP(VertexAttribI4i) /* 438 */ \ + OP(VertexAttribI4ivImmediate) /* 439 */ \ + OP(VertexAttribI4ui) /* 440 */ \ + OP(VertexAttribI4uivImmediate) /* 441 */ \ + OP(VertexAttribIPointer) /* 442 */ \ + OP(VertexAttribPointer) /* 443 */ \ + OP(Viewport) /* 444 */ \ + OP(BlitFramebufferCHROMIUM) /* 445 */ \ + OP(RenderbufferStorageMultisampleCHROMIUM) /* 446 */ \ + OP(RenderbufferStorageMultisampleEXT) /* 447 */ \ + OP(FramebufferTexture2DMultisampleEXT) /* 448 */ \ + OP(TexStorage2DEXT) /* 449 */ \ + OP(GenQueriesEXTImmediate) /* 450 */ \ + OP(DeleteQueriesEXTImmediate) /* 451 */ \ + OP(BeginQueryEXT) /* 452 */ \ + OP(BeginTransformFeedback) /* 453 */ \ + OP(EndQueryEXT) /* 454 */ \ + OP(EndTransformFeedback) /* 455 */ \ + OP(InsertEventMarkerEXT) /* 456 */ \ + OP(PushGroupMarkerEXT) /* 457 */ \ + OP(PopGroupMarkerEXT) /* 458 */ \ + OP(GenVertexArraysOESImmediate) /* 459 */ \ + OP(DeleteVertexArraysOESImmediate) /* 460 */ \ + OP(IsVertexArrayOES) /* 461 */ \ + OP(BindVertexArrayOES) /* 462 */ \ + OP(SwapBuffers) /* 463 */ \ + OP(GetMaxValueInBufferCHROMIUM) /* 464 */ \ + OP(EnableFeatureCHROMIUM) /* 465 */ \ + OP(ResizeCHROMIUM) /* 466 */ \ + OP(GetRequestableExtensionsCHROMIUM) /* 467 */ \ + OP(RequestExtensionCHROMIUM) /* 468 */ \ + OP(GetProgramInfoCHROMIUM) /* 469 */ \ + OP(GetTranslatedShaderSourceANGLE) /* 470 */ \ + OP(PostSubBufferCHROMIUM) /* 471 */ \ + OP(TexImageIOSurface2DCHROMIUM) /* 472 */ \ + OP(CopyTextureCHROMIUM) /* 473 */ \ + OP(DrawArraysInstancedANGLE) /* 474 */ \ + OP(DrawElementsInstancedANGLE) /* 475 */ \ + OP(VertexAttribDivisorANGLE) /* 476 */ \ + OP(GenMailboxCHROMIUM) /* 477 */ \ + OP(ProduceTextureCHROMIUMImmediate) /* 478 */ \ + OP(ProduceTextureDirectCHROMIUMImmediate) /* 479 */ \ + OP(ConsumeTextureCHROMIUMImmediate) /* 480 */ \ + OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 481 */ \ + OP(BindUniformLocationCHROMIUMBucket) /* 482 */ \ + OP(GenValuebuffersCHROMIUMImmediate) /* 483 */ \ + OP(DeleteValuebuffersCHROMIUMImmediate) /* 484 */ \ + OP(IsValuebufferCHROMIUM) /* 485 */ \ + OP(BindValuebufferCHROMIUM) /* 486 */ \ + OP(SubscribeValueCHROMIUM) /* 487 */ \ + OP(PopulateSubscribedValuesCHROMIUM) /* 488 */ \ + OP(UniformValuebufferCHROMIUM) /* 489 */ \ + OP(BindTexImage2DCHROMIUM) /* 490 */ \ + OP(ReleaseTexImage2DCHROMIUM) /* 491 */ \ + OP(TraceBeginCHROMIUM) /* 492 */ \ + OP(TraceEndCHROMIUM) /* 493 */ \ + OP(AsyncTexSubImage2DCHROMIUM) /* 494 */ \ + OP(AsyncTexImage2DCHROMIUM) /* 495 */ \ + OP(WaitAsyncTexImage2DCHROMIUM) /* 496 */ \ + OP(WaitAllAsyncTexImage2DCHROMIUM) /* 497 */ \ + OP(DiscardFramebufferEXTImmediate) /* 498 */ \ + OP(LoseContextCHROMIUM) /* 499 */ \ + OP(InsertSyncPointCHROMIUM) /* 500 */ \ + OP(WaitSyncPointCHROMIUM) /* 501 */ \ + OP(DrawBuffersEXTImmediate) /* 502 */ \ + OP(DiscardBackbufferCHROMIUM) /* 503 */ \ + OP(ScheduleOverlayPlaneCHROMIUM) /* 504 */ \ + OP(SwapInterval) /* 505 */ \ + OP(MatrixLoadfCHROMIUMImmediate) /* 506 */ \ + OP(MatrixLoadIdentityCHROMIUM) /* 507 */ \ + OP(BlendBarrierKHR) /* 508 */ enum CommandId { kStartPoint = cmd::kLastCommonId, // All GLES2 commands start after this. diff --git a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h index e4ccbe7..e6a26fe 100644 --- a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h @@ -35,6 +35,7 @@ static std::string GetStringHintTarget(uint32_t value); static std::string GetStringImageInternalFormat(uint32_t value); static std::string GetStringImageUsage(uint32_t value); static std::string GetStringIndexType(uint32_t value); +static std::string GetStringIndexedBufferTarget(uint32_t value); static std::string GetStringMatrixMode(uint32_t value); static std::string GetStringPixelStore(uint32_t value); static std::string GetStringPixelType(uint32_t value); diff --git a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h index 03a6d4d..3fafbcb 100644 --- a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h +++ b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h @@ -4789,6 +4789,15 @@ std::string GLES2Util::GetStringIndexType(uint32_t value) { arraysize(string_table), value); } +std::string GLES2Util::GetStringIndexedBufferTarget(uint32_t value) { + static const EnumToString string_table[] = { + {GL_TRANSFORM_FEEDBACK_BUFFER, "GL_TRANSFORM_FEEDBACK_BUFFER"}, + {GL_UNIFORM_BUFFER, "GL_UNIFORM_BUFFER"}, + }; + return GLES2Util::GetQualifiedEnumString(string_table, + arraysize(string_table), value); +} + std::string GLES2Util::GetStringMatrixMode(uint32_t value) { static const EnumToString string_table[] = { {GL_PATH_PROJECTION_CHROMIUM, "GL_PATH_PROJECTION_CHROMIUM"}, diff --git a/gpu/command_buffer/service/context_group.h b/gpu/command_buffer/service/context_group.h index 1e56829..63e9a34 100644 --- a/gpu/command_buffer/service/context_group.h +++ b/gpu/command_buffer/service/context_group.h @@ -177,6 +177,24 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> { draw_buffer_ = buf; } + void AddBufferId(GLuint client_id, GLuint service_id) { + buffers_id_map_[client_id] = service_id; + } + + bool GetBufferServiceId(GLuint client_id, GLuint* service_id) const { + std::map<GLuint, GLuint>::const_iterator iter = + buffers_id_map_.find(client_id); + if (iter == buffers_id_map_.end()) + return false; + if (service_id) + *service_id = iter->second; + return true; + } + + void RemoveBufferId(GLuint client_id) { + buffers_id_map_.erase(client_id); + } + void AddSamplerId(GLuint client_id, GLuint service_id) { samplers_id_map_[client_id] = service_id; } @@ -265,6 +283,7 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> { std::vector<base::WeakPtr<gles2::GLES2Decoder> > decoders_; // Mappings from client side IDs to service side IDs. + std::map<GLuint, GLuint> buffers_id_map_; std::map<GLuint, GLuint> samplers_id_map_; std::map<GLuint, GLuint> transformfeedbacks_id_map_; diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index b7877ff..82a519b 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h @@ -48,6 +48,22 @@ error::Error GLES2DecoderImpl::HandleBindBuffer(uint32_t immediate_data_size, return error::kNoError; } +error::Error GLES2DecoderImpl::HandleBindBufferBase( + uint32_t immediate_data_size, + const void* cmd_data) { + if (!unsafe_es3_apis_enabled()) + return error::kUnknownCommand; + const gles2::cmds::BindBufferBase& c = + *static_cast<const gles2::cmds::BindBufferBase*>(cmd_data); + (void)c; + GLenum target = static_cast<GLenum>(c.target); + GLuint index = static_cast<GLuint>(c.index); + GLuint buffer = c.buffer; + group_->GetBufferServiceId(buffer, &buffer); + glBindBufferBase(target, index, buffer); + return error::kNoError; +} + error::Error GLES2DecoderImpl::HandleBindFramebuffer( uint32_t immediate_data_size, const void* cmd_data) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc index db1c62f..2e7f4fc 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc @@ -41,6 +41,15 @@ class GLES2DecoderTest1 : public GLES2DecoderTestBase { INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest1, ::testing::Bool()); template <> +void GLES2DecoderTestBase::SpecializedSetup<cmds::BindBufferBase, 0>( + bool valid) { + if (valid) { + // TODO(zmo): This might affect the states of later tests. + group_->AddBufferId(client_buffer_id_, kServiceBufferId); + } +}; + +template <> void GLES2DecoderTestBase::SpecializedSetup<cmds::GenerateMipmap, 0>( bool valid) { DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h index 2bc23a0..6ab1a88 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h @@ -54,6 +54,19 @@ TEST_P(GLES2DecoderTest1, BindBufferInvalidArgs0_0) { EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } +TEST_P(GLES2DecoderTest1, BindBufferBaseValidArgs) { + EXPECT_CALL( + *gl_, BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kServiceBufferId)); + SpecializedSetup<cmds::BindBufferBase, 0>(true); + cmds::BindBufferBase cmd; + cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, client_buffer_id_); + decoder_->set_unsafe_es3_apis_enabled(true); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); + decoder_->set_unsafe_es3_apis_enabled(false); + EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); +} + TEST_P(GLES2DecoderTest1, BindFramebufferValidArgs) { EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kServiceFramebufferId)); SpecializedSetup<cmds::BindFramebuffer, 0>(true); @@ -1910,39 +1923,4 @@ TEST_P(GLES2DecoderTest1, IsBufferInvalidArgsBadSharedMemoryId) { cmd.Init(client_buffer_id_, shared_memory_id_, kInvalidSharedMemoryOffset); EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); } - -TEST_P(GLES2DecoderTest1, IsEnabledValidArgs) { - SpecializedSetup<cmds::IsEnabled, 0>(true); - cmds::IsEnabled cmd; - cmd.Init(GL_BLEND, shared_memory_id_, shared_memory_offset_); - EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); - EXPECT_EQ(GL_NO_ERROR, GetGLError()); -} - -TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgs0_0) { - EXPECT_CALL(*gl_, IsEnabled(_)).Times(0); - SpecializedSetup<cmds::IsEnabled, 0>(false); - cmds::IsEnabled cmd; - cmd.Init(GL_CLIP_PLANE0, shared_memory_id_, shared_memory_offset_); - EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); - EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); -} - -TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgs0_1) { - EXPECT_CALL(*gl_, IsEnabled(_)).Times(0); - SpecializedSetup<cmds::IsEnabled, 0>(false); - cmds::IsEnabled cmd; - cmd.Init(GL_POINT_SPRITE, shared_memory_id_, shared_memory_offset_); - EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); - EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); -} - -TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgsBadSharedMemoryId) { - SpecializedSetup<cmds::IsEnabled, 0>(false); - cmds::IsEnabled cmd; - cmd.Init(GL_BLEND, kInvalidSharedMemoryId, shared_memory_offset_); - EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); - cmd.Init(GL_BLEND, shared_memory_id_, kInvalidSharedMemoryOffset); - EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); -} #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h index 8b06553..59cf54e 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h @@ -12,6 +12,41 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ +TEST_P(GLES2DecoderTest2, IsEnabledValidArgs) { + SpecializedSetup<cmds::IsEnabled, 0>(true); + cmds::IsEnabled cmd; + cmd.Init(GL_BLEND, shared_memory_id_, shared_memory_offset_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_P(GLES2DecoderTest2, IsEnabledInvalidArgs0_0) { + EXPECT_CALL(*gl_, IsEnabled(_)).Times(0); + SpecializedSetup<cmds::IsEnabled, 0>(false); + cmds::IsEnabled cmd; + cmd.Init(GL_CLIP_PLANE0, shared_memory_id_, shared_memory_offset_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); +} + +TEST_P(GLES2DecoderTest2, IsEnabledInvalidArgs0_1) { + EXPECT_CALL(*gl_, IsEnabled(_)).Times(0); + SpecializedSetup<cmds::IsEnabled, 0>(false); + cmds::IsEnabled cmd; + cmd.Init(GL_POINT_SPRITE, shared_memory_id_, shared_memory_offset_); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); +} + +TEST_P(GLES2DecoderTest2, IsEnabledInvalidArgsBadSharedMemoryId) { + SpecializedSetup<cmds::IsEnabled, 0>(false); + cmds::IsEnabled cmd; + cmd.Init(GL_BLEND, kInvalidSharedMemoryId, shared_memory_offset_); + EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); + cmd.Init(GL_BLEND, shared_memory_id_, kInvalidSharedMemoryOffset); + EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd)); +} + TEST_P(GLES2DecoderTest2, IsFramebufferValidArgs) { SpecializedSetup<cmds::IsFramebuffer, 0>(true); cmds::IsFramebuffer cmd; @@ -1281,6 +1316,4 @@ TEST_P(GLES2DecoderTest2, ViewportInvalidArgs3_0) { // TODO(gman): TexStorage2DEXT // TODO(gman): GenQueriesEXTImmediate // TODO(gman): DeleteQueriesEXTImmediate -// TODO(gman): BeginQueryEXT - #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h index 4333b27..e1685cd 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h @@ -12,6 +12,8 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_ +// TODO(gman): BeginQueryEXT + TEST_P(GLES2DecoderTest3, BeginTransformFeedbackValidArgs) { EXPECT_CALL(*gl_, BeginTransformFeedback(GL_POINTS)); SpecializedSetup<cmds::BeginTransformFeedback, 0>(true); diff --git a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h index fc650d2..5692847 100644 --- a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h @@ -35,6 +35,7 @@ ValueValidator<GLenum> hint_target; ValueValidator<GLenum> image_internal_format; ValueValidator<GLenum> image_usage; ValueValidator<GLenum> index_type; +ValueValidator<GLenum> indexed_buffer_target; ValueValidator<GLenum> matrix_mode; ValueValidator<GLenum> pixel_store; ValueValidator<GLint> pixel_store_alignment; diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h index a1e5c74..d81b896 100644 --- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h @@ -252,6 +252,11 @@ static const GLenum valid_index_type_table[] = { GL_UNSIGNED_SHORT, }; +static const GLenum valid_indexed_buffer_target_table[] = { + GL_TRANSFORM_FEEDBACK_BUFFER, + GL_UNIFORM_BUFFER, +}; + static const GLenum valid_matrix_mode_table[] = { GL_PATH_PROJECTION_CHROMIUM, GL_PATH_MODELVIEW_CHROMIUM, @@ -593,6 +598,8 @@ Validators::Validators() arraysize(valid_image_internal_format_table)), image_usage(valid_image_usage_table, arraysize(valid_image_usage_table)), index_type(valid_index_type_table, arraysize(valid_index_type_table)), + indexed_buffer_target(valid_indexed_buffer_target_table, + arraysize(valid_indexed_buffer_target_table)), matrix_mode(valid_matrix_mode_table, arraysize(valid_matrix_mode_table)), pixel_store(valid_pixel_store_table, arraysize(valid_pixel_store_table)), pixel_store_alignment(valid_pixel_store_alignment_table, |