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

+ 1 - 0
include/bgfx.c99.h

@@ -104,6 +104,7 @@ typedef enum bgfx_texture_format
     BGFX_TEXTURE_FORMAT_RG32,
     BGFX_TEXTURE_FORMAT_RG32F,
     BGFX_TEXTURE_FORMAT_BGRA8,
+    BGFX_TEXTURE_FORMAT_RGBA8,
     BGFX_TEXTURE_FORMAT_RGBA16,
     BGFX_TEXTURE_FORMAT_RGBA16F,
     BGFX_TEXTURE_FORMAT_RGBA32,

+ 1 - 0
include/bgfx.h

@@ -142,6 +142,7 @@ namespace bgfx
 			RG32,
 			RG32F,
 			BGRA8,
+			RGBA8,
 			RGBA16,
 			RGBA16F,
 			RGBA32,

+ 19 - 8
src/bgfx_compute.sh

@@ -44,9 +44,17 @@ vec2 unpackHalf2x16(uint _x)
 
 #define SHARED groupshared
 
-#define IMAGE2D_RO(_name, _reg) Texture2D           _name : register(t[_reg])
-#define IMAGE2D_RW(_name, _reg) RWTexture2D<float4> _name : register(u[_reg])
-#define IMAGE2D_WR(_name, _reg) IMAGE2D_RW(_name, _reg)
+#define r32ui  uint
+#define r32f   float
+#define rg16f  float2
+#define rgba8  float4
+
+#define IMAGE2D_RO( _name, _format, _reg) Texture2D<_format>   _name : register(t[_reg])
+#define UIMAGE2D_RO(_name, _format, _reg) Texture2D<_format>   _name : register(t[_reg])
+#define IMAGE2D_WR( _name, _format, _reg) RWTexture2D<_format> _name : register(u[_reg])
+#define UIMAGE2D_WR(_name, _format, _reg) RWTexture2D<_format> _name : register(u[_reg])
+#define IMAGE2D_RW( _name, _reg) RWTexture2D<float> _name : register(u[_reg])
+#define UIMAGE2D_RW(_name, _reg) RWTexture2D<uint>  _name : register(u[_reg])
 
 #define BUFFER_RO(_name, _struct, _reg) Buffer<_struct>   _name : register(b[_reg])
 #define BUFFER_RW(_name, _struct, _reg) RWBuffer<_struct> _name : register(u[_reg])
@@ -153,13 +161,16 @@ uint atomicCompSwap(uint _mem, uint _compare, uint _data)
 
 #define SHARED shared
 
-#define __IMAGE2D_XX(_name, _reg, _access) \
-			layout(rgba8, binding=_reg) _access uniform highp image2D _name
+#define __IMAGE_XX(_name, _format, _reg, _image, _access) \
+			layout(_format, binding=_reg) _access uniform highp _image _name
 
 #define readwrite
-#define IMAGE2D_RO(_name, _reg) __IMAGE2D_XX(_name, _reg, readonly)
-#define IMAGE2D_RW(_name, _reg) __IMAGE2D_XX(_name, _reg, readwrite)
-#define IMAGE2D_WR(_name, _reg) __IMAGE2D_XX(_name, _reg, writeonly)
+#define IMAGE2D_RO( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D,  readonly)
+#define UIMAGE2D_RO(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, readonly)
+#define IMAGE2D_WR( _name, _format, _reg) __IMAGE_XX(_name, _format, _reg, image2D,  writeonly)
+#define UIMAGE2D_WR(_name, _format, _reg) __IMAGE_XX(_name, _format, _reg, uimage2D, writeonly)
+#define IMAGE2D_RW( _name, _reg) __IMAGE_XX(_name, r32f,  _reg, image2D,  readwrite)
+#define UIMAGE2D_RW(_name, _reg) __IMAGE_XX(_name, r32ui, _reg, uimage2D, readwrite)
 
 #define __BUFFER_XX(_name, _type, _reg, _access) \
 			layout(std430, binding=_reg) _access buffer _name ## Buffer \

+ 2 - 0
src/image.cpp

@@ -49,6 +49,7 @@ namespace bgfx
 		{  64, 1, 1,  8, 1, 1 }, // RG32
 		{  64, 1, 1,  8, 1, 1 }, // RG32F
 		{  32, 1, 1,  4, 1, 1 }, // BGRA8
