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

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

Issue 1165553003: Fine tuning glGetInternalformativ. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
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 2683 matching lines...) Expand 10 before | Expand all | Expand 10 after
2694 }, 2694 },
2695 'GetIntegeri_v': { 2695 'GetIntegeri_v': {
2696 'type': 'GETn', 2696 'type': 'GETn',
2697 'result': ['SizedResult<GLint>'], 2697 'result': ['SizedResult<GLint>'],
2698 'client_test': False, 2698 'client_test': False,
2699 'unsafe': True 2699 'unsafe': True
2700 }, 2700 },
2701 'GetInternalformativ': { 2701 'GetInternalformativ': {
2702 'type': 'GETn', 2702 'type': 'GETn',
2703 'result': ['SizedResult<GLint>'], 2703 'result': ['SizedResult<GLint>'],
2704 'unit_test': False,
2704 'unsafe': True, 2705 'unsafe': True,
2705 }, 2706 },
2706 'GetMaxValueInBufferCHROMIUM': { 2707 'GetMaxValueInBufferCHROMIUM': {
2707 'type': 'Is', 2708 'type': 'Is',
2708 'decoder_func': 'DoGetMaxValueInBufferCHROMIUM', 2709 'decoder_func': 'DoGetMaxValueInBufferCHROMIUM',
2709 'result': ['GLuint'], 2710 'result': ['GLuint'],
2710 'unit_test': False, 2711 'unit_test': False,
2711 'client_test': False, 2712 'client_test': False,
2712 'extension': True, 2713 'extension': True,
2713 'chromium': True, 2714 'chromium': True,
(...skipping 3569 matching lines...) Expand 10 before | Expand all | Expand 10 after
6283 class GETnHandler(TypeHandler): 6284 class GETnHandler(TypeHandler):
6284 """Handler for GETn for glGetBooleanv, glGetFloatv, ... type functions.""" 6285 """Handler for GETn for glGetBooleanv, glGetFloatv, ... type functions."""
6285 6286
6286 def __init__(self): 6287 def __init__(self):
6287 TypeHandler.__init__(self) 6288 TypeHandler.__init__(self)
6288 6289
6289 def NeedsDataTransferFunction(self, func): 6290 def NeedsDataTransferFunction(self, func):
6290 """Overriden from TypeHandler.""" 6291 """Overriden from TypeHandler."""
6291 return False 6292 return False
6292 6293
6294 def __GetCountLimitValidation(self, func):
6295 if func.name == 'GetInternalformativ':
6296 return """
6297 if (%(count_param)s > 0) {
6298 // Sanity check for |bufSize| and set its upbound.
6299 GLint value = 0;
6300 LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("%(func_name)s");
6301 glGetInternalformativ(
6302 target, format, GL_NUM_SAMPLE_COUNTS, 1, &value);
6303 GLenum error = LOCAL_PEEK_GL_ERROR("%(func_name)s");
6304 if (error != GL_NO_ERROR) {
6305 return error::kNoError;
6306 }
6307 if (value < %(count_param)s) {
6308 %(count_param)s = value;
6309 }
6310 }
6311 """
piman 2015/06/01 21:29:36 I don't think this should belong to the generator.
6312 return None
6313
6314 def __GetCountParam(self, func):
6315 for arg in func.GetCmdArgs():
6316 if arg.name == 'bufSize':
6317 return arg.name
6318 return None
6319
6293 def WriteServiceImplementation(self, func, file): 6320 def WriteServiceImplementation(self, func, file):
6294 """Overrriden from TypeHandler.""" 6321 """Overrriden from TypeHandler."""
6295 self.WriteServiceHandlerFunctionHeader(func, file) 6322 self.WriteServiceHandlerFunctionHeader(func, file)
6296 last_arg = func.GetLastOriginalArg() 6323 last_arg = func.GetLastOriginalArg()
6297 # All except shm_id and shm_offset. 6324 # All except shm_id and shm_offset.
6298 all_but_last_args = func.GetCmdArgs()[:-2] 6325 all_but_last_args = func.GetCmdArgs()[:-2]
6299 for arg in all_but_last_args: 6326 for arg in all_but_last_args:
6300 arg.WriteGetCode(file) 6327 arg.WriteGetCode(file)
6301 6328
6302 code = """ typedef cmds::%(func_name)s::Result Result; 6329 code = """ typedef cmds::%(func_name)s::Result Result;
6303 GLsizei num_values = 0; 6330 GLsizei num_values = 0;"""
6304 GetNumValuesReturnedForGLGet(pname, &num_values); 6331 count_param = self.__GetCountParam(func)
6332 if count_param:
6333 count_param_validation = self.__GetCountLimitValidation(func)
6334 if count_param_validation:
6335 code += count_param_validation
6336 code += """
6337 if (%(count_param)s > 0) {
6338 num_values = static_cast<GLsizei>(%(count_param)s);
6339 }"""
6340 else:
6341 code += """
6342 GetNumValuesReturnedForGLGet(pname, &num_values);"""
6343 code += """
6305 Result* result = GetSharedMemoryAs<Result*>( 6344 Result* result = GetSharedMemoryAs<Result*>(
6306 c.%(last_arg_name)s_shm_id, c.%(last_arg_name)s_shm_offset, 6345 c.%(last_arg_name)s_shm_id, c.%(last_arg_name)s_shm_offset,
6307 Result::ComputeSize(num_values)); 6346 Result::ComputeSize(num_values));
6308 %(last_arg_type)s %(last_arg_name)s = result ? result->GetData() : NULL; 6347 %(last_arg_type)s %(last_arg_name)s = result ? result->GetData() : NULL;
6309 """ 6348 """
6310 file.Write(code % { 6349 file.Write(code % {
6311 'last_arg_type': last_arg.type, 6350 'last_arg_type': last_arg.type,
6312 'last_arg_name': last_arg.name, 6351 'last_arg_name': last_arg.name,
6313 'func_name': func.name, 6352 'func_name': func.name,
6353 'count_param': count_param,
6314 }) 6354 })
6315 func.WriteHandlerValidation(file) 6355 func.WriteHandlerValidation(file)
6316 code = """ // Check that the client initialized the result. 6356 code = """ // Check that the client initialized the result.
6317 if (result->size != 0) { 6357 if (result->size != 0) {
6318 return error::kInvalidArguments; 6358 return error::kInvalidArguments;
6319 } 6359 }
6320 """ 6360 """
6321 shadowed = func.GetInfo('shadowed') 6361 shadowed = func.GetInfo('shadowed')
6322 if not shadowed: 6362 if not shadowed:
6323 file.Write(' LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("%s");\n' % func.name) 6363 file.Write(' LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("%s");\n' % func.name)
6324 file.Write(code) 6364 file.Write(code)
6325 func.WriteHandlerImplementation(file) 6365 func.WriteHandlerImplementation(file)
6326 if shadowed: 6366 if shadowed:
6327 code = """ result->SetNumResults(num_values); 6367 code = """ result->SetNumResults(num_values);
6328 return error::kNoError; 6368 return error::kNoError;
6329 } 6369 }
6330 """ 6370 """
6331 else: 6371 else:
6332 code = """ GLenum error = glGetError(); 6372 code = """ GLenum error = LOCAL_PEEK_GL_ERROR("%(func_name)s");
6333 if (error == GL_NO_ERROR) { 6373 if (error == GL_NO_ERROR) {
6334 result->SetNumResults(num_values); 6374 result->SetNumResults(num_values);
6335 } else {
6336 LOCAL_SET_GL_ERROR(error, "%(func_name)s", "");
6337 } 6375 }
6338 return error::kNoError; 6376 return error::kNoError;
6339 } 6377 }
6340 6378
6341 """ 6379 """
6342 file.Write(code % {'func_name': func.name}) 6380 file.Write(code % {'func_name': func.name})
6343 6381
6344 def WriteGLES2Implementation(self, func, file): 6382 def WriteGLES2Implementation(self, func, file):
6345 """Overrriden from TypeHandler.""" 6383 """Overrriden from TypeHandler."""
6346 impl_decl = func.GetInfo('impl_decl') 6384 impl_decl = func.GetInfo('impl_decl')
(...skipping 4677 matching lines...) Expand 10 before | Expand all | Expand 10 after
11024 Format(gen.generated_cpp_filenames) 11062 Format(gen.generated_cpp_filenames)
11025 11063
11026 if gen.errors > 0: 11064 if gen.errors > 0:
11027 print "%d errors" % gen.errors 11065 print "%d errors" % gen.errors
11028 return 1 11066 return 1
11029 return 0 11067 return 0
11030 11068
11031 11069
11032 if __name__ == '__main__': 11070 if __name__ == '__main__':
11033 sys.exit(main(sys.argv[1:])) 11071 sys.exit(main(sys.argv[1:]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698