| Index: gpu/command_buffer/service/program_manager.cc
|
| diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc
|
| index 7adbbdfea11e2ffdad89eef7bd3080effa36fed9..ca0725533b0a172b70f41b72dd2e2b2dc1f54fc2 100644
|
| --- a/gpu/command_buffer/service/program_manager.cc
|
| +++ b/gpu/command_buffer/service/program_manager.cc
|
| @@ -310,10 +310,6 @@
|
| fragment_output_written_mask_(0u) {
|
| DCHECK(manager_);
|
| manager_->StartTracking(this);
|
| - uint32_t packed_size = (manager_->max_vertex_attribs() + 15) / 16;
|
| - vertex_input_base_type_mask_.resize(packed_size);
|
| - vertex_input_active_mask_.resize(packed_size);
|
| - ClearVertexInputMasks();
|
| }
|
|
|
| void Program::Reset() {
|
| @@ -331,14 +327,8 @@
|
| attrib_location_to_index_map_.clear();
|
| fragment_output_type_mask_ = 0u;
|
| fragment_output_written_mask_ = 0u;
|
| - ClearVertexInputMasks();
|
| -}
|
| -
|
| -void Program::ClearVertexInputMasks() {
|
| - for (uint32_t ii = 0; ii < vertex_input_base_type_mask_.size(); ++ii) {
|
| - vertex_input_base_type_mask_[ii] = 0u;
|
| - vertex_input_active_mask_[ii] = 0u;
|
| - }
|
| + vertex_input_base_type_mask_.clear();
|
| + vertex_input_type_written_mask_.clear();
|
| }
|
|
|
| void Program::UpdateFragmentOutputBaseTypes() {
|
| @@ -380,17 +370,27 @@
|
| }
|
|
|
| void Program::UpdateVertexInputBaseTypes() {
|
| - ClearVertexInputMasks();
|
| - DCHECK_LE(attrib_infos_.size(), manager_->max_vertex_attribs());
|
| + max_vertex_attribs_ = manager_->max_vertex_attribs();
|
| + uint32_t packed_size = max_vertex_attribs_ / 16;
|
| + packed_size += (max_vertex_attribs_ % 16 == 0) ? 0 : 1;
|
| + vertex_input_base_type_mask_.resize(packed_size);
|
| + vertex_input_type_written_mask_.resize(packed_size);
|
| +
|
| + for (uint32_t ii = 0; ii < packed_size; ++ii) {
|
| + vertex_input_type_written_mask_[ii] = 0u;
|
| + vertex_input_base_type_mask_[ii] = 0u;
|
| + }
|
| +
|
| for (size_t ii = 0; ii < attrib_infos_.size(); ++ii) {
|
| + DCHECK(ii < max_vertex_attribs_);
|
| const VertexAttrib& input = attrib_infos_[ii];
|
| if (ProgramManager::HasBuiltInPrefix(input.name)) {
|
| continue;
|
| }
|
| int shift_bits = (input.location % 16) * 2;
|
| - vertex_input_active_mask_[ii / 16] |= 0x3 << shift_bits;
|
| - vertex_input_base_type_mask_[ii / 16] |=
|
| - InputOutputTypeToBaseType(true, input.type) << shift_bits;
|
| + vertex_input_type_written_mask_[ii / 16] |= 0x3 << shift_bits;
|
| + vertex_input_base_type_mask_[ii / 16] |=
|
| + InputOutputTypeToBaseType(true, input.type) << shift_bits;
|
| }
|
| }
|
|
|
|
|