| OLD | NEW |
| 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 2134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2145 }, | 2145 }, |
| 2146 'DrawArraysInstancedANGLE': { | 2146 'DrawArraysInstancedANGLE': { |
| 2147 'type': 'Manual', | 2147 'type': 'Manual', |
| 2148 'cmd_args': 'GLenumDrawMode mode, GLint first, GLsizei count, ' | 2148 'cmd_args': 'GLenumDrawMode mode, GLint first, GLsizei count, ' |
| 2149 'GLsizei primcount', | 2149 'GLsizei primcount', |
| 2150 'extension': True, | 2150 'extension': True, |
| 2151 'unit_test': False, | 2151 'unit_test': False, |
| 2152 'pepper_interface': 'InstancedArrays', | 2152 'pepper_interface': 'InstancedArrays', |
| 2153 'defer_draws': True, | 2153 'defer_draws': True, |
| 2154 }, | 2154 }, |
| 2155 'DrawBuffersEXT': { |
| 2156 'type': 'PUTn', |
| 2157 'decoder_func': 'DoDrawBuffersEXT', |
| 2158 'data_type': 'GLenum', |
| 2159 'count': 1, |
| 2160 'client_test': False, |
| 2161 'unit_test': False, |
| 2162 'extension': True, |
| 2163 }, |
| 2155 'DrawElementsInstancedANGLE': { | 2164 'DrawElementsInstancedANGLE': { |
| 2156 'type': 'Manual', | 2165 'type': 'Manual', |
| 2157 'cmd_args': 'GLenumDrawMode mode, GLsizei count, ' | 2166 'cmd_args': 'GLenumDrawMode mode, GLsizei count, ' |
| 2158 'GLenumIndexType type, GLuint index_offset, GLsizei primcount', | 2167 'GLenumIndexType type, GLuint index_offset, GLsizei primcount', |
| 2159 'extension': True, | 2168 'extension': True, |
| 2160 'unit_test': False, | 2169 'unit_test': False, |
| 2161 'client_test': False, | 2170 'client_test': False, |
| 2162 'pepper_interface': 'InstancedArrays', | 2171 'pepper_interface': 'InstancedArrays', |
| 2163 'defer_draws': True, | 2172 'defer_draws': True, |
| 2164 }, | 2173 }, |
| (...skipping 2755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4920 file.Write(" CheckGLError();\n") | 4929 file.Write(" CheckGLError();\n") |
| 4921 file.Write("}\n") | 4930 file.Write("}\n") |
| 4922 file.Write("\n") | 4931 file.Write("\n") |
| 4923 | 4932 |
| 4924 def WriteGLES2ImplementationUnitTest(self, func, file): | 4933 def WriteGLES2ImplementationUnitTest(self, func, file): |
| 4925 """Writes the GLES2 Implemention unit test.""" | 4934 """Writes the GLES2 Implemention unit test.""" |
| 4926 code = """ | 4935 code = """ |
| 4927 TEST_F(GLES2ImplementationTest, %(name)s) { | 4936 TEST_F(GLES2ImplementationTest, %(name)s) { |
| 4928 struct Cmds { | 4937 struct Cmds { |
| 4929 cmds::%(name)sImmediate cmd; | 4938 cmds::%(name)sImmediate cmd; |
| 4930 %(type)s data[2][%(count)d]; | 4939 %(type)s data[%(count_param)d][%(count)d]; |
| 4931 }; | 4940 }; |
| 4932 | 4941 |
| 4933 Cmds expected; | 4942 Cmds expected; |
| 4934 for (int ii = 0; ii < 2; ++ii) { | 4943 for (int ii = 0; ii < %(count_param)d; ++ii) { |
| 4935 for (int jj = 0; jj < %(count)d; ++jj) { | 4944 for (int jj = 0; jj < %(count)d; ++jj) { |
| 4936 expected.data[ii][jj] = static_cast<%(type)s>(ii * %(count)d + jj); | 4945 expected.data[ii][jj] = static_cast<%(type)s>(ii * %(count)d + jj); |
| 4937 } | 4946 } |
| 4938 } | 4947 } |
| 4939 expected.cmd.Init(%(cmd_args)s, &expected.data[0][0]); | 4948 expected.cmd.Init(%(cmd_args)s, &expected.data[0][0]); |
| 4940 gl_->%(name)s(%(args)s, &expected.data[0][0]); | 4949 gl_->%(name)s(%(args)s, &expected.data[0][0]); |
| 4941 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); | 4950 EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected))); |
| 4942 } | 4951 } |
| 4943 """ | 4952 """ |
| 4944 cmd_arg_strings = [] | 4953 cmd_arg_strings = [] |
| 4945 for count, arg in enumerate(func.GetCmdArgs()[0:-2]): | 4954 for count, arg in enumerate(func.GetCmdArgs()[0:-2]): |
| 4946 cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func, count, 0)) | 4955 cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func, count, 0)) |
| 4947 gl_arg_strings = [] | 4956 gl_arg_strings = [] |
| 4957 count_param = 0 |
| 4948 for count, arg in enumerate(func.GetOriginalArgs()[0:-1]): | 4958 for count, arg in enumerate(func.GetOriginalArgs()[0:-1]): |
| 4949 gl_arg_strings.append(arg.GetValidClientSideArg(func, count, 0)) | 4959 gl_arg_strings.append(arg.GetValidClientSideArg(func, count, 0)) |
| 4960 if arg.name == "count": |
| 4961 count_param = int(arg.GetValidClientSideArg(func, count, 0)) |
| 4950 file.Write(code % { | 4962 file.Write(code % { |
| 4951 'name': func.name, | 4963 'name': func.name, |
| 4952 'type': func.GetInfo('data_type'), | 4964 'type': func.GetInfo('data_type'), |
| 4953 'count': func.GetInfo('count'), | 4965 'count': func.GetInfo('count'), |
| 4954 'args': ", ".join(gl_arg_strings), | 4966 'args': ", ".join(gl_arg_strings), |
| 4955 'cmd_args': ", ".join(cmd_arg_strings), | 4967 'cmd_args': ", ".join(cmd_arg_strings), |
| 4968 'count_param': count_param, |
| 4956 }) | 4969 }) |
| 4957 | 4970 |
| 4958 def WriteImmediateCmdComputeSize(self, func, file): | 4971 def WriteImmediateCmdComputeSize(self, func, file): |
| 4959 """Overrriden from TypeHandler.""" | 4972 """Overrriden from TypeHandler.""" |
| 4960 file.Write(" static uint32 ComputeDataSize(GLsizei count) {\n") | 4973 file.Write(" static uint32 ComputeDataSize(GLsizei count) {\n") |
| 4961 file.Write(" return static_cast<uint32>(\n") | 4974 file.Write(" return static_cast<uint32>(\n") |
| 4962 file.Write(" sizeof(%s) * %d * count); // NOLINT\n" % | 4975 file.Write(" sizeof(%s) * %d * count); // NOLINT\n" % |
| 4963 (func.info.data_type, func.info.count)) | 4976 (func.info.data_type, func.info.count)) |
| 4964 file.Write(" }\n") | 4977 file.Write(" }\n") |
| 4965 file.Write("\n") | 4978 file.Write("\n") |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5021 | 5034 |
| 5022 """ | 5035 """ |
| 5023 file.Write(code % { | 5036 file.Write(code % { |
| 5024 "name": func.name, | 5037 "name": func.name, |
| 5025 "typed_args": func.MakeTypedOriginalArgString(""), | 5038 "typed_args": func.MakeTypedOriginalArgString(""), |
| 5026 "args": func.MakeOriginalArgString(""), | 5039 "args": func.MakeOriginalArgString(""), |
| 5027 }) | 5040 }) |
| 5028 | 5041 |
| 5029 def WriteImmediateFormatTest(self, func, file): | 5042 def WriteImmediateFormatTest(self, func, file): |
| 5030 """Overrriden from TypeHandler.""" | 5043 """Overrriden from TypeHandler.""" |
| 5044 args = func.GetCmdArgs() |
| 5045 count_param = 0 |
| 5046 for value, arg in enumerate(args): |
| 5047 if arg.name == "count": |
| 5048 count_param = int(arg.GetValidClientSideArg(func, value, 0)) |
| 5031 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) | 5049 file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name) |
| 5032 file.Write(" const int kSomeBaseValueToTestWith = 51;\n") | 5050 file.Write(" const int kSomeBaseValueToTestWith = 51;\n") |
| 5033 file.Write(" static %s data[] = {\n" % func.info.data_type) | 5051 file.Write(" static %s data[] = {\n" % func.info.data_type) |
| 5034 for v in range(0, func.info.count * 2): | 5052 for v in range(0, func.info.count * count_param): |
| 5035 file.Write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" % | 5053 file.Write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" % |
| 5036 (func.info.data_type, v)) | 5054 (func.info.data_type, v)) |
| 5037 file.Write(" };\n") | 5055 file.Write(" };\n") |
| 5038 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % | 5056 file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" % |
| 5039 (func.name, func.name)) | 5057 (func.name, func.name)) |
| 5040 file.Write(" const GLsizei kNumElements = 2;\n") | 5058 file.Write(" const GLsizei kNumElements = %d;\n" % count_param) |
| 5041 file.Write(" const size_t kExpectedCmdSize =\n") | 5059 file.Write(" const size_t kExpectedCmdSize =\n") |
| 5042 file.Write(" sizeof(cmd) + kNumElements * sizeof(%s) * %d;\n" % | 5060 file.Write(" sizeof(cmd) + kNumElements * sizeof(%s) * %d;\n" % |
| 5043 (func.info.data_type, func.info.count)) | 5061 (func.info.data_type, func.info.count)) |
| 5044 file.Write(" void* next_cmd = cmd.Set(\n") | 5062 file.Write(" void* next_cmd = cmd.Set(\n") |
| 5045 file.Write(" &cmd") | 5063 file.Write(" &cmd") |
| 5046 args = func.GetCmdArgs() | |
| 5047 for value, arg in enumerate(args): | 5064 for value, arg in enumerate(args): |
| 5048 file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 1)) | 5065 file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 1)) |
| 5049 file.Write(",\n data);\n") | 5066 file.Write(",\n data);\n") |
| 5050 args = func.GetCmdArgs() | |
| 5051 file.Write(" EXPECT_EQ(static_cast<uint32>(cmds::%s::kCmdId),\n" % | 5067 file.Write(" EXPECT_EQ(static_cast<uint32>(cmds::%s::kCmdId),\n" % |
| 5052 func.name) | 5068 func.name) |
| 5053 file.Write(" cmd.header.command);\n") | 5069 file.Write(" cmd.header.command);\n") |
| 5054 file.Write(" EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);\n") | 5070 file.Write(" EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);\n") |
| 5055 for value, arg in enumerate(args): | 5071 for value, arg in enumerate(args): |
| 5056 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % | 5072 file.Write(" EXPECT_EQ(static_cast<%s>(%d), cmd.%s);\n" % |
| 5057 (arg.type, value + 1, arg.name)) | 5073 (arg.type, value + 1, arg.name)) |
| 5058 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") | 5074 file.Write(" CheckBytesWrittenMatchesExpectedSize(\n") |
| 5059 file.Write(" next_cmd, sizeof(cmd) +\n") | 5075 file.Write(" next_cmd, sizeof(cmd) +\n") |
| 5060 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") | 5076 file.Write(" RoundSizeToMultipleOfEntries(sizeof(data)));\n") |
| (...skipping 2584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7645 gen.WriteGLES2Header("../GLES2/gl2chromium_autogen.h") | 7661 gen.WriteGLES2Header("../GLES2/gl2chromium_autogen.h") |
| 7646 | 7662 |
| 7647 if gen.errors > 0: | 7663 if gen.errors > 0: |
| 7648 print "%d errors" % gen.errors | 7664 print "%d errors" % gen.errors |
| 7649 return 1 | 7665 return 1 |
| 7650 return 0 | 7666 return 0 |
| 7651 | 7667 |
| 7652 | 7668 |
| 7653 if __name__ == '__main__': | 7669 if __name__ == '__main__': |
| 7654 sys.exit(main(sys.argv[1:])) | 7670 sys.exit(main(sys.argv[1:])) |
| OLD | NEW |