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

Unified Diff: gpu/command_buffer/build_gles2_cmd_buffer.py

Issue 2009073002: command_buffer: Guard on extension and profiles in the decoder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Check for GL errors in the unittest Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | gpu/command_buffer/service/context_state_impl_autogen.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/build_gles2_cmd_buffer.py
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 1790b26ab2fff2c434eda9aaa4d242856312cad5..e4b3b2a9be3c182a4b6b553ae18350acae711f22 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -4610,6 +4610,34 @@ def CachedStateName(item):
return 'cached_' + item['name']
return item['name']
+def GuardState(state, operation):
+ if 'manual' in state:
+ assert state['manual']
+ return ""
+
+ result = []
+ result_end = []
+ if 'es3' in state:
+ assert state['es3']
+ result.append(" if (feature_info_->IsES3Capable()) {\n");
+ result_end.append(" }\n")
+ if 'extension_flag' in state:
+ result.append(" if (feature_info_->feature_flags().%s) {\n " %
+ (state['extension_flag']))
+ result_end.append(" }\n")
+ if 'gl_version_flag' in state:
+ name = state['gl_version_flag']
+ inverted = ''
+ if name[0] == '!':
+ inverted = '!'
+ name = name[1:]
+ result.append(" if (%sfeature_info_->gl_version_info().%s) {\n" %
+ (inverted, name))
+ result_end.append(" }\n")
+
+ result.append(operation)
+ return ''.join(result + result_end)
+
def ToGLExtensionString(extension_flag):
"""Returns GL-type extension string of a extension flag."""
if extension_flag == "oes_compressed_etc1_rgb8_texture":
@@ -5612,8 +5640,9 @@ class StateSetNamedParameter(TypeHandler):
(state['name'], args[1].name))
f.write(" state_.%s = %s;\n" % (state['name'], args[1].name))
if not func.GetInfo("no_gl"):
- f.write(" %s(%s);\n" %
- (func.GetGLFunctionName(), func.MakeOriginalArgString("")))
+ operation = " %s(%s);\n" % \
+ (func.GetGLFunctionName(), func.MakeOriginalArgString(""))
+ f.write(GuardState(state, operation))
f.write(" }\n")
f.write(" break;\n")
f.write(" default:\n")
@@ -10414,45 +10443,28 @@ void ContextState::InitState(const ContextState *prev_state) const {
for item in state['states']:
item_name = CachedStateName(item)
- if 'manual' in item:
- assert item['manual']
- continue
- if 'es3' in item:
- assert item['es3']
- f.write(" if (feature_info_->IsES3Capable()) {\n");
- if 'extension_flag' in item:
- f.write(" if (feature_info_->feature_flags().%s) {\n " %
- item['extension_flag'])
+ operation = []
if test_prev:
if isinstance(item['default'], list):
- f.write(" if (memcmp(prev_state->%s, %s, "
- "sizeof(%s) * %d)) {\n" %
- (item_name, item_name, item['type'],
- len(item['default'])))
+ operation.append(" if (memcmp(prev_state->%s, %s, "
+ "sizeof(%s) * %d)) {\n" %
+ (item_name, item_name, item['type'],
+ len(item['default'])))
else:
- f.write(" if (prev_state->%s != %s) {\n " %
- (item_name, item_name))
- if 'gl_version_flag' in item:
- item_name = item['gl_version_flag']
- inverted = ''
- if item_name[0] == '!':
- inverted = '!'
- item_name = item_name[1:]
- f.write(" if (%sfeature_info_->gl_version_info().%s) {\n" %
- (inverted, item_name))
- f.write(" gl%s(%s, %s);\n" %
- (state['func'],
- (item['enum_set']
- if 'enum_set' in item else item['enum']),
- item['name']))
- if 'gl_version_flag' in item or 'es3' in item:
- f.write(" }\n")
+ operation.append(" if (prev_state->%s != %s) {\n " %
+ (item_name, item_name))
+
+ operation.append(" gl%s(%s, %s);\n" %
+ (state['func'],
+ (item['enum_set']
+ if 'enum_set' in item else item['enum']),
+ item['name']))
+
if test_prev:
- if 'extension_flag' in item:
- f.write(" ")
- f.write(" }")
- if 'extension_flag' in item:
- f.write(" }")
+ operation.append(" }")
+
+ guarded_operation = GuardState(item, ''.join(operation))
+ f.write(guarded_operation)
else:
if 'extension_flag' in state:
f.write(" if (feature_info_->feature_flags().%s)\n " %
@@ -10656,6 +10668,7 @@ bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) {
}
void GLES2DecoderTestBase::SetupInitStateExpectations(bool es3_capable) {
+ const auto& feature_info_ = group_->feature_info();
""")
# We need to sort the keys so the expectations match
for state_name in sorted(_STATES.keys()):
@@ -10676,32 +10689,23 @@ void GLES2DecoderTestBase::SetupInitStateExpectations(bool es3_capable) {
f.write(" .RetiresOnSaturation();\n")
elif state['type'] == 'NamedParameter':
for item in state['states']:
- if 'manual' in item:
- assert item['manual']
- continue
- if 'extension_flag' in item:
- f.write(" if (group_->feature_info()->feature_flags().%s) {\n" %
- item['extension_flag'])
- f.write(" ")
- if 'es3' in item:
- assert item['es3']
- f.write(" if (es3_capable) {\n")
- f.write(" ")
expect_value = item['default']
if isinstance(expect_value, list):
# TODO: Currently we do not check array values.
expect_value = "_"
- f.write(
- " EXPECT_CALL(*gl_, %s(%s, %s))\n" %
- (state['func'],
- (item['enum_set']
- if 'enum_set' in item else item['enum']),
- expect_value))
- f.write(" .Times(1)\n")
- f.write(" .RetiresOnSaturation();\n")
- if 'extension_flag' in item or 'es3' in item:
- f.write(" }\n")
+ operation = []
+ operation.append(
+ " EXPECT_CALL(*gl_, %s(%s, %s))\n" %
+ (state['func'],
+ (item['enum_set']
+ if 'enum_set' in item else item['enum']),
+ expect_value))
+ operation.append(" .Times(1)\n")
+ operation.append(" .RetiresOnSaturation();\n")
+
+ guarded_operation = GuardState(item, ''.join(operation))
+ f.write(guarded_operation)
else:
if 'extension_flag' in state:
f.write(" if (group_->feature_info()->feature_flags().%s) {\n" %
« no previous file with comments | « no previous file | gpu/command_buffer/service/context_state_impl_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698