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

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

Issue 2142353002: Validate fbo color image format and fragment shader output variable type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Created 4 years, 5 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 <limits.h> 7 #include <limits.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 1868 matching lines...) Expand 10 before | Expand all | Expand 10 after
1879 DoBindFramebuffer( 1879 DoBindFramebuffer(
1880 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); 1880 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1881 DoBindRenderbuffer( 1881 DoBindRenderbuffer(
1882 GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId); 1882 GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
1883 DoRenderbufferStorage( 1883 DoRenderbufferStorage(
1884 GL_RENDERBUFFER, GL_RGBA8I, GL_RGBA8I, 1, 1, GL_NO_ERROR); 1884 GL_RENDERBUFFER, GL_RGBA8I, GL_RGBA8I, 1, 1, GL_NO_ERROR);
1885 DoFramebufferRenderbuffer( 1885 DoFramebufferRenderbuffer(
1886 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 1886 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
1887 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR); 1887 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
1888 1888
1889 // TODO(zmo): Set up expectations for the path where the attachment isn't
1890 // marked as cleared.
1891 Framebuffer* framebuffer =
1892 group().framebuffer_manager()->GetFramebuffer(client_framebuffer_id_);
1893 framebuffer->MarkAttachmentAsCleared(
1894 group().renderbuffer_manager(), nullptr, GL_COLOR_ATTACHMENT0, true);
1895
1889 cmds::ClearBufferivImmediate& cmd = 1896 cmds::ClearBufferivImmediate& cmd =
1890 *GetImmediateAs<cmds::ClearBufferivImmediate>(); 1897 *GetImmediateAs<cmds::ClearBufferivImmediate>();
1891 GLint temp[4] = { 0 }; 1898 GLint temp[4] = { 0 };
1892 cmd.Init(GL_COLOR, 0, &temp[0]); 1899 cmd.Init(GL_COLOR, 0, &temp[0]);
1893 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER)) 1900 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER))
1894 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 1901 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
1895 .RetiresOnSaturation(); 1902 .RetiresOnSaturation();
1896 SetupExpectationsForApplyingDirtyState( 1903 SetupExpectationsForApplyingDirtyState(
1897 false, false, false, 0x1111, false, false, 0, 0, false); 1904 false, false, false, 0x1111, false, false, 0, 0, false);
1898 EXPECT_CALL(*gl_, ClearBufferiv( 1905 EXPECT_CALL(*gl_, ClearBufferiv(
1899 GL_COLOR, 0, 1906 GL_COLOR, 0,
1900 reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd)))); 1907 reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
1901 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); 1908 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
1902 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 1909 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1903 } 1910 }
1904 1911
1905 TEST_P(GLES3DecoderTest, ClearBufferuivImmediateValidArgs) { 1912 TEST_P(GLES3DecoderTest, ClearBufferuivImmediateValidArgs) {
1906 DoBindFramebuffer( 1913 DoBindFramebuffer(
1907 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); 1914 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1908 DoBindRenderbuffer( 1915 DoBindRenderbuffer(
1909 GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId); 1916 GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
1910 DoRenderbufferStorage( 1917 DoRenderbufferStorage(
1911 GL_RENDERBUFFER, GL_RGBA8UI, GL_RGBA8UI, 1, 1, GL_NO_ERROR); 1918 GL_RENDERBUFFER, GL_RGBA8UI, GL_RGBA8UI, 1, 1, GL_NO_ERROR);
1912 DoFramebufferRenderbuffer( 1919 DoFramebufferRenderbuffer(
1913 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, 1920 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
1914 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR); 1921 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
1915 1922
1923 // TODO(zmo): Set up expectations for the path where the attachment isn't
1924 // marked as cleared.
1925 Framebuffer* framebuffer =
1926 group().framebuffer_manager()->GetFramebuffer(client_framebuffer_id_);
1927 framebuffer->MarkAttachmentAsCleared(
1928 group().renderbuffer_manager(), nullptr, GL_COLOR_ATTACHMENT0, true);
1929
1916 cmds::ClearBufferuivImmediate& cmd = 1930 cmds::ClearBufferuivImmediate& cmd =
1917 *GetImmediateAs<cmds::ClearBufferuivImmediate>(); 1931 *GetImmediateAs<cmds::ClearBufferuivImmediate>();
1918 GLuint temp[4] = { 0u }; 1932 GLuint temp[4] = { 0u };
1919 cmd.Init(GL_COLOR, 0, &temp[0]); 1933 cmd.Init(GL_COLOR, 0, &temp[0]);
1920 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER)) 1934 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER))
1921 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)) 1935 .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
1922 .RetiresOnSaturation(); 1936 .RetiresOnSaturation();
1923 SetupExpectationsForApplyingDirtyState( 1937 SetupExpectationsForApplyingDirtyState(
1924 false, false, false, 0x1111, false, false, 0, 0, false); 1938 false, false, false, 0x1111, false, false, 0, 0, false);
1925 EXPECT_CALL(*gl_, ClearBufferuiv( 1939 EXPECT_CALL(*gl_, ClearBufferuiv(
1926 GL_COLOR, 0, 1940 GL_COLOR, 0,
1927 reinterpret_cast<GLuint*>( 1941 reinterpret_cast<GLuint*>(
1928 ImmediateDataAddress(&cmd)))); 1942 ImmediateDataAddress(&cmd))));
1929 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp))); 1943 EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
1930 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 1944 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1931 } 1945 }
1932 1946
1933 TEST_P(GLES3DecoderTest, ClearBufferfvImmediateValidArgs) { 1947 TEST_P(GLES3DecoderTest, ClearBufferfvImmediateValidArgs) {
1934 DoBindFramebuffer( 1948 DoBindFramebuffer(
1935 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); 1949 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1936 DoBindRenderbuffer( 1950 DoBindRenderbuffer(
1937 GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId); 1951 GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
1938 DoRenderbufferStorage( 1952 DoRenderbufferStorage(
1939 GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F, 1953 GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT32F,
1940 1, 1, GL_NO_ERROR); 1954 1, 1, GL_NO_ERROR);
1941 DoFramebufferRenderbuffer( 1955 DoFramebufferRenderbuffer(
1942 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 1956 GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
1943 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR); 1957 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
1944 1958
1959 // TODO(zmo): Set up expectations for the path where the attachment isn't
1960 // marked as cleared.
1961 Framebuffer* framebuffer =
1962 group().framebuffer_manager()->GetFramebuffer(client_framebuffer_id_);
1963 framebuffer->MarkAttachmentAsCleared(
1964 group().renderbuffer_manager(), nullptr, GL_DEPTH_ATTACHMENT, true);
1965
1945 Enable cmd_enable; 1966 Enable cmd_enable;
1946 cmd_enable.Init(GL_DEPTH_TEST); 1967 cmd_enable.Init(GL_DEPTH_TEST);
1947 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable)); 1968 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable));
1948 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 1969 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1949 1970
1950 cmds::ClearBufferfvImmediate& cmd = 1971 cmds::ClearBufferfvImmediate& cmd =
1951 *GetImmediateAs<cmds::ClearBufferfvImmediate>(); 1972 *GetImmediateAs<cmds::ClearBufferfvImmediate>();
1952 GLfloat temp[4] = { 1.0f }; 1973 GLfloat temp[4] = { 1.0f };
1953 cmd.Init(GL_DEPTH, 0, &temp[0]); 1974 cmd.Init(GL_DEPTH, 0, &temp[0]);
1954 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER)) 1975 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER))
(...skipping 14 matching lines...) Expand all
1969 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId); 1990 GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
1970 DoBindRenderbuffer( 1991 DoBindRenderbuffer(
1971 GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId); 1992 GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
1972 DoRenderbufferStorage( 1993 DoRenderbufferStorage(
1973 GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8, 1994 GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, GL_DEPTH24_STENCIL8,
1974 1, 1, GL_NO_ERROR); 1995 1, 1, GL_NO_ERROR);
1975 DoFramebufferRenderbuffer( 1996 DoFramebufferRenderbuffer(
1976 GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 1997 GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
1977 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR); 1998 client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
1978 1999
2000 // TODO(zmo): Set up expectations for the path where the attachment isn't
2001 // marked as cleared.
2002 Framebuffer* framebuffer =
2003 group().framebuffer_manager()->GetFramebuffer(client_framebuffer_id_);
2004 framebuffer->MarkAttachmentAsCleared(group().renderbuffer_manager(), nullptr,
2005 GL_DEPTH_STENCIL_ATTACHMENT, true);
2006
1979 Enable cmd_enable; 2007 Enable cmd_enable;
1980 cmd_enable.Init(GL_STENCIL_TEST); 2008 cmd_enable.Init(GL_STENCIL_TEST);
1981 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable)); 2009 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable));
1982 cmd_enable.Init(GL_DEPTH_TEST); 2010 cmd_enable.Init(GL_DEPTH_TEST);
1983 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable)); 2011 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable));
1984 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 2012 EXPECT_EQ(GL_NO_ERROR, GetGLError());
1985 2013
1986 cmds::ClearBufferfi cmd; 2014 cmds::ClearBufferfi cmd;
1987 cmd.Init(GL_DEPTH_STENCIL, 0, 1.0f, 0); 2015 cmd.Init(GL_DEPTH_STENCIL, 0, 1.0f, 0);
1988 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER)) 2016 EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER))
(...skipping 1336 matching lines...) Expand 10 before | Expand all | Expand 10 after
3325 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); 3353 EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
3326 EXPECT_EQ(GL_NO_ERROR, GetGLError()); 3354 EXPECT_EQ(GL_NO_ERROR, GetGLError());
3327 } 3355 }
3328 3356
3329 // TODO(gman): PixelStorei 3357 // TODO(gman): PixelStorei
3330 3358
3331 // TODO(gman): SwapBuffers 3359 // TODO(gman): SwapBuffers
3332 3360
3333 } // namespace gles2 3361 } // namespace gles2
3334 } // namespace gpu 3362 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gles2_cmd_decoder.cc ('k') | gpu/command_buffer/service/program_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698