| 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 |