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 84d70c0d4111c51ea22ad0228d8a04bb01f9d929..575f12a20f4b1a6b5a0e3fa43eba0923e047121e 100755 |
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py |
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py |
@@ -479,6 +479,26 @@ _STATES = { |
}, |
], |
}, |
+ 'MatrixValuesCHROMIUM': { |
+ 'type': 'NamedParameter', |
+ 'func': 'MatrixLoadfEXT', |
+ 'states': [ |
+ { 'enum': 'GL_MODELVIEW_MATRIX_CHROMIUM', |
+ 'enum_set': 'GL_MODELVIEW_CHROMIUM', |
+ 'name': 'modelview_matrix', |
+ 'type': 'GLfloat', |
+ 'default': ['0.0f'] * 16, |
Kimmo Kinnunen
2014/04/15 17:52:27
This is a mistake, the these defaults should be id
Kimmo Kinnunen
2014/04/23 12:26:55
Done.
|
+ 'extension_flag': 'chromium_path_rendering', |
+ }, |
+ { 'enum': 'GL_PROJECTION_MATRIX_CHROMIUM', |
+ 'enum_set': 'GL_PROJECTION_CHROMIUM', |
+ 'name': 'projection_matrix', |
+ 'type': 'GLfloat', |
+ 'default': ['0.0f'] * 16, |
+ 'extension_flag': 'chromium_path_rendering', |
+ }, |
+ ], |
+ }, |
} |
# This is a list of enum names and their valid values. It is used to map |
@@ -805,6 +825,13 @@ _ENUM_LISTS = { |
'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE', |
], |
}, |
+ 'MatrixMode': { |
+ 'type': 'GLenum', |
+ 'valid': [ |
+ 'GL_PROJECTION_CHROMIUM', |
+ 'GL_MODELVIEW_CHROMIUM', |
+ ], |
+ }, |
'ProgramParameter': { |
'type': 'GLenum', |
'valid': [ |
@@ -2546,9 +2573,23 @@ _FUNCTION_INFO = { |
'extension': True, |
'chromium': True, |
}, |
+ 'MatrixLoadfCHROMIUM': { |
+ 'type': 'PUT', |
+ 'count': 16, |
+ 'data_type': 'GLfloat', |
+ 'decoder_func': 'DoMatrixLoadfCHROMIUM', |
+ 'unit_test': False, |
+ 'chromium': True, |
+ 'extension': True, |
+ }, |
+ 'MatrixLoadIdentityCHROMIUM': { |
+ 'decoder_func': 'DoMatrixLoadIdentityCHROMIUM', |
+ 'unit_test': False, |
+ 'chromium': True, |
+ 'extension': True, |
+ }, |
} |
- |
def Grouper(n, iterable, fillvalue=None): |
"""Collect data into fixed-length chunks or blocks""" |
args = [iter(iterable)] * n |
@@ -7083,7 +7124,11 @@ class GLGenerator(object): |
for state_name in sorted(_STATES.keys()): |
state = _STATES[state_name] |
for item in state['states']: |
- file.Write("%s %s;\n" % (item['type'], item['name'])) |
+ if isinstance(item['default'], list): |
+ file.Write("%s %s[%s];\n" % (item['type'], item['name'], |
+ len(item['default']))) |
vmiura
2014/04/15 18:02:43
nit: %d for len(..)
Kimmo Kinnunen
2014/04/23 12:26:55
Done.
|
+ else: |
+ file.Write("%s %s;\n" % (item['type'], item['name'])) |
file.Write("\n") |
file.Close() |
@@ -7123,10 +7168,24 @@ bool %s::GetStateAs%s( |
else: |
for item in state['states']: |
file.Write(" case %s:\n" % item['enum']) |
- file.Write(" *num_written = 1;\n") |
- file.Write(" if (params) {\n") |
- file.Write(" params[0] = static_cast<%s>(%s);\n" % |
- (gl_type, item['name'])) |
+ if isinstance(item['default'], list): |
+ item_len = len(item['default']) |
+ file.Write(" *num_written = %s;\n" % item_len) |
vmiura
2014/04/15 18:02:43
nit: %d for item_len
Kimmo Kinnunen
2014/04/23 12:26:55
Done.
|
+ file.Write(" if (params) {\n") |
+ if item['type'] == gl_type: |
+ file.Write(" memcpy(params, %s, sizeof(%s) * %s);\n" % |
+ (item['name'], item['type'], item_len)) |
vmiura
2014/04/15 18:02:43
nit: %d for item_len
Kimmo Kinnunen
2014/04/23 12:26:55
Done.
|
+ else: |
+ file.Write(" for (size_t i = 0; i < %s; ++i) {\n" % |
+ item_len) |
+ file.Write(" params[i] = static_cast<%s>(%s[i]);\n" % |
+ (gl_type, item['name'])) |
+ file.Write(" }\n"); |
+ else: |
+ file.Write(" *num_written = 1;\n") |
+ file.Write(" if (params) {\n") |
+ file.Write(" params[0] = static_cast<%s>(%s);\n" % |
+ (gl_type, item['name'])) |
file.Write(" }\n") |
file.Write(" return true;\n") |
for capability in _CAPABILITY_FLAGS: |
@@ -7162,7 +7221,11 @@ bool %s::GetStateAs%s( |
for state_name in sorted(_STATES.keys()): |
state = _STATES[state_name] |
for item in state['states']: |
- file.Write(" %s = %s;\n" % (item['name'], item['default'])) |
+ if isinstance(item['default'], list): |
+ for ndx, value in enumerate(item['default']): |
+ file.Write(" %s[%s] = %s;\n" % (item['name'], ndx, value)) |
vmiura
2014/04/15 18:02:43
nit: %d for ndx
Kimmo Kinnunen
2014/04/23 12:26:55
Done.
|
+ else: |
+ file.Write(" %s = %s;\n" % (item['name'], item['default'])) |
file.Write("}\n") |
file.Write(""" |
@@ -7216,11 +7279,23 @@ void ContextState::InitState(const ContextState *prev_state) const { |
file.Write(" if (feature_info_->feature_flags().%s)\n " % |
item['extension_flag']) |
if test_prev: |
- file.Write(" if (prev_state->%s != %s)\n" % |
- (item['name'], item['name'])) |
+ if isinstance(item['default'], list): |
+ file.Write(" if (memcmp(prev_state->%s, %s, " |
+ "sizeof(%s) * %s))\n" % |
+ (item['name'], item['name'], item['type'], |
+ len(item['default']))) |
vmiura
2014/04/15 18:02:43
nit: %d
Kimmo Kinnunen
2014/04/23 12:26:55
Done.
|
+ else: |
+ file.Write(" if (prev_state->%s != %s)\n" % |
+ (item['name'], item['name'])) |
file.Write(" gl%s(%s, %s);\n" % |
- (state['func'], item['enum'], item['name'])) |
+ (state['func'], |
+ (item['enum_set'] |
+ if 'enum_set' in item else item['enum']), |
+ item['name'])) |
else: |
+ if 'extension_flag' in state: |
+ file.Write(" if (feature_info_->feature_flags().%s)\n " % |
+ state['extension_flag']) |
if test_prev: |
file.Write(" if (") |
args = [] |
@@ -7241,7 +7316,6 @@ void ContextState::InitState(const ContextState *prev_state) const { |
file.Write(" } else {") |
WriteStates(False) |
file.Write(" }") |
- |
file.Write("}\n") |
file.Write("""bool ContextState::GetEnabled(GLenum cap) const { |
@@ -7410,7 +7484,10 @@ void GLES2DecoderTestBase::SetupInitStateExpectations() { |
continue |
file.Write( |
" EXPECT_CALL(*gl_, %s(%s, %s))\n" % |
- (state['func'], item['enum'], item['default'])) |
+ (state['func'], |
+ (item['enum_set'] |
+ if 'enum_set' in item else item['enum']), |
+ item['default'])) |
file.Write(" .Times(1)\n") |
file.Write(" .RetiresOnSaturation();\n") |
else: |
@@ -7859,6 +7936,8 @@ def main(argv): |
# Add in states and capabilites to GLState |
for state_name in sorted(_STATES.keys()): |
state = _STATES[state_name] |
+ if 'extension_flag' in state: |
+ continue |
if 'enum' in state: |
_ENUM_LISTS['GLState']['valid'].append(state['enum']) |
else: |