1b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org// 2cec3590a151059813b91b33cd5e000c94f5bccaaGeoff Lang// Copyright (c) 2013-2014 The ANGLE Project Authors. All rights reserved. 3b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org// Use of this source code is governed by a BSD-style license that can be 4b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org// found in the LICENSE file. 5b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org// 6b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 7b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org// formatutils11.cpp: Queries for GL image formats and their translations to D3D11 8b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org// formats. 9b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 10c7a4104957aa1f6fa36e4e9cf65d36b699eb05bdBrandon Jones#include "libGLESv2/renderer/d3d/d3d11/formatutils11.h" 11b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org#include "libGLESv2/renderer/generatemip.h" 12b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org#include "libGLESv2/renderer/loadimage.h" 13fe28ca06248f5b9cf97e0c8678275997cbf6b4daGeoff Lang#include "libGLESv2/renderer/copyimage.h" 1400f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang#include "libGLESv2/renderer/Renderer.h" 157ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill#include "libGLESv2/renderer/copyvertex.h" 16b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 17b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.orgnamespace rx 18b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 19b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 209aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langnamespace d3d11 21b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 22b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 239aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::map<DXGI_FORMAT, GLenum> DXGIToESFormatMap; 24b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 259aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langinline void AddDXGIToESEntry(DXGIToESFormatMap *map, DXGI_FORMAT key, GLenum value) 269aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang{ 279aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang map->insert(std::make_pair(key, value)); 289aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang} 29b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 309aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic DXGIToESFormatMap BuildDXGIToESFormatMap() 31b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 329aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang DXGIToESFormatMap map; 33b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 349aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_UNKNOWN, GL_NONE); 35b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 369aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_A8_UNORM, GL_ALPHA8_EXT); 379aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8_UNORM, GL_R8); 389aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8_UNORM, GL_RG8); 399aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8B8A8_UNORM, GL_RGBA8); 409aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, GL_SRGB8_ALPHA8); 419aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_B8G8R8A8_UNORM, GL_BGRA8_EXT); 42b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 439aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8_SNORM, GL_R8_SNORM); 449aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8_SNORM, GL_RG8_SNORM); 459aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8B8A8_SNORM, GL_RGBA8_SNORM); 46b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 479aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8_UINT, GL_R8UI); 489aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16_UINT, GL_R16UI); 499aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32_UINT, GL_R32UI); 509aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8_UINT, GL_RG8UI); 519aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16G16_UINT, GL_RG16UI); 529aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32_UINT, GL_RG32UI); 539aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32B32_UINT, GL_RGB32UI); 549aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8B8A8_UINT, GL_RGBA8UI); 559aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16G16B16A16_UINT, GL_RGBA16UI); 569aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32B32A32_UINT, GL_RGBA32UI); 57b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 589aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8_SINT, GL_R8I); 599aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16_SINT, GL_R16I); 609aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32_SINT, GL_R32I); 619aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8_SINT, GL_RG8I); 629aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16G16_SINT, GL_RG16I); 639aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32_SINT, GL_RG32I); 649aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32B32_SINT, GL_RGB32I); 659aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R8G8B8A8_SINT, GL_RGBA8I); 669aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16G16B16A16_SINT, GL_RGBA16I); 679aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32B32A32_SINT, GL_RGBA32I); 68b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 699aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R10G10B10A2_UNORM, GL_RGB10_A2); 709aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R10G10B10A2_UINT, GL_RGB10_A2UI); 71b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 729aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16_FLOAT, GL_R16F); 739aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16G16_FLOAT, GL_RG16F); 749aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16G16B16A16_FLOAT, GL_RGBA16F); 75b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 769aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32_FLOAT, GL_R32F); 779aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32_FLOAT, GL_RG32F); 789aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32B32_FLOAT, GL_RGB32F); 799aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G32B32A32_FLOAT, GL_RGBA32F); 80b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 819aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, GL_RGB9_E5); 829aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R11G11B10_FLOAT, GL_R11F_G11F_B10F); 839aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 849aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16_TYPELESS, GL_DEPTH_COMPONENT16); 859aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R16_UNORM, GL_DEPTH_COMPONENT16); 869aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_D16_UNORM, GL_DEPTH_COMPONENT16); 879aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R24G8_TYPELESS, GL_DEPTH24_STENCIL8_OES); 889aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, GL_DEPTH24_STENCIL8_OES); 899aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_D24_UNORM_S8_UINT, GL_DEPTH24_STENCIL8_OES); 909aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32G8X24_TYPELESS, GL_DEPTH32F_STENCIL8); 919aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, GL_DEPTH32F_STENCIL8); 929aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, GL_DEPTH32F_STENCIL8); 939aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_R32_TYPELESS, GL_DEPTH_COMPONENT32F); 949aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_D32_FLOAT, GL_DEPTH_COMPONENT32F); 959aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 969aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_BC1_UNORM, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT); 979aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_BC2_UNORM, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE); 989aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang AddDXGIToESEntry(&map, DXGI_FORMAT_BC3_UNORM, GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE); 99b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 100b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org return map; 101b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 102b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1039aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstruct D3D11FastCopyFormat 104b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 1059aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang GLenum destFormat; 1069aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang GLenum destType; 1079aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang ColorCopyFunction copyFunction; 1089aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 1099aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang D3D11FastCopyFormat(GLenum destFormat, GLenum destType, ColorCopyFunction copyFunction) 1109aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang : destFormat(destFormat), destType(destType), copyFunction(copyFunction) 1119aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang { } 1129aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 1139aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang bool operator<(const D3D11FastCopyFormat& other) const 114b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org { 1159aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return memcmp(this, &other, sizeof(D3D11FastCopyFormat)) < 0; 116b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org } 1179aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang}; 118b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1199aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::multimap<DXGI_FORMAT, D3D11FastCopyFormat> D3D11FastCopyMap; 120b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1219aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic D3D11FastCopyMap BuildFastCopyMap() 122b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 1239aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang D3D11FastCopyMap map; 124b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 125268b6bcd5d415e2169228f4f082e546ac05aa899Geoff Lang map.insert(std::make_pair(DXGI_FORMAT_B8G8R8A8_UNORM, D3D11FastCopyFormat(GL_RGBA, GL_UNSIGNED_BYTE, CopyBGRA8ToRGBA8))); 126d3ff2169bfb788ff64a83987c93084854aee88bfGeoff Lang 1279aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return map; 128b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 129b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1309aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstruct DXGIDepthStencilInfo 131b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 1329aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang unsigned int depthBits; 1339aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang unsigned int depthOffset; 1349aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang unsigned int stencilBits; 1359aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang unsigned int stencilOffset; 1369aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang}; 137b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1389aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::map<DXGI_FORMAT, DXGIDepthStencilInfo> DepthStencilInfoMap; 1399aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::pair<DXGI_FORMAT, DXGIDepthStencilInfo> DepthStencilInfoPair; 140b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1419aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic inline void InsertDXGIDepthStencilInfo(DepthStencilInfoMap *map, DXGI_FORMAT format, unsigned int depthBits, 1429aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang unsigned int depthOffset, unsigned int stencilBits, unsigned int stencilOffset) 1439aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang{ 1449aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang DXGIDepthStencilInfo info; 1459aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.depthBits = depthBits; 1469aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.depthOffset = depthOffset; 1479aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.stencilBits = stencilBits; 1489aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.stencilOffset = stencilOffset; 149b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1509aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang map->insert(std::make_pair(format, info)); 1519aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang} 152b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1539aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic DepthStencilInfoMap BuildDepthStencilInfoMap() 1549aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang{ 1559aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang DepthStencilInfoMap map; 156e4a492be45f39dffaea53c3523064844ee56e41bGeoff Lang 1579aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_R16_TYPELESS, 16, 0, 0, 0); 1589aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_R16_UNORM, 16, 0, 0, 0); 1599aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_D16_UNORM, 16, 0, 0, 0); 160b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1619aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_R24G8_TYPELESS, 24, 0, 8, 24); 1629aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, 24, 0, 8, 24); 1639aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_D24_UNORM_S8_UINT, 24, 0, 8, 24); 164b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1659aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_R32_TYPELESS, 32, 0, 0, 0); 1669aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_R32_FLOAT, 32, 0, 0, 0); 1679aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_D32_FLOAT, 32, 0, 0, 0); 168b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1699aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_R32G8X24_TYPELESS, 32, 0, 8, 32); 1709aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, 32, 0, 8, 32); 1719aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertDXGIDepthStencilInfo(&map, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, 32, 0, 8, 32); 172b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1739aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return map; 1749aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang} 175b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1769aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::map<DXGI_FORMAT, DXGIFormat> DXGIFormatInfoMap; 1779aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 1789aa00bbc5303cf7817d02d04860b044b3d29804dGeoff LangDXGIFormat::DXGIFormat() 1799aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang : pixelBytes(0), 1809aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang blockWidth(0), 1819aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang blockHeight(0), 1829aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang depthBits(0), 1839aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang depthOffset(0), 1849aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang stencilBits(0), 1859aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang stencilOffset(0), 1869aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang internalFormat(GL_NONE), 1879aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang componentType(GL_NONE), 1889aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang mipGenerationFunction(NULL), 1899aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang colorReadFunction(NULL), 1909aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang fastCopyFunctions() 1919aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang{ 1929aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang} 193b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1949aa00bbc5303cf7817d02d04860b044b3d29804dGeoff LangColorCopyFunction DXGIFormat::getFastCopyFunction(GLenum format, GLenum type) const 1959aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang{ 1969aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang FastCopyFunctionMap::const_iterator iter = fastCopyFunctions.find(std::make_pair(format, type)); 1979aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return (iter != fastCopyFunctions.end()) ? iter->second : NULL; 198b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 199b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 2009aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langvoid AddDXGIFormat(DXGIFormatInfoMap *map, DXGI_FORMAT dxgiFormat, GLuint pixelBits, GLuint blockWidth, GLuint blockHeight, 2019aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang GLenum componentType, MipGenerationFunction mipFunc, ColorReadFunction readFunc) 202b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 2039aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang DXGIFormat info; 2049aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.pixelBytes = pixelBits / 8; 2059aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.blockWidth = blockWidth; 2069aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.blockHeight = blockHeight; 207b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 2089aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static const DepthStencilInfoMap dsInfoMap = BuildDepthStencilInfoMap(); 2099aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang DepthStencilInfoMap::const_iterator dsInfoIter = dsInfoMap.find(dxgiFormat); 2109aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang if (dsInfoIter != dsInfoMap.end()) 2119aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang { 2129aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.depthBits = dsInfoIter->second.depthBits; 2139aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.depthOffset = dsInfoIter->second.depthOffset; 2149aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.stencilBits = dsInfoIter->second.stencilBits; 2159aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.stencilOffset = dsInfoIter->second.stencilOffset; 2169aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang } 2179aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang else 2189aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang { 2199aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.depthBits = 0; 2209aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.depthOffset = 0; 2219aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.stencilBits = 0; 2229aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.stencilOffset = 0; 2239aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang } 224ba9d750b929ffd8059cb9692a5bb440d3a050584shannonwoods@chromium.org 2259aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static const DXGIToESFormatMap dxgiToESMap = BuildDXGIToESFormatMap(); 2269aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang DXGIToESFormatMap::const_iterator dxgiToESIter = dxgiToESMap.find(dxgiFormat); 2279aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.internalFormat = (dxgiToESIter != dxgiToESMap.end()) ? dxgiToESIter->second : GL_NONE; 228b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 2299aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.componentType = componentType; 230b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 2319aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.mipGenerationFunction = mipFunc; 2329aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.colorReadFunction = readFunc; 233b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 2349aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static const D3D11FastCopyMap fastCopyMap = BuildFastCopyMap(); 2359aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang std::pair<D3D11FastCopyMap::const_iterator, D3D11FastCopyMap::const_iterator> fastCopyIter = fastCopyMap.equal_range(dxgiFormat); 2369aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang for (D3D11FastCopyMap::const_iterator i = fastCopyIter.first; i != fastCopyIter.second; i++) 2379aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang { 2389aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.fastCopyFunctions.insert(std::make_pair(std::make_pair(i->second.destFormat, i->second.destType), i->second.copyFunction)); 2399aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang } 2409aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 2419aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang map->insert(std::make_pair(dxgiFormat, info)); 2429eeecfc20be089b62310787895870e0284cfb383Jamie Madill} 2439eeecfc20be089b62310787895870e0284cfb383Jamie Madill 2449aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// A map to determine the pixel size and mipmap generation function of a given DXGI format 2459eeecfc20be089b62310787895870e0284cfb383Jamie Madillstatic DXGIFormatInfoMap BuildDXGIFormatInfoMap() 246b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 247b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org DXGIFormatInfoMap map; 248b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 2499aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // | DXGI format |S |W |H |Component Type | Mip generation function | Color read function 250826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_UNKNOWN, 0, 0, 0, GL_NONE, NULL, NULL); 251826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 252826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_A8_UNORM, 8, 1, 1, GL_UNSIGNED_NORMALIZED, GenerateMip<A8>, ReadColor<A8, GLfloat>); 253826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8_UNORM, 8, 1, 1, GL_UNSIGNED_NORMALIZED, GenerateMip<R8>, ReadColor<R8, GLfloat>); 254826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UNORM, 16, 1, 1, GL_UNSIGNED_NORMALIZED, GenerateMip<R8G8>, ReadColor<R8G8, GLfloat>); 255826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM, 32, 1, 1, GL_UNSIGNED_NORMALIZED, GenerateMip<R8G8B8A8>, ReadColor<R8G8B8A8, GLfloat>); 256826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, 32, 1, 1, GL_UNSIGNED_NORMALIZED, GenerateMip<R8G8B8A8>, ReadColor<R8G8B8A8, GLfloat>); 257826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_B8G8R8A8_UNORM, 32, 1, 1, GL_UNSIGNED_NORMALIZED, GenerateMip<B8G8R8A8>, ReadColor<B8G8R8A8, GLfloat>); 258826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 259826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8_SNORM, 8, 1, 1, GL_SIGNED_NORMALIZED, GenerateMip<R8S>, ReadColor<R8S, GLfloat>); 260826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SNORM, 16, 1, 1, GL_SIGNED_NORMALIZED, GenerateMip<R8G8S>, ReadColor<R8G8S, GLfloat>); 261826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SNORM, 32, 1, 1, GL_SIGNED_NORMALIZED, GenerateMip<R8G8B8A8S>, ReadColor<R8G8B8A8S, GLfloat>); 262826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 263826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8_UINT, 8, 1, 1, GL_UNSIGNED_INT, GenerateMip<R8>, ReadColor<R8, GLuint>); 264826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16_UINT, 16, 1, 1, GL_UNSIGNED_INT, GenerateMip<R16>, ReadColor<R16, GLuint>); 265826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32_UINT, 32, 1, 1, GL_UNSIGNED_INT, GenerateMip<R32>, ReadColor<R32, GLuint>); 266826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UINT, 16, 1, 1, GL_UNSIGNED_INT, GenerateMip<R8G8>, ReadColor<R8G8, GLuint>); 267826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UINT, 32, 1, 1, GL_UNSIGNED_INT, GenerateMip<R16G16>, ReadColor<R16G16, GLuint>); 268826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32_UINT, 64, 1, 1, GL_UNSIGNED_INT, GenerateMip<R32G32>, ReadColor<R32G32, GLuint>); 269826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_UINT, 96, 1, 1, GL_UNSIGNED_INT, GenerateMip<R32G32B32>, ReadColor<R32G32B32, GLuint>); 270826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UINT, 32, 1, 1, GL_UNSIGNED_INT, GenerateMip<R8G8B8A8>, ReadColor<R8G8B8A8, GLuint>); 271826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UINT, 64, 1, 1, GL_UNSIGNED_INT, GenerateMip<R16G16B16A16>, ReadColor<R16G16B16A16, GLuint>); 272826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_UINT, 128, 1, 1, GL_UNSIGNED_INT, GenerateMip<R32G32B32A32>, ReadColor<R32G32B32A32, GLuint>); 273826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 274826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8_SINT, 8, 1, 1, GL_INT, GenerateMip<R8S>, ReadColor<R8S, GLint>); 275826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16_SINT, 16, 1, 1, GL_INT, GenerateMip<R16S>, ReadColor<R16S, GLint>); 276826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32_SINT, 32, 1, 1, GL_INT, GenerateMip<R32S>, ReadColor<R32S, GLint>); 277826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SINT, 16, 1, 1, GL_INT, GenerateMip<R8G8S>, ReadColor<R8G8S, GLint>); 278826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SINT, 32, 1, 1, GL_INT, GenerateMip<R16G16S>, ReadColor<R16G16S, GLint>); 279826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32_SINT, 64, 1, 1, GL_INT, GenerateMip<R32G32S>, ReadColor<R32G32S, GLint>); 280826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_SINT, 96, 1, 1, GL_INT, GenerateMip<R32G32B32S>, ReadColor<R32G32B32S, GLint>); 281826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SINT, 32, 1, 1, GL_INT, GenerateMip<R8G8B8A8S>, ReadColor<R8G8B8A8S, GLint>); 282826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SINT, 64, 1, 1, GL_INT, GenerateMip<R16G16B16A16S>, ReadColor<R16G16B16A16S, GLint>); 283826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_SINT, 128, 1, 1, GL_INT, GenerateMip<R32G32B32A32S>, ReadColor<R32G32B32A32S, GLint>); 284826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 285826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UNORM, 32, 1, 1, GL_UNSIGNED_NORMALIZED, GenerateMip<R10G10B10A2>, ReadColor<R10G10B10A2, GLfloat>); 286826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UINT, 32, 1, 1, GL_UNSIGNED_INT, GenerateMip<R10G10B10A2>, ReadColor<R10G10B10A2, GLuint>); 287826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 288826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16_FLOAT, 16, 1, 1, GL_FLOAT, GenerateMip<R16F>, ReadColor<R16F, GLfloat>); 289826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16_FLOAT, 32, 1, 1, GL_FLOAT, GenerateMip<R16G16F>, ReadColor<R16G16F, GLfloat>); 290826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_FLOAT, 64, 1, 1, GL_FLOAT, GenerateMip<R16G16B16A16F>, ReadColor<R16G16B16A16F, GLfloat>); 291826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 292826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT, 32, 1, 1, GL_FLOAT, GenerateMip<R32F>, ReadColor<R32F, GLfloat>); 293826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32_FLOAT, 64, 1, 1, GL_FLOAT, GenerateMip<R32G32F>, ReadColor<R32G32F, GLfloat>); 294826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_FLOAT, 96, 1, 1, GL_FLOAT, NULL, NULL); 295826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_FLOAT, 128, 1, 1, GL_FLOAT, GenerateMip<R32G32B32A32F>, ReadColor<R32G32B32A32F, GLfloat>); 296826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 297826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, 32, 1, 1, GL_FLOAT, GenerateMip<R9G9B9E5>, ReadColor<R9G9B9E5, GLfloat>); 298826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R11G11B10_FLOAT, 32, 1, 1, GL_FLOAT, GenerateMip<R11G11B10F>, ReadColor<R11G11B10F, GLfloat>); 299826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 300826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16_TYPELESS, 16, 1, 1, GL_NONE, NULL, NULL); 301826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, 16, 1, 1, GL_UNSIGNED_NORMALIZED, NULL, NULL); 302826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_D16_UNORM, 16, 1, 1, GL_UNSIGNED_NORMALIZED, NULL, NULL); 303826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R24G8_TYPELESS, 32, 1, 1, GL_NONE, NULL, NULL); 304826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, 32, 1, 1, GL_NONE, NULL, NULL); 305826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_D24_UNORM_S8_UINT, 32, 1, 1, GL_UNSIGNED_INT, NULL, NULL); 306826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32G8X24_TYPELESS, 64, 1, 1, GL_NONE, NULL, NULL); 307826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, 64, 1, 1, GL_NONE, NULL, NULL); 308826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, 64, 1, 1, GL_UNSIGNED_INT, NULL, NULL); 309826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R32_TYPELESS, 32, 1, 1, GL_NONE, NULL, NULL); 310826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT, 32, 1, 1, GL_FLOAT, NULL, NULL); 311826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 312826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_BC1_UNORM, 64, 4, 4, GL_UNSIGNED_NORMALIZED, NULL, NULL); 313826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_BC2_UNORM, 128, 4, 4, GL_UNSIGNED_NORMALIZED, NULL, NULL); 314826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_BC3_UNORM, 128, 4, 4, GL_UNSIGNED_NORMALIZED, NULL, NULL); 315826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 316826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill // Useful formats for vertex buffers 317826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, 16, 1, 1, GL_UNSIGNED_NORMALIZED, NULL, NULL); 318826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16_SNORM, 16, 1, 1, GL_SIGNED_NORMALIZED, NULL, NULL); 319826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UNORM, 32, 1, 1, GL_UNSIGNED_NORMALIZED, NULL, NULL); 320826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SNORM, 32, 1, 1, GL_SIGNED_NORMALIZED, NULL, NULL); 321826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UNORM, 64, 1, 1, GL_UNSIGNED_NORMALIZED, NULL, NULL); 322826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SNORM, 64, 1, 1, GL_SIGNED_NORMALIZED, NULL, NULL); 323b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 324b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org return map; 325b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 326b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 3279aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langconst DXGIFormat &GetDXGIFormatInfo(DXGI_FORMAT format) 32861e49a5cacc894fe2de1273c65374a5e7083a05fGeoff Lang{ 3299eeecfc20be089b62310787895870e0284cfb383Jamie Madill static const DXGIFormatInfoMap infoMap = BuildDXGIFormatInfoMap(); 330b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org DXGIFormatInfoMap::const_iterator iter = infoMap.find(format); 331b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org if (iter != infoMap.end()) 332b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org { 3339aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return iter->second; 334d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang } 335d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang else 336d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang { 3379aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static DXGIFormat defaultInfo; 3389aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return defaultInfo; 339d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang } 340d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang} 341d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang 34200f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Langstruct SwizzleSizeType 34300f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang{ 3449aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang size_t maxComponentSize; 3459aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang GLenum componentType; 34600f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 34700f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang SwizzleSizeType() 3489aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang : maxComponentSize(0), componentType(GL_NONE) 34900f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang { } 35000f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 3519aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang SwizzleSizeType(size_t maxComponentSize, GLenum componentType) 3529aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang : maxComponentSize(maxComponentSize), componentType(componentType) 35300f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang { } 35400f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 35500f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang bool operator<(const SwizzleSizeType& other) const 35600f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang { 3579aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return (maxComponentSize != other.maxComponentSize) ? (maxComponentSize < other.maxComponentSize) 3589aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang : (componentType < other.componentType); 35900f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang } 36000f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang}; 36100f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 36200f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Langstruct SwizzleFormatInfo 36300f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang{ 36400f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang DXGI_FORMAT mTexFormat; 36500f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang DXGI_FORMAT mSRVFormat; 36600f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang DXGI_FORMAT mRTVFormat; 36700f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 36800f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang SwizzleFormatInfo() 36900f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang : mTexFormat(DXGI_FORMAT_UNKNOWN), mSRVFormat(DXGI_FORMAT_UNKNOWN), mRTVFormat(DXGI_FORMAT_UNKNOWN) 37000f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang { } 37100f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 37200f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang SwizzleFormatInfo(DXGI_FORMAT texFormat, DXGI_FORMAT srvFormat, DXGI_FORMAT rtvFormat) 37300f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang : mTexFormat(texFormat), mSRVFormat(srvFormat), mRTVFormat(rtvFormat) 37400f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang { } 37500f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang}; 37600f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 37700f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Langtypedef std::map<SwizzleSizeType, SwizzleFormatInfo> SwizzleInfoMap; 37800f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Langtypedef std::pair<SwizzleSizeType, SwizzleFormatInfo> SwizzleInfoPair; 37900f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 38000f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Langstatic SwizzleInfoMap BuildSwizzleInfoMap() 38100f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang{ 38200f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang SwizzleInfoMap map; 38300f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 38400f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType( 8, GL_UNSIGNED_NORMALIZED), SwizzleFormatInfo(DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM ))); 38567938efc2bd9cae57b2c3e24fb20821dec00a788Geoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(16, GL_UNSIGNED_NORMALIZED), SwizzleFormatInfo(DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM))); 38667938efc2bd9cae57b2c3e24fb20821dec00a788Geoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(24, GL_UNSIGNED_NORMALIZED), SwizzleFormatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT))); 38767938efc2bd9cae57b2c3e24fb20821dec00a788Geoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(32, GL_UNSIGNED_NORMALIZED), SwizzleFormatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT))); 38800f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 38900f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType( 8, GL_SIGNED_NORMALIZED ), SwizzleFormatInfo(DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_R8G8B8A8_SNORM ))); 39000f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 39100f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(16, GL_FLOAT ), SwizzleFormatInfo(DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT))); 39200f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(32, GL_FLOAT ), SwizzleFormatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT))); 39300f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 39400f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType( 8, GL_UNSIGNED_INT ), SwizzleFormatInfo(DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_UINT ))); 39500f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(16, GL_UNSIGNED_INT ), SwizzleFormatInfo(DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_UINT ))); 39600f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(32, GL_UNSIGNED_INT ), SwizzleFormatInfo(DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_UINT ))); 39700f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 39800f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType( 8, GL_INT ), SwizzleFormatInfo(DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_SINT ))); 39900f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(16, GL_INT ), SwizzleFormatInfo(DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_R16G16B16A16_SINT ))); 40000f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang map.insert(SwizzleInfoPair(SwizzleSizeType(32, GL_INT ), SwizzleFormatInfo(DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R32G32B32A32_SINT ))); 40100f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 40200f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang return map; 40300f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang} 4049aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 4050c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Langtypedef std::pair<GLint, InitializeTextureDataFunction> InternalFormatInitializerPair; 4060c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Langtypedef std::map<GLint, InitializeTextureDataFunction> InternalFormatInitializerMap; 4070c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang 4080c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Langstatic InternalFormatInitializerMap BuildInternalFormatInitializerMap() 4090c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang{ 4100c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang InternalFormatInitializerMap map; 4110c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang 41286846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB8, Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF> )); 41386846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB565, Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF> )); 41486846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_SRGB8, Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF> )); 41586846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB16F, Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>)); 41686846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB32F, Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>)); 41786846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB8UI, Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01> )); 41886846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB8I, Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01> )); 41986846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB16UI, Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001> )); 42086846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB16I, Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001> )); 42186846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB32UI, Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000, 0x00000001> )); 42286846e242e61e16d19e7a07492c081ee29a59694Geoff Lang map.insert(InternalFormatInitializerPair(GL_RGB32I, Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000, 0x00000001> )); 4230c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang 4249aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return map; 4259aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang} 4269aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 4279aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// ES3 image loading functions vary based on the internal format and data type given, 4289aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// this map type determines the loading function from the internal format and type supplied 4299aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// to glTex*Image*D and the destination DXGI_FORMAT. Source formats and types are taken from 4309aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// Tables 3.2 and 3.3 of the ES 3 spec. 4319aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::pair<GLenum, LoadImageFunction> TypeLoadFunctionPair; 4329aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::map<GLenum, std::vector<TypeLoadFunctionPair> > D3D11LoadFunctionMap; 4339aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 4349aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic void UnimplementedLoadFunction(size_t width, size_t height, size_t depth, 4359aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 4369aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch) 4379aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang{ 4389aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang UNIMPLEMENTED(); 4399aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang} 4409aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 4419aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic void UnreachableLoadFunction(size_t width, size_t height, size_t depth, 4429aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch, 4439aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch) 4449aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang{ 4459aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang UNREACHABLE(); 4460c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang} 44700f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 4489aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// A helper function to insert data into the D3D11LoadFunctionMap with fewer characters. 4499aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic inline void InsertLoadFunction(D3D11LoadFunctionMap *map, GLenum internalFormat, GLenum type, 4509aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang LoadImageFunction loadFunc) 45100f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang{ 4529aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang (*map)[internalFormat].push_back(TypeLoadFunctionPair(type, loadFunc)); 45300f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang} 45400f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 4559aa00bbc5303cf7817d02d04860b044b3d29804dGeoff LangD3D11LoadFunctionMap BuildD3D11LoadFunctionMap() 45600f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang{ 4579aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang D3D11LoadFunctionMap map; 45880b5a55eafb52a9e72676ce7c91c34ce037f4783Jamie Madill 4599aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // | Internal format | Type | Load function | 4609aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA8, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 4> ); 4619aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB5_A1, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 4> ); 4629aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA4, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 4> ); 4639aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_SRGB8_ALPHA8, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 4> ); 4649aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA8_SNORM, GL_BYTE, LoadToNative<GLbyte, 4> ); 4659aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA4, GL_UNSIGNED_SHORT_4_4_4_4, LoadRGBA4ToRGBA8 ); 4669aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB10_A2, GL_UNSIGNED_INT_2_10_10_10_REV, LoadToNative<GLuint, 1> ); 4679aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB5_A1, GL_UNSIGNED_SHORT_5_5_5_1, LoadRGB5A1ToRGBA8 ); 4689aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB5_A1, GL_UNSIGNED_INT_2_10_10_10_REV, LoadRGB10A2ToRGBA8 ); 4699aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA16F, GL_HALF_FLOAT, LoadToNative<GLhalf, 4> ); 4709aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA16F, GL_HALF_FLOAT_OES, LoadToNative<GLhalf, 4> ); 4719aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA32F, GL_FLOAT, LoadToNative<GLfloat, 4> ); 4729aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA16F, GL_FLOAT, Load32FTo16F<4> ); 4739aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA8UI, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 4> ); 4749aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA8I, GL_BYTE, LoadToNative<GLbyte, 4> ); 4759aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA16UI, GL_UNSIGNED_SHORT, LoadToNative<GLushort, 4> ); 4769aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA16I, GL_SHORT, LoadToNative<GLshort, 4> ); 4779aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA32UI, GL_UNSIGNED_INT, LoadToNative<GLuint, 4> ); 4789aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA32I, GL_INT, LoadToNative<GLint, 4> ); 4799aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB10_A2UI, GL_UNSIGNED_INT_2_10_10_10_REV, LoadToNative<GLuint, 1> ); 4809aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB8, GL_UNSIGNED_BYTE, LoadToNative3To4<GLubyte, 0xFF> ); 4819aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB565, GL_UNSIGNED_BYTE, LoadToNative3To4<GLubyte, 0xFF> ); 4829aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_SRGB8, GL_UNSIGNED_BYTE, LoadToNative3To4<GLubyte, 0xFF> ); 4839aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB8_SNORM, GL_BYTE, LoadToNative3To4<GLbyte, 0x7F> ); 4849aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB565, GL_UNSIGNED_SHORT_5_6_5, LoadR5G6B5ToRGBA8 ); 4859aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R11F_G11F_B10F, GL_UNSIGNED_INT_10F_11F_11F_REV, LoadToNative<GLuint, 1> ); 4869aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB9_E5, GL_UNSIGNED_INT_5_9_9_9_REV, LoadToNative<GLuint, 1> ); 4879aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB16F, GL_HALF_FLOAT, LoadToNative3To4<GLhalf, gl::Float16One>); 4889aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB16F, GL_HALF_FLOAT_OES, LoadToNative3To4<GLhalf, gl::Float16One>); 4899aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R11F_G11F_B10F, GL_HALF_FLOAT, LoadRGB16FToRG11B10F ); 4909aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R11F_G11F_B10F, GL_HALF_FLOAT_OES, LoadRGB16FToRG11B10F ); 4919aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB9_E5, GL_HALF_FLOAT, LoadRGB16FToRGB9E5 ); 4929aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB9_E5, GL_HALF_FLOAT_OES, LoadRGB16FToRGB9E5 ); 4939aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB32F, GL_FLOAT, LoadToNative3To4<GLfloat, gl::Float32One>); 4949aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB16F, GL_FLOAT, LoadRGB32FToRGBA16F ); 4959aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R11F_G11F_B10F, GL_FLOAT, LoadRGB32FToRG11B10F ); 4969aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB9_E5, GL_FLOAT, LoadRGB32FToRGB9E5 ); 4979aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB8UI, GL_UNSIGNED_BYTE, LoadToNative3To4<GLubyte, 0x01> ); 4989aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB8I, GL_BYTE, LoadToNative3To4<GLbyte, 0x01> ); 4999aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB16UI, GL_UNSIGNED_SHORT, LoadToNative3To4<GLushort, 0x0001> ); 5009aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB16I, GL_SHORT, LoadToNative3To4<GLshort, 0x0001> ); 5019aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB32UI, GL_UNSIGNED_INT, LoadToNative3To4<GLuint, 0x00000001> ); 5029aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB32I, GL_INT, LoadToNative3To4<GLint, 0x00000001> ); 5039aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG8, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 2> ); 5049aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG8_SNORM, GL_BYTE, LoadToNative<GLbyte, 2> ); 5059aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG16F, GL_HALF_FLOAT, LoadToNative<GLhalf, 2> ); 5069aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG16F, GL_HALF_FLOAT_OES, LoadToNative<GLhalf, 2> ); 5079aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG32F, GL_FLOAT, LoadToNative<GLfloat, 2> ); 5089aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG16F, GL_FLOAT, Load32FTo16F<2> ); 5099aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG8UI, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 2> ); 5109aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG8I, GL_BYTE, LoadToNative<GLbyte, 2> ); 5119aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG16UI, GL_UNSIGNED_SHORT, LoadToNative<GLushort, 2> ); 5129aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG16I, GL_SHORT, LoadToNative<GLshort, 2> ); 5139aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG32UI, GL_UNSIGNED_INT, LoadToNative<GLuint, 2> ); 5149aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RG32I, GL_INT, LoadToNative<GLint, 2> ); 5159aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R8, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 1> ); 5169aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R8_SNORM, GL_BYTE, LoadToNative<GLbyte, 1> ); 5179aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R16F, GL_HALF_FLOAT, LoadToNative<GLhalf, 1> ); 5189aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R16F, GL_HALF_FLOAT_OES, LoadToNative<GLhalf, 1> ); 5199aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R32F, GL_FLOAT, LoadToNative<GLfloat, 1> ); 5209aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R16F, GL_FLOAT, Load32FTo16F<1> ); 5219aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R8UI, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 1> ); 5229aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R8I, GL_BYTE, LoadToNative<GLbyte, 1> ); 5239aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R16UI, GL_UNSIGNED_SHORT, LoadToNative<GLushort, 1> ); 5249aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R16I, GL_SHORT, LoadToNative<GLshort, 1> ); 5259aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R32UI, GL_UNSIGNED_INT, LoadToNative<GLuint, 1> ); 5269aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_R32I, GL_INT, LoadToNative<GLint, 1> ); 5279aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_DEPTH_COMPONENT16, GL_UNSIGNED_SHORT, LoadToNative<GLushort, 1> ); 5289aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_DEPTH_COMPONENT24, GL_UNSIGNED_INT, LoadR32ToR24G8 ); 5299aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_DEPTH_COMPONENT16, GL_UNSIGNED_INT, LoadR32ToR16 ); 5309aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_DEPTH_COMPONENT32F, GL_FLOAT, LoadToNative<GLfloat, 1> ); 5319aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_DEPTH24_STENCIL8, GL_UNSIGNED_INT_24_8, LoadR32ToR24G8 ); 5329aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_DEPTH32F_STENCIL8, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, LoadToNative<GLuint, 2> ); 5335d601382b51c29d1670b58c01360416bd929842dGeoff Lang 5349aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Unsized formats 5359aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Load functions are unreachable because they are converted to sized internal formats based on 5369aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // the format and type before loading takes place. 5379aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA, GL_UNSIGNED_BYTE, UnreachableLoadFunction ); 5389aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, UnreachableLoadFunction ); 5399aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, UnreachableLoadFunction ); 5409aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB, GL_UNSIGNED_BYTE, UnreachableLoadFunction ); 5419aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, UnreachableLoadFunction ); 5429aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, UnreachableLoadFunction ); 5439aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE, GL_UNSIGNED_BYTE, UnreachableLoadFunction ); 5449aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_ALPHA, GL_UNSIGNED_BYTE, UnreachableLoadFunction ); 54580b5a55eafb52a9e72676ce7c91c34ce037f4783Jamie Madill 5469aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_OES_texture_float 5479aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE_ALPHA, GL_FLOAT, LoadLA32FToRGBA32F ); 5489aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE, GL_FLOAT, LoadL32FToRGBA32F ); 5499aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_ALPHA, GL_FLOAT, LoadA32FToRGBA32F ); 55000f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 5519aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_OES_texture_half_float 5529aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT, LoadLA16FToRGBA16F ); 5539aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE_ALPHA, GL_HALF_FLOAT_OES, LoadLA16FToRGBA16F ); 5549aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE, GL_HALF_FLOAT, LoadL16FToRGBA16F ); 5559aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE, GL_HALF_FLOAT_OES, LoadL16FToRGBA16F ); 5569aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_ALPHA, GL_HALF_FLOAT, LoadA16FToRGBA16F ); 5579aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_ALPHA, GL_HALF_FLOAT_OES, LoadA16FToRGBA16F ); 55800f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 5599aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_EXT_texture_storage 5609aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_ALPHA8_EXT, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 1> ); 5619aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE8_EXT, GL_UNSIGNED_BYTE, LoadL8ToRGBA8 ); 5629aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE8_ALPHA8_EXT, GL_UNSIGNED_BYTE, LoadLA8ToRGBA8 ); 5639aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_ALPHA32F_EXT, GL_FLOAT, LoadA32FToRGBA32F ); 5649aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE32F_EXT, GL_FLOAT, LoadL32FToRGBA32F ); 5659aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE_ALPHA32F_EXT, GL_FLOAT, LoadLA32FToRGBA32F ); 5669aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_ALPHA16F_EXT, GL_HALF_FLOAT, LoadA16FToRGBA16F ); 5679aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_ALPHA16F_EXT, GL_HALF_FLOAT_OES, LoadA16FToRGBA16F ); 5689aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE16F_EXT, GL_HALF_FLOAT, LoadL16FToRGBA16F ); 5699aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE16F_EXT, GL_HALF_FLOAT_OES, LoadL16FToRGBA16F ); 5709aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE_ALPHA16F_EXT, GL_HALF_FLOAT, LoadLA16FToRGBA16F ); 5719aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_LUMINANCE_ALPHA16F_EXT, GL_HALF_FLOAT_OES, LoadLA16FToRGBA16F ); 57200f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 5739aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_ANGLE_depth_texture 5749aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_DEPTH_COMPONENT32_OES, GL_UNSIGNED_INT, LoadR32ToR24G8 ); 5750c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang 5769aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_EXT_texture_format_BGRA8888 5779aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_BGRA8_EXT, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 4> ); 5789aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_BGRA4_ANGLEX, GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT, LoadRGBA4ToRGBA8 ); 5799aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_BGRA4_ANGLEX, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 4> ); 5809aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_BGR5_A1_ANGLEX, GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT, LoadRGB5A1ToRGBA8 ); 5819aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_BGR5_A1_ANGLEX, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 4> ); 582b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 5839aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Compressed formats 5849aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From ES 3.0.1 spec, table 3.16 5859aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // | Internal format | Type | Load function | 5869aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_R11_EAC, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5879aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_R11_EAC, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5889aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_SIGNED_R11_EAC, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5899aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_RG11_EAC, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5909aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_SIGNED_RG11_EAC, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5919aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_RGB8_ETC2, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5929aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_SRGB8_ETC2, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5939aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5949aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5959aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_RGBA8_ETC2_EAC, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 5969aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, GL_UNSIGNED_BYTE, UnimplementedLoadFunction ); 597b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 5989aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_EXT_texture_compression_dxt1 5999aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_UNSIGNED_BYTE, LoadCompressedToNative<4, 4, 8>); 6009aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, GL_UNSIGNED_BYTE, LoadCompressedToNative<4, 4, 8>); 601b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 6029aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_ANGLE_texture_compression_dxt3 6039aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE, GL_UNSIGNED_BYTE, LoadCompressedToNative<4, 4, 16>); 604b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 6059aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_ANGLE_texture_compression_dxt5 6069aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertLoadFunction(&map, GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE, GL_UNSIGNED_BYTE, LoadCompressedToNative<4, 4, 16>); 607b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 6089aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return map; 609b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 610b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 6119aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// For sized GL internal formats, there is only one corresponding D3D11 format. This map type allows 6129aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// querying for the DXGI texture formats to use for textures, SRVs, RTVs and DSVs given a GL internal 6139aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang// format. 6149aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::map<GLenum, TextureFormat> D3D11ES3FormatMap; 6159aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 6169aa00bbc5303cf7817d02d04860b044b3d29804dGeoff LangTextureFormat::TextureFormat() 6179aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang : texFormat(DXGI_FORMAT_UNKNOWN), 6189aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang srvFormat(DXGI_FORMAT_UNKNOWN), 6199aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang rtvFormat(DXGI_FORMAT_UNKNOWN), 6209aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang dsvFormat(DXGI_FORMAT_UNKNOWN), 6219aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang renderFormat(DXGI_FORMAT_UNKNOWN), 6229aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang swizzleTexFormat(DXGI_FORMAT_UNKNOWN), 6239aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang swizzleSRVFormat(DXGI_FORMAT_UNKNOWN), 6249aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang swizzleRTVFormat(DXGI_FORMAT_UNKNOWN), 6259aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang dataInitializerFunction(NULL), 6269aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang loadFunctions() 627826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill{ 628826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill} 629826f3d30905af11dded9fb0d2973067f4287d800Jamie Madill 6309aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic inline void InsertD3D11FormatInfo(D3D11ES3FormatMap *map, GLenum internalFormat, DXGI_FORMAT texFormat, 6319aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang DXGI_FORMAT srvFormat, DXGI_FORMAT rtvFormat, DXGI_FORMAT dsvFormat) 632d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang{ 6339aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang TextureFormat info; 6349aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.texFormat = texFormat; 6359aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.srvFormat = srvFormat; 6369aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.rtvFormat = rtvFormat; 6379aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.dsvFormat = dsvFormat; 638d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang 6399aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Given a GL internal format, the renderFormat is the DSV format if it is depth- or stencil-renderable, 6409aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // the RTV format if it is color-renderable, and the (nonrenderable) texture format otherwise. 6419aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang if (dsvFormat != DXGI_FORMAT_UNKNOWN) 642d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang { 6439aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.renderFormat = dsvFormat; 644d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang } 6459aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang else if (rtvFormat != DXGI_FORMAT_UNKNOWN) 646d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang { 6479aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.renderFormat = rtvFormat; 648d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang } 6499aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang else if (texFormat != DXGI_FORMAT_UNKNOWN) 650d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang { 6519aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.renderFormat = texFormat; 652d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang } 653d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang else 654d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang { 6559aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.renderFormat = DXGI_FORMAT_UNKNOWN; 656d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang } 657d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang 6589aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Compute the swizzle formats 6599aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat); 660299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang if (internalFormat != GL_NONE && formatInfo.pixelBytes > 0) 661d8c861388d753c94b5b63e2597485101fe0e4c1dGeoff Lang { 662299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang if (formatInfo.componentCount != 4 || texFormat == DXGI_FORMAT_UNKNOWN || 663299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang srvFormat == DXGI_FORMAT_UNKNOWN || rtvFormat == DXGI_FORMAT_UNKNOWN) 6649aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang { 665299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang // Get the maximum sized component 666299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang unsigned int maxBits = 1; 667299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang if (formatInfo.compressed) 668299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang { 669299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang unsigned int compressedBitsPerBlock = formatInfo.pixelBytes * 8; 670299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang unsigned int blockSize = formatInfo.compressedBlockWidth * formatInfo.compressedBlockHeight; 671299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang maxBits = std::max(compressedBitsPerBlock / blockSize, maxBits); 672299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang } 673299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang else 674299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang { 675299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang maxBits = std::max(maxBits, formatInfo.alphaBits); 676299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang maxBits = std::max(maxBits, formatInfo.redBits); 677299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang maxBits = std::max(maxBits, formatInfo.greenBits); 678299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang maxBits = std::max(maxBits, formatInfo.blueBits); 679299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang maxBits = std::max(maxBits, formatInfo.luminanceBits); 680299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang maxBits = std::max(maxBits, formatInfo.depthBits); 681299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang } 682299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang 683299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang maxBits = roundUp(maxBits, 8U); 684299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang 685299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang static const SwizzleInfoMap swizzleMap = BuildSwizzleInfoMap(); 686299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang SwizzleInfoMap::const_iterator swizzleIter = swizzleMap.find(SwizzleSizeType(maxBits, formatInfo.componentType)); 687299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang ASSERT(swizzleIter != swizzleMap.end()); 688299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang 689299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang const SwizzleFormatInfo &swizzleInfo = swizzleIter->second; 690299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleTexFormat = swizzleInfo.mTexFormat; 691299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleSRVFormat = swizzleInfo.mSRVFormat; 692299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleRTVFormat = swizzleInfo.mRTVFormat; 6939aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang } 6949aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang else 6959aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang { 696299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang // The original texture format is suitable for swizzle operations 697299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleTexFormat = texFormat; 698299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleSRVFormat = srvFormat; 699299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleRTVFormat = rtvFormat; 7009aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang } 701b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org } 702b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org else 703b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org { 704299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang // Not possible to swizzle with this texture format since it is either unsized or GL_NONE 705299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleTexFormat = DXGI_FORMAT_UNKNOWN; 706299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleSRVFormat = DXGI_FORMAT_UNKNOWN; 707299fcf29431a4777868da1f8c1d3cd796d14e570Geoff Lang info.swizzleRTVFormat = DXGI_FORMAT_UNKNOWN; 708b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org } 709b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 7109aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Check if there is an initialization function for this texture format 7119aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static const InternalFormatInitializerMap initializerMap = BuildInternalFormatInitializerMap(); 7129aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InternalFormatInitializerMap::const_iterator initializerIter = initializerMap.find(internalFormat); 7139aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.dataInitializerFunction = (initializerIter != initializerMap.end()) ? initializerIter->second : NULL; 71461e49a5cacc894fe2de1273c65374a5e7083a05fGeoff Lang 7159aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Gather all the load functions for this internal format 7169aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static const D3D11LoadFunctionMap loadFunctions = BuildD3D11LoadFunctionMap(); 7179aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang D3D11LoadFunctionMap::const_iterator loadFunctionIter = loadFunctions.find(internalFormat); 7189aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang if (loadFunctionIter != loadFunctions.end()) 719fe28ca06248f5b9cf97e0c8678275997cbf6b4daGeoff Lang { 7209aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang const std::vector<TypeLoadFunctionPair> &loadFunctionVector = loadFunctionIter->second; 7219aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang for (size_t i = 0; i < loadFunctionVector.size(); i++) 7229aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang { 7239aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang GLenum type = loadFunctionVector[i].first; 7249aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang LoadImageFunction function = loadFunctionVector[i].second; 7259aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.loadFunctions.insert(std::make_pair(type, function)); 7269aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang } 727fe28ca06248f5b9cf97e0c8678275997cbf6b4daGeoff Lang } 728fe28ca06248f5b9cf97e0c8678275997cbf6b4daGeoff Lang 7299aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang map->insert(std::make_pair(internalFormat, info)); 730b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 731b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 7329aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic D3D11ES3FormatMap BuildD3D11FormatMap() 733b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org{ 7349aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang D3D11ES3FormatMap map; 735b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 7369aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // | GL internal format | D3D11 texture format | D3D11 SRV format | D3D11 RTV format | D3D11 DSV format | 7379aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_NONE, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 7389aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R8, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_R8_UNORM, DXGI_FORMAT_UNKNOWN); 7399aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R8_SNORM, DXGI_FORMAT_R8_SNORM, DXGI_FORMAT_R8_SNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 7409aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG8, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_R8G8_UNORM, DXGI_FORMAT_UNKNOWN); 7419aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG8_SNORM, DXGI_FORMAT_R8G8_SNORM, DXGI_FORMAT_R8G8_SNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 7429aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB8, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7439aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB8_SNORM, DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 7449aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB565, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7459aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA4, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7469aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB5_A1, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7479aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA8, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7489aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA8_SNORM, DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 7499aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB10_A2, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_R10G10B10A2_UNORM, DXGI_FORMAT_UNKNOWN); 7509aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB10_A2UI, DXGI_FORMAT_R10G10B10A2_UINT, DXGI_FORMAT_R10G10B10A2_UINT, DXGI_FORMAT_R10G10B10A2_UINT, DXGI_FORMAT_UNKNOWN); 7519aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_SRGB8, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 7529aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_SRGB8_ALPHA8, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, DXGI_FORMAT_UNKNOWN); 7539aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R16F, DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_R16_FLOAT, DXGI_FORMAT_UNKNOWN); 7549aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG16F, DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_R16G16_FLOAT, DXGI_FORMAT_UNKNOWN); 7559aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB16F, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_UNKNOWN); 7569aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA16F, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_UNKNOWN); 7579aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R32F, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_UNKNOWN); 7589aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG32F, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_R32G32_FLOAT, DXGI_FORMAT_UNKNOWN); 7599aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB32F, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN); 7609aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA32F, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN); 7619aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R11F_G11F_B10F, DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_R11G11B10_FLOAT, DXGI_FORMAT_UNKNOWN); 7629aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB9_E5, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 7639aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R8I, DXGI_FORMAT_R8_SINT, DXGI_FORMAT_R8_SINT, DXGI_FORMAT_R8_SINT, DXGI_FORMAT_UNKNOWN); 7649aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R8UI, DXGI_FORMAT_R8_UINT, DXGI_FORMAT_R8_UINT, DXGI_FORMAT_R8_UINT, DXGI_FORMAT_UNKNOWN); 7659aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R16I, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_R16_SINT, DXGI_FORMAT_UNKNOWN); 7669aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R16UI, DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_UINT, DXGI_FORMAT_R16_UINT, DXGI_FORMAT_UNKNOWN); 7679aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R32I, DXGI_FORMAT_R32_SINT, DXGI_FORMAT_R32_SINT, DXGI_FORMAT_R32_SINT, DXGI_FORMAT_UNKNOWN); 7689aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_R32UI, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT, DXGI_FORMAT_UNKNOWN); 7699aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG8I, DXGI_FORMAT_R8G8_SINT, DXGI_FORMAT_R8G8_SINT, DXGI_FORMAT_R8G8_SINT, DXGI_FORMAT_UNKNOWN); 7709aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG8UI, DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_R8G8_UINT, DXGI_FORMAT_UNKNOWN); 7719aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG16I, DXGI_FORMAT_R16G16_SINT, DXGI_FORMAT_R16G16_SINT, DXGI_FORMAT_R16G16_SINT, DXGI_FORMAT_UNKNOWN); 7729aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG16UI, DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_R16G16_UINT, DXGI_FORMAT_UNKNOWN); 7739aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG32I, DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_UNKNOWN); 7749aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RG32UI, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_UNKNOWN); 7759aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB8I, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_UNKNOWN); 7769aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB8UI, DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_UNKNOWN); 7779aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB16I, DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_UNKNOWN); 7789aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB16UI, DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_UNKNOWN); 7799aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB32I, DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_UNKNOWN); 7809aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB32UI, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_UNKNOWN); 7819aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA8I, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_R8G8B8A8_SINT, DXGI_FORMAT_UNKNOWN); 7829aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA8UI, DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_R8G8B8A8_UINT, DXGI_FORMAT_UNKNOWN); 7839aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA16I, DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_R16G16B16A16_SINT, DXGI_FORMAT_UNKNOWN); 7849aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA16UI, DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_R16G16B16A16_UINT, DXGI_FORMAT_UNKNOWN); 7859aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA32I, DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_UNKNOWN); 7869aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA32UI, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_UNKNOWN); 787b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 7889aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Unsized formats, TODO: Are types of float and half float allowed for the unsized types? Would it change the DXGI format? 7899aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_ALPHA, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_UNKNOWN); 7909aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_LUMINANCE, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7919aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_LUMINANCE_ALPHA, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7929aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGB, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7939aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_RGBA, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN); 7949aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_BGRA_EXT, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN); 795b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 7969aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_EXT_texture_storage 7979aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // | GL internal format | D3D11 texture format | D3D11 SRV format | D3D11 RTV format | D3D11 DSV format | 7989aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_ALPHA8_EXT, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_UNKNOWN ); 7999aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_LUMINANCE8_EXT, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN ); 8009aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_ALPHA32F_EXT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN ); 8019aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_LUMINANCE32F_EXT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN ); 8029aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_ALPHA16F_EXT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_UNKNOWN ); 8039aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_LUMINANCE16F_EXT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_UNKNOWN ); 8049aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_LUMINANCE8_ALPHA8_EXT, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN ); 8059aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_LUMINANCE_ALPHA32F_EXT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN ); 8069aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_LUMINANCE_ALPHA16F_EXT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_UNKNOWN ); 8079aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_BGRA8_EXT, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN ); 8089aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_BGRA4_ANGLEX, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN ); 8099aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_BGR5_A1_ANGLEX, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_B8G8R8A8_UNORM, DXGI_FORMAT_UNKNOWN ); 810b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 8119aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Depth stencil formats 8129aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_DEPTH_COMPONENT16, DXGI_FORMAT_R16_TYPELESS, DXGI_FORMAT_R16_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D16_UNORM ); 8139aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_DEPTH_COMPONENT24, DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D24_UNORM_S8_UINT ); 8149aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_DEPTH_COMPONENT32F, DXGI_FORMAT_R32_TYPELESS, DXGI_FORMAT_R32_FLOAT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D32_FLOAT ); 8159aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_DEPTH24_STENCIL8, DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D24_UNORM_S8_UINT ); 8169aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_DEPTH32F_STENCIL8, DXGI_FORMAT_R32G8X24_TYPELESS, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D32_FLOAT_S8X24_UINT); 8179aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_STENCIL_INDEX8, DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_X24_TYPELESS_G8_UINT, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D24_UNORM_S8_UINT ); 818b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 8199aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_ANGLE_depth_texture 8209aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Since D3D11 doesn't have a D32_UNORM format, use D24S8 which has comparable precision and matches the ES3 format. 8219aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_DEPTH_COMPONENT32_OES, DXGI_FORMAT_R24G8_TYPELESS, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_D24_UNORM_S8_UINT); 822dd4674f2beea11fa31dc41e147c8476cdbbe0910Shannon Woods 8239aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // Compressed formats, From ES 3.0.1 spec, table 3.16 8249aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // | GL internal format | D3D11 texture format | D3D11 SRV format | D3D11 RTV format | D3D11 DSV format | 8259aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_R11_EAC, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8269aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_SIGNED_R11_EAC, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8279aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_RG11_EAC, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8289aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_SIGNED_RG11_EAC, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8299aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_RGB8_ETC2, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8309aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_SRGB8_ETC2, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8319aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8329aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8339aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_RGBA8_ETC2_EAC, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8349aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 835dd4674f2beea11fa31dc41e147c8476cdbbe0910Shannon Woods 8369aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_EXT_texture_compression_dxt1 8379aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, DXGI_FORMAT_BC1_UNORM, DXGI_FORMAT_BC1_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 8389aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, DXGI_FORMAT_BC1_UNORM, DXGI_FORMAT_BC1_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 83900f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 8409aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_ANGLE_texture_compression_dxt3 8419aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE, DXGI_FORMAT_BC2_UNORM, DXGI_FORMAT_BC2_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 84200f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 8439aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang // From GL_ANGLE_texture_compression_dxt5 8449aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang InsertD3D11FormatInfo(&map, GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE, DXGI_FORMAT_BC3_UNORM, DXGI_FORMAT_BC3_UNORM, DXGI_FORMAT_UNKNOWN, DXGI_FORMAT_UNKNOWN); 84500f6bc32b5bd0e988cd58a3df1914791972e7acbGeoff Lang 8469aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return map; 8470c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang} 8480c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang 8499aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langconst TextureFormat &GetTextureFormatInfo(GLenum internalFormat) 8500c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang{ 8519aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static const D3D11ES3FormatMap formatMap = BuildD3D11FormatMap(); 8529aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang D3D11ES3FormatMap::const_iterator iter = formatMap.find(internalFormat); 8539aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang if (iter != formatMap.end()) 8540c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang { 8550c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang return iter->second; 8560c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang } 8570c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang else 8580c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang { 8599aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static const TextureFormat defaultInfo; 8609aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return defaultInfo; 8610c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang } 8620c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang} 8630c99b1b0a42afd3b5fb578468895b166acd5bb6eGeoff Lang 8649aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::map<gl::VertexFormat, VertexFormat> D3D11VertexFormatInfoMap; 8659aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langtypedef std::pair<gl::VertexFormat, VertexFormat> D3D11VertexFormatPair; 8667ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 8679aa00bbc5303cf7817d02d04860b044b3d29804dGeoff LangVertexFormat::VertexFormat() 8689aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang : conversionType(VERTEX_CONVERT_NONE), 8699aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang nativeFormat(DXGI_FORMAT_UNKNOWN), 8709aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang copyFunction(NULL) 8719aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang{ 8729aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang} 8737ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 8749aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic void AddVertexFormatInfo(D3D11VertexFormatInfoMap *map, GLenum inputType, GLboolean normalized, GLuint componentCount, 8757ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill VertexConversionType conversionType, DXGI_FORMAT nativeFormat, VertexCopyFunction copyFunction) 8767ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill{ 8777ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill gl::VertexFormat inputFormat(inputType, normalized, componentCount, false); 8789aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 8799aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang VertexFormat info; 8809aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.conversionType = conversionType; 8819aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.nativeFormat = nativeFormat; 8829aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.copyFunction = copyFunction; 8839aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 8849aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang map->insert(D3D11VertexFormatPair(inputFormat, info)); 8857ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill} 8867ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 8879aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langstatic void AddIntegerVertexFormatInfo(D3D11VertexFormatInfoMap *map, GLenum inputType, GLuint componentCount, 8887ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill VertexConversionType conversionType, DXGI_FORMAT nativeFormat, VertexCopyFunction copyFunction) 8897ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill{ 8907ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill gl::VertexFormat inputFormat(inputType, GL_FALSE, componentCount, true); 8919aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 8929aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang VertexFormat info; 8939aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.conversionType = conversionType; 8949aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.nativeFormat = nativeFormat; 8959aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang info.copyFunction = copyFunction; 8969aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang 8979aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang map->insert(D3D11VertexFormatPair(inputFormat, info)); 8987ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill} 8997ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9007ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madillstatic D3D11VertexFormatInfoMap BuildD3D11VertexFormatInfoMap() 9017ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill{ 9027ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill D3D11VertexFormatInfoMap map; 9037ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9047ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // TODO: column legend 9057ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9067ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // 9077ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // Float formats 9087ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // 9097ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9107ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_BYTE -- un-normalized 91145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_BYTE, GL_FALSE, 1, VERTEX_CONVERT_GPU, DXGI_FORMAT_R8_SINT, &CopyNativeVertexData<GLbyte, 1, 0>); 91245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_BYTE, GL_FALSE, 2, VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8_SINT, &CopyNativeVertexData<GLbyte, 2, 0>); 91345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_BYTE, GL_FALSE, 3, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_SINT, &CopyNativeVertexData<GLbyte, 3, 1>); 91445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_BYTE, GL_FALSE, 4, VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8B8A8_SINT, &CopyNativeVertexData<GLbyte, 4, 0>); 9157ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9167ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_BYTE -- normalized 91745965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_BYTE, GL_TRUE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_SNORM, &CopyNativeVertexData<GLbyte, 1, 0>); 91845965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_BYTE, GL_TRUE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_SNORM, &CopyNativeVertexData<GLbyte, 2, 0>); 91945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_BYTE, GL_TRUE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_SNORM, &CopyNativeVertexData<GLbyte, 3, INT8_MAX>); 92045965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_BYTE, GL_TRUE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_SNORM, &CopyNativeVertexData<GLbyte, 4, 0>); 9217ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9227ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_BYTE -- un-normalized 92345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_FALSE, 1, VERTEX_CONVERT_GPU, DXGI_FORMAT_R8_UINT, &CopyNativeVertexData<GLubyte, 1, 0>); 92445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_FALSE, 2, VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8_UINT, &CopyNativeVertexData<GLubyte, 2, 0>); 92545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_FALSE, 3, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 3, 1>); 92645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_FALSE, 4, VERTEX_CONVERT_GPU, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 4, 0>); 9277ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9287ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_BYTE -- normalized 92945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_TRUE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_UNORM, &CopyNativeVertexData<GLubyte, 1, 0>); 93045965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_TRUE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_UNORM, &CopyNativeVertexData<GLubyte, 2, 0>); 93145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_TRUE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UNORM, &CopyNativeVertexData<GLubyte, 3, UINT8_MAX>); 93245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_BYTE, GL_TRUE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_UNORM, &CopyNativeVertexData<GLubyte, 4, 0>); 9337ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9347ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_SHORT -- un-normalized 93545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_SHORT, GL_FALSE, 1, VERTEX_CONVERT_GPU, DXGI_FORMAT_R16_SINT, &CopyNativeVertexData<GLshort, 1, 0>); 93645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_SHORT, GL_FALSE, 2, VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16_SINT, &CopyNativeVertexData<GLshort, 2, 0>); 93745965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_SHORT, GL_FALSE, 3, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_SINT, &CopyNativeVertexData<GLshort, 4, 1>); 93845965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_SHORT, GL_FALSE, 4, VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16B16A16_SINT, &CopyNativeVertexData<GLshort, 4, 0>); 9397ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9407ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_SHORT -- normalized 94145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_SHORT, GL_TRUE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_SNORM, &CopyNativeVertexData<GLshort, 1, 0>); 94245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_SHORT, GL_TRUE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_SNORM, &CopyNativeVertexData<GLshort, 2, 0>); 94345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_SHORT, GL_TRUE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SNORM, &CopyNativeVertexData<GLshort, 3, INT16_MAX>); 94445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_SHORT, GL_TRUE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_SNORM, &CopyNativeVertexData<GLshort, 4, 0>); 9457ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9467ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_SHORT -- un-normalized 94745965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_FALSE, 1, VERTEX_CONVERT_GPU, DXGI_FORMAT_R16_UINT, &CopyNativeVertexData<GLushort, 1, 0>); 94845965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_FALSE, 2, VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16_UINT, &CopyNativeVertexData<GLushort, 2, 0>); 94945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_FALSE, 3, VERTEX_CONVERT_BOTH, DXGI_FORMAT_R16G16B16A16_UINT, &CopyNativeVertexData<GLushort, 3, 1>); 95045965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_FALSE, 4, VERTEX_CONVERT_GPU, DXGI_FORMAT_R16G16B16A16_UINT, &CopyNativeVertexData<GLushort, 4, 0>); 9517ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9527ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_SHORT -- normalized 95345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_TRUE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_UNORM, &CopyNativeVertexData<GLushort, 1, 0>); 95445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_TRUE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_UNORM, &CopyNativeVertexData<GLushort, 2, 0>); 95545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_TRUE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_UNORM, &CopyNativeVertexData<GLushort, 3, UINT16_MAX>); 95645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_SHORT, GL_TRUE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_UNORM, &CopyNativeVertexData<GLushort, 4, 0>); 9577ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9587ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_INT -- un-normalized 95945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT, GL_FALSE, 1, VERTEX_CONVERT_GPU, DXGI_FORMAT_R32_SINT, &CopyNativeVertexData<GLint, 1, 0>); 96045965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT, GL_FALSE, 2, VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32_SINT, &CopyNativeVertexData<GLint, 2, 0>); 96145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT, GL_FALSE, 3, VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32_SINT, &CopyNativeVertexData<GLint, 3, 0>); 96245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT, GL_FALSE, 4, VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32A32_SINT, &CopyNativeVertexData<GLint, 4, 0>); 9637ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9647ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_INT -- normalized 96545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT, GL_TRUE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT, &CopyTo32FVertexData<GLint, 1, true>); 96645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT, GL_TRUE, 2, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &CopyTo32FVertexData<GLint, 2, true>); 96745965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT, GL_TRUE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT, &CopyTo32FVertexData<GLint, 3, true>); 96845965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT, GL_TRUE, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyTo32FVertexData<GLint, 4, true>); 9697ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9707ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_INT -- un-normalized 97145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT, GL_FALSE, 1, VERTEX_CONVERT_GPU, DXGI_FORMAT_R32_UINT, &CopyNativeVertexData<GLuint, 1, 0>); 97245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT, GL_FALSE, 2, VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32_UINT, &CopyNativeVertexData<GLuint, 2, 0>); 97345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT, GL_FALSE, 3, VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32_UINT, &CopyNativeVertexData<GLuint, 3, 0>); 97445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT, GL_FALSE, 4, VERTEX_CONVERT_GPU, DXGI_FORMAT_R32G32B32A32_UINT, &CopyNativeVertexData<GLuint, 4, 0>); 9757ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9767ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_INT -- normalized 97745965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT, GL_TRUE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_FLOAT, &CopyTo32FVertexData<GLuint, 1, true>); 97845965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT, GL_TRUE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_FLOAT, &CopyTo32FVertexData<GLuint, 2, true>); 97945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT, GL_TRUE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT, &CopyTo32FVertexData<GLuint, 3, true>); 98045965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT, GL_TRUE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyTo32FVertexData<GLuint, 4, true>); 9817ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9827ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_FIXED 98345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_FIXED, GL_FALSE, 1, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32_FLOAT, &Copy32FixedTo32FVertexData<1>); 98445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_FIXED, GL_FALSE, 2, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32_FLOAT, &Copy32FixedTo32FVertexData<2>); 98545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_FIXED, GL_FALSE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32_FLOAT, &Copy32FixedTo32FVertexData<3>); 98645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_FIXED, GL_FALSE, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &Copy32FixedTo32FVertexData<4>); 9877ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9887ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_HALF_FLOAT 98945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_HALF_FLOAT, GL_FALSE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_FLOAT, &CopyNativeVertexData<GLhalf, 1, 0>); 99045965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_HALF_FLOAT, GL_FALSE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_FLOAT, &CopyNativeVertexData<GLhalf, 2, 0>); 99145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_HALF_FLOAT, GL_FALSE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_FLOAT, &CopyNativeVertexData<GLhalf, 3, gl::Float16One>); 99245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_HALF_FLOAT, GL_FALSE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_FLOAT, &CopyNativeVertexData<GLhalf, 4, 0>); 9937ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 9947ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_FLOAT 99545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_FLOAT, GL_FALSE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_FLOAT, &CopyNativeVertexData<GLfloat, 1, 0>); 99645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_FLOAT, GL_FALSE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_FLOAT, &CopyNativeVertexData<GLfloat, 2, 0>); 99745965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_FLOAT, GL_FALSE, 3, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_FLOAT, &CopyNativeVertexData<GLfloat, 3, 0>); 99845965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_FLOAT, GL_FALSE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyNativeVertexData<GLfloat, 4, 0>); 9997ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10007ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_INT_2_10_10_10_REV 100145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT_2_10_10_10_REV, GL_FALSE, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyXYZ10W2ToXYZW32FVertexData<true, false, true>); 100245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_INT_2_10_10_10_REV, GL_TRUE, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyXYZ10W2ToXYZW32FVertexData<true, true, true>); 10037ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10047ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_INT_2_10_10_10_REV 100545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT_2_10_10_10_REV, GL_FALSE, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R32G32B32A32_FLOAT, &CopyXYZ10W2ToXYZW32FVertexData<false, false, true>); 100645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddVertexFormatInfo(&map, GL_UNSIGNED_INT_2_10_10_10_REV, GL_TRUE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R10G10B10A2_UNORM, &CopyNativeVertexData<GLuint, 1, 0>); 10077ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10087ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // 10097ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // Integer Formats 10107ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // 10117ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10127ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_BYTE 101345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_BYTE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_SINT, &CopyNativeVertexData<GLbyte, 1, 0>); 101445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_BYTE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_SINT, &CopyNativeVertexData<GLbyte, 2, 0>); 101545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_BYTE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_SINT, &CopyNativeVertexData<GLbyte, 3, 1>); 101645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_BYTE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_SINT, &CopyNativeVertexData<GLbyte, 4, 0>); 10177ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10187ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_BYTE 101945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_BYTE, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8_UINT, &CopyNativeVertexData<GLubyte, 1, 0>); 102045965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_BYTE, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8_UINT, &CopyNativeVertexData<GLubyte, 2, 0>); 102145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_BYTE, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 3, 1>); 102245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_BYTE, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R8G8B8A8_UINT, &CopyNativeVertexData<GLubyte, 4, 0>); 10237ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10247ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_SHORT 102545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_SHORT, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_SINT, &CopyNativeVertexData<GLshort, 1, 0>); 102645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_SHORT, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_SINT, &CopyNativeVertexData<GLshort, 2, 0>); 102745965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_SHORT, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT, &CopyNativeVertexData<GLshort, 3, 1>); 102845965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_SHORT, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_SINT, &CopyNativeVertexData<GLshort, 4, 0>); 10297ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10307ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_SHORT 103145965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_SHORT, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16_UINT, &CopyNativeVertexData<GLushort, 1, 0>); 103245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_SHORT, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16_UINT, &CopyNativeVertexData<GLushort, 2, 0>); 103345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_SHORT, 3, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_UINT, &CopyNativeVertexData<GLushort, 3, 1>); 103445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_SHORT, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R16G16B16A16_UINT, &CopyNativeVertexData<GLushort, 4, 0>); 10357ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10367ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_INT 103745965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_INT, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_SINT, &CopyNativeVertexData<GLint, 1, 0>); 103845965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_INT, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_SINT, &CopyNativeVertexData<GLint, 2, 0>); 103945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_INT, 3, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_SINT, &CopyNativeVertexData<GLint, 3, 0>); 104045965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_INT, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_SINT, &CopyNativeVertexData<GLint, 4, 0>); 10417ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10427ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_INT 104345965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_INT, 1, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32_SINT, &CopyNativeVertexData<GLuint, 1, 0>); 104445965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_INT, 2, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32_SINT, &CopyNativeVertexData<GLuint, 2, 0>); 104545965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_INT, 3, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32_SINT, &CopyNativeVertexData<GLuint, 3, 0>); 104645965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_INT, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R32G32B32A32_SINT, &CopyNativeVertexData<GLuint, 4, 0>); 10477ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10487ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_INT_2_10_10_10_REV 104945965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_INT_2_10_10_10_REV, 4, VERTEX_CONVERT_CPU, DXGI_FORMAT_R16G16B16A16_SINT, &CopyXYZ10W2ToXYZW32FVertexData<true, true, false>); 10507ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10517ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill // GL_UNSIGNED_INT_2_10_10_10_REV 105245965b102fbff399c3e39aeeabf55f146c75caabGeoff Lang AddIntegerVertexFormatInfo(&map, GL_UNSIGNED_INT_2_10_10_10_REV, 4, VERTEX_CONVERT_NONE, DXGI_FORMAT_R10G10B10A2_UINT, &CopyNativeVertexData<GLuint, 1, 0>); 10537ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10547ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill return map; 10557ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill} 10567ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10579aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Langconst VertexFormat &GetVertexFormatInfo(const gl::VertexFormat &vertexFormat) 10587ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill{ 10597ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill static const D3D11VertexFormatInfoMap vertexFormatMap = BuildD3D11VertexFormatInfoMap(); 10607ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill 10617ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill D3D11VertexFormatInfoMap::const_iterator iter = vertexFormatMap.find(vertexFormat); 10627ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill if (iter != vertexFormatMap.end()) 10637ab02fafb5de8cabadaa5eff10e473e79f9b027eJamie Madill { 1064e4a492be45f39dffaea53c3523064844ee56e41bGeoff Lang return iter->second; 1065b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org } 106666aaf723bc8535bf1a8e32c032928d9f4d895d33Geoff Lang else 1067b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org { 10689aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang static const VertexFormat defaultInfo; 10699aa00bbc5303cf7817d02d04860b044b3d29804dGeoff Lang return defaultInfo; 1070b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org } 1071b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 1072b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1073b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 1074b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org 1075b8490f3c368bd2407980ed7df7810b3d84b20b68shannonwoods@chromium.org} 1076