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

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

Issue 1403483002: Update CopyTexImage2D to do internal format validation in ES3 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix comments#4 and #5 Created 5 years, 2 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "gpu/command_buffer/common/gles2_cmd_format.h" 9 #include "gpu/command_buffer/common/gles2_cmd_format.h"
10 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 10 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
(...skipping 1894 matching lines...) Expand 10 before | Expand all | Expand 10 after
1905 kSharedMemoryOffset); 1905 kSharedMemoryOffset);
1906 DoBindFramebuffer( 1906 DoBindFramebuffer(
1907 GL_READ_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); 1907 GL_READ_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1908 DoFramebufferTexture2D(GL_READ_FRAMEBUFFER, 1908 DoFramebufferTexture2D(GL_READ_FRAMEBUFFER,
1909 GL_COLOR_ATTACHMENT0, 1909 GL_COLOR_ATTACHMENT0,
1910 GL_TEXTURE_2D, 1910 GL_TEXTURE_2D,
1911 kFBOClientTextureId, 1911 kFBOClientTextureId,
1912 kFBOServiceTextureId, 1912 kFBOServiceTextureId,
1913 0, 1913 0,
1914 GL_NO_ERROR); 1914 GL_NO_ERROR);
1915 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(
1916 GL_READ_FRAMEBUFFER,
1917 GL_COLOR_ATTACHMENT0,
1918 GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,
1919 _))
1920 .WillOnce(SetArgPointee<3>(GL_LINEAR))
1921 .RetiresOnSaturation();
1915 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER)) 1922 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
1916 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 1923 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
1917 .RetiresOnSaturation(); 1924 .RetiresOnSaturation();
1918 1925
1919 EXPECT_CALL(*gl_, 1926 EXPECT_CALL(*gl_,
1920 CopyTexImage2D( 1927 CopyTexImage2D(
1921 target, level, internal_format, 0, 0, width, height, border)) 1928 target, level, internal_format, 0, 0, width, height, border))
1922 .Times(1) 1929 .Times(1)
1923 .RetiresOnSaturation(); 1930 .RetiresOnSaturation();
1924 EXPECT_CALL(*gl_, GetError()) 1931 EXPECT_CALL(*gl_, GetError())
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1975 CopyTexImage2D( 1982 CopyTexImage2D(
1976 target, level, internal_format, 0, 0, width, height, border)) 1983 target, level, internal_format, 0, 0, width, height, border))
1977 .Times(0); 1984 .Times(0);
1978 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId); 1985 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
1979 CopyTexImage2D cmd; 1986 CopyTexImage2D cmd;
1980 cmd.Init(target, level, internal_format, 0, 0, width, height); 1987 cmd.Init(target, level, internal_format, 0, 0, width, height);
1981 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 1988 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
1982 EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); 1989 EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
1983 } 1990 }
1984 1991
1992 TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_Float) {
1993 const GLuint kFBOClientTextureId = 4100;
1994 const GLuint kFBOServiceTextureId = 4101;
1995
1996 GLenum target = GL_TEXTURE_2D;
1997 GLint level = 0;
1998 GLenum internal_format = GL_RG16F;
1999 GLenum format = GL_RG;
2000 GLenum type = GL_HALF_FLOAT;
2001 GLsizei width = 16;
2002 GLsizei height = 8;
2003 GLint border = 0;
2004
2005 EXPECT_CALL(*gl_, GenTextures(_, _))
2006 .WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
2007 .RetiresOnSaturation();
2008 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
2009
2010 DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
2011 DoTexImage2D(GL_TEXTURE_2D,
2012 level,
2013 internal_format,
2014 width,
2015 height,
2016 0,
2017 format,
2018 type,
2019 kSharedMemoryId,
2020 kSharedMemoryOffset);
2021 DoBindFramebuffer(
2022 GL_READ_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
2023 DoFramebufferTexture2D(GL_READ_FRAMEBUFFER,
2024 GL_COLOR_ATTACHMENT0,
2025 GL_TEXTURE_2D,
2026 kFBOClientTextureId,
2027 kFBOServiceTextureId,
2028 0,
2029 GL_NO_ERROR);
2030 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(
2031 GL_READ_FRAMEBUFFER,
2032 GL_COLOR_ATTACHMENT0,
2033 GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,
2034 _))
2035 .WillOnce(SetArgPointee<3>(GL_LINEAR))
2036 .RetiresOnSaturation();
2037 EXPECT_CALL(*gl_,
2038 CopyTexImage2D(
2039 target, level, internal_format, 0, 0, width, height, border))
2040 .Times(0);
2041 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2042 CopyTexImage2D cmd;
2043 cmd.Init(target, level, internal_format, 0, 0, width, height);
2044 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2045 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
2046 }
2047
2048 TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_Integer) {
2049 const GLuint kFBOClientTextureId = 4100;
2050 const GLuint kFBOServiceTextureId = 4101;
2051
2052 GLenum target = GL_TEXTURE_2D;
2053 GLint level = 0;
2054 GLenum internal_format = GL_RG8I;
2055 GLenum format = GL_RG_INTEGER;
2056 GLenum type = GL_UNSIGNED_BYTE;
2057 GLsizei width = 16;
2058 GLsizei height = 8;
2059 GLint border = 0;
2060
2061 EXPECT_CALL(*gl_, GenTextures(_, _))
2062 .WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
2063 .RetiresOnSaturation();
2064 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
2065
2066 DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
2067 DoTexImage2D(GL_TEXTURE_2D,
2068 level,
2069 GL_RG8UI,
2070 width,
2071 height,
2072 0,
2073 format,
2074 type,
2075 kSharedMemoryId,
2076 kSharedMemoryOffset);
2077 DoBindFramebuffer(
2078 GL_READ_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
2079 DoFramebufferTexture2D(GL_READ_FRAMEBUFFER,
2080 GL_COLOR_ATTACHMENT0,
2081 GL_TEXTURE_2D,
2082 kFBOClientTextureId,
2083 kFBOServiceTextureId,
2084 0,
2085 GL_NO_ERROR);
2086 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(
2087 GL_READ_FRAMEBUFFER,
2088 GL_COLOR_ATTACHMENT0,
2089 GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,
2090 _))
2091 .WillOnce(SetArgPointee<3>(GL_LINEAR))
2092 .RetiresOnSaturation();
2093 EXPECT_CALL(*gl_,
2094 CopyTexImage2D(
2095 target, level, internal_format, 0, 0, width, height, border))
2096 .Times(0);
2097 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2098 CopyTexImage2D cmd;
2099 cmd.Init(target, level, internal_format, 0, 0, width, height);
2100 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2101 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
2102 }
2103
2104 TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_sRGB) {
2105 const GLuint kFBOClientTextureId = 4100;
2106 const GLuint kFBOServiceTextureId = 4101;
2107
2108 GLenum target = GL_TEXTURE_2D;
2109 GLint level = 0;
2110 GLenum internal_format = GL_SRGB8;
2111 GLenum format = GL_RGB;
2112 GLenum type = GL_UNSIGNED_BYTE;
2113 GLsizei width = 16;
2114 GLsizei height = 8;
2115 GLint border = 0;
2116
2117 EXPECT_CALL(*gl_, GenTextures(_, _))
2118 .WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
2119 .RetiresOnSaturation();
2120 GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
2121
2122 DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
2123 DoTexImage2D(GL_TEXTURE_2D,
2124 level,
2125 internal_format,
2126 width,
2127 height,
2128 0,
2129 format,
2130 type,
2131 kSharedMemoryId,
2132 kSharedMemoryOffset);
2133 DoBindFramebuffer(
2134 GL_READ_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
2135 DoFramebufferTexture2D(GL_READ_FRAMEBUFFER,
2136 GL_COLOR_ATTACHMENT0,
2137 GL_TEXTURE_2D,
2138 kFBOClientTextureId,
2139 kFBOServiceTextureId,
2140 0,
2141 GL_NO_ERROR);
2142 EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(
2143 GL_READ_FRAMEBUFFER,
2144 GL_COLOR_ATTACHMENT0,
2145 GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,
2146 _))
2147 .WillOnce(SetArgPointee<3>(GL_LINEAR))
2148 .RetiresOnSaturation();
2149 EXPECT_CALL(*gl_,
2150 CopyTexImage2D(
2151 target, level, internal_format, 0, 0, width, height, border))
2152 .Times(0);
2153 DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
2154 CopyTexImage2D cmd;
2155 cmd.Init(target, level, internal_format, 0, 0, width, height);
2156 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
2157 EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
2158 }
2159
1985 TEST_P(GLES2DecoderManualInitTest, 2160 TEST_P(GLES2DecoderManualInitTest,
1986 UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) { 2161 UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) {
1987 InitState init; 2162 InitState init;
1988 init.extensions = "GL_EXT_framebuffer_multisample"; 2163 init.extensions = "GL_EXT_framebuffer_multisample";
1989 init.bind_generates_resource = true; 2164 init.bind_generates_resource = true;
1990 InitDecoder(init); 2165 InitDecoder(init);
1991 const GLuint kFBOClientTextureId = 4100; 2166 const GLuint kFBOClientTextureId = 4100;
1992 const GLuint kFBOServiceTextureId = 4101; 2167 const GLuint kFBOServiceTextureId = 4101;
1993 2168
1994 // Register a texture id. 2169 // Register a texture id.
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
2589 EXPECT_EQ(1, result->GetNumResults()); 2764 EXPECT_EQ(1, result->GetNumResults());
2590 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 2765 EXPECT_EQ(GL_NO_ERROR, GetGLError());
2591 } 2766 }
2592 2767
2593 // TODO(gman): PixelStorei 2768 // TODO(gman): PixelStorei
2594 2769
2595 // TODO(gman): SwapBuffers 2770 // TODO(gman): SwapBuffers
2596 2771
2597 } // namespace gles2 2772 } // namespace gles2
2598 } // namespace gpu 2773 } // namespace gpu
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698