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

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

Issue 1474513003: Upgrade PixelStorei to ES3/WebGL2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
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 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 'name': 'pack_alignment', 407 'name': 'pack_alignment',
408 'type': 'GLint', 408 'type': 'GLint',
409 'enum': 'GL_PACK_ALIGNMENT', 409 'enum': 'GL_PACK_ALIGNMENT',
410 'default': '4' 410 'default': '4'
411 }, 411 },
412 { 412 {
413 'name': 'unpack_alignment', 413 'name': 'unpack_alignment',
414 'type': 'GLint', 414 'type': 'GLint',
415 'enum': 'GL_UNPACK_ALIGNMENT', 415 'enum': 'GL_UNPACK_ALIGNMENT',
416 'default': '4' 416 'default': '4'
417 },
418 {
419 'name': 'pack_row_length',
420 'type': 'GLint',
421 'enum': 'GL_PACK_ROW_LENGTH',
422 'default': '0',
423 'es3': True
424 },
425 {
426 'name': 'pack_skip_pixels',
427 'type': 'GLint',
428 'enum': 'GL_PACK_SKIP_PIXELS',
429 'default': '0',
430 'es3': True
431 },
432 {
433 'name': 'pack_skip_rows',
434 'type': 'GLint',
435 'enum': 'GL_PACK_SKIP_ROWS',
436 'default': '0',
437 'es3': True
438 },
439 {
440 'name': 'unpack_row_length',
441 'type': 'GLint',
442 'enum': 'GL_UNPACK_ROW_LENGTH',
443 'default': '0',
444 'es3': True
445 },
446 {
447 'name': 'unpack_image_height',
448 'type': 'GLint',
449 'enum': 'GL_UNPACK_IMAGE_HEIGHT',
450 'default': '0',
451 'es3': True
452 },
453 {
454 'name': 'unpack_skip_pixels',
455 'type': 'GLint',
456 'enum': 'GL_UNPACK_SKIP_PIXELS',
457 'default': '0',
458 'es3': True
459 },
460 {
461 'name': 'unpack_skip_rows',
462 'type': 'GLint',
463 'enum': 'GL_UNPACK_SKIP_ROWS',
464 'default': '0',
465 'es3': True
466 },
467 {
468 'name': 'unpack_skip_images',
469 'type': 'GLint',
470 'enum': 'GL_UNPACK_SKIP_IMAGES',
471 'default': '0',
472 'es3': True
417 } 473 }
418 ], 474 ],
419 }, 475 },
420 # TODO: Consider implemenenting these states 476 # TODO: Consider implemenenting these states
421 # GL_ACTIVE_TEXTURE 477 # GL_ACTIVE_TEXTURE
422 'LineWidth': { 478 'LineWidth': {
423 'type': 'Normal', 479 'type': 'Normal',
424 'func': 'LineWidth', 480 'func': 'LineWidth',
425 'enum': 'GL_LINE_WIDTH', 481 'enum': 'GL_LINE_WIDTH',
426 'states': [ 482 'states': [
(...skipping 9750 matching lines...) Expand 10 before | Expand all | Expand 10 after
10177 if test_prev: 10233 if test_prev:
10178 f.write(")\n") 10234 f.write(")\n")
10179 f.write( 10235 f.write(
10180 " gl%s(%s, %s);\n" % 10236 " gl%s(%s, %s);\n" %
10181 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], 10237 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx],
10182 ", ".join(args))) 10238 ", ".join(args)))
10183 elif state['type'] == 'NamedParameter': 10239 elif state['type'] == 'NamedParameter':
10184 for item in state['states']: 10240 for item in state['states']:
10185 item_name = CachedStateName(item) 10241 item_name = CachedStateName(item)
10186 10242
10243 if 'es3' in item:
10244 assert item['es3']
10245 f.write(" if (feature_info_->IsES3Enabled()) {\n");
Ken Russell (switch to Gerrit) 2015/11/25 00:59:41 This needs to be IsES3Capable() because we may swi
Zhenyao Mo 2015/11/25 18:18:48 Done.
10187 if 'extension_flag' in item: 10246 if 'extension_flag' in item:
10188 f.write(" if (feature_info_->feature_flags().%s) {\n " % 10247 f.write(" if (feature_info_->feature_flags().%s) {\n " %
10189 item['extension_flag']) 10248 item['extension_flag'])
10190 if test_prev: 10249 if test_prev:
10191 if isinstance(item['default'], list): 10250 if isinstance(item['default'], list):
10192 f.write(" if (memcmp(prev_state->%s, %s, " 10251 f.write(" if (memcmp(prev_state->%s, %s, "
10193 "sizeof(%s) * %d)) {\n" % 10252 "sizeof(%s) * %d)) {\n" %
10194 (item_name, item_name, item['type'], 10253 (item_name, item_name, item['type'],
10195 len(item['default']))) 10254 len(item['default'])))
10196 else: 10255 else:
10197 f.write(" if (prev_state->%s != %s) {\n " % 10256 f.write(" if (prev_state->%s != %s) {\n " %
10198 (item_name, item_name)) 10257 (item_name, item_name))
10199 if 'gl_version_flag' in item: 10258 if 'gl_version_flag' in item:
10200 item_name = item['gl_version_flag'] 10259 item_name = item['gl_version_flag']
10201 inverted = '' 10260 inverted = ''
10202 if item_name[0] == '!': 10261 if item_name[0] == '!':
10203 inverted = '!' 10262 inverted = '!'
10204 item_name = item_name[1:] 10263 item_name = item_name[1:]
10205 f.write(" if (%sfeature_info_->gl_version_info().%s) {\n" % 10264 f.write(" if (%sfeature_info_->gl_version_info().%s) {\n" %
10206 (inverted, item_name)) 10265 (inverted, item_name))
10207 f.write(" gl%s(%s, %s);\n" % 10266 f.write(" gl%s(%s, %s);\n" %
10208 (state['func'], 10267 (state['func'],
10209 (item['enum_set'] 10268 (item['enum_set']
10210 if 'enum_set' in item else item['enum']), 10269 if 'enum_set' in item else item['enum']),
10211 item['name'])) 10270 item['name']))
10212 if 'gl_version_flag' in item: 10271 if 'gl_version_flag' in item or 'es3' in item:
10213 f.write(" }\n") 10272 f.write(" }\n")
10214 if test_prev: 10273 if test_prev:
10215 if 'extension_flag' in item: 10274 if 'extension_flag' in item:
10216 f.write(" ") 10275 f.write(" ")
10217 f.write(" }") 10276 f.write(" }")
10218 if 'extension_flag' in item: 10277 if 'extension_flag' in item:
10219 f.write(" }") 10278 f.write(" }")
10220 else: 10279 else:
10221 if 'extension_flag' in state: 10280 if 'extension_flag' in state:
10222 f.write(" if (feature_info_->feature_flags().%s)\n " % 10281 f.write(" if (feature_info_->feature_flags().%s)\n " %
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
10399 f.write(" if (es3_capable) {") 10458 f.write(" if (es3_capable) {")
10400 for capability in _CAPABILITY_FLAGS: 10459 for capability in _CAPABILITY_FLAGS:
10401 capability_es3 = 'es3' in capability and capability['es3'] == True 10460 capability_es3 = 'es3' in capability and capability['es3'] == True
10402 if capability_es3: 10461 if capability_es3:
10403 f.write(" ExpectEnableDisable(GL_%s, %s);\n" % 10462 f.write(" ExpectEnableDisable(GL_%s, %s);\n" %
10404 (capability['name'].upper(), 10463 (capability['name'].upper(),
10405 ('false', 'true')['default' in capability])) 10464 ('false', 'true')['default' in capability]))
10406 f.write(""" } 10465 f.write(""" }
10407 } 10466 }
10408 10467
10409 void GLES2DecoderTestBase::SetupInitStateExpectations() { 10468 void GLES2DecoderTestBase::SetupInitStateExpectations(bool es3_capable) {
10410 """) 10469 """)
10411 # We need to sort the keys so the expectations match 10470 # We need to sort the keys so the expectations match
10412 for state_name in sorted(_STATES.keys()): 10471 for state_name in sorted(_STATES.keys()):
10413 state = _STATES[state_name] 10472 state = _STATES[state_name]
10414 if state['type'] == 'FrontBack': 10473 if state['type'] == 'FrontBack':
10415 num_states = len(state['states']) 10474 num_states = len(state['states'])
10416 for ndx, group in enumerate(Grouper(num_states / 2, state['states'])): 10475 for ndx, group in enumerate(Grouper(num_states / 2, state['states'])):
10417 args = [] 10476 args = []
10418 for item in group: 10477 for item in group:
10419 if 'expected' in item: 10478 if 'expected' in item:
10420 args.append(item['expected']) 10479 args.append(item['expected'])
10421 else: 10480 else:
10422 args.append(item['default']) 10481 args.append(item['default'])
10423 f.write( 10482 f.write(
10424 " EXPECT_CALL(*gl_, %s(%s, %s))\n" % 10483 " EXPECT_CALL(*gl_, %s(%s, %s))\n" %
10425 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args))) 10484 (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args)))
10426 f.write(" .Times(1)\n") 10485 f.write(" .Times(1)\n")
10427 f.write(" .RetiresOnSaturation();\n") 10486 f.write(" .RetiresOnSaturation();\n")
10428 elif state['type'] == 'NamedParameter': 10487 elif state['type'] == 'NamedParameter':
10429 for item in state['states']: 10488 for item in state['states']:
10430 if 'extension_flag' in item: 10489 if 'extension_flag' in item:
10431 f.write(" if (group_->feature_info()->feature_flags().%s) {\n" % 10490 f.write(" if (group_->feature_info()->feature_flags().%s) {\n" %
10432 item['extension_flag']) 10491 item['extension_flag'])
10433 f.write(" ") 10492 f.write(" ")
10493 if 'es3' in item:
10494 assert item['es3']
10495 f.write(" if (es3_capable) {\n")
10496 f.write(" ")
10434 expect_value = item['default'] 10497 expect_value = item['default']
10435 if isinstance(expect_value, list): 10498 if isinstance(expect_value, list):
10436 # TODO: Currently we do not check array values. 10499 # TODO: Currently we do not check array values.
10437 expect_value = "_" 10500 expect_value = "_"
10438 10501
10439 f.write( 10502 f.write(
10440 " EXPECT_CALL(*gl_, %s(%s, %s))\n" % 10503 " EXPECT_CALL(*gl_, %s(%s, %s))\n" %
10441 (state['func'], 10504 (state['func'],
10442 (item['enum_set'] 10505 (item['enum_set']
10443 if 'enum_set' in item else item['enum']), 10506 if 'enum_set' in item else item['enum']),
10444 expect_value)) 10507 expect_value))
10445 f.write(" .Times(1)\n") 10508 f.write(" .Times(1)\n")
10446 f.write(" .RetiresOnSaturation();\n") 10509 f.write(" .RetiresOnSaturation();\n")
10447 if 'extension_flag' in item: 10510 if 'extension_flag' in item or 'es3' in item:
10448 f.write(" }\n") 10511 f.write(" }\n")
10449 else: 10512 else:
10450 if 'extension_flag' in state: 10513 if 'extension_flag' in state:
10451 f.write(" if (group_->feature_info()->feature_flags().%s) {\n" % 10514 f.write(" if (group_->feature_info()->feature_flags().%s) {\n" %
10452 state['extension_flag']) 10515 state['extension_flag'])
10453 f.write(" ") 10516 f.write(" ")
10454 args = [] 10517 args = []
10455 for item in state['states']: 10518 for item in state['states']:
10456 if 'expected' in item: 10519 if 'expected' in item:
10457 args.append(item['expected']) 10520 args.append(item['expected'])
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
10772 10835
10773 """) 10836 """)
10774 10837
10775 enums = sorted(_NAMED_TYPE_INFO.keys()) 10838 enums = sorted(_NAMED_TYPE_INFO.keys())
10776 for enum in enums: 10839 for enum in enums:
10777 if _NAMED_TYPE_INFO[enum]['type'] == 'GLenum': 10840 if _NAMED_TYPE_INFO[enum]['type'] == 'GLenum':
10778 f.write("std::string GLES2Util::GetString%s(uint32_t value) {\n" % 10841 f.write("std::string GLES2Util::GetString%s(uint32_t value) {\n" %
10779 enum) 10842 enum)
10780 valid_list = _NAMED_TYPE_INFO[enum]['valid'] 10843 valid_list = _NAMED_TYPE_INFO[enum]['valid']
10781 if 'valid_es3' in _NAMED_TYPE_INFO[enum]: 10844 if 'valid_es3' in _NAMED_TYPE_INFO[enum]:
10782 valid_list = valid_list + _NAMED_TYPE_INFO[enum]['valid_es3'] 10845 for es3_enum in _NAMED_TYPE_INFO[enum]['valid_es3']:
10846 if not es3_enum in valid_list:
10847 valid_list.append(es3_enum)
10783 assert len(valid_list) == len(set(valid_list)) 10848 assert len(valid_list) == len(set(valid_list))
10784 if len(valid_list) > 0: 10849 if len(valid_list) > 0:
10785 f.write(" static const EnumToString string_table[] = {\n") 10850 f.write(" static const EnumToString string_table[] = {\n")
10786 for value in valid_list: 10851 for value in valid_list:
10787 f.write(' { %s, "%s" },\n' % (value, value)) 10852 f.write(' { %s, "%s" },\n' % (value, value))
10788 f.write(""" }; 10853 f.write(""" };
10789 return GLES2Util::GetQualifiedEnumString( 10854 return GLES2Util::GetQualifiedEnumString(
10790 string_table, arraysize(string_table), value); 10855 string_table, arraysize(string_table), value);
10791 } 10856 }
10792 10857
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
11013 help="base directory for resulting files, under chrome/src. default is " 11078 help="base directory for resulting files, under chrome/src. default is "
11014 "empty. Use this if you want the result stored under gen.") 11079 "empty. Use this if you want the result stored under gen.")
11015 parser.add_option( 11080 parser.add_option(
11016 "-v", "--verbose", action="store_true", 11081 "-v", "--verbose", action="store_true",
11017 help="prints more output.") 11082 help="prints more output.")
11018 11083
11019 (options, args) = parser.parse_args(args=argv) 11084 (options, args) = parser.parse_args(args=argv)
11020 11085
11021 # Add in states and capabilites to GLState 11086 # Add in states and capabilites to GLState
11022 gl_state_valid = _NAMED_TYPE_INFO['GLState']['valid'] 11087 gl_state_valid = _NAMED_TYPE_INFO['GLState']['valid']
11088 gl_state_valid_es3 = _NAMED_TYPE_INFO['GLState']['valid_es3']
11023 for state_name in sorted(_STATES.keys()): 11089 for state_name in sorted(_STATES.keys()):
11024 state = _STATES[state_name] 11090 state = _STATES[state_name]
11025 if 'extension_flag' in state: 11091 if 'extension_flag' in state:
11026 continue 11092 continue
11027 if 'enum' in state: 11093 if 'enum' in state:
11028 if not state['enum'] in gl_state_valid: 11094 if not state['enum'] in gl_state_valid:
11029 gl_state_valid.append(state['enum']) 11095 gl_state_valid.append(state['enum'])
11030 else: 11096 else:
11031 for item in state['states']: 11097 for item in state['states']:
11032 if 'extension_flag' in item: 11098 if 'extension_flag' in item:
11033 continue 11099 continue
11034 if not item['enum'] in gl_state_valid: 11100 if 'es3' in item:
11035 gl_state_valid.append(item['enum']) 11101 assert item['es3']
11102 if not item['enum'] in gl_state_valid_es3:
11103 gl_state_valid_es3.append(item['enum'])
11104 else:
11105 if not item['enum'] in gl_state_valid:
11106 gl_state_valid.append(item['enum'])
11036 for capability in _CAPABILITY_FLAGS: 11107 for capability in _CAPABILITY_FLAGS:
11037 valid_value = "GL_%s" % capability['name'].upper() 11108 valid_value = "GL_%s" % capability['name'].upper()
11038 if not valid_value in gl_state_valid: 11109 if not valid_value in gl_state_valid:
11039 gl_state_valid.append(valid_value) 11110 gl_state_valid.append(valid_value)
11040 11111
11041 # This script lives under gpu/command_buffer, cd to base directory. 11112 # This script lives under gpu/command_buffer, cd to base directory.
11042 os.chdir(os.path.dirname(__file__) + "/../..") 11113 os.chdir(os.path.dirname(__file__) + "/../..")
11043 base_dir = os.getcwd() 11114 base_dir = os.getcwd()
11044 gen = GLGenerator(options.verbose) 11115 gen = GLGenerator(options.verbose)
11045 gen.ParseGLH("gpu/command_buffer/cmd_buffer_functions.txt") 11116 gen.ParseGLH("gpu/command_buffer/cmd_buffer_functions.txt")
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
11115 Format(gen.generated_cpp_filenames) 11186 Format(gen.generated_cpp_filenames)
11116 11187
11117 if gen.errors > 0: 11188 if gen.errors > 0:
11118 print "%d errors" % gen.errors 11189 print "%d errors" % gen.errors
11119 return 1 11190 return 1
11120 return 0 11191 return 0
11121 11192
11122 11193
11123 if __name__ == '__main__': 11194 if __name__ == '__main__':
11124 sys.exit(main(sys.argv[1:])) 11195 sys.exit(main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698