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" % |