| 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 32e53f43365270c94108506e6f6f4d6e3e135479..a746aef8124a2e31d4dde20f3700c58614effb0a 100755
|
| --- a/gpu/command_buffer/build_gles2_cmd_buffer.py
|
| +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
|
| @@ -1184,6 +1184,8 @@ _FUNCTION_INFO = {
|
| 'unit_test': False,
|
| 'extension': True,
|
| 'pepper_interface': 'FramebufferBlit',
|
| + 'defer_reads': True,
|
| + 'defer_draws': True,
|
| },
|
| 'BufferData': {
|
| 'type': 'Manual',
|
| @@ -1203,8 +1205,8 @@ _FUNCTION_INFO = {
|
| 'result': ['GLenum'],
|
| },
|
| 'Clear': {
|
| - 'type': 'Manual',
|
| - 'cmd_args': 'GLbitfield mask'
|
| + 'decoder_func': 'DoClear',
|
| + 'defer_draws': True,
|
| },
|
| 'ClearColor': {
|
| 'type': 'StateSet',
|
| @@ -1263,9 +1265,11 @@ _FUNCTION_INFO = {
|
| 'CopyTexImage2D': {
|
| 'decoder_func': 'DoCopyTexImage2D',
|
| 'unit_test': False,
|
| + 'defer_reads': True,
|
| },
|
| 'CopyTexSubImage2D': {
|
| 'decoder_func': 'DoCopyTexSubImage2D',
|
| + 'defer_reads': True,
|
| },
|
| 'CreateProgram': {
|
| 'type': 'Create',
|
| @@ -1396,12 +1400,14 @@ _FUNCTION_INFO = {
|
| 'DrawArrays': {
|
| 'type': 'Manual',
|
| 'cmd_args': 'GLenumDrawMode mode, GLint first, GLsizei count',
|
| + 'defer_draws': True,
|
| },
|
| 'DrawElements': {
|
| 'type': 'Manual',
|
| 'cmd_args': 'GLenumDrawMode mode, GLsizei count, '
|
| 'GLenumIndexType type, GLuint index_offset',
|
| - 'client_test': False
|
| + 'client_test': False,
|
| + 'defer_draws': True,
|
| },
|
| 'Enable': {
|
| 'decoder_func': 'DoEnable',
|
| @@ -1794,6 +1800,7 @@ _FUNCTION_INFO = {
|
| 'uint32 pixels_shm_id, uint32 pixels_shm_offset, '
|
| 'uint32 result_shm_id, uint32 result_shm_offset',
|
| 'result': ['uint32'],
|
| + 'defer_reads': True,
|
| },
|
| 'RegisterSharedIdsCHROMIUM': {
|
| 'type': 'Custom',
|
| @@ -2097,6 +2104,7 @@ _FUNCTION_INFO = {
|
| 'extension': True,
|
| 'unit_test': False,
|
| 'pepper_interface': 'InstancedArrays',
|
| + 'defer_draws': True,
|
| },
|
| 'DrawElementsInstancedANGLE': {
|
| 'type': 'Manual',
|
| @@ -2106,6 +2114,7 @@ _FUNCTION_INFO = {
|
| 'unit_test': False,
|
| 'client_test': False,
|
| 'pepper_interface': 'InstancedArrays',
|
| + 'defer_draws': True,
|
| },
|
| 'VertexAttribDivisorANGLE': {
|
| 'type': 'Manual',
|
| @@ -2566,6 +2575,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
|
| "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
|
| file.Write(
|
| " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
|
| + self.WriteHandlerDeferReadWrite(func, file);
|
| if len(func.GetOriginalArgs()) > 0:
|
| last_arg = func.GetLastOriginalArg()
|
| all_but_last_arg = func.GetOriginalArgs()[:-1]
|
| @@ -2585,6 +2595,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
|
| "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
|
| file.Write(
|
| " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
|
| + self.WriteHandlerDeferReadWrite(func, file);
|
| last_arg = func.GetLastOriginalArg()
|
| all_but_last_arg = func.GetOriginalArgs()[:-1]
|
| for arg in all_but_last_arg:
|
| @@ -2603,6 +2614,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
|
| "error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
|
| file.Write(
|
| " uint32 immediate_data_size, const gles2::%s& c) {\n" % func.name)
|
| + self.WriteHandlerDeferReadWrite(func, file);
|
| last_arg = func.GetLastOriginalArg()
|
| all_but_last_arg = func.GetOriginalArgs()[:-1]
|
| for arg in all_but_last_arg:
|
| @@ -2615,6 +2627,20 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
|
| file.Write("}\n")
|
| file.Write("\n")
|
|
|
| + def WriteHandlerDeferReadWrite(self, func, file):
|
| + """Writes the code to handle deferring reads or writes."""
|
| + defer_reads = func.GetInfo('defer_reads')
|
| + defer_draws = func.GetInfo('defer_draws')
|
| + conditions = []
|
| + if defer_draws:
|
| + conditions.append('ShouldDeferDraws()');
|
| + if defer_reads:
|
| + conditions.append('ShouldDeferReads()');
|
| + if not conditions:
|
| + return
|
| + file.Write(" if (%s)\n" % ' || '.join(conditions))
|
| + file.Write(" return error::kDeferCommandUntilLater;\n")
|
| +
|
| def WriteValidUnitTest(self, func, file, test, extra = {}):
|
| """Writes a valid unit test."""
|
| if func.GetInfo('expectation') == False:
|
|
|