Chromium Code Reviews

Side by Side Diff: gpu/command_buffer/build_gles2_cmd_buffer.py

Issue 885443002: Roll Chrome into Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase to ToT mojo Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « gpu/GLES2/gl2chromium_autogen.h ('k') | gpu/command_buffer/client/gles2_c_lib_autogen.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """code generator for GLES2 command buffers.""" 6 """code generator for GLES2 command buffers."""
7 7
8 import itertools 8 import itertools
9 import os 9 import os
10 import os.path 10 import os.path
(...skipping 1354 matching lines...)
1365 'valid': [ 1365 'valid': [
1366 'GL_GUILTY_CONTEXT_RESET_ARB', 1366 'GL_GUILTY_CONTEXT_RESET_ARB',
1367 'GL_INNOCENT_CONTEXT_RESET_ARB', 1367 'GL_INNOCENT_CONTEXT_RESET_ARB',
1368 'GL_UNKNOWN_CONTEXT_RESET_ARB', 1368 'GL_UNKNOWN_CONTEXT_RESET_ARB',
1369 ], 1369 ],
1370 }, 1370 },
1371 'SyncCondition': { 1371 'SyncCondition': {
1372 'type': 'GLenum', 1372 'type': 'GLenum',
1373 'is_complete': True, 1373 'is_complete': True,
1374 'valid': [ 1374 'valid': [
1375 #TODO(zmo): avoid using the direct number. 1375 'GL_SYNC_GPU_COMMANDS_COMPLETE',
1376 '0x9117', # GL_SYNC_GPU_COMMANDS_COMPLETE
1377 ], 1376 ],
1378 'invalid': [ 1377 'invalid': [
1379 '0', 1378 '0',
1380 ], 1379 ],
1381 }, 1380 },
1382 'SyncFlags': { 1381 'SyncFlags': {
1383 'type': 'GLbitfield', 1382 'type': 'GLbitfield',
1384 'is_complete': True, 1383 'is_complete': True,
1385 'valid': [ 1384 'valid': [
1386 '0', 1385 '0',
(...skipping 635 matching lines...)
2022 'data_transfer_methods': ['shm'], 2021 'data_transfer_methods': ['shm'],
2023 'cmd_args': 'GLidProgram program, void* result, uint32_t result_size', 2022 'cmd_args': 'GLidProgram program, void* result, uint32_t result_size',
2024 'result': ['SizedResult<GLuint>'], 2023 'result': ['SizedResult<GLuint>'],
2025 }, 2024 },
2026 'GetAttribLocation': { 2025 'GetAttribLocation': {
2027 'type': 'Custom', 2026 'type': 'Custom',
2028 'data_transfer_methods': ['shm'], 2027 'data_transfer_methods': ['shm'],
2029 'cmd_args': 2028 'cmd_args':
2030 'GLidProgram program, uint32_t name_bucket_id, GLint* location', 2029 'GLidProgram program, uint32_t name_bucket_id, GLint* location',
2031 'result': ['GLint'], 2030 'result': ['GLint'],
2032 'error_return': -1, # http://www.opengl.org/sdk/docs/man/xhtml/glGetAttribLo cation.xml 2031 'error_return': -1,
2032 },
2033 'GetFragDataLocation': {
2034 'type': 'Custom',
2035 'data_transfer_methods': ['shm'],
2036 'cmd_args':
2037 'GLidProgram program, uint32_t name_bucket_id, GLint* location',
2038 'result': ['GLint'],
2039 'error_return': -1,
2040 'unsafe': True,
2033 }, 2041 },
2034 'GetBooleanv': { 2042 'GetBooleanv': {
2035 'type': 'GETn', 2043 'type': 'GETn',
2036 'result': ['SizedResult<GLboolean>'], 2044 'result': ['SizedResult<GLboolean>'],
2037 'decoder_func': 'DoGetBooleanv', 2045 'decoder_func': 'DoGetBooleanv',
2038 'gl_test_func': 'glGetBooleanv', 2046 'gl_test_func': 'glGetBooleanv',
2039 }, 2047 },
2040 'GetBufferParameteriv': { 2048 'GetBufferParameteriv': {
2041 'type': 'GETn', 2049 'type': 'GETn',
2042 'result': ['SizedResult<GLint>'], 2050 'result': ['SizedResult<GLint>'],
(...skipping 391 matching lines...)
2434 'unsafe': True, 2442 'unsafe': True,
2435 }, 2443 },
2436 'ShaderBinary': { 2444 'ShaderBinary': {
2437 'type': 'Custom', 2445 'type': 'Custom',
2438 'client_test': False, 2446 'client_test': False,
2439 }, 2447 },
2440 'ShaderSource': { 2448 'ShaderSource': {
2441 'type': 'PUTSTR', 2449 'type': 'PUTSTR',
2442 'decoder_func': 'DoShaderSource', 2450 'decoder_func': 'DoShaderSource',
2443 'data_transfer_methods': ['bucket'], 2451 'data_transfer_methods': ['bucket'],
2444 'client_test': False,
2445 'cmd_args': 2452 'cmd_args':
2446 'GLuint shader, const char** str', 2453 'GLuint shader, const char** str',
2447 'pepper_args': 2454 'pepper_args':
2448 'GLuint shader, GLsizei count, const char** str, const GLint* length', 2455 'GLuint shader, GLsizei count, const char** str, const GLint* length',
2449 }, 2456 },
2450 'StencilMask': { 2457 'StencilMask': {
2451 'type': 'StateSetFrontBack', 2458 'type': 'StateSetFrontBack',
2452 'state': 'StencilMask', 2459 'state': 'StencilMask',
2453 'no_gl': True, 2460 'no_gl': True,
2454 'expectation': False, 2461 'expectation': False,
(...skipping 1378 matching lines...)
3833 gl_arg_strings.append(arg.GetValidClientSideArg(func)) 3840 gl_arg_strings.append(arg.GetValidClientSideArg(func))
3834 3841
3835 file.Write(code % { 3842 file.Write(code % {
3836 'name': func.name, 3843 'name': func.name,
3837 'invalid_index': func.GetOriginalArgs().index(invalid_arg), 3844 'invalid_index': func.GetOriginalArgs().index(invalid_arg),
3838 'args': ", ".join(gl_arg_strings), 3845 'args': ", ".join(gl_arg_strings),
3839 'gl_error': invalid[2], 3846 'gl_error': invalid[2],
3840 }) 3847 })
3841 else: 3848 else:
3842 if client_test != False: 3849 if client_test != False:
3843 file.Write("// TODO: Implement unit test for %s\n" % func.name) 3850 file.Write("// TODO(zmo): Implement unit test for %s\n" % func.name)
3844 3851
3845 def WriteDestinationInitalizationValidation(self, func, file): 3852 def WriteDestinationInitalizationValidation(self, func, file):
3846 """Writes the client side destintion initialization validation.""" 3853 """Writes the client side destintion initialization validation."""
3847 for arg in func.GetOriginalArgs(): 3854 for arg in func.GetOriginalArgs():
3848 arg.WriteDestinationInitalizationValidation(file, func) 3855 arg.WriteDestinationInitalizationValidation(file, func)
3849 3856
3850 def WriteTraceEvent(self, func, file): 3857 def WriteTraceEvent(self, func, file):
3851 file.Write(' TRACE_EVENT0("gpu", "GLES2Implementation::%s");\n' % 3858 file.Write(' TRACE_EVENT0("gpu", "GLES2Implementation::%s");\n' %
3852 func.original_name) 3859 func.original_name)
3853 3860
(...skipping 2646 matching lines...)
6500 if bucket_cmd_arg_string: 6507 if bucket_cmd_arg_string:
6501 bucket_cmd_arg_string += ", " 6508 bucket_cmd_arg_string += ", "
6502 bucket_cmd_arg_string += 'kResultBucketId' 6509 bucket_cmd_arg_string += 'kResultBucketId'
6503 file.Write(" helper_->%sBucket(%s);\n" % 6510 file.Write(" helper_->%sBucket(%s);\n" %
6504 (func.name, bucket_cmd_arg_string)) 6511 (func.name, bucket_cmd_arg_string))
6505 file.Write(" helper_->SetBucketSize(kResultBucketId, 0);"); 6512 file.Write(" helper_->SetBucketSize(kResultBucketId, 0);");
6506 file.Write(" CheckGLError();\n") 6513 file.Write(" CheckGLError();\n")
6507 file.Write("}\n") 6514 file.Write("}\n")
6508 file.Write("\n") 6515 file.Write("\n")
6509 6516
6517 def WriteGLES2ImplementationUnitTest(self, func, file):
6518 """Overrriden from TypeHandler."""
6519 code = """
6520 TEST_F(GLES2ImplementationTest, %(name)s) {
6521 const uint32 kBucketId = GLES2Implementation::kResultBucketId;
6522 const char* kString1 = "happy";
6523 const char* kString2 = "ending";
6524 const size_t kString1Size = ::strlen(kString1) + 1;
6525 const size_t kString2Size = ::strlen(kString2) + 1;
6526 const size_t kHeaderSize = sizeof(GLint) * 3;
6527 const size_t kSourceSize = kHeaderSize + kString1Size + kString2Size;
6528 const size_t kPaddedHeaderSize =
6529 transfer_buffer_->RoundToAlignment(kHeaderSize);
6530 const size_t kPaddedString1Size =
6531 transfer_buffer_->RoundToAlignment(kString1Size);
6532 const size_t kPaddedString2Size =
6533 transfer_buffer_->RoundToAlignment(kString2Size);
6534 struct Cmds {
6535 cmd::SetBucketSize set_bucket_size;
6536 cmd::SetBucketData set_bucket_header;
6537 cmd::SetToken set_token1;
6538 cmd::SetBucketData set_bucket_data1;
6539 cmd::SetToken set_token2;
6540 cmd::SetBucketData set_bucket_data2;
6541 cmd::SetToken set_token3;
6542 cmds::ShaderSourceBucket shader_source_bucket;
6543 cmd::SetBucketSize clear_bucket_size;
6544 };
6545
6546 ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize);
6547 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size);
6548 ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size);
6549
6550 Cmds expected;
6551 expected.set_bucket_size.Init(kBucketId, kSourceSize);
6552 expected.set_bucket_header.Init(
6553 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset);
6554 expected.set_token1.Init(GetNextToken());
6555 expected.set_bucket_data1.Init(
6556 kBucketId, kHeaderSize, kString1Size, mem1.id, mem1.offset);
6557 expected.set_token2.Init(GetNextToken());
6558 expected.set_bucket_data2.Init(
6559 kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id,
6560 mem2.offset);
6561 expected.set_token3.Init(GetNextToken());
6562 expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId);
6563 expected.clear_bucket_size.Init(kBucketId, 0);
6564 const char* kStrings[] = { kString1, kString2 };
6565 gl_->%(name)s(%(gl_args)s);
6566 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
6567 }
6568 """
6569 gl_args = []
6570 cmd_args = []
6571 for arg in func.GetOriginalArgs():
6572 if arg == self.__GetDataArg(func):
6573 gl_args.append('kStrings')
6574 elif arg == self.__GetLengthArg(func):
6575 gl_args.append('NULL')
6576 elif arg.name == 'count':
6577 gl_args.append('2')
6578 else:
6579 gl_args.append(arg.GetValidClientSideArg(func))
6580 cmd_args.append(arg.GetValidClientSideArg(func))
6581 file.Write(code % {
6582 'name': func.name,
6583 'gl_args': ", ".join(gl_args),
6584 'cmd_args': ", ".join(cmd_args),
6585 })
6586
6587 if self.__GetLengthArg(func) == None:
6588 return
6589 code = """
6590 TEST_F(GLES2ImplementationTest, %(name)sWithLength) {
6591 const uint32 kBucketId = GLES2Implementation::kResultBucketId;
6592 const char* kString = "foobar******";
6593 const size_t kStringSize = 6; // We only need "foobar".
6594 const size_t kHeaderSize = sizeof(GLint) * 2;
6595 const size_t kSourceSize = kHeaderSize + kStringSize + 1;
6596 const size_t kPaddedHeaderSize =
6597 transfer_buffer_->RoundToAlignment(kHeaderSize);
6598 const size_t kPaddedStringSize =
6599 transfer_buffer_->RoundToAlignment(kStringSize + 1);
6600 struct Cmds {
6601 cmd::SetBucketSize set_bucket_size;
6602 cmd::SetBucketData set_bucket_header;
6603 cmd::SetToken set_token1;
6604 cmd::SetBucketData set_bucket_data;
6605 cmd::SetToken set_token2;
6606 cmds::ShaderSourceBucket shader_source_bucket;
6607 cmd::SetBucketSize clear_bucket_size;
6608 };
6609
6610 ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize);
6611 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedStringSize);
6612
6613 Cmds expected;
6614 expected.set_bucket_size.Init(kBucketId, kSourceSize);
6615 expected.set_bucket_header.Init(
6616 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset);
6617 expected.set_token1.Init(GetNextToken());
6618 expected.set_bucket_data.Init(
6619 kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset);
6620 expected.set_token2.Init(GetNextToken());
6621 expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId);
6622 expected.clear_bucket_size.Init(kBucketId, 0);
6623 const char* kStrings[] = { kString };
6624 const GLint kLength[] = { kStringSize };
6625 gl_->%(name)s(%(gl_args)s);
6626 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
6627 }
6628 """
6629 gl_args = []
6630 for arg in func.GetOriginalArgs():
6631 if arg == self.__GetDataArg(func):
6632 gl_args.append('kStrings')
6633 elif arg == self.__GetLengthArg(func):
6634 gl_args.append('kLength')
6635 elif arg.name == 'count':
6636 gl_args.append('1')
6637 else:
6638 gl_args.append(arg.GetValidClientSideArg(func))
6639 file.Write(code % {
6640 'name': func.name,
6641 'gl_args': ", ".join(gl_args),
6642 'cmd_args': ", ".join(cmd_args),
6643 })
6644
6645 def WriteBucketServiceUnitTest(self, func, file, *extras):
6646 """Overrriden from TypeHandler."""
6647 cmd_args = []
6648 cmd_args_with_invalid_id = []
6649 for index, arg in enumerate(func.GetOriginalArgs()):
6650 if (arg == self.__GetLengthArg(func) or
6651 arg == self.__GetDataArg(func) or arg.name == 'count'):
6652 continue
6653 if index == 0: # Resource ID arg
6654 cmd_args.append(arg.GetValidArg(func))
6655 cmd_args_with_invalid_id.append('kInvalidClientId')
6656 else:
6657 cmd_args.append(arg.GetValidArg(func))
6658 cmd_args_with_invalid_id.append(arg.GetValidArg(func))
6659
6660 test = """
6661 TEST_P(%(test_name)s, %(name)sValidArgs) {
6662 const uint32 kBucketId = 123;
6663 const char kSource0[] = "hello";
6664 const char* kSource[] = { kSource0 };
6665 const char kValidStrEnd = 0;
6666 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
6667 cmds::%(name)s cmd;
6668 cmd.Init(%(cmd_args)s, kBucketId);
6669 decoder_->set_unsafe_es3_apis_enabled(true);
6670 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));"""
6671 if func.IsUnsafe():
6672 test += """
6673 decoder_->set_unsafe_es3_apis_enabled(false);
6674 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
6675 """
6676 test += """
6677 }
6678 """
6679 self.WriteValidUnitTest(func, file, test, {
6680 'cmd_args': ", ".join(cmd_args),
6681 }, *extras)
6682
6683 test = """
6684 TEST_P(%(test_name)s, %(name)sInvalidArgs) {
6685 const uint32 kBucketId = 123;
6686 const char kSource0[] = "hello";
6687 const char* kSource[] = { kSource0 };
6688 const char kValidStrEnd = 0;
6689 decoder_->set_unsafe_es3_apis_enabled(true);
6690 cmds::%(name)s cmd;
6691 // Test no bucket.
6692 cmd.Init(%(cmd_args)s, kBucketId);
6693 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
6694 // Test invalid client.
6695 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
6696 cmd.Init(%(cmd_args_with_invalid_id)s, kBucketId);
6697 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6698 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
6699 }
6700 """
6701 self.WriteValidUnitTest(func, file, test, {
6702 'cmd_args': ", ".join(cmd_args),
6703 'cmd_args_with_invalid_id': ", ".join(cmd_args_with_invalid_id),
6704 }, *extras)
6705
6706 test = """
6707 TEST_P(%(test_name)s, %(name)sInvalidHeader) {
6708 const uint32 kBucketId = 123;
6709 const char kSource0[] = "hello";
6710 const char* kSource[] = { kSource0 };
6711 const char kValidStrEnd = 0;
6712 const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource));
6713 const GLsizei kTests[] = {
6714 kCount,
6715 0,
6716 std::numeric_limits<GLsizei>::max(),
6717 -1,
6718 kCount,
6719 };
6720 decoder_->set_unsafe_es3_apis_enabled(true);
6721 for (size_t ii = 0; ii < arraysize(kTests); ++ii) {
6722 SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd);
6723 cmds::%(name)s cmd;
6724 cmd.Init(%(cmd_args)s, kBucketId);
6725 if (kTests[ii] == kCount) {
6726 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6727 } else {
6728 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
6729 }
6730 }
6731 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6732 }
6733 """
6734 self.WriteValidUnitTest(func, file, test, {
6735 'cmd_args': ", ".join(cmd_args),
6736 }, *extras)
6737
6738 test = """
6739 TEST_P(%(test_name)s, %(name)sInvalidStringEnding) {
6740 const uint32 kBucketId = 123;
6741 const char kSource0[] = "hello";
6742 const char* kSource[] = { kSource0 };
6743 const char kInvalidStrEnd = '*';
6744 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd);
6745 cmds::%(name)s cmd;
6746 cmd.Init(%(cmd_args)s, kBucketId);
6747 decoder_->set_unsafe_es3_apis_enabled(true);
6748 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
6749 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6750 }
6751 """
6752 self.WriteValidUnitTest(func, file, test, {
6753 'cmd_args': ", ".join(cmd_args),
6754 }, *extras)
6755
6510 6756
6511 class PUTXnHandler(ArrayArgTypeHandler): 6757 class PUTXnHandler(ArrayArgTypeHandler):
6512 """Handler for glUniform?f functions.""" 6758 """Handler for glUniform?f functions."""
6513 def __init__(self): 6759 def __init__(self):
6514 ArrayArgTypeHandler.__init__(self) 6760 ArrayArgTypeHandler.__init__(self)
6515 6761
6516 def WriteHandlerImplementation(self, func, file): 6762 def WriteHandlerImplementation(self, func, file):
6517 """Overrriden from TypeHandler.""" 6763 """Overrriden from TypeHandler."""
6518 code = """ %(type)s temp[%(count)s] = { %(values)s};""" 6764 code = """ %(type)s temp[%(count)s] = { %(values)s};"""
6519 if func.IsUnsafe(): 6765 if func.IsUnsafe():
(...skipping 1012 matching lines...)
7532 7778
7533 def WriteDestinationInitalizationValidation(self, file, func): 7779 def WriteDestinationInitalizationValidation(self, file, func):
7534 """Overridden from Argument.""" 7780 """Overridden from Argument."""
7535 self.WriteDestinationInitalizationValidatationIfNeeded(file, func) 7781 self.WriteDestinationInitalizationValidatationIfNeeded(file, func)
7536 7782
7537 def GetLogArg(self): 7783 def GetLogArg(self):
7538 """Overridden from Argument.""" 7784 """Overridden from Argument."""
7539 return "static_cast<const void*>(%s)" % self.name 7785 return "static_cast<const void*>(%s)" % self.name
7540 7786
7541 7787
7542 class BucketPointerArgument(Argument):
7543 """A class that represents an bucket argument to a function."""
7544
7545 def __init__(self, name, type):
7546 Argument.__init__(self, name, type)
7547
7548 def AddCmdArgs(self, args):
7549 """Overridden from Argument."""
7550 pass
7551
7552 def WriteGetCode(self, file):
7553 """Overridden from Argument."""
7554 file.Write(
7555 " %s %s = bucket->GetData(0, data_size);\n" %
7556 (self.type, self.name))
7557
7558 def WriteValidationCode(self, file, func):
7559 """Overridden from Argument."""
7560 pass
7561
7562 def GetImmediateVersion(self):
7563 """Overridden from Argument."""
7564 return None
7565
7566 def WriteDestinationInitalizationValidation(self, file, func):
7567 """Overridden from Argument."""
7568 self.WriteDestinationInitalizationValidatationIfNeeded(file, func)
7569
7570 def GetLogArg(self):
7571 """Overridden from Argument."""
7572 return "static_cast<const void*>(%s)" % self.name
7573
7574
7575 class PointerArgument(Argument): 7788 class PointerArgument(Argument):
7576 """A class that represents a pointer argument to a function.""" 7789 """A class that represents a pointer argument to a function."""
7577 7790
7578 def __init__(self, name, type): 7791 def __init__(self, name, type):
7579 Argument.__init__(self, name, type) 7792 Argument.__init__(self, name, type)
7580 7793
7581 def IsPointer(self): 7794 def IsPointer(self):
7582 """Returns true if argument is a pointer.""" 7795 """Overridden from Argument."""
7583 return True 7796 return True
7584 7797
7585 def IsPointer2D(self): 7798 def IsPointer2D(self):
7586 """Returns true if argument is a 2D pointer.""" 7799 """Overridden from Argument."""
7587 return self.type.count('*') == 2 7800 return self.type.count('*') == 2
7588 7801
7589 def GetPointedType(self): 7802 def GetPointedType(self):
7590 match = re.match('(const\s+)?(?P<element_type>[\w]+)\s*\*', self.type) 7803 match = re.match('(const\s+)?(?P<element_type>[\w]+)\s*\*', self.type)
7591 assert match 7804 assert match
7592 return match.groupdict()['element_type'] 7805 return match.groupdict()['element_type']
7593 7806
7594 def GetValidArg(self, func): 7807 def GetValidArg(self, func):
7595 """Overridden from Argument.""" 7808 """Overridden from Argument."""
7596 return "shared_memory_id_, shared_memory_offset_" 7809 return "shared_memory_id_, shared_memory_offset_"
(...skipping 57 matching lines...)
7654 if self.IsPointer2D(): 7867 if self.IsPointer2D():
7655 return InputStringArrayBucketArgument(self.name, self.type) 7868 return InputStringArrayBucketArgument(self.name, self.type)
7656 return InputStringBucketArgument(self.name, self.type) 7869 return InputStringBucketArgument(self.name, self.type)
7657 return BucketPointerArgument(self.name, self.type) 7870 return BucketPointerArgument(self.name, self.type)
7658 7871
7659 def WriteDestinationInitalizationValidation(self, file, func): 7872 def WriteDestinationInitalizationValidation(self, file, func):
7660 """Overridden from Argument.""" 7873 """Overridden from Argument."""
7661 self.WriteDestinationInitalizationValidatationIfNeeded(file, func) 7874 self.WriteDestinationInitalizationValidatationIfNeeded(file, func)
7662 7875
7663 7876
7877 class BucketPointerArgument(PointerArgument):
7878 """A class that represents an bucket argument to a function."""
7879
7880 def __init__(self, name, type):
7881 Argument.__init__(self, name, type)
7882
7883 def AddCmdArgs(self, args):
7884 """Overridden from Argument."""
7885 pass
7886
7887 def WriteGetCode(self, file):
7888 """Overridden from Argument."""
7889 file.Write(
7890 " %s %s = bucket->GetData(0, data_size);\n" %
7891 (self.type, self.name))
7892
7893 def WriteValidationCode(self, file, func):
7894 """Overridden from Argument."""
7895 pass
7896
7897 def GetImmediateVersion(self):
7898 """Overridden from Argument."""
7899 return None
7900
7901 def WriteDestinationInitalizationValidation(self, file, func):
7902 """Overridden from Argument."""
7903 self.WriteDestinationInitalizationValidatationIfNeeded(file, func)
7904
7905 def GetLogArg(self):
7906 """Overridden from Argument."""
7907 return "static_cast<const void*>(%s)" % self.name
7908
7909
7664 class InputStringBucketArgument(Argument): 7910 class InputStringBucketArgument(Argument):
7665 """A string input argument where the string is passed in a bucket.""" 7911 """A string input argument where the string is passed in a bucket."""
7666 7912
7667 def __init__(self, name, type): 7913 def __init__(self, name, type):
7668 Argument.__init__(self, name + "_bucket_id", "uint32_t") 7914 Argument.__init__(self, name + "_bucket_id", "uint32_t")
7669 7915
7916 def IsPointer(self):
7917 """Overridden from Argument."""
7918 return True
7919
7920 def IsPointer2D(self):
7921 """Overridden from Argument."""
7922 return False
7923
7670 7924
7671 class InputStringArrayBucketArgument(Argument): 7925 class InputStringArrayBucketArgument(Argument):
7672 """A string array input argument where the strings are passed in a bucket.""" 7926 """A string array input argument where the strings are passed in a bucket."""
7673 7927
7674 def __init__(self, name, type): 7928 def __init__(self, name, type):
7675 Argument.__init__(self, name + "_bucket_id", "uint32_t") 7929 Argument.__init__(self, name + "_bucket_id", "uint32_t")
7676 self._original_name = name 7930 self._original_name = name
7677 7931
7678 def WriteGetCode(self, file): 7932 def WriteGetCode(self, file):
7679 """Overridden from Argument.""" 7933 """Overridden from Argument."""
(...skipping 45 matching lines...)
7725 'name': self.name, 7979 'name': self.name,
7726 'original_name': self._original_name, 7980 'original_name': self._original_name,
7727 }) 7981 })
7728 7982
7729 def GetValidArg(self, func): 7983 def GetValidArg(self, func):
7730 return "kNameBucketId" 7984 return "kNameBucketId"
7731 7985
7732 def GetValidGLArg(self, func): 7986 def GetValidGLArg(self, func):
7733 return "_" 7987 return "_"
7734 7988
7989 def IsPointer(self):
7990 """Overridden from Argument."""
7991 return True
7992
7993 def IsPointer2D(self):
7994 """Overridden from Argument."""
7995 return True
7996
7735 7997
7736 class ResourceIdArgument(Argument): 7998 class ResourceIdArgument(Argument):
7737 """A class that represents a resource id argument to a function.""" 7999 """A class that represents a resource id argument to a function."""
7738 8000
7739 def __init__(self, name, type): 8001 def __init__(self, name, type):
7740 match = re.match("(GLid\w+)", type) 8002 match = re.match("(GLid\w+)", type)
7741 self.resource_type = match.group(1)[4:] 8003 self.resource_type = match.group(1)[4:]
7742 if self.resource_type == "Sync": 8004 if self.resource_type == "Sync":
7743 type = type.replace(match.group(1), "GLsync") 8005 type = type.replace(match.group(1), "GLsync")
7744 else: 8006 else:
(...skipping 883 matching lines...)
8628 file.Write("#undef GLES2_CMD_OP\n") 8890 file.Write("#undef GLES2_CMD_OP\n")
8629 file.Write(" kNumCommands\n") 8891 file.Write(" kNumCommands\n")
8630 file.Write("};\n") 8892 file.Write("};\n")
8631 file.Write("\n") 8893 file.Write("\n")
8632 file.Close() 8894 file.Close()
8633 self.generated_cpp_filenames.append(file.filename) 8895 self.generated_cpp_filenames.append(file.filename)
8634 8896
8635 def WriteFormat(self, filename): 8897 def WriteFormat(self, filename):
8636 """Writes the command buffer format""" 8898 """Writes the command buffer format"""
8637 file = CHeaderWriter(filename) 8899 file = CHeaderWriter(filename)
8900 # Forward declaration of a few enums used in constant argument
8901 # to avoid including GL header files.
8902 enum_defines = {
8903 'GL_SYNC_GPU_COMMANDS_COMPLETE': 0x9117,
8904 }
8905 file.Write('\n')
8906 for enum in enum_defines:
8907 file.Write("#define %s 0x%x\n" % (enum, enum_defines[enum]))
8908 file.Write('\n')
8638 for func in self.functions: 8909 for func in self.functions:
8639 if True: 8910 if True:
8640 #gen_cmd = func.GetInfo('gen_cmd') 8911 #gen_cmd = func.GetInfo('gen_cmd')
8641 #if gen_cmd == True or gen_cmd == None: 8912 #if gen_cmd == True or gen_cmd == None:
8642 func.WriteStruct(file) 8913 func.WriteStruct(file)
8643 file.Write("\n") 8914 file.Write("\n")
8644 file.Close() 8915 file.Close()
8645 self.generated_cpp_filenames.append(file.filename) 8916 self.generated_cpp_filenames.append(file.filename)
8646 8917
8647 def WriteDocs(self, filename): 8918 def WriteDocs(self, filename):
(...skipping 1142 matching lines...)
9790 Format(gen.generated_cpp_filenames) 10061 Format(gen.generated_cpp_filenames)
9791 10062
9792 if gen.errors > 0: 10063 if gen.errors > 0:
9793 print "%d errors" % gen.errors 10064 print "%d errors" % gen.errors
9794 return 1 10065 return 1
9795 return 0 10066 return 0
9796 10067
9797 10068
9798 if __name__ == '__main__': 10069 if __name__ == '__main__':
9799 sys.exit(main(sys.argv[1:])) 10070 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « gpu/GLES2/gl2chromium_autogen.h ('k') | gpu/command_buffer/client/gles2_c_lib_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine