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

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: 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 *r = 0;
1256 *g = 0;
1257 *b = 0;
1258 *a = 0;
1259
1260 // Unsized formats.
1261 switch (internal_format) {
1262 case GL_RGB:
1263 switch (type) {
1264 case GL_UNSIGNED_BYTE:
1265 internal_format = GL_RGB8;
1266 break;
1267 case GL_UNSIGNED_SHORT_5_6_5:
1268 internal_format = GL_RGB565;
1269 break;
1270 case GL_HALF_FLOAT_OES:
1271 internal_format = GL_RGB16F;
1272 break;
1273 case GL_FLOAT:
1274 internal_format = GL_RGB32F;
1275 return;
1276 default:
1277 NOTREACHED();
1278 break;
1279 }
1280 break;
1281 case GL_RGBA:
1282 switch (type) {
1283 case GL_UNSIGNED_BYTE:
1284 internal_format = GL_RGBA8;
1285 break;
1286 case GL_UNSIGNED_SHORT_4_4_4_4:
1287 internal_format = GL_RGBA4;
1288 break;
1289 case GL_UNSIGNED_SHORT_5_5_5_1:
1290 internal_format = GL_RGB5_A1;
1291 break;
1292 case GL_HALF_FLOAT_OES:
1293 internal_format = GL_RGBA16F;
1294 break;
1295 case GL_FLOAT:
1296 internal_format = GL_RGBA32F;
1297 return;
1298 default:
1299 NOTREACHED();
1300 break;
1301 }
1302 break;
1303 case GL_ALPHA:
1304 switch (type) {
1305 case GL_UNSIGNED_BYTE:
1306 *a = 8;
1307 return;
1308 case GL_HALF_FLOAT_OES:
1309 *a = 16;
1310 return;
1311 case GL_FLOAT:
1312 *a = 32;
1313 return;
1314 default:
1315 NOTREACHED();
1316 break;
1317 }
1318 break;
1319 case GL_LUMINANCE:
1320 switch (type) {
1321 case GL_UNSIGNED_BYTE:
1322 // It can be RGBA8, RGB8, RG8, or R8.
1323 // Here we only require R8, which is good enough for validation.
1324 // Same for other types.
1325 internal_format = GL_R8;
1326 break;
1327 case GL_HALF_FLOAT_OES:
1328 internal_format = GL_R16F;
1329 break;
1330 case GL_FLOAT:
1331 internal_format = GL_R32F;
1332 return;
1333 default:
1334 NOTREACHED();
1335 break;
1336 }
1337 break;
1338 case GL_LUMINANCE_ALPHA:
1339 switch (type) {
1340 case GL_UNSIGNED_BYTE:
1341 internal_format = GL_RGBA8;
1342 break;
1343 case GL_HALF_FLOAT_OES:
1344 internal_format = GL_RGBA16F;
1345 break;
1346 case GL_FLOAT:
1347 internal_format = GL_RGBA32F;
1348 return;
1349 default:
1350 NOTREACHED();
1351 break;
1352 }
1353 break;
1354 case GL_RED:
1355 switch (type) {
1356 case GL_UNSIGNED_BYTE:
1357 internal_format = GL_R8;
1358 break;
1359 case GL_HALF_FLOAT_OES:
1360 internal_format = GL_R16F;
1361 break;
1362 case GL_FLOAT:
1363 internal_format = GL_R32F;
1364 return;
1365 default:
1366 NOTREACHED();
1367 break;
1368 }
1369 break;
1370 case GL_RG:
1371 switch (type) {
1372 case GL_UNSIGNED_BYTE:
1373 internal_format = GL_RG8;
1374 break;
1375 case GL_HALF_FLOAT_OES:
1376 internal_format = GL_RG16F;
1377 break;
1378 case GL_FLOAT:
1379 internal_format = GL_RG32F;
1380 return;
1381 default:
1382 NOTREACHED();
1383 break;
1384 }
1385 break;
1386 case GL_SRGB_EXT:
1387 switch (type) {
1388 case GL_UNSIGNED_BYTE:
1389 internal_format = GL_SRGB8;
1390 break;
1391 default:
1392 NOTREACHED();
1393 break;
1394 }
1395 break;
1396 case GL_SRGB_ALPHA_EXT:
1397 switch (type) {
1398 case GL_UNSIGNED_BYTE:
1399 internal_format = GL_SRGB8_ALPHA8;
1400 break;
1401 default:
1402 NOTREACHED();
1403 break;
1404 }
1405 break;
1406 case GL_BGRA_EXT:
1407 switch (type) {
1408 case GL_UNSIGNED_BYTE:
1409 internal_format = GL_BGRA8_EXT;
1410 break;
1411 default:
1412 NOTREACHED();
1413 break;
1414 }
1415 break;
1416 default:
1417 break;
1418 }
1419
1420 // Sized formats.
1421 switch (internal_format) {
1422 case GL_RGB8_OES:
1423 case GL_SRGB8:
1424 case GL_RGB8_SNORM:
1425 case GL_RGB8UI:
1426 case GL_RGB8I:
1427 *r = 8;
1428 *g = 8;
1429 *b = 8;
1430 break;
1431 case GL_RGB565:
1432 *r = 5;
1433 *g = 6;
1434 *b = 5;
1435 break;
1436 case GL_RGB16F:
1437 case GL_RGB16UI:
1438 case GL_RGB16I:
1439 *r = 16;
1440 *g = 16;
1441 *b = 16;
1442 break;
1443 case GL_RGB32F:
1444 case GL_RGB32UI:
1445 case GL_RGB32I:
1446 *r = 32;
1447 *g = 32;
1448 *b = 32;
1449 break;
1450 case GL_R11F_G11F_B10F:
1451 *r = 11;
1452 *g = 11;
1453 *b = 10;
1454 break;
1455 case GL_RGB9_E5:
1456 *r = 9;
1457 *g = 9;
1458 *b = 9;
1459 break;
1460 case GL_BGRA8_EXT:
1461 case GL_RGBA8:
1462 case GL_SRGB8_ALPHA8:
1463 case GL_RGBA8_SNORM:
1464 case GL_RGBA8UI:
1465 case GL_RGBA8I:
1466 *r = 8;
1467 *g = 8;
1468 *b = 8;
1469 *a = 8;
1470 break;
1471 case GL_RGBA16F_EXT:
1472 case GL_RGBA16UI:
1473 case GL_RGBA16I:
1474 *r = 16;
1475 *g = 16;
1476 *b = 16;
1477 *a = 16;
1478 break;
1479 case GL_RGBA32F_EXT:
1480 case GL_RGBA32UI:
1481 case GL_RGBA32I:
1482 *r = 32;
1483 *g = 32;
1484 *b = 32;
1485 *a = 32;
1486 break;
1487 case GL_RGBA4:
1488 *r = 4;
1489 *g = 4;
1490 *b = 4;
1491 *a = 4;
1492 break;
1493 case GL_RGB5_A1:
1494 *r = 5;
1495 *g = 5;
1496 *b = 5;
1497 *a = 1;
1498 break;
1499 case GL_RGB10_A2:
1500 case GL_RGB10_A2UI:
1501 *r = 10;
1502 *g = 10;
1503 *b = 10;
1504 *a = 2;
1505 break;
1506 case GL_R8:
1507 case GL_R8_SNORM:
1508 case GL_R8UI:
1509 case GL_R8I:
1510 *r = 8;
1511 break;
1512 case GL_R16F:
1513 case GL_R16UI:
1514 case GL_R16I:
1515 *r = 16;
1516 break;
1517 case GL_R32F:
1518 case GL_R32UI:
1519 case GL_R32I:
1520 *r = 32;
1521 break;
1522 case GL_RG8:
1523 case GL_RG8_SNORM:
1524 case GL_RG8UI:
1525 case GL_RG8I:
1526 *r = 8;
1527 *g = 8;
1528 break;
1529 case GL_RG16F:
1530 case GL_RG16UI:
1531 case GL_RG16I:
1532 *r = 16;
1533 *g = 16;
1534 break;
1535 case GL_RG32F:
1536 case GL_RG32UI:
1537 case GL_RG32I:
1538 *r = 32;
1539 *g = 32;
1540 break;
1541 default:
1542 NOTREACHED();
1543 break;
1544 }
1545 }
1546
1192 uint32_t GLES2Util::GetChannelsNeededForAttachmentType( 1547 uint32_t GLES2Util::GetChannelsNeededForAttachmentType(
1193 int type, 1548 int type,
1194 uint32_t max_color_attachments) { 1549 uint32_t max_color_attachments) {
1195 switch (type) { 1550 switch (type) {
1196 case GL_DEPTH_ATTACHMENT: 1551 case GL_DEPTH_ATTACHMENT:
1197 return kDepth; 1552 return kDepth;
1198 case GL_STENCIL_ATTACHMENT: 1553 case GL_STENCIL_ATTACHMENT:
1199 return kStencil; 1554 return kStencil;
1200 case GL_DEPTH_STENCIL_ATTACHMENT: 1555 case GL_DEPTH_STENCIL_ATTACHMENT:
1201 return kDepth | kStencil; 1556 return kDepth | kStencil;
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
1519 } 1874 }
1520 1875
1521 return true; 1876 return true;
1522 } 1877 }
1523 1878
1524 #include "gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h" 1879 #include "gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h"
1525 1880
1526 } // namespace gles2 1881 } // namespace gles2
1527 } // namespace gpu 1882 } // namespace gpu
1528 1883
OLDNEW
« no previous file with comments | « gpu/command_buffer/common/gles2_cmd_utils.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698