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

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

Issue 895853003: Update from https://crrev.com/314320 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « gpu/PRESUBMIT.py ('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 921 matching lines...) Expand 10 before | Expand all | Expand 10 after
932 'BufferParameter': { 932 'BufferParameter': {
933 'type': 'GLenum', 933 'type': 'GLenum',
934 'valid': [ 934 'valid': [
935 'GL_BUFFER_SIZE', 935 'GL_BUFFER_SIZE',
936 'GL_BUFFER_USAGE', 936 'GL_BUFFER_USAGE',
937 ], 937 ],
938 'invalid': [ 938 'invalid': [
939 'GL_PIXEL_PACK_BUFFER', 939 'GL_PIXEL_PACK_BUFFER',
940 ], 940 ],
941 }, 941 },
942 'BufferMode': {
943 'type': 'GLenum',
944 'valid': [
945 'GL_INTERLEAVED_ATTRIBS',
946 'GL_SEPARATE_ATTRIBS',
947 ],
948 'invalid': [
949 'GL_PIXEL_PACK_BUFFER',
950 ],
951 },
942 'FrameBufferParameter': { 952 'FrameBufferParameter': {
943 'type': 'GLenum', 953 'type': 'GLenum',
944 'valid': [ 954 'valid': [
945 'GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE', 955 'GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE',
946 'GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME', 956 'GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME',
947 'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL', 957 'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL',
948 'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE', 958 'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE',
949 ], 959 ],
950 }, 960 },
951 'MatrixMode': { 961 'MatrixMode': {
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
1705 }, 1715 },
1706 'CopyTexImage2D': { 1716 'CopyTexImage2D': {
1707 'decoder_func': 'DoCopyTexImage2D', 1717 'decoder_func': 'DoCopyTexImage2D',
1708 'unit_test': False, 1718 'unit_test': False,
1709 'defer_reads': True, 1719 'defer_reads': True,
1710 }, 1720 },
1711 'CopyTexSubImage2D': { 1721 'CopyTexSubImage2D': {
1712 'decoder_func': 'DoCopyTexSubImage2D', 1722 'decoder_func': 'DoCopyTexSubImage2D',
1713 'defer_reads': True, 1723 'defer_reads': True,
1714 }, 1724 },
1725 'CopyTexSubImage3D': {
1726 'defer_reads': True,
1727 'unsafe': True,
1728 },
1715 'CreateImageCHROMIUM': { 1729 'CreateImageCHROMIUM': {
1716 'type': 'Manual', 1730 'type': 'Manual',
1717 'cmd_args': 1731 'cmd_args':
1718 'ClientBuffer buffer, GLsizei width, GLsizei height, ' 1732 'ClientBuffer buffer, GLsizei width, GLsizei height, '
1719 'GLenum internalformat', 1733 'GLenum internalformat',
1720 'result': ['GLuint'], 1734 'result': ['GLuint'],
1721 'client_test': False, 1735 'client_test': False,
1722 'gen_cmd': False, 1736 'gen_cmd': False,
1723 'expectation': False, 1737 'expectation': False,
1724 'extension': True, 1738 'extension': True,
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
2441 'first_element_only': True, 2455 'first_element_only': True,
2442 'unsafe': True, 2456 'unsafe': True,
2443 }, 2457 },
2444 'ShaderBinary': { 2458 'ShaderBinary': {
2445 'type': 'Custom', 2459 'type': 'Custom',
2446 'client_test': False, 2460 'client_test': False,
2447 }, 2461 },
2448 'ShaderSource': { 2462 'ShaderSource': {
2449 'type': 'PUTSTR', 2463 'type': 'PUTSTR',
2450 'decoder_func': 'DoShaderSource', 2464 'decoder_func': 'DoShaderSource',
2465 'expectation': False,
2451 'data_transfer_methods': ['bucket'], 2466 'data_transfer_methods': ['bucket'],
2452 'cmd_args': 2467 'cmd_args':
2453 'GLuint shader, const char** str', 2468 'GLuint shader, const char** str',
2454 'pepper_args': 2469 'pepper_args':
2455 'GLuint shader, GLsizei count, const char** str, const GLint* length', 2470 'GLuint shader, GLsizei count, const char** str, const GLint* length',
2456 }, 2471 },
2457 'StencilMask': { 2472 'StencilMask': {
2458 'type': 'StateSetFrontBack', 2473 'type': 'StateSetFrontBack',
2459 'state': 'StencilMask', 2474 'state': 'StencilMask',
2460 'no_gl': True, 2475 'no_gl': True,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2538 'type': 'Manual', 2553 'type': 'Manual',
2539 'data_transfer_methods': ['shm'], 2554 'data_transfer_methods': ['shm'],
2540 'client_test': False, 2555 'client_test': False,
2541 'cmd_args': 'GLenumTextureTarget target, GLint level, ' 2556 'cmd_args': 'GLenumTextureTarget target, GLint level, '
2542 'GLint xoffset, GLint yoffset, GLint zoffset, ' 2557 'GLint xoffset, GLint yoffset, GLint zoffset, '
2543 'GLsizei width, GLsizei height, GLsizei depth, ' 2558 'GLsizei width, GLsizei height, GLsizei depth, '
2544 'GLenumTextureFormat format, GLenumPixelType type, ' 2559 'GLenumTextureFormat format, GLenumPixelType type, '
2545 'const void* pixels, GLboolean internal', 2560 'const void* pixels, GLboolean internal',
2546 'unsafe': True, 2561 'unsafe': True,
2547 }, 2562 },
2563 'TransformFeedbackVaryings': {
2564 'type': 'PUTSTR',
2565 'data_transfer_methods': ['bucket'],
2566 'decoder_func': 'DoTransformFeedbackVaryings',
2567 'cmd_args':
2568 'GLuint program, const char** varyings, GLenum buffermode',
2569 'unsafe': True,
2570 },
2548 'Uniform1f': {'type': 'PUTXn', 'count': 1}, 2571 'Uniform1f': {'type': 'PUTXn', 'count': 1},
2549 'Uniform1fv': { 2572 'Uniform1fv': {
2550 'type': 'PUTn', 2573 'type': 'PUTn',
2551 'count': 1, 2574 'count': 1,
2552 'decoder_func': 'DoUniform1fv', 2575 'decoder_func': 'DoUniform1fv',
2553 }, 2576 },
2554 'Uniform1i': {'decoder_func': 'DoUniform1i', 'unit_test': False}, 2577 'Uniform1i': {'decoder_func': 'DoUniform1i', 'unit_test': False},
2555 'Uniform1iv': { 2578 'Uniform1iv': {
2556 'type': 'PUTn', 2579 'type': 'PUTn',
2557 'count': 1, 2580 'count': 1,
(...skipping 3857 matching lines...) Expand 10 before | Expand all | Expand 10 after
6415 'data': data_arg.name, 6438 'data': data_arg.name,
6416 'length': length_arg.name if not length_arg == None else '' 6439 'length': length_arg.name if not length_arg == None else ''
6417 }) 6440 })
6418 for arg in func.GetOriginalArgs(): 6441 for arg in func.GetOriginalArgs():
6419 arg.WriteClientSideValidationCode(file, func) 6442 arg.WriteClientSideValidationCode(file, func)
6420 size_code_block = """ // Compute the total size. 6443 size_code_block = """ // Compute the total size.
6421 base::CheckedNumeric<size_t> total_size = count; 6444 base::CheckedNumeric<size_t> total_size = count;
6422 total_size += 1; 6445 total_size += 1;
6423 total_size *= sizeof(GLint); 6446 total_size *= sizeof(GLint);
6424 if (!total_size.IsValid()) { 6447 if (!total_size.IsValid()) {
6425 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); 6448 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
6426 return; 6449 return;
6427 } 6450 }
6428 size_t header_size = total_size.ValueOrDefault(0); 6451 size_t header_size = total_size.ValueOrDefault(0);
6429 std::vector<GLint> header(count + 1); 6452 std::vector<GLint> header(count + 1);
6430 header[0] = static_cast<GLint>(count); 6453 header[0] = static_cast<GLint>(count);
6431 for (GLsizei ii = 0; ii < count; ++ii) { 6454 for (GLsizei ii = 0; ii < count; ++ii) {
6432 GLint len = 0; 6455 GLint len = 0;
6433 if (%(data)s[ii]) {""" 6456 if (%(data)s[ii]) {"""
6434 if length_arg == None: 6457 if length_arg == None:
6435 size_code_block += """ 6458 size_code_block += """
6436 len = base::static_cast<GLint>(strlen(%(data)s[ii]));""" 6459 len = static_cast<GLint>(strlen(%(data)s[ii]));"""
6437 else: 6460 else:
6438 size_code_block += """ 6461 size_code_block += """
6439 len = (%(length)s && %(length)s[ii] >= 0) ? 6462 len = (%(length)s && %(length)s[ii] >= 0) ?
6440 %(length)s[ii] : base::checked_cast<GLint>(strlen(%(data)s[ii]));""" 6463 %(length)s[ii] : base::checked_cast<GLint>(strlen(%(data)s[ii]));"""
6441 size_code_block += """ 6464 size_code_block += """
6442 } 6465 }
6443 total_size += len; 6466 total_size += len;
6444 total_size += 1; // NULL at the end of each char array. 6467 total_size += 1; // NULL at the end of each char array.
6445 if (!total_size.IsValid()) { 6468 if (!total_size.IsValid()) {
6446 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); 6469 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
6447 return; 6470 return;
6448 } 6471 }
6449 header[ii + 1] = len; 6472 header[ii + 1] = len;
6450 } 6473 }
6451 """ 6474 """
6452 file.Write(size_code_block % { 6475 file.Write(size_code_block % {
6453 'data': data_arg.name, 6476 'data': data_arg.name,
6454 'length': length_arg.name if not length_arg == None else '' 6477 'length': length_arg.name if not length_arg == None else '',
6478 'func_name': func.name,
6455 }) 6479 })
6456 data_code_block = """ // Pack data into a bucket on the service. 6480 data_code_block = """ // Pack data into a bucket on the service.
6457 helper_->SetBucketSize(kResultBucketId, total_size.ValueOrDefault(0)); 6481 helper_->SetBucketSize(kResultBucketId, total_size.ValueOrDefault(0));
6458 size_t offset = 0; 6482 size_t offset = 0;
6459 for (GLsizei ii = 0; ii <= count; ++ii) { 6483 for (GLsizei ii = 0; ii <= count; ++ii) {
6460 const char* src = (ii == 0) ? reinterpret_cast<const char*>(&header[0]) : 6484 const char* src = (ii == 0) ? reinterpret_cast<const char*>(&header[0]) :
6461 %(data)s[ii - 1]; 6485 %(data)s[ii - 1];
6462 base::CheckedNumeric<size_t> checked_size = (ii == 0) ? header_size : 6486 base::CheckedNumeric<size_t> checked_size = (ii == 0) ? header_size :
6463 static_cast<size_t>(header[ii]); 6487 static_cast<size_t>(header[ii]);
6464 if (ii > 0) { 6488 if (ii > 0) {
6465 checked_size += 1; // NULL in the end. 6489 checked_size += 1; // NULL in the end.
6466 } 6490 }
6467 if (!checked_size.IsValid()) { 6491 if (!checked_size.IsValid()) {
6468 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); 6492 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
6469 return; 6493 return;
6470 } 6494 }
6471 size_t size = checked_size.ValueOrDefault(0); 6495 size_t size = checked_size.ValueOrDefault(0);
6472 while (size) { 6496 while (size) {
6473 ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_); 6497 ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_);
6474 if (!buffer.valid() || buffer.size() == 0) { 6498 if (!buffer.valid() || buffer.size() == 0) {
6475 SetGLError(GL_OUT_OF_MEMORY, "glShaderSource", "too large"); 6499 SetGLError(GL_OUT_OF_MEMORY, "gl%(func_name)s", "too large");
6476 return; 6500 return;
6477 } 6501 }
6478 size_t copy_size = buffer.size(); 6502 size_t copy_size = buffer.size();
6479 if (ii > 0 && buffer.size() == size) 6503 if (ii > 0 && buffer.size() == size)
6480 --copy_size; 6504 --copy_size;
6481 if (copy_size) 6505 if (copy_size)
6482 memcpy(buffer.address(), src, copy_size); 6506 memcpy(buffer.address(), src, copy_size);
6483 if (copy_size < buffer.size()) { 6507 if (copy_size < buffer.size()) {
6484 // Append NULL in the end. 6508 // Append NULL in the end.
6485 DCHECK(copy_size + 1 == buffer.size()); 6509 DCHECK(copy_size + 1 == buffer.size());
6486 char* str = reinterpret_cast<char*>(buffer.address()); 6510 char* str = reinterpret_cast<char*>(buffer.address());
6487 str[copy_size] = 0; 6511 str[copy_size] = 0;
6488 } 6512 }
6489 helper_->SetBucketData(kResultBucketId, offset, buffer.size(), 6513 helper_->SetBucketData(kResultBucketId, offset, buffer.size(),
6490 buffer.shm_id(), buffer.offset()); 6514 buffer.shm_id(), buffer.offset());
6491 offset += buffer.size(); 6515 offset += buffer.size();
6492 src += buffer.size(); 6516 src += buffer.size();
6493 size -= buffer.size(); 6517 size -= buffer.size();
6494 } 6518 }
6495 } 6519 }
6496 DCHECK_EQ(total_size.ValueOrDefault(0), offset); 6520 DCHECK_EQ(total_size.ValueOrDefault(0), offset);
6497 """ 6521 """
6498 file.Write(data_code_block % { 6522 file.Write(data_code_block % {
6499 'data': data_arg.name, 6523 'data': data_arg.name,
6500 'length': length_arg.name if not length_arg == None else '' 6524 'length': length_arg.name if not length_arg == None else '',
6525 'func_name': func.name,
6501 }) 6526 })
6502 bucket_cmd_arg_string = "" 6527 bucket_args = []
6503 for arg in func.GetCmdArgs()[0:-2]: 6528 for arg in func.GetOriginalArgs():
6504 if bucket_cmd_arg_string: 6529 if arg.name == 'count' or arg == self.__GetLengthArg(func):
6505 bucket_cmd_arg_string += ", " 6530 continue
6506 bucket_cmd_arg_string += arg.name 6531 if arg == self.__GetDataArg(func):
6507 if bucket_cmd_arg_string: 6532 bucket_args.append('kResultBucketId')
6508 bucket_cmd_arg_string += ", " 6533 else:
6509 bucket_cmd_arg_string += 'kResultBucketId' 6534 bucket_args.append(arg.name)
6510 file.Write(" helper_->%sBucket(%s);\n" % 6535 file.Write(" helper_->%sBucket(%s);\n" %
6511 (func.name, bucket_cmd_arg_string)) 6536 (func.name, ", ".join(bucket_args)))
6512 file.Write(" helper_->SetBucketSize(kResultBucketId, 0);"); 6537 file.Write(" helper_->SetBucketSize(kResultBucketId, 0);");
6513 file.Write(" CheckGLError();\n") 6538 file.Write(" CheckGLError();\n")
6514 file.Write("}\n") 6539 file.Write("}\n")
6515 file.Write("\n") 6540 file.Write("\n")
6516 6541
6517 def WriteGLES2ImplementationUnitTest(self, func, file): 6542 def WriteGLES2ImplementationUnitTest(self, func, file):
6518 """Overrriden from TypeHandler.""" 6543 """Overrriden from TypeHandler."""
6519 code = """ 6544 code = """
6520 TEST_F(GLES2ImplementationTest, %(name)s) { 6545 TEST_F(GLES2ImplementationTest, %(name)s) {
6521 const uint32 kBucketId = GLES2Implementation::kResultBucketId; 6546 const uint32 kBucketId = GLES2Implementation::kResultBucketId;
(...skipping 10 matching lines...) Expand all
6532 const size_t kPaddedString2Size = 6557 const size_t kPaddedString2Size =
6533 transfer_buffer_->RoundToAlignment(kString2Size); 6558 transfer_buffer_->RoundToAlignment(kString2Size);
6534 struct Cmds { 6559 struct Cmds {
6535 cmd::SetBucketSize set_bucket_size; 6560 cmd::SetBucketSize set_bucket_size;
6536 cmd::SetBucketData set_bucket_header; 6561 cmd::SetBucketData set_bucket_header;
6537 cmd::SetToken set_token1; 6562 cmd::SetToken set_token1;
6538 cmd::SetBucketData set_bucket_data1; 6563 cmd::SetBucketData set_bucket_data1;
6539 cmd::SetToken set_token2; 6564 cmd::SetToken set_token2;
6540 cmd::SetBucketData set_bucket_data2; 6565 cmd::SetBucketData set_bucket_data2;
6541 cmd::SetToken set_token3; 6566 cmd::SetToken set_token3;
6542 cmds::ShaderSourceBucket shader_source_bucket; 6567 cmds::%(name)sBucket cmd_bucket;
6543 cmd::SetBucketSize clear_bucket_size; 6568 cmd::SetBucketSize clear_bucket_size;
6544 }; 6569 };
6545 6570
6546 ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize); 6571 ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize);
6547 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size); 6572 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size);
6548 ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size); 6573 ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size);
6549 6574
6550 Cmds expected; 6575 Cmds expected;
6551 expected.set_bucket_size.Init(kBucketId, kSourceSize); 6576 expected.set_bucket_size.Init(kBucketId, kSourceSize);
6552 expected.set_bucket_header.Init( 6577 expected.set_bucket_header.Init(
6553 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset); 6578 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset);
6554 expected.set_token1.Init(GetNextToken()); 6579 expected.set_token1.Init(GetNextToken());
6555 expected.set_bucket_data1.Init( 6580 expected.set_bucket_data1.Init(
6556 kBucketId, kHeaderSize, kString1Size, mem1.id, mem1.offset); 6581 kBucketId, kHeaderSize, kString1Size, mem1.id, mem1.offset);
6557 expected.set_token2.Init(GetNextToken()); 6582 expected.set_token2.Init(GetNextToken());
6558 expected.set_bucket_data2.Init( 6583 expected.set_bucket_data2.Init(
6559 kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id, 6584 kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id,
6560 mem2.offset); 6585 mem2.offset);
6561 expected.set_token3.Init(GetNextToken()); 6586 expected.set_token3.Init(GetNextToken());
6562 expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId); 6587 expected.cmd_bucket.Init(%(bucket_args)s);
6563 expected.clear_bucket_size.Init(kBucketId, 0); 6588 expected.clear_bucket_size.Init(kBucketId, 0);
6564 const char* kStrings[] = { kString1, kString2 }; 6589 const char* kStrings[] = { kString1, kString2 };
6565 gl_->%(name)s(%(gl_args)s); 6590 gl_->%(name)s(%(gl_args)s);
6566 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 6591 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
6567 } 6592 }
6568 """ 6593 """
6569 gl_args = [] 6594 gl_args = []
6570 cmd_args = [] 6595 bucket_args = []
6571 for arg in func.GetOriginalArgs(): 6596 for arg in func.GetOriginalArgs():
6572 if arg == self.__GetDataArg(func): 6597 if arg == self.__GetDataArg(func):
6573 gl_args.append('kStrings') 6598 gl_args.append('kStrings')
6599 bucket_args.append('kBucketId')
6574 elif arg == self.__GetLengthArg(func): 6600 elif arg == self.__GetLengthArg(func):
6575 gl_args.append('NULL') 6601 gl_args.append('NULL')
6576 elif arg.name == 'count': 6602 elif arg.name == 'count':
6577 gl_args.append('2') 6603 gl_args.append('2')
6578 else: 6604 else:
6579 gl_args.append(arg.GetValidClientSideArg(func)) 6605 gl_args.append(arg.GetValidClientSideArg(func))
6580 cmd_args.append(arg.GetValidClientSideArg(func)) 6606 bucket_args.append(arg.GetValidClientSideArg(func))
6581 file.Write(code % { 6607 file.Write(code % {
6582 'name': func.name, 6608 'name': func.name,
6583 'gl_args': ", ".join(gl_args), 6609 'gl_args': ", ".join(gl_args),
6584 'cmd_args': ", ".join(cmd_args), 6610 'bucket_args': ", ".join(bucket_args),
6585 }) 6611 })
6586 6612
6587 if self.__GetLengthArg(func) == None: 6613 if self.__GetLengthArg(func) == None:
6588 return 6614 return
6589 code = """ 6615 code = """
6590 TEST_F(GLES2ImplementationTest, %(name)sWithLength) { 6616 TEST_F(GLES2ImplementationTest, %(name)sWithLength) {
6591 const uint32 kBucketId = GLES2Implementation::kResultBucketId; 6617 const uint32 kBucketId = GLES2Implementation::kResultBucketId;
6592 const char* kString = "foobar******"; 6618 const char* kString = "foobar******";
6593 const size_t kStringSize = 6; // We only need "foobar". 6619 const size_t kStringSize = 6; // We only need "foobar".
6594 const size_t kHeaderSize = sizeof(GLint) * 2; 6620 const size_t kHeaderSize = sizeof(GLint) * 2;
(...skipping 16 matching lines...) Expand all
6611 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedStringSize); 6637 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedStringSize);
6612 6638
6613 Cmds expected; 6639 Cmds expected;
6614 expected.set_bucket_size.Init(kBucketId, kSourceSize); 6640 expected.set_bucket_size.Init(kBucketId, kSourceSize);
6615 expected.set_bucket_header.Init( 6641 expected.set_bucket_header.Init(
6616 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset); 6642 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset);
6617 expected.set_token1.Init(GetNextToken()); 6643 expected.set_token1.Init(GetNextToken());
6618 expected.set_bucket_data.Init( 6644 expected.set_bucket_data.Init(
6619 kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset); 6645 kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset);
6620 expected.set_token2.Init(GetNextToken()); 6646 expected.set_token2.Init(GetNextToken());
6621 expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId); 6647 expected.shader_source_bucket.Init(%(bucket_args)s);
6622 expected.clear_bucket_size.Init(kBucketId, 0); 6648 expected.clear_bucket_size.Init(kBucketId, 0);
6623 const char* kStrings[] = { kString }; 6649 const char* kStrings[] = { kString };
6624 const GLint kLength[] = { kStringSize }; 6650 const GLint kLength[] = { kStringSize };
6625 gl_->%(name)s(%(gl_args)s); 6651 gl_->%(name)s(%(gl_args)s);
6626 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 6652 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
6627 } 6653 }
6628 """ 6654 """
6629 gl_args = [] 6655 gl_args = []
6630 for arg in func.GetOriginalArgs(): 6656 for arg in func.GetOriginalArgs():
6631 if arg == self.__GetDataArg(func): 6657 if arg == self.__GetDataArg(func):
6632 gl_args.append('kStrings') 6658 gl_args.append('kStrings')
6633 elif arg == self.__GetLengthArg(func): 6659 elif arg == self.__GetLengthArg(func):
6634 gl_args.append('kLength') 6660 gl_args.append('kLength')
6635 elif arg.name == 'count': 6661 elif arg.name == 'count':
6636 gl_args.append('1') 6662 gl_args.append('1')
6637 else: 6663 else:
6638 gl_args.append(arg.GetValidClientSideArg(func)) 6664 gl_args.append(arg.GetValidClientSideArg(func))
6639 file.Write(code % { 6665 file.Write(code % {
6640 'name': func.name, 6666 'name': func.name,
6641 'gl_args': ", ".join(gl_args), 6667 'gl_args': ", ".join(gl_args),
6642 'cmd_args': ", ".join(cmd_args), 6668 'bucket_args': ", ".join(bucket_args),
6643 }) 6669 })
6644 6670
6645 def WriteBucketServiceUnitTest(self, func, file, *extras): 6671 def WriteBucketServiceUnitTest(self, func, file, *extras):
6646 """Overrriden from TypeHandler.""" 6672 """Overrriden from TypeHandler."""
6647 cmd_args = [] 6673 cmd_args = []
6648 cmd_args_with_invalid_id = [] 6674 cmd_args_with_invalid_id = []
6675 gl_args = []
6649 for index, arg in enumerate(func.GetOriginalArgs()): 6676 for index, arg in enumerate(func.GetOriginalArgs()):
6650 if (arg == self.__GetLengthArg(func) or 6677 if arg == self.__GetLengthArg(func):
6651 arg == self.__GetDataArg(func) or arg.name == 'count'): 6678 gl_args.append('_')
6652 continue 6679 elif arg.name == 'count':
6653 if index == 0: # Resource ID arg 6680 gl_args.append('1')
6681 elif arg == self.__GetDataArg(func):
6682 cmd_args.append('kBucketId')
6683 cmd_args_with_invalid_id.append('kBucketId')
6684 gl_args.append('_')
6685 elif index == 0: # Resource ID arg
6654 cmd_args.append(arg.GetValidArg(func)) 6686 cmd_args.append(arg.GetValidArg(func))
6655 cmd_args_with_invalid_id.append('kInvalidClientId') 6687 cmd_args_with_invalid_id.append('kInvalidClientId')
6688 gl_args.append(arg.GetValidGLArg(func))
6656 else: 6689 else:
6657 cmd_args.append(arg.GetValidArg(func)) 6690 cmd_args.append(arg.GetValidArg(func))
6658 cmd_args_with_invalid_id.append(arg.GetValidArg(func)) 6691 cmd_args_with_invalid_id.append(arg.GetValidArg(func))
6692 gl_args.append(arg.GetValidGLArg(func))
6659 6693
6660 test = """ 6694 test = """
6661 TEST_P(%(test_name)s, %(name)sValidArgs) { 6695 TEST_P(%(test_name)s, %(name)sValidArgs) {
6696 EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
6662 const uint32 kBucketId = 123; 6697 const uint32 kBucketId = 123;
6663 const char kSource0[] = "hello"; 6698 const char kSource0[] = "hello";
6664 const char* kSource[] = { kSource0 }; 6699 const char* kSource[] = { kSource0 };
6665 const char kValidStrEnd = 0; 6700 const char kValidStrEnd = 0;
6666 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd); 6701 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
6667 cmds::%(name)s cmd; 6702 cmds::%(name)s cmd;
6668 cmd.Init(%(cmd_args)s, kBucketId); 6703 cmd.Init(%(cmd_args)s);
6669 decoder_->set_unsafe_es3_apis_enabled(true); 6704 decoder_->set_unsafe_es3_apis_enabled(true);
6670 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));""" 6705 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));"""
6671 if func.IsUnsafe(): 6706 if func.IsUnsafe():
6672 test += """ 6707 test += """
6673 decoder_->set_unsafe_es3_apis_enabled(false); 6708 decoder_->set_unsafe_es3_apis_enabled(false);
6674 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); 6709 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
6675 """ 6710 """
6676 test += """ 6711 test += """
6677 } 6712 }
6678 """ 6713 """
6679 self.WriteValidUnitTest(func, file, test, { 6714 self.WriteValidUnitTest(func, file, test, {
6680 'cmd_args': ", ".join(cmd_args), 6715 'cmd_args': ", ".join(cmd_args),
6716 'gl_args': ", ".join(gl_args),
6681 }, *extras) 6717 }, *extras)
6682 6718
6683 test = """ 6719 test = """
6684 TEST_P(%(test_name)s, %(name)sInvalidArgs) { 6720 TEST_P(%(test_name)s, %(name)sInvalidArgs) {
6685 const uint32 kBucketId = 123; 6721 const uint32 kBucketId = 123;
6686 const char kSource0[] = "hello"; 6722 const char kSource0[] = "hello";
6687 const char* kSource[] = { kSource0 }; 6723 const char* kSource[] = { kSource0 };
6688 const char kValidStrEnd = 0; 6724 const char kValidStrEnd = 0;
6689 decoder_->set_unsafe_es3_apis_enabled(true); 6725 decoder_->set_unsafe_es3_apis_enabled(true);
6690 cmds::%(name)s cmd; 6726 cmds::%(name)s cmd;
6691 // Test no bucket. 6727 // Test no bucket.
6692 cmd.Init(%(cmd_args)s, kBucketId); 6728 cmd.Init(%(cmd_args)s);
6693 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 6729 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
6694 // Test invalid client. 6730 // Test invalid client.
6695 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd); 6731 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
6696 cmd.Init(%(cmd_args_with_invalid_id)s, kBucketId); 6732 cmd.Init(%(cmd_args_with_invalid_id)s);
6697 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6733 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6698 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 6734 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
6699 } 6735 }
6700 """ 6736 """
6701 self.WriteValidUnitTest(func, file, test, { 6737 self.WriteValidUnitTest(func, file, test, {
6702 'cmd_args': ", ".join(cmd_args), 6738 'cmd_args': ", ".join(cmd_args),
6703 'cmd_args_with_invalid_id': ", ".join(cmd_args_with_invalid_id), 6739 'cmd_args_with_invalid_id': ", ".join(cmd_args_with_invalid_id),
6704 }, *extras) 6740 }, *extras)
6705 6741
6706 test = """ 6742 test = """
6707 TEST_P(%(test_name)s, %(name)sInvalidHeader) { 6743 TEST_P(%(test_name)s, %(name)sInvalidHeader) {
6708 const uint32 kBucketId = 123; 6744 const uint32 kBucketId = 123;
6709 const char kSource0[] = "hello"; 6745 const char kSource0[] = "hello";
6710 const char* kSource[] = { kSource0 }; 6746 const char* kSource[] = { kSource0 };
6711 const char kValidStrEnd = 0; 6747 const char kValidStrEnd = 0;
6712 const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource)); 6748 const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource));
6713 const GLsizei kTests[] = { 6749 const GLsizei kTests[] = {
6714 kCount, 6750 kCount + 1,
6715 0, 6751 0,
6716 std::numeric_limits<GLsizei>::max(), 6752 std::numeric_limits<GLsizei>::max(),
6717 -1, 6753 -1,
6718 kCount,
6719 }; 6754 };
6720 decoder_->set_unsafe_es3_apis_enabled(true); 6755 decoder_->set_unsafe_es3_apis_enabled(true);
6721 for (size_t ii = 0; ii < arraysize(kTests); ++ii) { 6756 for (size_t ii = 0; ii < arraysize(kTests); ++ii) {
6722 SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd); 6757 SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd);
6723 cmds::%(name)s cmd; 6758 cmds::%(name)s cmd;
6724 cmd.Init(%(cmd_args)s, kBucketId); 6759 cmd.Init(%(cmd_args)s);
6725 if (kTests[ii] == kCount) { 6760 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
6726 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6727 } else {
6728 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
6729 }
6730 } 6761 }
6731 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6732 } 6762 }
6733 """ 6763 """
6734 self.WriteValidUnitTest(func, file, test, { 6764 self.WriteValidUnitTest(func, file, test, {
6735 'cmd_args': ", ".join(cmd_args), 6765 'cmd_args': ", ".join(cmd_args),
6736 }, *extras) 6766 }, *extras)
6737 6767
6738 test = """ 6768 test = """
6739 TEST_P(%(test_name)s, %(name)sInvalidStringEnding) { 6769 TEST_P(%(test_name)s, %(name)sInvalidStringEnding) {
6740 const uint32 kBucketId = 123; 6770 const uint32 kBucketId = 123;
6741 const char kSource0[] = "hello"; 6771 const char kSource0[] = "hello";
6742 const char* kSource[] = { kSource0 }; 6772 const char* kSource[] = { kSource0 };
6743 const char kInvalidStrEnd = '*'; 6773 const char kInvalidStrEnd = '*';
6744 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd); 6774 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd);
6745 cmds::%(name)s cmd; 6775 cmds::%(name)s cmd;
6746 cmd.Init(%(cmd_args)s, kBucketId); 6776 cmd.Init(%(cmd_args)s);
6747 decoder_->set_unsafe_es3_apis_enabled(true); 6777 decoder_->set_unsafe_es3_apis_enabled(true);
6748 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); 6778 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
6749 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6750 } 6779 }
6751 """ 6780 """
6752 self.WriteValidUnitTest(func, file, test, { 6781 self.WriteValidUnitTest(func, file, test, {
6753 'cmd_args': ", ".join(cmd_args), 6782 'cmd_args': ", ".join(cmd_args),
6754 }, *extras) 6783 }, *extras)
6755 6784
6756 6785
6757 class PUTXnHandler(ArrayArgTypeHandler): 6786 class PUTXnHandler(ArrayArgTypeHandler):
6758 """Handler for glUniform?f functions.""" 6787 """Handler for glUniform?f functions."""
6759 def __init__(self): 6788 def __init__(self):
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after
7544 if func.IsImmediate(): 7573 if func.IsImmediate():
7545 return 0 7574 return 0
7546 return 1 7575 return 1
7547 7576
7548 def GetInvalidArg(self, index): 7577 def GetInvalidArg(self, index):
7549 """overridden from Argument.""" 7578 """overridden from Argument."""
7550 return ("-1", "kNoError", "GL_INVALID_VALUE") 7579 return ("-1", "kNoError", "GL_INVALID_VALUE")
7551 7580
7552 def WriteValidationCode(self, file, func): 7581 def WriteValidationCode(self, file, func):
7553 """overridden from Argument.""" 7582 """overridden from Argument."""
7554 file.Write(" if (%s < 0) {\n" % self.name) 7583 if func.IsUnsafe():
7555 file.Write( 7584 return
7556 " LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, \"gl%s\", \"%s < 0\");\n" % 7585 code = """ if (%(var_name)s < 0) {
7557 (func.original_name, self.name)) 7586 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0");
7558 file.Write(" return error::kNoError;\n") 7587 return error::kNoError;
7559 file.Write(" }\n") 7588 }
7589 """
7590 file.Write(code % {
7591 "var_name": self.name,
7592 "func_name": func.original_name,
7593 })
7560 7594
7561 def WriteClientSideValidationCode(self, file, func): 7595 def WriteClientSideValidationCode(self, file, func):
7562 """overridden from Argument.""" 7596 """overridden from Argument."""
7563 file.Write(" if (%s < 0) {\n" % self.name) 7597 code = """ if (%(var_name)s < 0) {
7564 file.Write( 7598 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "%(var_name)s < 0");
7565 " SetGLError(GL_INVALID_VALUE, \"gl%s\", \"%s < 0\");\n" % 7599 return;
7566 (func.original_name, self.name)) 7600 }
7567 file.Write(" return;\n") 7601 """
7568 file.Write(" }\n") 7602 file.Write(code % {
7603 "var_name": self.name,
7604 "func_name": func.original_name,
7605 })
7569 7606
7570 7607
7571 class SizeNotNegativeArgument(SizeArgument): 7608 class SizeNotNegativeArgument(SizeArgument):
7572 """class for GLsizeiNotNegative. It's NEVER allowed to be negative""" 7609 """class for GLsizeiNotNegative. It's NEVER allowed to be negative"""
7573 7610
7574 def __init__(self, name, type, gl_type): 7611 def __init__(self, name, type, gl_type):
7575 SizeArgument.__init__(self, name, gl_type) 7612 SizeArgument.__init__(self, name, gl_type)
7576 7613
7577 def GetInvalidArg(self, index): 7614 def GetInvalidArg(self, index):
7578 """overridden from SizeArgument.""" 7615 """overridden from SizeArgument."""
(...skipping 2482 matching lines...) Expand 10 before | Expand all | Expand 10 after
10061 Format(gen.generated_cpp_filenames) 10098 Format(gen.generated_cpp_filenames)
10062 10099
10063 if gen.errors > 0: 10100 if gen.errors > 0:
10064 print "%d errors" % gen.errors 10101 print "%d errors" % gen.errors
10065 return 1 10102 return 1
10066 return 0 10103 return 0
10067 10104
10068 10105
10069 if __name__ == '__main__': 10106 if __name__ == '__main__':
10070 sys.exit(main(sys.argv[1:])) 10107 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « gpu/PRESUBMIT.py ('k') | gpu/command_buffer/client/gles2_c_lib_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698