Branimir Karadžić 10 лет назад
Родитель
Сommit
b7ebbb07b6
8 измененных файлов с 69 добавлено и 1 удалено
  1. 6 0
      include/bgfx.c99.h
  2. 6 0
      include/bgfx.h
  3. 12 0
      src/image.cpp
  4. 6 0
      src/renderer_d3d11.cpp
  5. 6 0
      src/renderer_d3d12.cpp
  6. 6 0
      src/renderer_d3d9.cpp
  7. 21 1
      src/renderer_gl.cpp
  8. 6 0
      src/renderer_mtl.mm

+ 6 - 0
include/bgfx.c99.h

@@ -99,19 +99,25 @@ typedef enum bgfx_texture_format
 
     BGFX_TEXTURE_FORMAT_R1,
     BGFX_TEXTURE_FORMAT_R8,
+    BGFX_TEXTURE_FORMAT_R8S,
     BGFX_TEXTURE_FORMAT_R16,
     BGFX_TEXTURE_FORMAT_R16F,
+    BGFX_TEXTURE_FORMAT_R16S,
     BGFX_TEXTURE_FORMAT_R32,
     BGFX_TEXTURE_FORMAT_R32F,
     BGFX_TEXTURE_FORMAT_RG8,
+    BGFX_TEXTURE_FORMAT_RG8S,
     BGFX_TEXTURE_FORMAT_RG16,
     BGFX_TEXTURE_FORMAT_RG16F,
+    BGFX_TEXTURE_FORMAT_RG16S,
     BGFX_TEXTURE_FORMAT_RG32,
     BGFX_TEXTURE_FORMAT_RG32F,
     BGFX_TEXTURE_FORMAT_BGRA8,
     BGFX_TEXTURE_FORMAT_RGBA8,
+    BGFX_TEXTURE_FORMAT_RGBA8S,
     BGFX_TEXTURE_FORMAT_RGBA16,
     BGFX_TEXTURE_FORMAT_RGBA16F,
+    BGFX_TEXTURE_FORMAT_RGBA16S,
     BGFX_TEXTURE_FORMAT_RGBA32,
     BGFX_TEXTURE_FORMAT_RGBA32F,
     BGFX_TEXTURE_FORMAT_R5G6B5,

+ 6 - 0
include/bgfx.h

@@ -160,19 +160,25 @@ namespace bgfx
 
 			R1,
 			R8,
+			R8S,
 			R16,
 			R16F,
+			R16S,
 			R32,
 			R32F,
 			RG8,
+			RG8S,
 			RG16,
 			RG16F,
+			RG16S,
 			RG32,
 			RG32F,
 			BGRA8,
 			RGBA8,
+			RGBA8S,
 			RGBA16,
 			RGBA16F,
+			RGBA16S,
 			RGBA32,
 			RGBA32F,
 			R5G6B5,

+ 12 - 0
src/image.cpp

@@ -41,19 +41,25 @@ namespace bgfx
 		{   0, 0, 0,  0, 1, 1,  0, 0 }, // Unknown
 		{   1, 8, 1,  1, 1, 1,  0, 0 }, // R1
 		{   8, 1, 1,  1, 1, 1,  0, 0 }, // R8
+		{   8, 1, 1,  1, 1, 1,  0, 0 }, // R8S
 		{  16, 1, 1,  2, 1, 1,  0, 0 }, // R16
 		{  16, 1, 1,  2, 1, 1,  0, 0 }, // R16F
+		{  16, 1, 1,  2, 1, 1,  0, 0 }, // R16S
 		{  32, 1, 1,  4, 1, 1,  0, 0 }, // R32
 		{  32, 1, 1,  4, 1, 1,  0, 0 }, // R32F
 		{  16, 1, 1,  2, 1, 1,  0, 0 }, // RG8
+		{  16, 1, 1,  2, 1, 1,  0, 0 }, // RG8S
 		{  32, 1, 1,  4, 1, 1,  0, 0 }, // RG16
 		{  32, 1, 1,  4, 1, 1,  0, 0 }, // RG16F
