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

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

Issue 872713004: Add glTransformFeedbackVaryings to GPU command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@caritas
Patch Set: Rebase 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/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 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 1493 matching lines...) Expand 10 before | Expand all | Expand 10 after
2445 'first_element_only': True, 2455 'first_element_only': True,
2446 'unsafe': True, 2456 'unsafe': True,
2447 }, 2457 },
2448 'ShaderBinary': { 2458 'ShaderBinary': {
2449 'type': 'Custom', 2459 'type': 'Custom',
2450 'client_test': False, 2460 'client_test': False,
2451 }, 2461 },
2452 'ShaderSource': { 2462 'ShaderSource': {
2453 'type': 'PUTSTR', 2463 'type': 'PUTSTR',
2454 'decoder_func': 'DoShaderSource', 2464 'decoder_func': 'DoShaderSource',
2465 'expectation': False,
2455 'data_transfer_methods': ['bucket'], 2466 'data_transfer_methods': ['bucket'],
2456 'cmd_args': 2467 'cmd_args':
2457 'GLuint shader, const char** str', 2468 'GLuint shader, const char** str',
2458 'pepper_args': 2469 'pepper_args':
2459 'GLuint shader, GLsizei count, const char** str, const GLint* length', 2470 'GLuint shader, GLsizei count, const char** str, const GLint* length',
2460 }, 2471 },
2461 'StencilMask': { 2472 'StencilMask': {
2462 'type': 'StateSetFrontBack', 2473 'type': 'StateSetFrontBack',
2463 'state': 'StencilMask', 2474 'state': 'StencilMask',
2464 'no_gl': True, 2475 'no_gl': True,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2542 'type': 'Manual', 2553 'type': 'Manual',
2543 'data_transfer_methods': ['shm'], 2554 'data_transfer_methods': ['shm'],
2544 'client_test': False, 2555 'client_test': False,
2545 'cmd_args': 'GLenumTextureTarget target, GLint level, ' 2556 'cmd_args': 'GLenumTextureTarget target, GLint level, '
2546 'GLint xoffset, GLint yoffset, GLint zoffset, ' 2557 'GLint xoffset, GLint yoffset, GLint zoffset, '
2547 'GLsizei width, GLsizei height, GLsizei depth, ' 2558 'GLsizei width, GLsizei height, GLsizei depth, '
2548 'GLenumTextureFormat format, GLenumPixelType type, ' 2559 'GLenumTextureFormat format, GLenumPixelType type, '
2549 'const void* pixels, GLboolean internal', 2560 'const void* pixels, GLboolean internal',
2550 'unsafe': True, 2561 'unsafe': True,
2551 }, 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 },
2552 'Uniform1f': {'type': 'PUTXn', 'count': 1}, 2571 'Uniform1f': {'type': 'PUTXn', 'count': 1},
2553 'Uniform1fv': { 2572 'Uniform1fv': {
2554 'type': 'PUTn', 2573 'type': 'PUTn',
2555 'count': 1, 2574 'count': 1,
2556 'decoder_func': 'DoUniform1fv', 2575 'decoder_func': 'DoUniform1fv',
2557 }, 2576 },
2558 'Uniform1i': {'decoder_func': 'DoUniform1i', 'unit_test': False}, 2577 'Uniform1i': {'decoder_func': 'DoUniform1i', 'unit_test': False},
2559 'Uniform1iv': { 2578 'Uniform1iv': {
2560 'type': 'PUTn', 2579 'type': 'PUTn',
2561 'count': 1, 2580 'count': 1,
(...skipping 3857 matching lines...) Expand 10 before | Expand all | Expand 10 after
6419 'data': data_arg.name, 6438 'data': data_arg.name,
6420 'length': length_arg.name if not length_arg == None else '' 6439 'length': length_arg.name if not length_arg == None else ''
6421 }) 6440 })
6422 for arg in func.GetOriginalArgs(): 6441 for arg in func.GetOriginalArgs():
6423 arg.WriteClientSideValidationCode(file, func) 6442 arg.WriteClientSideValidationCode(file, func)
6424 size_code_block = """ // Compute the total size. 6443 size_code_block = """ // Compute the total size.
6425 base::CheckedNumeric<size_t> total_size = count; 6444 base::CheckedNumeric<size_t> total_size = count;
6426 total_size += 1; 6445 total_size += 1;
6427 total_size *= sizeof(GLint); 6446 total_size *= sizeof(GLint);
6428 if (!total_size.IsValid()) { 6447 if (!total_size.IsValid()) {
6429 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); 6448 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
6430 return; 6449 return;
6431 } 6450 }
6432 size_t header_size = total_size.ValueOrDefault(0); 6451 size_t header_size = total_size.ValueOrDefault(0);
6433 std::vector<GLint> header(count + 1); 6452 std::vector<GLint> header(count + 1);
6434 header[0] = static_cast<GLint>(count); 6453 header[0] = static_cast<GLint>(count);
6435 for (GLsizei ii = 0; ii < count; ++ii) { 6454 for (GLsizei ii = 0; ii < count; ++ii) {
6436 GLint len = 0; 6455 GLint len = 0;
6437 if (%(data)s[ii]) {""" 6456 if (%(data)s[ii]) {"""
6438 if length_arg == None: 6457 if length_arg == None:
6439 size_code_block += """ 6458 size_code_block += """
6440 len = base::static_cast<GLint>(strlen(%(data)s[ii]));""" 6459 len = static_cast<GLint>(strlen(%(data)s[ii]));"""
6441 else: 6460 else:
6442 size_code_block += """ 6461 size_code_block += """
6443 len = (%(length)s && %(length)s[ii] >= 0) ? 6462 len = (%(length)s && %(length)s[ii] >= 0) ?
6444 %(length)s[ii] : base::checked_cast<GLint>(strlen(%(data)s[ii]));""" 6463 %(length)s[ii] : base::checked_cast<GLint>(strlen(%(data)s[ii]));"""
6445 size_code_block += """ 6464 size_code_block += """
6446 } 6465 }
6447 total_size += len; 6466 total_size += len;
6448 total_size += 1; // NULL at the end of each char array. 6467 total_size += 1; // NULL at the end of each char array.
6449 if (!total_size.IsValid()) { 6468 if (!total_size.IsValid()) {
6450 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); 6469 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
6451 return; 6470 return;
6452 } 6471 }
6453 header[ii + 1] = len; 6472 header[ii + 1] = len;
6454 } 6473 }
6455 """ 6474 """
6456 file.Write(size_code_block % { 6475 file.Write(size_code_block % {
6457 'data': data_arg.name, 6476 'data': data_arg.name,
6458 '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,
6459 }) 6479 })
6460 data_code_block = """ // Pack data into a bucket on the service. 6480 data_code_block = """ // Pack data into a bucket on the service.
6461 helper_->SetBucketSize(kResultBucketId, total_size.ValueOrDefault(0)); 6481 helper_->SetBucketSize(kResultBucketId, total_size.ValueOrDefault(0));
6462 size_t offset = 0; 6482 size_t offset = 0;
6463 for (GLsizei ii = 0; ii <= count; ++ii) { 6483 for (GLsizei ii = 0; ii <= count; ++ii) {
6464 const char* src = (ii == 0) ? reinterpret_cast<const char*>(&header[0]) : 6484 const char* src = (ii == 0) ? reinterpret_cast<const char*>(&header[0]) :
6465 %(data)s[ii - 1]; 6485 %(data)s[ii - 1];
6466 base::CheckedNumeric<size_t> checked_size = (ii == 0) ? header_size : 6486 base::CheckedNumeric<size_t> checked_size = (ii == 0) ? header_size :
6467 static_cast<size_t>(header[ii]); 6487 static_cast<size_t>(header[ii]);
6468 if (ii > 0) { 6488 if (ii > 0) {
6469 checked_size += 1; // NULL in the end. 6489 checked_size += 1; // NULL in the end.
6470 } 6490 }
6471 if (!checked_size.IsValid()) { 6491 if (!checked_size.IsValid()) {
6472 SetGLError(GL_INVALID_VALUE, "glShaderSource", "overflow"); 6492 SetGLError(GL_INVALID_VALUE, "gl%(func_name)s", "overflow");
6473 return; 6493 return;
6474 } 6494 }
6475 size_t size = checked_size.ValueOrDefault(0); 6495 size_t size = checked_size.ValueOrDefault(0);
6476 while (size) { 6496 while (size) {
6477 ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_); 6497 ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_);
6478 if (!buffer.valid() || buffer.size() == 0) { 6498 if (!buffer.valid() || buffer.size() == 0) {
6479 SetGLError(GL_OUT_OF_MEMORY, "glShaderSource", "too large"); 6499 SetGLError(GL_OUT_OF_MEMORY, "gl%(func_name)s", "too large");
6480 return; 6500 return;
6481 } 6501 }
6482 size_t copy_size = buffer.size(); 6502 size_t copy_size = buffer.size();
6483 if (ii > 0 && buffer.size() == size) 6503 if (ii > 0 && buffer.size() == size)
6484 --copy_size; 6504 --copy_size;
6485 if (copy_size) 6505 if (copy_size)
6486 memcpy(buffer.address(), src, copy_size); 6506 memcpy(buffer.address(), src, copy_size);
6487 if (copy_size < buffer.size()) { 6507 if (copy_size < buffer.size()) {
6488 // Append NULL in the end. 6508 // Append NULL in the end.
6489 DCHECK(copy_size + 1 == buffer.size()); 6509 DCHECK(copy_size + 1 == buffer.size());
6490 char* str = reinterpret_cast<char*>(buffer.address()); 6510 char* str = reinterpret_cast<char*>(buffer.address());
6491 str[copy_size] = 0; 6511 str[copy_size] = 0;
6492 } 6512 }
6493 helper_->SetBucketData(kResultBucketId, offset, buffer.size(), 6513 helper_->SetBucketData(kResultBucketId, offset, buffer.size(),
6494 buffer.shm_id(), buffer.offset()); 6514 buffer.shm_id(), buffer.offset());
6495 offset += buffer.size(); 6515 offset += buffer.size();
6496 src += buffer.size(); 6516 src += buffer.size();
6497 size -= buffer.size(); 6517 size -= buffer.size();
6498 } 6518 }
6499 } 6519 }
6500 DCHECK_EQ(total_size.ValueOrDefault(0), offset); 6520 DCHECK_EQ(total_size.ValueOrDefault(0), offset);
6501 """ 6521 """
6502 file.Write(data_code_block % { 6522 file.Write(data_code_block % {
6503 'data': data_arg.name, 6523 'data': data_arg.name,
6504 '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,
6505 }) 6526 })
6506 bucket_cmd_arg_string = "" 6527 bucket_args = []
6507 for arg in func.GetCmdArgs()[0:-2]: 6528 for arg in func.GetOriginalArgs():
6508 if bucket_cmd_arg_string: 6529 if arg.name == 'count' or arg == self.__GetLengthArg(func):
6509 bucket_cmd_arg_string += ", " 6530 continue
6510 bucket_cmd_arg_string += arg.name 6531 if arg == self.__GetDataArg(func):
6511 if bucket_cmd_arg_string: 6532 bucket_args.append('kResultBucketId')
6512 bucket_cmd_arg_string += ", " 6533 else:
6513 bucket_cmd_arg_string += 'kResultBucketId' 6534 bucket_args.append(arg.name)
6514 file.Write(" helper_->%sBucket(%s);\n" % 6535 file.Write(" helper_->%sBucket(%s);\n" %
6515 (func.name, bucket_cmd_arg_string)) 6536 (func.name, ", ".join(bucket_args)))
6516 file.Write(" helper_->SetBucketSize(kResultBucketId, 0);"); 6537 file.Write(" helper_->SetBucketSize(kResultBucketId, 0);");
6517 file.Write(" CheckGLError();\n") 6538 file.Write(" CheckGLError();\n")
6518 file.Write("}\n") 6539 file.Write("}\n")
6519 file.Write("\n") 6540 file.Write("\n")
6520 6541
6521 def WriteGLES2ImplementationUnitTest(self, func, file): 6542 def WriteGLES2ImplementationUnitTest(self, func, file):
6522 """Overrriden from TypeHandler.""" 6543 """Overrriden from TypeHandler."""
6523 code = """ 6544 code = """
6524 TEST_F(GLES2ImplementationTest, %(name)s) { 6545 TEST_F(GLES2ImplementationTest, %(name)s) {
6525 const uint32 kBucketId = GLES2Implementation::kResultBucketId; 6546 const uint32 kBucketId = GLES2Implementation::kResultBucketId;
(...skipping 10 matching lines...) Expand all
6536 const size_t kPaddedString2Size = 6557 const size_t kPaddedString2Size =
6537 transfer_buffer_->RoundToAlignment(kString2Size); 6558 transfer_buffer_->RoundToAlignment(kString2Size);
6538 struct Cmds { 6559 struct Cmds {
6539 cmd::SetBucketSize set_bucket_size; 6560 cmd::SetBucketSize set_bucket_size;
6540 cmd::SetBucketData set_bucket_header; 6561 cmd::SetBucketData set_bucket_header;
6541 cmd::SetToken set_token1; 6562 cmd::SetToken set_token1;
6542 cmd::SetBucketData set_bucket_data1; 6563 cmd::SetBucketData set_bucket_data1;
6543 cmd::SetToken set_token2; 6564 cmd::SetToken set_token2;
6544 cmd::SetBucketData set_bucket_data2; 6565 cmd::SetBucketData set_bucket_data2;
6545 cmd::SetToken set_token3; 6566 cmd::SetToken set_token3;
6546 cmds::ShaderSourceBucket shader_source_bucket; 6567 cmds::%(name)sBucket cmd_bucket;
6547 cmd::SetBucketSize clear_bucket_size; 6568 cmd::SetBucketSize clear_bucket_size;
6548 }; 6569 };
6549 6570
6550 ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize); 6571 ExpectedMemoryInfo mem0 = GetExpectedMemory(kPaddedHeaderSize);
6551 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size); 6572 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedString1Size);
6552 ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size); 6573 ExpectedMemoryInfo mem2 = GetExpectedMemory(kPaddedString2Size);
6553 6574
6554 Cmds expected; 6575 Cmds expected;
6555 expected.set_bucket_size.Init(kBucketId, kSourceSize); 6576 expected.set_bucket_size.Init(kBucketId, kSourceSize);
6556 expected.set_bucket_header.Init( 6577 expected.set_bucket_header.Init(
6557 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset); 6578 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset);
6558 expected.set_token1.Init(GetNextToken()); 6579 expected.set_token1.Init(GetNextToken());
6559 expected.set_bucket_data1.Init( 6580 expected.set_bucket_data1.Init(
6560 kBucketId, kHeaderSize, kString1Size, mem1.id, mem1.offset); 6581 kBucketId, kHeaderSize, kString1Size, mem1.id, mem1.offset);
6561 expected.set_token2.Init(GetNextToken()); 6582 expected.set_token2.Init(GetNextToken());
6562 expected.set_bucket_data2.Init( 6583 expected.set_bucket_data2.Init(
6563 kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id, 6584 kBucketId, kHeaderSize + kString1Size, kString2Size, mem2.id,
6564 mem2.offset); 6585 mem2.offset);
6565 expected.set_token3.Init(GetNextToken()); 6586 expected.set_token3.Init(GetNextToken());
6566 expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId); 6587 expected.cmd_bucket.Init(%(bucket_args)s);
6567 expected.clear_bucket_size.Init(kBucketId, 0); 6588 expected.clear_bucket_size.Init(kBucketId, 0);
6568 const char* kStrings[] = { kString1, kString2 }; 6589 const char* kStrings[] = { kString1, kString2 };
6569 gl_->%(name)s(%(gl_args)s); 6590 gl_->%(name)s(%(gl_args)s);
6570 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 6591 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
6571 } 6592 }
6572 """ 6593 """
6573 gl_args = [] 6594 gl_args = []
6574 cmd_args = [] 6595 bucket_args = []
6575 for arg in func.GetOriginalArgs(): 6596 for arg in func.GetOriginalArgs():
6576 if arg == self.__GetDataArg(func): 6597 if arg == self.__GetDataArg(func):
6577 gl_args.append('kStrings') 6598 gl_args.append('kStrings')
6599 bucket_args.append('kBucketId')
6578 elif arg == self.__GetLengthArg(func): 6600 elif arg == self.__GetLengthArg(func):
6579 gl_args.append('NULL') 6601 gl_args.append('NULL')
6580 elif arg.name == 'count': 6602 elif arg.name == 'count':
6581 gl_args.append('2') 6603 gl_args.append('2')
6582 else: 6604 else:
6583 gl_args.append(arg.GetValidClientSideArg(func)) 6605 gl_args.append(arg.GetValidClientSideArg(func))
6584 cmd_args.append(arg.GetValidClientSideArg(func)) 6606 bucket_args.append(arg.GetValidClientSideArg(func))
6585 file.Write(code % { 6607 file.Write(code % {
6586 'name': func.name, 6608 'name': func.name,
6587 'gl_args': ", ".join(gl_args), 6609 'gl_args': ", ".join(gl_args),
6588 'cmd_args': ", ".join(cmd_args), 6610 'bucket_args': ", ".join(bucket_args),
6589 }) 6611 })
6590 6612
6591 if self.__GetLengthArg(func) == None: 6613 if self.__GetLengthArg(func) == None:
6592 return 6614 return
6593 code = """ 6615 code = """
6594 TEST_F(GLES2ImplementationTest, %(name)sWithLength) { 6616 TEST_F(GLES2ImplementationTest, %(name)sWithLength) {
6595 const uint32 kBucketId = GLES2Implementation::kResultBucketId; 6617 const uint32 kBucketId = GLES2Implementation::kResultBucketId;
6596 const char* kString = "foobar******"; 6618 const char* kString = "foobar******";
6597 const size_t kStringSize = 6; // We only need "foobar". 6619 const size_t kStringSize = 6; // We only need "foobar".
6598 const size_t kHeaderSize = sizeof(GLint) * 2; 6620 const size_t kHeaderSize = sizeof(GLint) * 2;
(...skipping 16 matching lines...) Expand all
6615 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedStringSize); 6637 ExpectedMemoryInfo mem1 = GetExpectedMemory(kPaddedStringSize);
6616 6638
6617 Cmds expected; 6639 Cmds expected;
6618 expected.set_bucket_size.Init(kBucketId, kSourceSize); 6640 expected.set_bucket_size.Init(kBucketId, kSourceSize);
6619 expected.set_bucket_header.Init( 6641 expected.set_bucket_header.Init(
6620 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset); 6642 kBucketId, 0, kHeaderSize, mem0.id, mem0.offset);
6621 expected.set_token1.Init(GetNextToken()); 6643 expected.set_token1.Init(GetNextToken());
6622 expected.set_bucket_data.Init( 6644 expected.set_bucket_data.Init(
6623 kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset); 6645 kBucketId, kHeaderSize, kStringSize + 1, mem1.id, mem1.offset);
6624 expected.set_token2.Init(GetNextToken()); 6646 expected.set_token2.Init(GetNextToken());
6625 expected.shader_source_bucket.Init(%(cmd_args)s, kBucketId); 6647 expected.shader_source_bucket.Init(%(bucket_args)s);
6626 expected.clear_bucket_size.Init(kBucketId, 0); 6648 expected.clear_bucket_size.Init(kBucketId, 0);
6627 const char* kStrings[] = { kString }; 6649 const char* kStrings[] = { kString };
6628 const GLint kLength[] = { kStringSize }; 6650 const GLint kLength[] = { kStringSize };
6629 gl_->%(name)s(%(gl_args)s); 6651 gl_->%(name)s(%(gl_args)s);
6630 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); 6652 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
6631 } 6653 }
6632 """ 6654 """
6633 gl_args = [] 6655 gl_args = []
6634 for arg in func.GetOriginalArgs(): 6656 for arg in func.GetOriginalArgs():
6635 if arg == self.__GetDataArg(func): 6657 if arg == self.__GetDataArg(func):
6636 gl_args.append('kStrings') 6658 gl_args.append('kStrings')
6637 elif arg == self.__GetLengthArg(func): 6659 elif arg == self.__GetLengthArg(func):
6638 gl_args.append('kLength') 6660 gl_args.append('kLength')
6639 elif arg.name == 'count': 6661 elif arg.name == 'count':
6640 gl_args.append('1') 6662 gl_args.append('1')
6641 else: 6663 else:
6642 gl_args.append(arg.GetValidClientSideArg(func)) 6664 gl_args.append(arg.GetValidClientSideArg(func))
6643 file.Write(code % { 6665 file.Write(code % {
6644 'name': func.name, 6666 'name': func.name,
6645 'gl_args': ", ".join(gl_args), 6667 'gl_args': ", ".join(gl_args),
6646 'cmd_args': ", ".join(cmd_args), 6668 'bucket_args': ", ".join(bucket_args),
6647 }) 6669 })
6648 6670
6649 def WriteBucketServiceUnitTest(self, func, file, *extras): 6671 def WriteBucketServiceUnitTest(self, func, file, *extras):
6650 """Overrriden from TypeHandler.""" 6672 """Overrriden from TypeHandler."""
6651 cmd_args = [] 6673 cmd_args = []
6652 cmd_args_with_invalid_id = [] 6674 cmd_args_with_invalid_id = []
6675 gl_args = []
6653 for index, arg in enumerate(func.GetOriginalArgs()): 6676 for index, arg in enumerate(func.GetOriginalArgs()):
6654 if (arg == self.__GetLengthArg(func) or 6677 if arg == self.__GetLengthArg(func):
6655 arg == self.__GetDataArg(func) or arg.name == 'count'): 6678 gl_args.append('_')
6656 continue 6679 elif arg.name == 'count':
6657 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
6658 cmd_args.append(arg.GetValidArg(func)) 6686 cmd_args.append(arg.GetValidArg(func))
6659 cmd_args_with_invalid_id.append('kInvalidClientId') 6687 cmd_args_with_invalid_id.append('kInvalidClientId')
6688 gl_args.append(arg.GetValidGLArg(func))
6660 else: 6689 else:
6661 cmd_args.append(arg.GetValidArg(func)) 6690 cmd_args.append(arg.GetValidArg(func))
6662 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))
6663 6693
6664 test = """ 6694 test = """
6665 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));
6666 const uint32 kBucketId = 123; 6697 const uint32 kBucketId = 123;
6667 const char kSource0[] = "hello"; 6698 const char kSource0[] = "hello";
6668 const char* kSource[] = { kSource0 }; 6699 const char* kSource[] = { kSource0 };
6669 const char kValidStrEnd = 0; 6700 const char kValidStrEnd = 0;
6670 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd); 6701 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
6671 cmds::%(name)s cmd; 6702 cmds::%(name)s cmd;
6672 cmd.Init(%(cmd_args)s, kBucketId); 6703 cmd.Init(%(cmd_args)s);
6673 decoder_->set_unsafe_es3_apis_enabled(true); 6704 decoder_->set_unsafe_es3_apis_enabled(true);
6674 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));""" 6705 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));"""
6675 if func.IsUnsafe(): 6706 if func.IsUnsafe():
6676 test += """ 6707 test += """
6677 decoder_->set_unsafe_es3_apis_enabled(false); 6708 decoder_->set_unsafe_es3_apis_enabled(false);
6678 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); 6709 EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
6679 """ 6710 """
6680 test += """ 6711 test += """
6681 } 6712 }
6682 """ 6713 """
6683 self.WriteValidUnitTest(func, file, test, { 6714 self.WriteValidUnitTest(func, file, test, {
6684 'cmd_args': ", ".join(cmd_args), 6715 'cmd_args': ", ".join(cmd_args),
6716 'gl_args': ", ".join(gl_args),
6685 }, *extras) 6717 }, *extras)
6686 6718
6687 test = """ 6719 test = """
6688 TEST_P(%(test_name)s, %(name)sInvalidArgs) { 6720 TEST_P(%(test_name)s, %(name)sInvalidArgs) {
6689 const uint32 kBucketId = 123; 6721 const uint32 kBucketId = 123;
6690 const char kSource0[] = "hello"; 6722 const char kSource0[] = "hello";
6691 const char* kSource[] = { kSource0 }; 6723 const char* kSource[] = { kSource0 };
6692 const char kValidStrEnd = 0; 6724 const char kValidStrEnd = 0;
6693 decoder_->set_unsafe_es3_apis_enabled(true); 6725 decoder_->set_unsafe_es3_apis_enabled(true);
6694 cmds::%(name)s cmd; 6726 cmds::%(name)s cmd;
6695 // Test no bucket. 6727 // Test no bucket.
6696 cmd.Init(%(cmd_args)s, kBucketId); 6728 cmd.Init(%(cmd_args)s);
6697 EXPECT_NE(error::kNoError, ExecuteCmd(cmd)); 6729 EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
6698 // Test invalid client. 6730 // Test invalid client.
6699 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd); 6731 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
6700 cmd.Init(%(cmd_args_with_invalid_id)s, kBucketId); 6732 cmd.Init(%(cmd_args_with_invalid_id)s);
6701 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 6733 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6702 EXPECT_EQ(GL_INVALID_VALUE, GetGLError()); 6734 EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
6703 } 6735 }
6704 """ 6736 """
6705 self.WriteValidUnitTest(func, file, test, { 6737 self.WriteValidUnitTest(func, file, test, {
6706 'cmd_args': ", ".join(cmd_args), 6738 'cmd_args': ", ".join(cmd_args),
6707 'cmd_args_with_invalid_id': ", ".join(cmd_args_with_invalid_id), 6739 'cmd_args_with_invalid_id': ", ".join(cmd_args_with_invalid_id),
6708 }, *extras) 6740 }, *extras)
6709 6741
6710 test = """ 6742 test = """
6711 TEST_P(%(test_name)s, %(name)sInvalidHeader) { 6743 TEST_P(%(test_name)s, %(name)sInvalidHeader) {
6712 const uint32 kBucketId = 123; 6744 const uint32 kBucketId = 123;
6713 const char kSource0[] = "hello"; 6745 const char kSource0[] = "hello";
6714 const char* kSource[] = { kSource0 }; 6746 const char* kSource[] = { kSource0 };
6715 const char kValidStrEnd = 0; 6747 const char kValidStrEnd = 0;
6716 const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource)); 6748 const GLsizei kCount = static_cast<GLsizei>(arraysize(kSource));
6717 const GLsizei kTests[] = { 6749 const GLsizei kTests[] = {
6718 kCount, 6750 kCount + 1,
6719 0, 6751 0,
6720 std::numeric_limits<GLsizei>::max(), 6752 std::numeric_limits<GLsizei>::max(),
6721 -1, 6753 -1,
6722 kCount,
6723 }; 6754 };
6724 decoder_->set_unsafe_es3_apis_enabled(true); 6755 decoder_->set_unsafe_es3_apis_enabled(true);
6725 for (size_t ii = 0; ii < arraysize(kTests); ++ii) { 6756 for (size_t ii = 0; ii < arraysize(kTests); ++ii) {
6726 SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd); 6757 SetBucketAsCStrings(kBucketId, 1, kSource, kTests[ii], kValidStrEnd);
6727 cmds::%(name)s cmd; 6758 cmds::%(name)s cmd;
6728 cmd.Init(%(cmd_args)s, kBucketId); 6759 cmd.Init(%(cmd_args)s);
6729 if (kTests[ii] == kCount) { 6760 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
6730 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
6731 } else {
6732 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
6733 }
6734 } 6761 }
6735 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6736 } 6762 }
6737 """ 6763 """
6738 self.WriteValidUnitTest(func, file, test, { 6764 self.WriteValidUnitTest(func, file, test, {
6739 'cmd_args': ", ".join(cmd_args), 6765 'cmd_args': ", ".join(cmd_args),
6740 }, *extras) 6766 }, *extras)
6741 6767
6742 test = """ 6768 test = """
6743 TEST_P(%(test_name)s, %(name)sInvalidStringEnding) { 6769 TEST_P(%(test_name)s, %(name)sInvalidStringEnding) {
6744 const uint32 kBucketId = 123; 6770 const uint32 kBucketId = 123;
6745 const char kSource0[] = "hello"; 6771 const char kSource0[] = "hello";
6746 const char* kSource[] = { kSource0 }; 6772 const char* kSource[] = { kSource0 };
6747 const char kInvalidStrEnd = '*'; 6773 const char kInvalidStrEnd = '*';
6748 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd); 6774 SetBucketAsCStrings(kBucketId, 1, kSource, 1, kInvalidStrEnd);
6749 cmds::%(name)s cmd; 6775 cmds::%(name)s cmd;
6750 cmd.Init(%(cmd_args)s, kBucketId); 6776 cmd.Init(%(cmd_args)s);
6751 decoder_->set_unsafe_es3_apis_enabled(true); 6777 decoder_->set_unsafe_es3_apis_enabled(true);
6752 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd)); 6778 EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
6753 EXPECT_EQ(GL_NO_ERROR, GetGLError());
6754 } 6779 }
6755 """ 6780 """
6756 self.WriteValidUnitTest(func, file, test, { 6781 self.WriteValidUnitTest(func, file, test, {
6757 'cmd_args': ", ".join(cmd_args), 6782 'cmd_args': ", ".join(cmd_args),
6758 }, *extras) 6783 }, *extras)
6759 6784
6760 6785
6761 class PUTXnHandler(ArrayArgTypeHandler): 6786 class PUTXnHandler(ArrayArgTypeHandler):
6762 """Handler for glUniform?f functions.""" 6787 """Handler for glUniform?f functions."""
6763 def __init__(self): 6788 def __init__(self):
(...skipping 3309 matching lines...) Expand 10 before | Expand all | Expand 10 after
10073 Format(gen.generated_cpp_filenames) 10098 Format(gen.generated_cpp_filenames)
10074 10099
10075 if gen.errors > 0: 10100 if gen.errors > 0:
10076 print "%d errors" % gen.errors 10101 print "%d errors" % gen.errors
10077 return 1 10102 return 1
10078 return 0 10103 return 0
10079 10104
10080 10105
10081 if __name__ == '__main__': 10106 if __name__ == '__main__':
10082 sys.exit(main(sys.argv[1:])) 10107 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
This is Rietveld 408576698