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

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

Issue 549201: Implements glGetVertexAttribPointerv (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include <vector> 9 #include <vector>
10 #include <string> 10 #include <string>
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 bool CanAccess(GLuint index); 406 bool CanAccess(GLuint index);
407 407
408 void set_enabled(bool enabled) { 408 void set_enabled(bool enabled) {
409 enabled_ = enabled; 409 enabled_ = enabled;
410 } 410 }
411 411
412 GLuint buffer() const { 412 GLuint buffer() const {
413 return buffer_; 413 return buffer_;
414 } 414 }
415 415
416 GLsizei offset() const {
417 return offset_;
418 }
419
416 void Clear() { 420 void Clear() {
417 buffer_ = 0; 421 buffer_ = 0;
418 SetBufferSize(0); 422 SetBufferSize(0);
419 } 423 }
420 424
421 void SetBufferSize(GLsizeiptr buffer_size) { 425 void SetBufferSize(GLsizeiptr buffer_size) {
422 buffer_size_ = buffer_size; 426 buffer_size_ = buffer_size;
423 if (offset_ > buffer_size || real_stride_ == 0) { 427 if (offset_ > buffer_size || real_stride_ == 0) {
424 num_elements_ = 0; 428 num_elements_ = 0;
425 } else { 429 } else {
(...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after
1719 const void* data = NULL; 1723 const void* data = NULL;
1720 if (data_shm_id != 0 || data_shm_offset != 0) { 1724 if (data_shm_id != 0 || data_shm_offset != 0) {
1721 data = GetSharedMemoryAs<const void*>( 1725 data = GetSharedMemoryAs<const void*>(
1722 data_shm_id, data_shm_offset, image_size); 1726 data_shm_id, data_shm_offset, image_size);
1723 if (!data) { 1727 if (!data) {
1724 return parse_error::kParseOutOfBounds; 1728 return parse_error::kParseOutOfBounds;
1725 } 1729 }
1726 } 1730 }
1727 // TODO(gman): Validate internal_format 1731 // TODO(gman): Validate internal_format
1728 if (!ValidateGLenumTextureTarget(target)) { 1732 if (!ValidateGLenumTextureTarget(target)) {
1729 SetGLError(GL_INVALID_VALUE); 1733 SetGLError(GL_INVALID_ENUM);
1730 return parse_error::kParseNoError; 1734 return parse_error::kParseNoError;
1731 } 1735 }
1732 scoped_array<int8> zero; 1736 scoped_array<int8> zero;
1733 if (!data) { 1737 if (!data) {
1734 zero.reset(new int8[image_size]); 1738 zero.reset(new int8[image_size]);
1735 memset(zero.get(), 0, image_size); 1739 memset(zero.get(), 0, image_size);
1736 data = zero.get(); 1740 data = zero.get();
1737 } 1741 }
1738 glCompressedTexImage2D( 1742 glCompressedTexImage2D(
1739 target, level, internal_format, width, height, border, image_size, data); 1743 target, level, internal_format, width, height, border, image_size, data);
1740 return parse_error::kParseNoError; 1744 return parse_error::kParseNoError;
1741 } 1745 }
1742 1746
1743 parse_error::ParseError GLES2DecoderImpl::HandleCompressedTexImage2DImmediate( 1747 parse_error::ParseError GLES2DecoderImpl::HandleCompressedTexImage2DImmediate(
1744 uint32 immediate_data_size, const gles2::CompressedTexImage2DImmediate& c) { 1748 uint32 immediate_data_size, const gles2::CompressedTexImage2DImmediate& c) {
1745 GLenum target = static_cast<GLenum>(c.target); 1749 GLenum target = static_cast<GLenum>(c.target);
1746 GLint level = static_cast<GLint>(c.level); 1750 GLint level = static_cast<GLint>(c.level);
1747 GLenum internal_format = static_cast<GLenum>(c.internalformat); 1751 GLenum internal_format = static_cast<GLenum>(c.internalformat);
1748 GLsizei width = static_cast<GLsizei>(c.width); 1752 GLsizei width = static_cast<GLsizei>(c.width);
1749 GLsizei height = static_cast<GLsizei>(c.height); 1753 GLsizei height = static_cast<GLsizei>(c.height);
1750 GLint border = static_cast<GLint>(c.border); 1754 GLint border = static_cast<GLint>(c.border);
1751 GLsizei image_size = static_cast<GLsizei>(c.imageSize); 1755 GLsizei image_size = static_cast<GLsizei>(c.imageSize);
1752 const void* data = GetImmediateDataAs<const void*>( 1756 const void* data = GetImmediateDataAs<const void*>(
1753 c, image_size, immediate_data_size); 1757 c, image_size, immediate_data_size);
1754 if (!data) { 1758 if (!data) {
1755 return parse_error::kParseOutOfBounds; 1759 return parse_error::kParseOutOfBounds;
1756 } 1760 }
1757 // TODO(gman): Validate internal_format 1761 // TODO(gman): Validate internal_format
1758 if (!ValidateGLenumTextureTarget(target)) { 1762 if (!ValidateGLenumTextureTarget(target)) {
1759 SetGLError(GL_INVALID_VALUE); 1763 SetGLError(GL_INVALID_ENUM);
1760 return parse_error::kParseNoError; 1764 return parse_error::kParseNoError;
1761 } 1765 }
1762 glCompressedTexImage2D( 1766 glCompressedTexImage2D(
1763 target, level, internal_format, width, height, border, image_size, data); 1767 target, level, internal_format, width, height, border, image_size, data);
1764 return parse_error::kParseNoError; 1768 return parse_error::kParseNoError;
1765 } 1769 }
1766 1770
1767 parse_error::ParseError GLES2DecoderImpl::HandleTexImage2D( 1771 parse_error::ParseError GLES2DecoderImpl::HandleTexImage2D(
1768 uint32 immediate_data_size, const gles2::TexImage2D& c) { 1772 uint32 immediate_data_size, const gles2::TexImage2D& c) {
1769 GLenum target = static_cast<GLenum>(c.target); 1773 GLenum target = static_cast<GLenum>(c.target);
(...skipping 13 matching lines...) Expand all
1783 pixels = GetSharedMemoryAs<const void*>( 1787 pixels = GetSharedMemoryAs<const void*>(
1784 pixels_shm_id, pixels_shm_offset, pixels_size); 1788 pixels_shm_id, pixels_shm_offset, pixels_size);
1785 if (!pixels) { 1789 if (!pixels) {
1786 return parse_error::kParseOutOfBounds; 1790 return parse_error::kParseOutOfBounds;
1787 } 1791 }
1788 } 1792 }
1789 if (!ValidateGLenumTextureTarget(target) || 1793 if (!ValidateGLenumTextureTarget(target) ||
1790 !ValidateGLenumTextureFormat(internal_format) || 1794 !ValidateGLenumTextureFormat(internal_format) ||
1791 !ValidateGLenumTextureFormat(format) || 1795 !ValidateGLenumTextureFormat(format) ||
1792 !ValidateGLenumPixelType(type)) { 1796 !ValidateGLenumPixelType(type)) {
1793 SetGLError(GL_INVALID_VALUE); 1797 SetGLError(GL_INVALID_ENUM);
1794 return parse_error::kParseNoError; 1798 return parse_error::kParseNoError;
1795 } 1799 }
1796 scoped_array<int8> zero; 1800 scoped_array<int8> zero;
1797 if (!pixels) { 1801 if (!pixels) {
1798 zero.reset(new int8[pixels_size]); 1802 zero.reset(new int8[pixels_size]);
1799 memset(zero.get(), 0, pixels_size); 1803 memset(zero.get(), 0, pixels_size);
1800 pixels = zero.get(); 1804 pixels = zero.get();
1801 } 1805 }
1802 glTexImage2D( 1806 glTexImage2D(
1803 target, level, internal_format, width, height, border, format, type, 1807 target, level, internal_format, width, height, border, format, type,
(...skipping 15 matching lines...) Expand all
1819 width, height, format, type, unpack_alignment_); 1823 width, height, format, type, unpack_alignment_);
1820 const void* pixels = GetImmediateDataAs<const void*>( 1824 const void* pixels = GetImmediateDataAs<const void*>(
1821 c, size, immediate_data_size); 1825 c, size, immediate_data_size);
1822 if (!pixels) { 1826 if (!pixels) {
1823 return parse_error::kParseOutOfBounds; 1827 return parse_error::kParseOutOfBounds;
1824 } 1828 }
1825 if (!ValidateGLenumTextureTarget(target) || 1829 if (!ValidateGLenumTextureTarget(target) ||
1826 !ValidateGLenumTextureFormat(internal_format) || 1830 !ValidateGLenumTextureFormat(internal_format) ||
1827 !ValidateGLenumTextureFormat(format) || 1831 !ValidateGLenumTextureFormat(format) ||
1828 !ValidateGLenumPixelType(type)) { 1832 !ValidateGLenumPixelType(type)) {
1829 SetGLError(GL_INVALID_VALUE); 1833 SetGLError(GL_INVALID_ENUM);
1830 return parse_error::kParseNoError; 1834 return parse_error::kParseNoError;
1831 } 1835 }
1832 glTexImage2D( 1836 glTexImage2D(
1833 target, level, internal_format, width, height, border, format, type, 1837 target, level, internal_format, width, height, border, format, type,
1834 pixels); 1838 pixels);
1835 return parse_error::kParseNoError; 1839 return parse_error::kParseNoError;
1836 } 1840 }
1837 1841
1838 parse_error::ParseError GLES2DecoderImpl::HandleGetVertexAttribPointerv( 1842 parse_error::ParseError GLES2DecoderImpl::HandleGetVertexAttribPointerv(
1839 uint32 immediate_data_size, const gles2::GetVertexAttribPointerv& c) { 1843 uint32 immediate_data_size, const gles2::GetVertexAttribPointerv& c) {
1840 // TODO(gman): Implement. 1844 GLuint index = static_cast<GLuint>(c.index);
1845 GLenum pname = static_cast<GLenum>(c.pname);
1846 SizedResult* result = GetSharedMemoryAs<SizedResult*>(
1847 c.pointer_shm_id, c.pointer_shm_offset, sizeof(SizedResult));
1848 if (!result) {
1849 return parse_error::kParseOutOfBounds;
1850 }
1851 result->size = 0;
1852 if (!ValidateGLenumVertexPointer(pname)) {
1853 SetGLError(GL_INVALID_ENUM);
1854 return parse_error::kParseNoError;
1855 }
1856 if (index >= max_vertex_attribs_) {
1857 SetGLError(GL_INVALID_VALUE);
1858 return parse_error::kParseNoError;
1859 }
1860 result->size = sizeof(GLuint);
1861 *result->GetDataAs<GLuint*>() = vertex_attrib_infos_[index].offset();
1841 return parse_error::kParseNoError; 1862 return parse_error::kParseNoError;
1842 } 1863 }
1843 1864
1844 parse_error::ParseError GLES2DecoderImpl::HandleGetUniformiv( 1865 parse_error::ParseError GLES2DecoderImpl::HandleGetUniformiv(
1845 uint32 immediate_data_size, const gles2::GetUniformiv& c) { 1866 uint32 immediate_data_size, const gles2::GetUniformiv& c) {
1846 // TODO(gman): Implement. 1867 // TODO(gman): Implement.
1868 NOTREACHED();
1847 return parse_error::kParseNoError; 1869 return parse_error::kParseNoError;
1848 } 1870 }
1849 1871
1850 parse_error::ParseError GLES2DecoderImpl::HandleGetUniformfv( 1872 parse_error::ParseError GLES2DecoderImpl::HandleGetUniformfv(
1851 uint32 immediate_data_size, const gles2::GetUniformfv& c) { 1873 uint32 immediate_data_size, const gles2::GetUniformfv& c) {
1852 // TODO(gman): Implement. 1874 // TODO(gman): Implement.
1875 NOTREACHED();
1853 return parse_error::kParseNoError; 1876 return parse_error::kParseNoError;
1854 } 1877 }
1855 1878
1856 parse_error::ParseError GLES2DecoderImpl::HandleGetShaderPrecisionFormat( 1879 parse_error::ParseError GLES2DecoderImpl::HandleGetShaderPrecisionFormat(
1857 uint32 immediate_data_size, const gles2::GetShaderPrecisionFormat& c) { 1880 uint32 immediate_data_size, const gles2::GetShaderPrecisionFormat& c) {
1858 // TODO(gman): Implement. 1881 // TODO(gman): Implement.
1882 NOTREACHED();
1859 return parse_error::kParseNoError; 1883 return parse_error::kParseNoError;
1860 } 1884 }
1861 1885
1862 parse_error::ParseError GLES2DecoderImpl::HandleGetAttachedShaders( 1886 parse_error::ParseError GLES2DecoderImpl::HandleGetAttachedShaders(
1863 uint32 immediate_data_size, const gles2::GetAttachedShaders& c) { 1887 uint32 immediate_data_size, const gles2::GetAttachedShaders& c) {
1864 // TODO(gman): Implement. 1888 // TODO(gman): Implement.
1889 NOTREACHED();
1865 return parse_error::kParseNoError; 1890 return parse_error::kParseNoError;
1866 } 1891 }
1867 1892
1868 parse_error::ParseError GLES2DecoderImpl::HandleGetActiveUniform( 1893 parse_error::ParseError GLES2DecoderImpl::HandleGetActiveUniform(
1869 uint32 immediate_data_size, const gles2::GetActiveUniform& c) { 1894 uint32 immediate_data_size, const gles2::GetActiveUniform& c) {
1870 // TODO(gman): Implement. 1895 // TODO(gman): Implement.
1896 NOTREACHED();
1871 return parse_error::kParseNoError; 1897 return parse_error::kParseNoError;
1872 } 1898 }
1873 1899
1874 parse_error::ParseError GLES2DecoderImpl::HandleGetActiveAttrib( 1900 parse_error::ParseError GLES2DecoderImpl::HandleGetActiveAttrib(
1875 uint32 immediate_data_size, const gles2::GetActiveAttrib& c) { 1901 uint32 immediate_data_size, const gles2::GetActiveAttrib& c) {
1876 // TODO(gman): Implement. 1902 // TODO(gman): Implement.
1903 NOTREACHED();
1877 return parse_error::kParseNoError; 1904 return parse_error::kParseNoError;
1878 } 1905 }
1879 1906
1880 // Include the auto-generated part of this file. We split this because it means 1907 // Include the auto-generated part of this file. We split this because it means
1881 // we can easily edit the non-auto generated parts right here in this file 1908 // we can easily edit the non-auto generated parts right here in this file
1882 // instead of having to edit some template or the code generator. 1909 // instead of having to edit some template or the code generator.
1883 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 1910 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
1884 1911
1885 } // namespace gles2 1912 } // namespace gles2
1886 } // namespace gpu 1913 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/common/gles2_cmd_format.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698