OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "gpu/command_buffer/service/program_manager.h" | 5 #include "gpu/command_buffer/service/program_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 1602 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1613 // | 1613 // |
1614 // We query all the data directly through GL calls, assuming they are | 1614 // We query all the data directly through GL calls, assuming they are |
1615 // cheap through MANGLE. | 1615 // cheap through MANGLE. |
1616 | 1616 |
1617 DCHECK(bucket); | 1617 DCHECK(bucket); |
1618 GLuint program = service_id(); | 1618 GLuint program = service_id(); |
1619 | 1619 |
1620 uint32_t header_size = sizeof(TransformFeedbackVaryingsHeader); | 1620 uint32_t header_size = sizeof(TransformFeedbackVaryingsHeader); |
1621 bucket->SetSize(header_size); // In case we fail. | 1621 bucket->SetSize(header_size); // In case we fail. |
1622 | 1622 |
| 1623 GLenum transform_feedback_buffer_mode = 0; |
| 1624 GLint param = 0; |
| 1625 glGetProgramiv(program, GL_TRANSFORM_FEEDBACK_BUFFER_MODE, ¶m); |
| 1626 transform_feedback_buffer_mode = static_cast<GLenum>(param); |
| 1627 |
1623 uint32_t num_transform_feedback_varyings = 0; | 1628 uint32_t num_transform_feedback_varyings = 0; |
1624 GLint param = GL_FALSE; | 1629 param = GL_FALSE; |
1625 // We assume program is a valid program service id. | 1630 // We assume program is a valid program service id. |
1626 glGetProgramiv(program, GL_LINK_STATUS, ¶m); | 1631 glGetProgramiv(program, GL_LINK_STATUS, ¶m); |
1627 if (param == GL_TRUE) { | 1632 if (param == GL_TRUE) { |
1628 param = 0; | 1633 param = 0; |
1629 glGetProgramiv(program, GL_TRANSFORM_FEEDBACK_VARYINGS, ¶m); | 1634 glGetProgramiv(program, GL_TRANSFORM_FEEDBACK_VARYINGS, ¶m); |
1630 num_transform_feedback_varyings = static_cast<uint32_t>(param); | 1635 num_transform_feedback_varyings = static_cast<uint32_t>(param); |
1631 } | 1636 } |
1632 if (num_transform_feedback_varyings == 0) { | 1637 if (num_transform_feedback_varyings == 0) { |
| 1638 TransformFeedbackVaryingsHeader* header = |
| 1639 bucket->GetDataAs<TransformFeedbackVaryingsHeader*>(0, header_size); |
| 1640 header->transform_feedback_buffer_mode = transform_feedback_buffer_mode; |
1633 return true; | 1641 return true; |
1634 } | 1642 } |
1635 | 1643 |
1636 std::vector<TransformFeedbackVaryingInfo> varyings( | 1644 std::vector<TransformFeedbackVaryingInfo> varyings( |
1637 num_transform_feedback_varyings); | 1645 num_transform_feedback_varyings); |
1638 base::CheckedNumeric<uint32_t> size = sizeof(TransformFeedbackVaryingInfo); | 1646 base::CheckedNumeric<uint32_t> size = sizeof(TransformFeedbackVaryingInfo); |
1639 size *= num_transform_feedback_varyings; | 1647 size *= num_transform_feedback_varyings; |
1640 uint32_t entry_size = size.ValueOrDefault(0); | 1648 uint32_t entry_size = size.ValueOrDefault(0); |
1641 size += header_size; | 1649 size += header_size; |
1642 std::vector<std::string> names(num_transform_feedback_varyings); | 1650 std::vector<std::string> names(num_transform_feedback_varyings); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1676 TransformFeedbackVaryingsHeader* header = | 1684 TransformFeedbackVaryingsHeader* header = |
1677 bucket->GetDataAs<TransformFeedbackVaryingsHeader*>(0, header_size); | 1685 bucket->GetDataAs<TransformFeedbackVaryingsHeader*>(0, header_size); |
1678 TransformFeedbackVaryingInfo* entries = | 1686 TransformFeedbackVaryingInfo* entries = |
1679 bucket->GetDataAs<TransformFeedbackVaryingInfo*>(header_size, entry_size); | 1687 bucket->GetDataAs<TransformFeedbackVaryingInfo*>(header_size, entry_size); |
1680 char* data = bucket->GetDataAs<char*>(header_size + entry_size, data_size); | 1688 char* data = bucket->GetDataAs<char*>(header_size + entry_size, data_size); |
1681 DCHECK(header); | 1689 DCHECK(header); |
1682 DCHECK(entries); | 1690 DCHECK(entries); |
1683 DCHECK(data); | 1691 DCHECK(data); |
1684 | 1692 |
1685 // Copy over data for the header and entries. | 1693 // Copy over data for the header and entries. |
| 1694 header->transform_feedback_buffer_mode = transform_feedback_buffer_mode; |
1686 header->num_transform_feedback_varyings = num_transform_feedback_varyings; | 1695 header->num_transform_feedback_varyings = num_transform_feedback_varyings; |
1687 memcpy(entries, &varyings[0], entry_size); | 1696 memcpy(entries, &varyings[0], entry_size); |
1688 | 1697 |
1689 for (uint32_t ii = 0; ii < num_transform_feedback_varyings; ++ii) { | 1698 for (uint32_t ii = 0; ii < num_transform_feedback_varyings; ++ii) { |
1690 memcpy(data, names[ii].c_str(), names[ii].length() + 1); | 1699 memcpy(data, names[ii].c_str(), names[ii].length() + 1); |
1691 data += names[ii].length() + 1; | 1700 data += names[ii].length() + 1; |
1692 } | 1701 } |
1693 DCHECK_EQ(ComputeOffset(header, data), total_size); | 1702 DCHECK_EQ(ComputeOffset(header, data), total_size); |
1694 return true; | 1703 return true; |
1695 } | 1704 } |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1901 DCHECK(program); | 1910 DCHECK(program); |
1902 program->ClearUniforms(&zero_); | 1911 program->ClearUniforms(&zero_); |
1903 } | 1912 } |
1904 | 1913 |
1905 int32 ProgramManager::MakeFakeLocation(int32 index, int32 element) { | 1914 int32 ProgramManager::MakeFakeLocation(int32 index, int32 element) { |
1906 return index + element * 0x10000; | 1915 return index + element * 0x10000; |
1907 } | 1916 } |
1908 | 1917 |
1909 } // namespace gles2 | 1918 } // namespace gles2 |
1910 } // namespace gpu | 1919 } // namespace gpu |
OLD | NEW |