From d858dde912e64ca9729b9b05cbc8b3d7e7aa89d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Thu, 5 Mar 2015 17:44:56 -0800 Subject: [PATCH] Added RGBA8 texture format. --- include/bgfx.c99.h | 1 + include/bgfx.h | 1 + src/bgfx_compute.sh | 27 +++++++++++++++++++-------- src/image.cpp | 2 ++ src/renderer_d3d11.cpp | 1 + src/renderer_d3d9.cpp | 1 + src/renderer_gl.cpp | 3 +++ 7 files changed, 28 insertions(+), 8 deletions(-) diff --git a/include/bgfx.c99.h b/include/bgfx.c99.h index d44b85fba..1368c8b21 100644 --- a/include/bgfx.c99.h +++ b/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, diff --git a/include/bgfx.h b/include/bgfx.h index f414e5887..00c6637b9 100644 --- a/include/bgfx.h +++ b/include/bgfx.h @@ -142,6 +142,7 @@ namespace bgfx RG32, RG32F, BGRA8, + RGBA8, RGBA16, RGBA16F, RGBA32, diff --git a/src/bgfx_compute.sh b/src/bgfx_compute.sh index d042293d9..0db15d934 100644 --- a/src/bgfx_compute.sh +++ b/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 _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 _name : register(u[_reg]) +#define UIMAGE2D_RW(_name, _reg) RWTexture2D _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 \ diff --git a/src/image.cpp b/src/image.cpp index 6091a466a..53e3acbcd 100644 --- a/src/image.cpp +++ b/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 diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 81831b514..d49987e2f 100644 --- a/src/renderer_d3d11.cpp +++ b/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 diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index 78ff0dce8..8d4e36217 100644 --- a/src/renderer_d3d9.cpp +++ b/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 diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 4f901aefb..4f5c1c2c9 100644 --- a/src/renderer_gl.cpp +++ b/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