mirror of https://github.com/bjornbytes/lovr.git
Add d32fs8;
This commit is contained in:
parent
7aab5ce79b
commit
5d3e1f93cd
|
@ -23,8 +23,9 @@ StringEntry lovrTextureFormat[] = {
|
|||
[FORMAT_RGB10A2] = ENTRY("rgb10a2"),
|
||||
[FORMAT_RG11B10F] = ENTRY("rg11b10f"),
|
||||
[FORMAT_D16] = ENTRY("d16"),
|
||||
[FORMAT_D24S8] = ENTRY("d24s8"),
|
||||
[FORMAT_D32F] = ENTRY("d32f"),
|
||||
[FORMAT_D24S8] = ENTRY("d24s8"),
|
||||
[FORMAT_D32FS8] = ENTRY("d32fs8"),
|
||||
[FORMAT_BC1] = ENTRY("bc1"),
|
||||
[FORMAT_BC2] = ENTRY("bc2"),
|
||||
[FORMAT_BC3] = ENTRY("bc3"),
|
||||
|
|
|
@ -78,8 +78,9 @@ typedef enum {
|
|||
GPU_FORMAT_RGB10A2,
|
||||
GPU_FORMAT_RG11B10F,
|
||||
GPU_FORMAT_D16,
|
||||
GPU_FORMAT_D24S8,
|
||||
GPU_FORMAT_D32F,
|
||||
GPU_FORMAT_D24S8,
|
||||
GPU_FORMAT_D32FS8,
|
||||
GPU_FORMAT_BC1,
|
||||
GPU_FORMAT_BC2,
|
||||
GPU_FORMAT_BC3,
|
||||
|
|
|
@ -87,12 +87,14 @@ typedef enum {
|
|||
GPU_MEMORY_BUFFER_CPU_READ,
|
||||
GPU_MEMORY_TEXTURE_COLOR,
|
||||
GPU_MEMORY_TEXTURE_D16,
|
||||
GPU_MEMORY_TEXTURE_D24S8,
|
||||
GPU_MEMORY_TEXTURE_D32F,
|
||||
GPU_MEMORY_TEXTURE_D24S8,
|
||||
GPU_MEMORY_TEXTURE_D32FS8,
|
||||
GPU_MEMORY_TEXTURE_LAZY_COLOR,
|
||||
GPU_MEMORY_TEXTURE_LAZY_D16,
|
||||
GPU_MEMORY_TEXTURE_LAZY_D24S8,
|
||||
GPU_MEMORY_TEXTURE_LAZY_D32F,
|
||||
GPU_MEMORY_TEXTURE_LAZY_D24S8,
|
||||
GPU_MEMORY_TEXTURE_LAZY_D32FS8,
|
||||
GPU_MEMORY_COUNT
|
||||
} gpu_memory_type;
|
||||
|
||||
|
@ -490,13 +492,17 @@ bool gpu_texture_init(gpu_texture* texture, gpu_texture_info* info) {
|
|||
texture->aspect = VK_IMAGE_ASPECT_DEPTH_BIT;
|
||||
memoryType = (info->usage & GPU_TEXTURE_TRANSIENT) ? GPU_MEMORY_TEXTURE_LAZY_D16 : GPU_MEMORY_TEXTURE_D16;
|
||||
break;
|
||||
case GPU_FORMAT_D32F:
|
||||
texture->aspect = VK_IMAGE_ASPECT_DEPTH_BIT;
|
||||
memoryType = (info->usage & GPU_TEXTURE_TRANSIENT) ? GPU_MEMORY_TEXTURE_LAZY_D32F : GPU_MEMORY_TEXTURE_D32F;
|
||||
break;
|
||||
case GPU_FORMAT_D24S8:
|
||||
texture->aspect = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||
memoryType = (info->usage & GPU_TEXTURE_TRANSIENT) ? GPU_MEMORY_TEXTURE_LAZY_D24S8 : GPU_MEMORY_TEXTURE_D24S8;
|
||||
break;
|
||||
case GPU_FORMAT_D32F:
|
||||
texture->aspect = VK_IMAGE_ASPECT_DEPTH_BIT;
|
||||
memoryType = (info->usage & GPU_TEXTURE_TRANSIENT) ? GPU_MEMORY_TEXTURE_LAZY_D32F : GPU_MEMORY_TEXTURE_D32F;
|
||||
case GPU_FORMAT_D32FS8:
|
||||
texture->aspect = VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||
memoryType = (info->usage & GPU_TEXTURE_TRANSIENT) ? GPU_MEMORY_TEXTURE_LAZY_D32FS8 : GPU_MEMORY_TEXTURE_D32FS8;
|
||||
break;
|
||||
default:
|
||||
texture->aspect = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
|
@ -2023,12 +2029,14 @@ bool gpu_init(gpu_config* config) {
|
|||
struct { VkFormat format; VkImageUsageFlags usage; } imageFlags[] = {
|
||||
[GPU_MEMORY_TEXTURE_COLOR] = { VK_FORMAT_R8_UNORM, VK_IMAGE_USAGE_SAMPLED_BIT },
|
||||
[GPU_MEMORY_TEXTURE_D16] = { VK_FORMAT_D16_UNORM, VK_IMAGE_USAGE_SAMPLED_BIT },
|
||||
[GPU_MEMORY_TEXTURE_D24S8] = { VK_FORMAT_D24_UNORM_S8_UINT, VK_IMAGE_USAGE_SAMPLED_BIT },
|
||||
[GPU_MEMORY_TEXTURE_D32F] = { VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_SAMPLED_BIT },
|
||||
[GPU_MEMORY_TEXTURE_D24S8] = { VK_FORMAT_D24_UNORM_S8_UINT, VK_IMAGE_USAGE_SAMPLED_BIT },
|
||||
[GPU_MEMORY_TEXTURE_D32FS8] = { VK_FORMAT_D32_SFLOAT_S8_UINT, VK_IMAGE_USAGE_SAMPLED_BIT },
|
||||
[GPU_MEMORY_TEXTURE_LAZY_COLOR] = { VK_FORMAT_R8_UNORM, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | transient },
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D16] = { VK_FORMAT_D16_UNORM, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | transient },
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D32F] = { VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | transient },
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D24S8] = { VK_FORMAT_D24_UNORM_S8_UINT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | transient },
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D32F] = { VK_FORMAT_D32_SFLOAT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | transient }
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D32FS8] = { VK_FORMAT_D32_SFLOAT_S8_UINT, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | transient }
|
||||
};
|
||||
|
||||
uint32_t allocatorCount = GPU_MEMORY_TEXTURE_COLOR;
|
||||
|
@ -2341,12 +2349,14 @@ static gpu_memory* gpu_allocate(gpu_memory_type type, VkMemoryRequirements info,
|
|||
[GPU_MEMORY_BUFFER_CPU_READ] = 0,
|
||||
[GPU_MEMORY_TEXTURE_COLOR] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_D16] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_D24S8] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_D32F] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_D24S8] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_D32FS8] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_LAZY_COLOR] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D16] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D32F] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D24S8] = 1 << 28,
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D32F] = 1 << 28
|
||||
[GPU_MEMORY_TEXTURE_LAZY_D32FS8] = 1 << 28
|
||||
};
|
||||
|
||||
uint32_t blockSize = blockSizes[type];
|
||||
|
@ -2685,8 +2695,9 @@ static VkFormat convertFormat(gpu_texture_format format, int colorspace) {
|
|||
[GPU_FORMAT_RGB10A2] = { VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_FORMAT_A2B10G10R10_UNORM_PACK32 },
|
||||
[GPU_FORMAT_RG11B10F] = { VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_B10G11R11_UFLOAT_PACK32 },
|
||||
[GPU_FORMAT_D16] = { VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM },
|
||||
[GPU_FORMAT_D24S8] = { VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT },
|
||||
[GPU_FORMAT_D32F] = { VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT },
|
||||
[GPU_FORMAT_D24S8] = { VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT },
|
||||
[GPU_FORMAT_D32FS8] = { VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT },
|
||||
[GPU_FORMAT_BC1] = { VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_BC1_RGB_SRGB_BLOCK },
|
||||
[GPU_FORMAT_BC2] = { VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC2_SRGB_BLOCK },
|
||||
[GPU_FORMAT_BC3] = { VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC3_SRGB_BLOCK },
|
||||
|
|
|
@ -48,8 +48,9 @@ static size_t measure(uint32_t w, uint32_t h, TextureFormat format) {
|
|||
case FORMAT_RGB10A2: return w * h * 4;
|
||||
case FORMAT_RG11B10F: return w * h * 4;
|
||||
case FORMAT_D16: return w * h * 2;
|
||||
case FORMAT_D24S8: return w * h * 4;
|
||||
case FORMAT_D32F: return w * h * 4;
|
||||
case FORMAT_D24S8: return w * h * 4;
|
||||
case FORMAT_D32FS8: return w * h * 5;
|
||||
case FORMAT_BC1: return ((w + 3) / 4) * ((h + 3) / 4) * 8;
|
||||
case FORMAT_BC2:
|
||||
case FORMAT_BC3:
|
||||
|
@ -134,7 +135,15 @@ bool lovrImageIsCube(Image* image) {
|
|||
}
|
||||
|
||||
bool lovrImageIsDepth(Image* image) {
|
||||
return image->format == FORMAT_D16 || image->format == FORMAT_D24S8 || image->format == FORMAT_D32F;
|
||||
switch (image->format) {
|
||||
case FORMAT_D16:
|
||||
case FORMAT_D32F:
|
||||
case FORMAT_D24S8:
|
||||
case FORMAT_D32FS8:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool lovrImageIsCompressed(Image* image) {
|
||||
|
@ -628,6 +637,10 @@ static Image* loadDDS(Blob* blob) {
|
|||
format = FORMAT_RG32F;
|
||||
break;
|
||||
|
||||
case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
|
||||
format = FORMAT_D32FS8;
|
||||
break;
|
||||
|
||||
case DXGI_FORMAT_R10G10B10A2_TYPELESS:
|
||||
case DXGI_FORMAT_R10G10B10A2_UNORM:
|
||||
format = FORMAT_RGB10A2;
|
||||
|
@ -963,8 +976,9 @@ static Image* loadKTX1(Blob* blob) {
|
|||
[FORMAT_RGB10A2] = { 0x8368, 0x1908, 0x8059, 0 },
|
||||
[FORMAT_RG11B10F] = { 0x8C3B, 0x1907, 0x8C3A, 0 },
|
||||
[FORMAT_D16] = { 0x1403, 0x1902, 0x81A5, 0 },
|
||||
[FORMAT_D24S8] = { 0x84FA, 0x84F9, 0x88F0, 0 },
|
||||
[FORMAT_D32F] = { 0x1406, 0x1902, 0x8CAC, 0 },
|
||||
[FORMAT_D24S8] = { 0x84FA, 0x84F9, 0x88F0, 0 },
|
||||
[FORMAT_D32FS8] = { 0x8DAD, 0x84F9, 0x8CAD, 0 },
|
||||
[FORMAT_BC1] = { 0x0000, 0x0000, 0x83F1, 0x8C4D },
|
||||
[FORMAT_BC2] = { 0x0000, 0x0000, 0x83F2, 0x8C4E },
|
||||
[FORMAT_BC3] = { 0x0000, 0x0000, 0x83F3, 0x8C4F },
|
||||
|
@ -1105,8 +1119,9 @@ static Image* loadKTX2(Blob* blob) {
|
|||
case 64: image->format = FORMAT_RGB10A2; break;
|
||||
case 122: image->format = FORMAT_RG11B10F; break;
|
||||
case 124: image->format = FORMAT_D16; break;
|
||||
case 129: image->format = FORMAT_D24S8; break;
|
||||
case 126: image->format = FORMAT_D32F; break;
|
||||
case 129: image->format = FORMAT_D24S8; break;
|
||||
case 130: image->format = FORMAT_D32FS8; break;
|
||||
case 132: image->flags |= IMAGE_SRGB; case 131: image->format = FORMAT_BC1; break;
|
||||
case 136: image->flags |= IMAGE_SRGB; case 135: image->format = FORMAT_BC2; break;
|
||||
case 138: image->flags |= IMAGE_SRGB; case 137: image->format = FORMAT_BC3; break;
|
||||
|
|
|
@ -24,8 +24,9 @@ typedef enum {
|
|||
FORMAT_RGB10A2,
|
||||
FORMAT_RG11B10F,
|
||||
FORMAT_D16,
|
||||
FORMAT_D24S8,
|
||||
FORMAT_D32F,
|
||||
FORMAT_D24S8,
|
||||
FORMAT_D32FS8,
|
||||
FORMAT_BC1,
|
||||
FORMAT_BC2,
|
||||
FORMAT_BC3,
|
||||
|
|
|
@ -2968,7 +2968,7 @@ Pass* lovrGraphicsGetPass(PassInfo* info) {
|
|||
if (canvas->depth.texture || canvas->depth.format) {
|
||||
TextureFormat format = canvas->depth.texture ? canvas->depth.texture->info.format : canvas->depth.format;
|
||||
bool renderable = state.features.formats[format] & GPU_FEATURE_RENDER;
|
||||
lovrCheck(format == FORMAT_D16 || format == FORMAT_D24S8 || format == FORMAT_D32F, "Depth buffer must use a depth format");
|
||||
lovrCheck(format == FORMAT_D16 || format == FORMAT_D32F || format == FORMAT_D24S8 || format == FORMAT_D32FS8, "Depth buffer must use a depth format");
|
||||
lovrCheck(renderable, "This GPU does not support depth buffers with this texture format");
|
||||
if (canvas->depth.texture) {
|
||||
const TextureInfo* texture = &canvas->depth.texture->info;
|
||||
|
@ -5283,6 +5283,7 @@ static size_t measureTexture(TextureFormat format, uint16_t w, uint16_t h, uint1
|
|||
case FORMAT_RGB10A2:
|
||||
case FORMAT_D24S8:
|
||||
case FORMAT_D32F: return w * h * d * 4;
|
||||
case FORMAT_D32FS8: return w * h * d * 5;
|
||||
case FORMAT_RGBA16:
|
||||
case FORMAT_RGBA16F:
|
||||
case FORMAT_RG32F: return w * h * d * 8;
|
||||
|
|
Loading…
Reference in New Issue