+		{  32, 1, 1,  4, 1, 1,  0, 0 }, // RG16S
 		{  64, 1, 1,  8, 1, 1,  0, 0 }, // RG32
 		{  64, 1, 1,  8, 1, 1,  0, 0 }, // RG32F
 		{  32, 1, 1,  4, 1, 1,  0, 0 }, // BGRA8
 		{  32, 1, 1,  4, 1, 1,  0, 0 }, // RGBA8
+		{  32, 1, 1,  4, 1, 1,  0, 0 }, // RGBA8S
 		{  64, 1, 1,  8, 1, 1,  0, 0 }, // RGBA16
 		{  64, 1, 1,  8, 1, 1,  0, 0 }, // RGBA16F
+		{  64, 1, 1,  8, 1, 1,  0, 0 }, // RGBA16S
 		{ 128, 1, 1, 16, 1, 1,  0, 0 }, // RGBA32
 		{ 128, 1, 1, 16, 1, 1,  0, 0 }, // RGBA32F
 		{  16, 1, 1,  2, 1, 1,  0, 0 }, // R5G6B5
@@ -95,19 +101,25 @@ namespace bgfx
 		"<unknown>",  // Unknown
 		"R1",         // R1
 		"R8",         // R8
+		"R8S",        // R8S
 		"R16",        // R16
 		"R16F",       // R16F
+		"R16S",       // R16S
 		"R32",        // R32
 		"R32F",       // R32F
 		"RG8",        // RG8
+		"RG8S",       // RG8S
 		"RG16",       // RG16
 		"RG16F",      // RG16F
+		"RG16S",      // RG16S
 		"RG32",       // RG32
 		"RG32F",      // RG32F
 		"BGRA8",      // BGRA8
 		"RGBA8",      // RGBA8
+		"RGBA8S",     // RGBA8S
 		"RGBA16",     // RGBA16
 		"RGBA16F",    // RGBA16F
+		"RGBA16S",    // RGBA16S
 		"RGBA32",     // RGBA32
 		"RGBA32F",    // RGBA32F
 		"R5G6B5",     // R5G6B5

+ 6 - 0
src/renderer_d3d11.cpp

