Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(497)

Side by Side Diff: gpu/command_buffer/service/program_manager.cc

Issue 1341133002: Add GL_TRANSFORM_FEEDBACK_BUFFER_MODE to GetProgramiv query. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@uniform
Patch Set: rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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, &param);
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, &param); 1631 glGetProgramiv(program, GL_LINK_STATUS, &param);
1627 if (param == GL_TRUE) { 1632 if (param == GL_TRUE) {
1628 param = 0; 1633 param = 0;
1629 glGetProgramiv(program, GL_TRANSFORM_FEEDBACK_VARYINGS, &param); 1634 glGetProgramiv(program, GL_TRANSFORM_FEEDBACK_VARYINGS, &param);
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698