| 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 7105edf4cbba65287f84f4e57e366b2cc43b3ab5..a3e167436e3e1a1c409389984ef8e1745fa75148 100755
|
| --- a/gpu/command_buffer/build_gles2_cmd_buffer.py
|
| +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
|
| @@ -78,8 +78,7 @@ _CAPABILITY_FLAGS = [
|
| {'name': 'polygon_offset_fill'},
|
| {'name': 'sample_alpha_to_coverage'},
|
| {'name': 'sample_coverage'},
|
| - {'name': 'scissor_test',
|
| - 'state_flag': 'framebuffer_state_.clear_state_dirty'},
|
| + {'name': 'scissor_test'},
|
| {'name': 'stencil_test',
|
| 'state_flag': 'framebuffer_state_.clear_state_dirty'},
|
| ]
|
| @@ -109,10 +108,30 @@ _STATES = {
|
| 'func': 'ColorMask',
|
| 'enum': 'GL_COLOR_WRITEMASK',
|
| 'states': [
|
| - {'name': 'color_mask_red', 'type': 'GLboolean', 'default': 'true'},
|
| - {'name': 'color_mask_green', 'type': 'GLboolean', 'default': 'true'},
|
| - {'name': 'color_mask_blue', 'type': 'GLboolean', 'default': 'true'},
|
| - {'name': 'color_mask_alpha', 'type': 'GLboolean', 'default': 'true'},
|
| + {
|
| + 'name': 'color_mask_red',
|
| + 'type': 'GLboolean',
|
| + 'default': 'true',
|
| + 'cached': True
|
| + },
|
| + {
|
| + 'name': 'color_mask_green',
|
| + 'type': 'GLboolean',
|
| + 'default': 'true',
|
| + 'cached': True
|
| + },
|
| + {
|
| + 'name': 'color_mask_blue',
|
| + 'type': 'GLboolean',
|
| + 'default': 'true',
|
| + 'cached': True
|
| + },
|
| + {
|
| + 'name': 'color_mask_alpha',
|
| + 'type': 'GLboolean',
|
| + 'default': 'true',
|
| + 'cached': True
|
| + },
|
| ],
|
| 'state_flag': 'framebuffer_state_.clear_state_dirty',
|
| },
|
| @@ -262,12 +281,14 @@ _STATES = {
|
| 'type': 'GLuint',
|
| 'enum': 'GL_STENCIL_WRITEMASK',
|
| 'default': '0xFFFFFFFFU',
|
| + 'cached': True,
|
| },
|
| {
|
| 'name': 'stencil_back_writemask',
|
| 'type': 'GLuint',
|
| 'enum': 'GL_STENCIL_BACK_WRITEMASK',
|
| 'default': '0xFFFFFFFFU',
|
| + 'cached': True,
|
| },
|
| ],
|
| },
|
| @@ -411,7 +432,12 @@ _STATES = {
|
| 'func': 'DepthMask',
|
| 'enum': 'GL_DEPTH_WRITEMASK',
|
| 'states': [
|
| - {'name': 'depth_mask', 'type': 'GLboolean', 'default': 'true'},
|
| + {
|
| + 'name': 'depth_mask',
|
| + 'type': 'GLboolean',
|
| + 'default': 'true',
|
| + 'cached': True
|
| + },
|
| ],
|
| 'state_flag': 'framebuffer_state_.clear_state_dirty',
|
| },
|
| @@ -2596,6 +2622,11 @@ def ToUnderscore(input_string):
|
| words = SplitWords(input_string)
|
| return Lower(words)
|
|
|
| +def CachedStateName(item):
|
| + if item.get('cached', False):
|
| + return 'cached_' + item['name']
|
| + return item['name']
|
| +
|
|
|
| class CWriter(object):
|
| """Writes to a file formatting it for Google's style guidelines."""
|
| @@ -2953,8 +2984,32 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
|
|
|
| def WriteServiceUnitTest(self, func, file):
|
| """Writes the service unit test for a command."""
|
| - valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +
|
| + if func.name == 'Enable':
|
| + valid_test = """
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| + SetupExpectationsForEnableDisable(%(gl_args)s, true);
|
| + SpecializedSetup<cmds::%(name)s, 0>(true);
|
| + cmds::%(name)s cmd;
|
| + cmd.Init(%(args)s);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| +}
|
| +"""
|
| + elif func.name == 'Disable':
|
| + valid_test = """
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| + SetupExpectationsForEnableDisable(%(gl_args)s, false);
|
| + SpecializedSetup<cmds::%(name)s, 0>(true);
|
| + cmds::%(name)s cmd;
|
| + cmd.Init(%(args)s);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| +}
|
| +"""
|
| + else:
|
| + valid_test = """
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| cmds::%(name)s cmd;
|
| @@ -2966,7 +3021,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| self.WriteValidUnitTest(func, file, valid_test)
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| @@ -3238,6 +3293,10 @@ class StateSetHandler(TypeHandler):
|
| if 'state_flag' in state:
|
| file.Write(" %s = true;\n" % state['state_flag'])
|
| if not func.GetInfo("no_gl"):
|
| + for ndx,item in enumerate(states):
|
| + if item.get('cached', False):
|
| + file.Write(" state_.%s = %s;\n" %
|
| + (CachedStateName(item), args[ndx].name))
|
| file.Write(" %s(%s);\n" %
|
| (func.GetGLFunctionName(), func.MakeOriginalArgString("")))
|
| file.Write(" }\n")
|
| @@ -3252,7 +3311,7 @@ class StateSetHandler(TypeHandler):
|
| if 'range_checks' in item:
|
| for check_ndx, range_check in enumerate(item['range_checks']):
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) {
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| cmd.Init(%(args)s);
|
| @@ -3724,7 +3783,7 @@ class BindHandler(TypeHandler):
|
|
|
| if len(func.GetOriginalArgs()) == 1:
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| cmds::%(name)s cmd;
|
| @@ -3735,7 +3794,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| """
|
| if func.GetInfo("gen_func"):
|
| valid_test += """
|
| -TEST_F(%(test_name)s, %(name)sValidArgsNewId) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgsNewId) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(kNewServiceId));
|
| EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _))
|
| .WillOnce(SetArgumentPointee<1>(kNewServiceId));
|
| @@ -3753,7 +3812,7 @@ TEST_F(%(test_name)s, %(name)sValidArgsNewId) {
|
| })
|
| else:
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| cmds::%(name)s cmd;
|
| @@ -3764,7 +3823,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| """
|
| if func.GetInfo("gen_func"):
|
| valid_test += """
|
| -TEST_F(%(test_name)s, %(name)sValidArgsNewId) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgsNewId) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(first_gl_arg)s, kNewServiceId));
|
| EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _))
|
| .WillOnce(SetArgumentPointee<1>(kNewServiceId));
|
| @@ -3784,7 +3843,7 @@ TEST_F(%(test_name)s, %(name)sValidArgsNewId) {
|
| })
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| @@ -3971,7 +4030,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
|
| def WriteServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(1, _))
|
| .WillOnce(SetArgumentPointee<1>(kNewServiceId));
|
| GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
|
| @@ -3987,7 +4046,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| 'resource_name': func.GetInfo('resource_type'),
|
| })
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0);
|
| GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_;
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| @@ -4003,7 +4062,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
|
| def WriteImmediateServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(1, _))
|
| .WillOnce(SetArgumentPointee<1>(kNewServiceId));
|
| cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>();
|
| @@ -4020,7 +4079,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| 'resource_name': func.GetInfo('resource_type'),
|
| })
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0);
|
| cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>();
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| @@ -4137,7 +4196,7 @@ class CreateHandler(TypeHandler):
|
| def WriteServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s))
|
| .WillOnce(Return(kNewServiceId));
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| @@ -4156,7 +4215,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| 'resource_type': func.name[6:],
|
| })
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| @@ -4268,7 +4327,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
|
| def WriteServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(
|
| *gl_,
|
| %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId)))
|
| @@ -4288,7 +4347,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| 'upper_resource_name': func.GetInfo('resource_type'),
|
| })
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs) {
|
| GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| @@ -4301,7 +4360,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
|
| def WriteImmediateServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(
|
| *gl_,
|
| %(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId)))
|
| @@ -4321,7 +4380,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| 'upper_resource_name': func.GetInfo('resource_type'),
|
| })
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs) {
|
| cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| GLuint temp = kInvalidClientId;
|
| @@ -4617,7 +4676,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
|
| def WriteServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, GetError())
|
| .WillOnce(Return(GL_NO_ERROR))
|
| .WillOnce(Return(GL_NO_ERROR))
|
| @@ -4654,7 +4713,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| })
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s::Result* result =
|
| @@ -4686,7 +4745,7 @@ class PUTHandler(TypeHandler):
|
| expected_call = ("EXPECT_CALL(*gl_, %%(gl_func_name)s(%s));" %
|
| ", ".join(gl_arg_strings))
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| cmds::%(name)s cmd;
|
| cmd.Init(%(args)s);
|
| @@ -4704,7 +4763,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| self.WriteValidUnitTest(func, file, valid_test, extra)
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| @@ -4718,7 +4777,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| def WriteImmediateServiceUnitTest(self, func, file):
|
| """Writes the service unit test for a command."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| %(data_type)s temp[%(data_count)s] = { %(data_value)s, };
|
| @@ -4748,7 +4807,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| self.WriteValidUnitTest(func, file, valid_test, extra)
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| @@ -4949,7 +5008,7 @@ class PUTnHandler(TypeHandler):
|
| TypeHandler.WriteServiceUnitTest(self, func, file)
|
|
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgsCountTooLarge) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgsCountTooLarge) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| cmds::%(name)s cmd;
|
| @@ -4984,7 +5043,7 @@ TEST_F(%(test_name)s, %(name)sValidArgsCountTooLarge) {
|
| def WriteImmediateServiceUnitTest(self, func, file):
|
| """Overridden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
|
| EXPECT_CALL(
|
| *gl_,
|
| @@ -5015,7 +5074,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| self.WriteValidUnitTest(func, file, valid_test, extra)
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| @@ -5245,7 +5304,7 @@ class PUTXnHandler(TypeHandler):
|
| def WriteServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, %(name)sv(%(local_args)s));
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| cmds::%(name)s cmd;
|
| @@ -5263,7 +5322,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| })
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| EXPECT_CALL(*gl_, %(name)sv(_, _, _).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| @@ -5454,7 +5513,7 @@ class IsHandler(TypeHandler):
|
| def WriteServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| cmds::%(name)s cmd;
|
| @@ -5471,7 +5530,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| })
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| @@ -5484,7 +5543,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
|
| })
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) {
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
|
| SpecializedSetup<cmds::%(name)s, 0>(false);
|
| cmds::%(name)s cmd;
|
| @@ -5653,7 +5712,7 @@ class STRnHandler(TypeHandler):
|
| def WriteServiceUnitTest(self, func, file):
|
| """Overrriden from TypeHandler."""
|
| valid_test = """
|
| -TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sValidArgs) {
|
| const char* kInfo = "hello";
|
| const uint32 kBucketId = 123;
|
| SpecializedSetup<cmds::%(name)s, 0>(true);
|
| @@ -5693,7 +5752,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
|
| self.WriteValidUnitTest(func, file, valid_test, sub)
|
|
|
| invalid_test = """
|
| -TEST_F(%(test_name)s, %(name)sInvalidArgs) {
|
| +TEST_P(%(test_name)s, %(name)sInvalidArgs) {
|
| const uint32 kBucketId = 123;
|
| EXPECT_CALL(*gl_, %(gl_func_name)s(_, _, _, _))
|
| .Times(0);
|
| @@ -7079,14 +7138,45 @@ class GLGenerator(object):
|
| file.Write(" EnableFlags();\n")
|
| for capability in _CAPABILITY_FLAGS:
|
| file.Write(" bool %s;\n" % capability['name'])
|
| + file.Write(" bool cached_%s;\n" % capability['name'])
|
| file.Write("};\n\n")
|
|
|
| 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 item.get('cached', False):
|
| + file.Write("%s cached_%s;\n" % (item['type'], item['name']))
|
| file.Write("\n")
|
|
|
| + file.Write("""
|
| + inline void SetDeviceCapabilityState(GLenum cap, bool enable) {
|
| + switch (cap) {
|
| + """)
|
| + for capability in _CAPABILITY_FLAGS:
|
| + file.Write("""\
|
| + case GL_%s:
|
| + """ % capability['name'].upper())
|
| + file.Write("""\
|
| + if (enable_flags.cached_%(name)s == enable &&
|
| + !ignore_cached_state)
|
| + return;
|
| + enable_flags.cached_%(name)s = enable;
|
| + break;
|
| + """ % capability)
|
| +
|
| + file.Write("""\
|
| + default:
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + if (enable)
|
| + glEnable(cap);
|
| + else
|
| + glDisable(cap);
|
| + }
|
| + """)
|
| +
|
| file.Close()
|
|
|
| def WriteClientContextStateHeader(self, filename):
|
| @@ -7155,6 +7245,9 @@ bool %s::GetStateAs%s(
|
| code.append("%s(%s)" %
|
| (capability['name'],
|
| ('false', 'true')['default' in capability]))
|
| + code.append("cached_%s(%s)" %
|
| + (capability['name'],
|
| + ('false', 'true')['default' in capability]))
|
| file.Write("ContextState::EnableFlags::EnableFlags()\n : %s {\n}\n" %
|
| ",\n ".join(code))
|
| file.Write("\n")
|
| @@ -7164,6 +7257,8 @@ bool %s::GetStateAs%s(
|
| state = _STATES[state_name]
|
| for item in state['states']:
|
| file.Write(" %s = %s;\n" % (item['name'], item['default']))
|
| + if item.get('cached', False):
|
| + file.Write(" cached_%s = %s;\n" % (item['name'], item['default']))
|
| file.Write("}\n")
|
|
|
| file.Write("""
|
| @@ -7173,9 +7268,10 @@ void ContextState::InitCapabilities(const ContextState* prev_state) const {
|
| for capability in _CAPABILITY_FLAGS:
|
| capability_name = capability['name']
|
| if test_prev:
|
| - file.Write(" if (prev_state->enable_flags.%s != enable_flags.%s)\n" %
|
| + file.Write(""" if (prev_state->enable_flags.cached_%s !=
|
| + enable_flags.cached_%s)\n""" %
|
| (capability_name, capability_name))
|
| - file.Write(" EnableDisable(GL_%s, enable_flags.%s);\n" %
|
| + file.Write(" EnableDisable(GL_%s, enable_flags.cached_%s);\n" %
|
| (capability_name.upper(), capability_name))
|
|
|
| file.Write(" if (prev_state) {")
|
| @@ -7200,7 +7296,7 @@ void ContextState::InitState(const ContextState *prev_state) const {
|
| file.Write(" if (")
|
| args = []
|
| for place, item in enumerate(group):
|
| - item_name = item['name']
|
| + item_name = CachedStateName(item)
|
| args.append('%s' % item_name)
|
| if test_prev:
|
| if place > 0:
|
| @@ -7213,20 +7309,22 @@ void ContextState::InitState(const ContextState *prev_state) const {
|
| (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args)))
|
| elif state['type'] == 'NamedParameter':
|
| for item in state['states']:
|
| + item_name = CachedStateName(item)
|
| +
|
| if 'extension_flag' in item:
|
| 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']))
|
| + (item_name, item_name))
|
| file.Write(" gl%s(%s, %s);\n" %
|
| - (state['func'], item['enum'], item['name']))
|
| + (state['func'], item['enum'], item_name))
|
| else:
|
| if test_prev:
|
| file.Write(" if (")
|
| args = []
|
| for place, item in enumerate(state['states']):
|
| - item_name = item['name']
|
| + item_name = CachedStateName(item)
|
| args.append('%s' % item_name)
|
| if test_prev:
|
| if place > 0:
|
| @@ -7329,16 +7427,25 @@ bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) {
|
| for capability in _CAPABILITY_FLAGS:
|
| file.Write(" case GL_%s:\n" % capability['name'].upper())
|
| if 'state_flag' in capability:
|
| - file.Write(""" if (state_.enable_flags.%(name)s != enabled) {
|
| - state_.enable_flags.%(name)s = enabled;
|
| - %(state_flag)s = true;
|
| - }
|
| - return false;
|
| -""" % capability)
|
| +
|
| + file.Write("""\
|
| + state_.enable_flags.%(name)s = enabled;
|
| + if (state_.enable_flags.cached_%(name)s != enabled
|
| + || state_.ignore_cached_state) {
|
| + %(state_flag)s = true;
|
| + }
|
| + return false;
|
| + """ % capability)
|
| else:
|
| - file.Write(""" state_.enable_flags.%(name)s = enabled;
|
| - return true;
|
| -""" % capability)
|
| + file.Write("""\
|
| + state_.enable_flags.%(name)s = enabled;
|
| + if (state_.enable_flags.cached_%(name)s != enabled
|
| + || state_.ignore_cached_state) {
|
| + state_.enable_flags.cached_%(name)s = enabled;
|
| + return true;
|
| + }
|
| + return false;
|
| + """ % capability)
|
| file.Write(""" default:
|
| NOTREACHED();
|
| return false;
|
|
|