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

Side by Side Diff: gpu/command_buffer/common/gles2_cmd_utils.cc

Issue 2029803002: Improve CopyTex{Sub}Image2D format validation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: with fix Created 4 years, 6 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 // This file is here so other GLES2 related files can have a common set of 5 // This file is here so other GLES2 related files can have a common set of
6 // includes where appropriate. 6 // includes where appropriate.
7 7
8 #include <sstream> 8 #include <sstream>
9 #include <GLES2/gl2.h> 9 #include <GLES2/gl2.h>
10 #include <GLES2/gl2ext.h> 10 #include <GLES2/gl2ext.h>
(...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 case GL_RG16UI: 1182 case GL_RG16UI:
1183 case GL_RG16I: 1183 case GL_RG16I:
1184 case GL_RG32UI: 1184 case GL_RG32UI:
1185 case GL_RG32I: 1185 case GL_RG32I:
1186 return kRed | kGreen; 1186 return kRed | kGreen;
1187 default: 1187 default:
1188 return 0x0000; 1188 return 0x0000;
1189 } 1189 }
1190 } 1190 }
1191 1191
1192 bool GLES2Util::IsSizedColorFormat(uint32_t internal_format) {
1193 switch (internal_format) {
1194 case GL_ALPHA16F_EXT:
1195 case GL_ALPHA32F_EXT:
1196 case GL_RGB8:
1197 case GL_RGB565:
1198 case GL_RGB16F:
1199 case GL_RGB32F:
1200 case GL_SRGB8:
1201 case GL_RGB8_SNORM:
1202 case GL_R11F_G11F_B10F:
1203 case GL_RGB9_E5:
1204 case GL_RGB8UI:
1205 case GL_RGB8I:
1206 case GL_RGB16UI:
1207 case GL_RGB16I:
1208 case GL_RGB32UI:
1209 case GL_RGB32I:
1210 case GL_BGRA8_EXT:
1211 case GL_RGBA16F:
1212 case GL_RGBA32F:
1213 case GL_RGBA8_OES:
1214 case GL_RGBA4:
1215 case GL_RGB5_A1:
1216 case GL_SRGB8_ALPHA8:
1217 case GL_RGBA8_SNORM:
1218 case GL_RGB10_A2:
1219 case GL_RGBA8UI:
1220 case GL_RGBA8I:
1221 case GL_RGB10_A2UI:
1222 case GL_RGBA16UI:
1223 case GL_RGBA16I:
1224 case GL_RGBA32UI:
1225 case GL_RGBA32I:
1226 case GL_R8:
1227 case GL_R8_SNORM:
1228 case GL_R16F:
1229 case GL_R32F:
1230 case GL_R8UI:
1231 case GL_R8I:
1232 case GL_R16UI:
1233 case GL_R16I:
1234 case GL_R32UI:
1235 case GL_R32I:
1236 case GL_RG8:
1237 case GL_RG8_SNORM:
1238 case GL_RG16F:
1239 case GL_RG32F:
1240 case GL_RG8UI:
1241 case GL_RG8I:
1242 case GL_RG16UI:
1243 case GL_RG16I:
1244 case GL_RG32UI:
1245 case GL_RG32I:
1246 return true;
1247 default:
1248 return false;
1249 }
1250 }
1251
1252 void GLES2Util::GetColorFormatComponentSizes(
1253 uint32_t internal_format, uint32_t type, int* r, int* g, int* b, int* a) {
1254 DCHECK(r && g && b && a);
1255 switch (internal_format) {
1256 case GL_RGB:
1257 switch (type) {
1258 case GL_UNSIGNED_BYTE:
1259 internal_format = GL_RGB8;
1260 break;
1261 case GL_UNSIGNED_SHORT_5_6_5:
1262 internal_format = GL_RGB565;
1263 break;
1264 default:
Corentin Wallez 2016/06/02 21:29:40 All the default cases could be UNREACHABLE()
Zhenyao Mo 2016/06/03 18:29:48 Good idea. Done.
1265 break;
1266 }
1267 break;
1268 case GL_SRGB_EXT:
1269 switch (type) {
1270 case GL_UNSIGNED_BYTE:
1271 internal_format = GL_SRGB8;
1272 break;
1273 default:
1274 break;
1275 }
1276 break;
1277 case GL_BGRA_EXT:
1278 switch (type) {
1279 case GL_UNSIGNED_BYTE:
1280 internal_format = GL_BGRA8_EXT;
1281 break;
1282 default:
1283 break;
1284 }
1285 break;
1286 case GL_RGBA:
1287 switch (type) {
1288 case GL_UNSIGNED_BYTE:
1289 internal_format = GL_RGBA8;
1290 break;
1291 default:
1292 break;
1293 }
1294 break;
1295 case GL_SRGB_ALPHA_EXT:
1296 switch (type) {
1297 case GL_UNSIGNED_BYTE:
1298 internal_format = GL_SRGB8_ALPHA8;
1299 break;
1300 default:
1301 break;
1302 }
1303 break;
1304 default:
1305 break;
1306 }
1307
1308 *r = 0;
1309 *g = 0;
1310 *b = 0;
1311 *a = 0;
1312 switch (internal_format) {
1313 case GL_RGB8_OES:
1314 case GL_SRGB8:
1315 case GL_RGB8_SNORM:
1316 case GL_RGB8UI:
1317 case GL_RGB8I:
1318 *r = 8;
1319 *g = 8;
1320 *b = 8;
1321 break;
1322 case GL_RGB565:
1323 *r = 5;
1324 *g = 6;
1325 *b = 5;
1326 break;
1327 case GL_RGB16F:
1328 case GL_RGB16UI:
1329 case GL_RGB16I:
1330 *r = 16;
1331 *g = 16;
1332 *b = 16;
1333 break;
1334 case GL_RGB32F:
1335 case GL_RGB32UI:
1336 case GL_RGB32I:
1337 *r = 32;
1338 *g = 32;
1339 *b = 32;
1340 break;
1341 case GL_R11F_G11F_B10F:
1342 *r = 11;
1343 *g = 11;
1344 *b = 10;
1345 break;
1346 case GL_RGB9_E5:
1347 *r = 9;
1348 *g = 9;
1349 *b = 9;
1350 break;
1351 case GL_BGRA8_EXT:
1352 case GL_RGBA8:
1353 case GL_SRGB8_ALPHA8:
1354 case GL_RGBA8_SNORM:
1355 case GL_RGBA8UI:
1356 case GL_RGBA8I:
1357 *r = 8;
1358 *g = 8;
1359 *b = 8;
1360 *a = 8;
1361 break;
1362 case GL_RGBA16F_EXT:
1363 case GL_RGBA16UI:
1364 case GL_RGBA16I:
1365 *r = 16;
1366 *g = 16;
1367 *b = 16;
1368 *a = 16;
1369 break;
1370 case GL_RGBA32F_EXT:
1371 case GL_RGBA32UI:
1372 case GL_RGBA32I:
1373 *r = 32;
1374 *g = 32;
1375 *b = 32;
1376 *a = 32;
1377 break;
1378 case GL_RGBA4:
1379 *r = 4;
1380 *g = 4;
1381 *b = 4;
1382 *a = 4;
1383 break;
1384 case GL_RGB5_A1:
1385 *r = 5;
1386 *g = 5;
1387 *b = 5;
1388 *a = 1;
1389 break;
1390 case GL_RGB10_A2:
1391 case GL_RGB10_A2UI:
1392 *r = 10;
1393 *g = 10;
1394 *b = 10;
1395 *a = 2;
1396 break;
1397 case GL_R8:
1398 case GL_R8_SNORM:
1399 case GL_R8UI:
1400 case GL_R8I:
1401 *r = 8;
1402 break;
1403 case GL_R16F:
1404 case GL_R16UI:
1405 case GL_R16I:
1406 *r = 16;
1407 break;
1408 case GL_R32F:
1409 case GL_R32UI:
1410 case GL_R32I:
1411 *r = 32;
1412 break;
1413 case GL_RG8:
1414 case GL_RG8_SNORM:
1415 case GL_RG8UI:
1416 case GL_RG8I:
1417 *r = 8;
1418 *g = 8;
1419 break;
1420 case GL_RG16F:
1421 case GL_RG16UI:
1422 case GL_RG16I:
1423 *r = 16;
1424 *g = 16;
1425 break;
1426 case GL_RG32F:
1427 case GL_RG32UI:
1428 case GL_RG32I:
1429 *r = 32;
1430 *g = 32;
1431 break;
1432 default:
1433 break;
1434 }
1435 }
1436
1192 uint32_t GLES2Util::GetChannelsNeededForAttachmentType( 1437 uint32_t GLES2Util::GetChannelsNeededForAttachmentType(
1193 int type, 1438 int type,
1194 uint32_t max_color_attachments) { 1439 uint32_t max_color_attachments) {
1195 switch (type) { 1440 switch (type) {
1196 case GL_DEPTH_ATTACHMENT: 1441 case GL_DEPTH_ATTACHMENT:
1197 return kDepth; 1442 return kDepth;
1198 case GL_STENCIL_ATTACHMENT: 1443 case GL_STENCIL_ATTACHMENT:
1199 return kStencil; 1444 return kStencil;
1200 case GL_DEPTH_STENCIL_ATTACHMENT: 1445 case GL_DEPTH_STENCIL_ATTACHMENT:
1201 return kDepth | kStencil; 1446 return kDepth | kStencil;
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
1519 } 1764 }
1520 1765
1521 return true; 1766 return true;
1522 } 1767 }
1523 1768
1524 #include "gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h" 1769 #include "gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h"
1525 1770
1526 } // namespace gles2 1771 } // namespace gles2
1527 } // namespace gpu 1772 } // namespace gpu
1528 1773
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698