@@ -212,19 +212,25 @@ namespace bgfx { namespace d3d11
 		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // Unknown
 		{ DXGI_FORMAT_R1_UNORM,           DXGI_FORMAT_R1_UNORM,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R1
 		{ DXGI_FORMAT_R8_UNORM,           DXGI_FORMAT_R8_UNORM,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R8
+		{ DXGI_FORMAT_R8_SNORM,           DXGI_FORMAT_R8_SNORM,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R8S
 		{ DXGI_FORMAT_R16_UINT,           DXGI_FORMAT_R16_UINT,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R16
 		{ DXGI_FORMAT_R16_FLOAT,          DXGI_FORMAT_R16_FLOAT,             DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R16F
+		{ DXGI_FORMAT_R16_SNORM,          DXGI_FORMAT_R16_SNORM,             DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R16S
 		{ DXGI_FORMAT_R32_UINT,           DXGI_FORMAT_R32_UINT,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R32
 		{ DXGI_FORMAT_R32_FLOAT,          DXGI_FORMAT_R32_FLOAT,             DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R32F
 		{ DXGI_FORMAT_R8G8_UNORM,         DXGI_FORMAT_R8G8_UNORM,            DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG8
+		{ DXGI_FORMAT_R8G8_SNORM,         DXGI_FORMAT_R8G8_SNORM,            DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG8S
 		{ DXGI_FORMAT_R16G16_UNORM,       DXGI_FORMAT_R16G16_UNORM,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG16
 		{ DXGI_FORMAT_R16G16_FLOAT,       DXGI_FORMAT_R16G16_FLOAT,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG16F
+		{ DXGI_FORMAT_R16G16_SNORM,       DXGI_FORMAT_R16G16_SNORM,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG16S
 		{ DXGI_FORMAT_R32G32_UINT,        DXGI_FORMAT_R32G32_UINT,           DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG32
 		{ DXGI_FORMAT_R32G32_FLOAT,       DXGI_FORMAT_R32G32_FLOAT,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG32F
 		{ DXGI_FORMAT_B8G8R8A8_UNORM,     DXGI_FORMAT_B8G8R8A8_UNORM,        DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_B8G8R8A8_UNORM_SRGB }, // BGRA8
 		{ DXGI_FORMAT_R8G8B8A8_UNORM,     DXGI_FORMAT_R8G8B8A8_UNORM,        DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_R8G8B8A8_UNORM_SRGB }, // RGBA8
+		{ DXGI_FORMAT_R8G8B8A8_SNORM,     DXGI_FORMAT_R8G8B8A8_SNORM,        DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA8S
 		{ DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM,    DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA16
 		{ DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT,    DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA16F
+		{ DXGI_FORMAT_R16G16B16A16_SNORM, DXGI_FORMAT_R16G16B16A16_SNORM,    DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA16S
 		{ DXGI_FORMAT_R32G32B32A32_UINT,  DXGI_FORMAT_R32G32B32A32_UINT,     DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA32
 		{ DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT,    DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA32F
 		{ DXGI_FORMAT_B5G6R5_UNORM,       DXGI_FORMAT_B5G6R5_UNORM,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R5G6B5

+ 6 - 0
src/renderer_d3d12.cpp

@@ -196,19 +196,25 @@ namespace bgfx { namespace d3d12
 		{ DXGI_FORMAT_UNKNOWN,            DXGI_FORMAT_UNKNOWN,               DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // Unknown
 		{ DXGI_FORMAT_R1_UNORM,           DXGI_FORMAT_R1_UNORM,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R1
 		{ DXGI_FORMAT_R8_UNORM,           DXGI_FORMAT_R8_UNORM,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R8
+		{ DXGI_FORMAT_R8_SNORM,           DXGI_FORMAT_R8_SNORM,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R8S
 		{ DXGI_FORMAT_R16_UNORM,          DXGI_FORMAT_R16_UNORM,             DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R16
 		{ DXGI_FORMAT_R16_FLOAT,          DXGI_FORMAT_R16_FLOAT,             DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R16F
+		{ DXGI_FORMAT_R16_SNORM,          DXGI_FORMAT_R16_SNORM,             DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R16S
 		{ DXGI_FORMAT_R32_UINT,           DXGI_FORMAT_R32_UINT,              DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R32
 		{ DXGI_FORMAT_R32_FLOAT,          DXGI_FORMAT_R32_FLOAT,             DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R32F
 		{ DXGI_FORMAT_R8G8_UNORM,         DXGI_FORMAT_R8G8_UNORM,            DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG8
+		{ DXGI_FORMAT_R8G8_SNORM,         DXGI_FORMAT_R8G8_SNORM,            DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG8S
 		{ DXGI_FORMAT_R16G16_UNORM,       DXGI_FORMAT_R16G16_UNORM,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG16
 		{ DXGI_FORMAT_R16G16_FLOAT,       DXGI_FORMAT_R16G16_FLOAT,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG16F
+		{ DXGI_FORMAT_R16G16_SNORM,       DXGI_FORMAT_R16G16_SNORM,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG16S
 		{ DXGI_FORMAT_R32G32_UINT,        DXGI_FORMAT_R32G32_UINT,           DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG32
 		{ DXGI_FORMAT_R32G32_FLOAT,       DXGI_FORMAT_R32G32_FLOAT,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RG32F
 		{ DXGI_FORMAT_B8G8R8A8_UNORM,     DXGI_FORMAT_B8G8R8A8_UNORM,        DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_B8G8R8A8_UNORM_SRGB }, // BGRA8
 		{ DXGI_FORMAT_R8G8B8A8_UNORM,     DXGI_FORMAT_R8G8B8A8_UNORM,        DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_R8G8B8A8_UNORM_SRGB }, // RGBA8
+		{ DXGI_FORMAT_R8G8B8A8_SNORM,     DXGI_FORMAT_R8G8B8A8_SNORM,        DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA8S
 		{ DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM,    DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA16
 		{ DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT,    DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA16F
+		{ DXGI_FORMAT_R16G16B16A16_SNORM, DXGI_FORMAT_R16G16B16A16_SNORM,    DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA16S
 		{ DXGI_FORMAT_R32G32B32A32_UINT,  DXGI_FORMAT_R32G32B32A32_UINT,     DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA32
 		{ DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT,    DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // RGBA32F
 		{ DXGI_FORMAT_B5G6R5_UNORM,       DXGI_FORMAT_B5G6R5_UNORM,          DXGI_FORMAT_UNKNOWN,           DXGI_FORMAT_UNKNOWN             }, // R5G6B5

+ 6 - 0
src/renderer_d3d9.cpp

@@ -209,19 +209,25 @@ namespace bgfx { namespace d3d9
 		{ D3DFMT_UNKNOWN       }, // Unknown
 		{ D3DFMT_A1            }, // R1
 		{ D3DFMT_L8            }, // R8
+		{ D3DFMT_UNKNOWN       }, // R8S
 		{ D3DFMT_G16R16        }, // R16
 		{ D3DFMT_R16F          }, // R16F
+		{ D3DFMT_UNKNOWN       }, // R16S
 		{ D3DFMT_UNKNOWN       }, // R32
 		{ D3DFMT_R32F          }, // R32F
 		{ D3DFMT_A8L8          }, // RG8
+		{ D3DFMT_UNKNOWN       }, // RG8S
 		{ D3DFMT_G16R16        }, // RG16
 		{ D3DFMT_G16R16F       }, // RG16F
+		{ D3DFMT_UNKNOWN       }, // RG16S
 		{ D3DFMT_UNKNOWN       }, // RG32
 		{ D3DFMT_G32R32F       }, // RG32F
 		{ D3DFMT_A8R8G8B8      }, // BGRA8
 		{ D3DFMT_UNKNOWN       }, // RGBA8
+		{ D3DFMT_UNKNOWN       }, // RGBA8S
 		{ D3DFMT_A16B16G16R16  }, // RGBA16
 		{ D3DFMT_A16B16G16R16F }, // RGBA16F
+		{ D3DFMT_UNKNOWN       }, // RGBA16S
 		{ D3DFMT_UNKNOWN       }, // RGBA32
 		{ D3DFMT_A32B32G32R32F }, // RGBA32F
 		{ D3DFMT_R5G6B5        }, // R5G6B5

+ 21 - 1
src/renderer_gl.cpp

@@ -207,19 +207,25 @@ namespace bgfx { namespace gl
 		{ GL_ZERO,                                     GL_ZERO,                                       GL_ZERO,                                     GL_ZERO,                         false }, // Unknown
 		{ GL_ZERO,                                     GL_ZERO,                                       GL_ZERO,                                     GL_ZERO,                         false }, // R1
 		{ GL_R8,                                       GL_ZERO,                                       GL_RED,                                      GL_UNSIGNED_BYTE,                false }, // R8
+		{ GL_R8_SNORM,                                 GL_ZERO,                                       GL_RED,                                      GL_BYTE,                         false }, // R8S
 		{ GL_R16,                                      GL_ZERO,                                       GL_RED,                                      GL_UNSIGNED_SHORT,               false }, // R16
 		{ GL_R16F,                                     GL_ZERO,                                       GL_RED,                                      GL_HALF_FLOAT,                   false }, // R16F
+		{ GL_R16_SNORM,                                GL_ZERO,                                       GL_RED,                                      GL_SHORT,                        false }, // R16S
 		{ GL_R32UI,                                    GL_ZERO,                                       GL_RED,                                      GL_UNSIGNED_INT,                 false }, // R32
 		{ GL_R32F,                                     GL_ZERO,                                       GL_RED,                                      GL_FLOAT,                        false }, // R32F
 		{ GL_RG8,                                      GL_ZERO,                                       GL_RG,                                       GL_UNSIGNED_BYTE,                false }, // RG8
+		{ GL_RG8_SNORM,                                GL_ZERO,                                       GL_RG,                                       GL_BYTE,                         false }, // RG8S
 		{ GL_RG16,                                     GL_ZERO,                                       GL_RG,                                       GL_UNSIGNED_SHORT,               false }, // RG16
 		{ GL_RG16F,                                    GL_ZERO,                                       GL_RG,                                       GL_FLOAT,                        false }, // RG16F
+		{ GL_RG16_SNORM,                               GL_ZERO,                                       GL_RG,                                       GL_SHORT,                        false }, // RG16S
 		{ GL_RG32UI,                                   GL_ZERO,                                       GL_RG,                                       GL_UNSIGNED_INT,                 false }, // RG32
 		{ GL_RG32F,                                    GL_ZERO,                                       GL_RG,                                       GL_FLOAT,                        false }, // RG32F
 		{ GL_RGBA8,                                    GL_SRGB8_ALPHA8,                               GL_BGRA,                                     GL_UNSIGNED_BYTE,                false }, // BGRA8
 		{ GL_RGBA8,                                    GL_SRGB8_ALPHA8,                               GL_RGBA,                                     GL_UNSIGNED_BYTE,                false }, // RGBA8
-		{ GL_RGBA16,                                   GL_ZERO,                                       GL_RGBA,                                     GL_UNSIGNED_BYTE,                false }, // RGBA16
+		{ GL_RGBA8_SNORM,                              GL_ZERO,                                       GL_RGBA,                                     GL_BYTE,                         false }, // RGBA8S
+		{ GL_RGBA16,                                   GL_ZERO,                                       GL_RGBA,                                     GL_UNSIGNED_SHORT,               false }, // RGBA16
 		{ GL_RGBA16F,                                  GL_ZERO,                                       GL_RGBA,                                     GL_HALF_FLOAT,                   false }, // RGBA16F
+		{ GL_RGBA16_SNORM,                             GL_ZERO,                                       GL_RGBA,                                     GL_SHORT,                        false }, // RGBA16S
 		{ GL_RGBA32UI,                                 GL_ZERO,                                       GL_RGBA,                                     GL_UNSIGNED_INT,                 false }, // RGBA32
 		{ GL_RGBA32F,                                  GL_ZERO,                                       GL_RGBA,                                     GL_FLOAT,                        false }, // RGBA32F
 		{ GL_RGB565,                                   GL_ZERO,                                       GL_RGB,                                      GL_UNSIGNED_SHORT_5_6_5,         false }, // R5G6B5
@@ -263,19 +269,25 @@ namespace bgfx { namespace gl
 		GL_ZERO,               // Unknown
 		GL_ZERO,               // R1
 		GL_R8,                 // R8
+		GL_R8_SNORM,           // R8S
 		GL_R16,                // R16
 		GL_R16F,               // R16F
+		GL_R16_SNORM,          // R16S
 		GL_R32UI,              // R32
 		GL_R32F,               // R32F
 		GL_RG8,                // RG8
+		GL_RG8_SNORM,          // RG8S
 		GL_RG16,               // RG16
 		GL_RG16F,              // RG16F
+		GL_RG16_SNORM,         // RG16S
 		GL_RG32UI,             // RG32
 		GL_RG32F,              // RG32F
 		GL_RGBA8,              // BGRA8
 		GL_RGBA8,              // RGBA8
+		GL_RGBA8_SNORM,        // RGBA8S
 		GL_RGBA16,             // RGBA16
 		GL_RGBA16F,            // RGBA16F
+		GL_RGBA16_SNORM,       // RGBA16S
 		GL_RGBA32UI,           // RGBA32
 		GL_RGBA32F,            // RGBA32F
 		GL_RGB565,             // R5G6B5
@@ -317,19 +329,25 @@ namespace bgfx { namespace gl
 		GL_ZERO,           // Unknown
 		GL_ZERO,           // R1
 		GL_R8,             // R8
+		GL_R8_SNORM,       // R8S
 		GL_R16,            // R16
 		GL_R16F,           // R16F
+		GL_R16_SNORM,      // R16S
 		GL_R32UI,          // R32
 		GL_R32F,           // R32F
 		GL_RG8,            // RG8
+		GL_RG8_SNORM,      // RG8S
 		GL_RG16,           // RG16
 		GL_RG16F,          // RG16F
+		GL_RG16_SNORM,     // RG16S
 		GL_RG32UI,         // RG32
 		GL_RG32F,          // RG32F
 		GL_RGBA8,          // BGRA8
 		GL_RGBA8,          // RGBA8
+		GL_RGBA8_SNORM,    // RGBA8S
 		GL_RGBA16,         // RGBA16
 		GL_RGBA16F,        // RGBA16F
+		GL_RGBA16_SNORM,   // RGBA16S
 		GL_RGBA32UI,       // RGBA32
 		GL_RGBA32F,        // RGBA32F
 		GL_RGB565,         // R5G6B5
@@ -453,6 +471,7 @@ namespace bgfx { namespace gl
 			EXT_texture_filter_anisotropic,
 			EXT_texture_format_BGRA8888,
 			EXT_texture_rg,
+			EXT_texture_snorm,
 			EXT_texture_sRGB,
 			EXT_texture_storage,
 			EXT_texture_swizzle,
@@ -647,6 +666,7 @@ namespace bgfx { namespace gl
 		{ "EXT_texture_filter_anisotropic",        false,                             true  },
 		{ "EXT_texture_format_BGRA8888",           false,                             true  },
 		{ "EXT_texture_rg",                        false,                             true  }, // GLES2 extension.
+		{ "EXT_texture_snorm",                     BGFX_CONFIG_RENDERER_OPENGL >= 30, true  },
 		{ "EXT_texture_sRGB",                      false,                             true  },
 		{ "EXT_texture_storage",                   false,                             true  },
 		{ "EXT_texture_swizzle",                   false,                             true  },

+ 6 - 0
src/renderer_mtl.mm

@@ -265,19 +265,25 @@ namespace bgfx { namespace mtl
 		{ MTLPixelFormatInvalid,          MTLPixelFormatInvalid              }, // Unknown
 		{ MTLPixelFormatInvalid,          MTLPixelFormatInvalid              }, // R1
 		{ MTLPixelFormatR8Unorm,          MTLPixelFormatR8Unorm_sRGB         }, // R8
+		{ MTLPixelFormatR8Snorm,          MTLPixelFormatInvalid              }, // R8S
 		{ MTLPixelFormatR16Uint,          MTLPixelFormatInvalid              }, // R16
 		{ MTLPixelFormatR16Float,         MTLPixelFormatInvalid              }, // R16F
+		{ MTLPixelFormatR16Snorm,         MTLPixelFormatInvalid              }, // R16S
 		{ MTLPixelFormatR32Uint,          MTLPixelFormatInvalid              }, // R32
 		{ MTLPixelFormatR32Float,         MTLPixelFormatInvalid              }, // R32F
 		{ MTLPixelFormatRG8Unorm,         MTLPixelFormatRG8Unorm_sRGB        }, // RG8
+		{ MTLPixelFormatRG8Snorm,         MTLPixelFormatInvalid              }, // RG8S
 		{ MTLPixelFormatRG16Unorm,        MTLPixelFormatInvalid              }, // RG16
 		{ MTLPixelFormatRG16Float,        MTLPixelFormatInvalid              }, // RG16F
+		{ MTLPixelFormatRG16Snorm,        MTLPixelFormatInvalid              }, // RG16S
 		{ MTLPixelFormatRG32Uint,         MTLPixelFormatInvalid              }, // RG32
 		{ MTLPixelFormatRG32Float,        MTLPixelFormatInvalid              }, // RG32F
 		{ MTLPixelFormatBGRA8Unorm,       MTLPixelFormatBGRA8Unorm_sRGB      }, // BGRA8
 		{ MTLPixelFormatRGBA8Unorm,       MTLPixelFormatRGBA8Unorm_sRGB      }, // RGBA8
+		{ MTLPixelFormatRGBA8Snorm,       MTLPixelFormatInvalid              }, // RGBA8S
 		{ MTLPixelFormatRGBA16Unorm,      MTLPixelFormatInvalid              }, // RGBA16
 		{ MTLPixelFormatRGBA16Float,      MTLPixelFormatInvalid              }, // RGBA16F
+		{ MTLPixelFormatRGBA16Snorm,      MTLPixelFormatInvalid              }, // RGBA16S
 		{ MTLPixelFormatRGBA32Uint,       MTLPixelFormatInvalid              }, // RGBA32
 		{ MTLPixelFormatRGBA32Float,      MTLPixelFormatInvalid              }, // RGBA32F
 		{ MTLPixelFormatB5G6R5Unorm,      MTLPixelFormatInvalid              }, // R5G6B5