+		{  32, 1, 1,  4, 1, 1 }, // RGBA8
 		{  64, 1, 1,  8, 1, 1 }, // RGBA16
 		{  64, 1, 1,  8, 1, 1 }, // RGBA16F
 		{ 128, 1, 1, 16, 1, 1 }, // RGBA32
@@ -102,6 +103,7 @@ namespace bgfx
 		"RG32",       // RG32
 		"RG32F",      // RG32F
 		"BGRA8",      // BGRA8
+		"RGBA8",      // RGBA8
 		"RGBA16",     // RGBA16
 		"RGBA16F",    // RGBA16F
 		"RGBA32",     // RGBA32

+ 1 - 0
src/renderer_d3d11.cpp

@@ -213,6 +213,7 @@ namespace bgfx
 		{ DXGI_FORMAT_R32G32_UINT,        DXGI_FORMAT_R32G32_UINT,           DXGI_FORMAT_UNKNOWN           }, // RG32
 		{ DXGI_FORMAT_R32G32_FLOAT,       DXGI_FORMAT_R32G32_FLOAT,          DXGI_FORMAT_UNKNOWN           }, // RG32F
 		{ DXGI_FORMAT_B8G8R8A8_UNORM,     DXGI_FORMAT_B8G8R8A8_UNORM,        DXGI_FORMAT_UNKNOWN           }, // BGRA8
+		{ DXGI_FORMAT_R8G8B8A8_UNORM,     DXGI_FORMAT_R8G8B8A8_UNORM,        DXGI_FORMAT_UNKNOWN           }, // RGBA8
 		{ DXGI_FORMAT_R16G16B16A16_UNORM, DXGI_FORMAT_R16G16B16A16_UNORM,    DXGI_FORMAT_UNKNOWN           }, // RGBA16
 		{ DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_R16G16B16A16_FLOAT,    DXGI_FORMAT_UNKNOWN           }, // RGBA16F
 		{ DXGI_FORMAT_R32G32B32A32_UINT,  DXGI_FORMAT_R32G32B32A32_UINT,     DXGI_FORMAT_UNKNOWN           }, // RGBA32

+ 1 - 0
src/renderer_d3d9.cpp

@@ -219,6 +219,7 @@ namespace bgfx
 		{ D3DFMT_UNKNOWN       }, // RG32
 		{ D3DFMT_G32R32F       }, // RG32F
 		{ D3DFMT_A8R8G8B8      }, // BGRA8
+		{ D3DFMT_A8R8G8B8      }, // RGBA8
 		{ D3DFMT_A16B16G16R16  }, // RGBA16
 		{ D3DFMT_A16B16G16R16F }, // RGBA16F
 		{ D3DFMT_UNKNOWN       }, // RGBA32

+ 3 - 0
src/renderer_gl.cpp

@@ -215,6 +215,7 @@ namespace bgfx
 		{ GL_RG32UI,                                   GL_RG,                                       GL_UNSIGNED_INT,                 true  }, // RG32
 		{ GL_RG32F,                                    GL_RG,                                       GL_FLOAT,                        true  }, // RG32F
 		{ GL_RGBA,                                     GL_RGBA,                                     GL_UNSIGNED_BYTE,                true  }, // BGRA8
+		{ GL_RGBA,                                     GL_RGBA,                                     GL_UNSIGNED_BYTE,                true  }, // RGBA8
 		{ GL_RGBA16,                                   GL_RGBA,                                     GL_UNSIGNED_BYTE,                true  }, // RGBA16
 		{ GL_RGBA16F,                                  GL_RGBA,                                     GL_HALF_FLOAT,                   true  }, // RGBA16F
 		{ GL_RGBA32UI,                                 GL_RGBA,                                     GL_UNSIGNED_INT,                 true  }, // RGBA32
@@ -268,6 +269,7 @@ namespace bgfx
 		GL_RG32UI,             // RG32
 		GL_RG32F,              // RG32F
 		GL_RGBA8,              // BGRA8
+		GL_RGBA8,              // RGBA8
 		GL_RGBA16,             // RGBA16
 		GL_RGBA16F,            // RGBA16F
 		GL_RGBA32UI,           // RGBA32
@@ -321,6 +323,7 @@ namespace bgfx
 		GL_RG32UI,         // RG32
 		GL_RG32F,          // RG32F
 		GL_RGBA8,          // BGRA8
+		GL_RGBA8,          // RGBA8
 		GL_RGBA16,         // RGBA16
 		GL_RGBA16F,        // RGBA16F
 		GL_RGBA32UI,       // RGBA32