Skip to content

Commit 0029121

Browse files
committed
webgpu: fix some texture format issues;
1 parent 11214bd commit 0029121

File tree

1 file changed

+69
-51
lines changed

1 file changed

+69
-51
lines changed

src/core/gpu_web.c

Lines changed: 69 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ static struct {
9999
#define MAX(a, b) (a > b ? a : b)
100100

101101
static WGPU_TEXTURE_FORMAT convertFormat(gpu_texture_format format, bool srgb);
102-
static uint32_t getRowSize(gpu_texture_format format, uint32_t width);
102+
static uint32_t getRowSize(WGPU_TEXTURE_FORMAT format, uint32_t width);
103103

104104
// Buffer
105105

@@ -1480,9 +1480,9 @@ static WGPU_TEXTURE_FORMAT convertFormat(gpu_texture_format format, bool srgb) {
14801480
[GPU_FORMAT_RG8] = { WGPU_TEXTURE_FORMAT_RG8UNORM, WGPU_TEXTURE_FORMAT_RG8UNORM },
14811481
[GPU_FORMAT_RGBA8] = { WGPU_TEXTURE_FORMAT_RGBA8UNORM, WGPU_TEXTURE_FORMAT_RGBA8UNORM_SRGB },
14821482
[GPU_FORMAT_BGRA8] = { WGPU_TEXTURE_FORMAT_BGRA8UNORM, WGPU_TEXTURE_FORMAT_BGRA8UNORM_SRGB },
1483-
[GPU_FORMAT_R16] = { WGPU_TEXTURE_FORMAT_INVALID, WGPU_TEXTURE_FORMAT_INVALID },
1484-
[GPU_FORMAT_RG16] = { WGPU_TEXTURE_FORMAT_INVALID, WGPU_TEXTURE_FORMAT_INVALID },
1485-
[GPU_FORMAT_RGBA16] = { WGPU_TEXTURE_FORMAT_INVALID, WGPU_TEXTURE_FORMAT_INVALID },
1483+
[GPU_FORMAT_R16] = { WGPU_TEXTURE_FORMAT_R16UNORM, WGPU_TEXTURE_FORMAT_R16UNORM },
1484+
[GPU_FORMAT_RG16] = { WGPU_TEXTURE_FORMAT_RG16UNORM, WGPU_TEXTURE_FORMAT_RG16UNORM },
1485+
[GPU_FORMAT_RGBA16] = { WGPU_TEXTURE_FORMAT_RGBA16UNORM, WGPU_TEXTURE_FORMAT_RGBA16UNORM },
14861486
[GPU_FORMAT_R16F] = { WGPU_TEXTURE_FORMAT_R16FLOAT, WGPU_TEXTURE_FORMAT_R16FLOAT },
14871487
[GPU_FORMAT_RG16F] = { WGPU_TEXTURE_FORMAT_RG16FLOAT, WGPU_TEXTURE_FORMAT_RG16FLOAT },
14881488
[GPU_FORMAT_RGBA16F] = { WGPU_TEXTURE_FORMAT_RGBA16FLOAT, WGPU_TEXTURE_FORMAT_RGBA16FLOAT },
@@ -1527,54 +1527,72 @@ static WGPU_TEXTURE_FORMAT convertFormat(gpu_texture_format format, bool srgb) {
15271527
return formats[format][srgb];
15281528
}
15291529

1530-
static uint32_t getRowSize(gpu_texture_format format, uint32_t width) {
1530+
static uint32_t getRowSize(WGPU_TEXTURE_FORMAT format, uint32_t width) {
15311531
switch (format) {
1532-
case GPU_FORMAT_R8: return width; break;
1533-
case GPU_FORMAT_RG8:
1534-
case GPU_FORMAT_R16:
1535-
case GPU_FORMAT_R16F:
1536-
case GPU_FORMAT_RGB565:
1537-
case GPU_FORMAT_RGB5A1:
1538-
case GPU_FORMAT_D16: return width * 2; break;
1539-
case GPU_FORMAT_RGBA8:
1540-
case GPU_FORMAT_BGRA8:
1541-
case GPU_FORMAT_RG16:
1542-
case GPU_FORMAT_RG16F:
1543-
case GPU_FORMAT_R32F:
1544-
case GPU_FORMAT_RG11B10F:
1545-
case GPU_FORMAT_RGB10A2:
1546-
case GPU_FORMAT_D24:
1547-
case GPU_FORMAT_D24S8:
1548-
case GPU_FORMAT_D32F: return width * 4; break;
1549-
case GPU_FORMAT_D32FS8: return width * 5; break;
1550-
case GPU_FORMAT_RGBA16:
1551-
case GPU_FORMAT_RGBA16F:
1552-
case GPU_FORMAT_RG32F: return width * 8; break;
1553-
case GPU_FORMAT_RGBA32F: return width * 16; break;
1554-
case GPU_FORMAT_BC1: return ((width + 3) / 4) * 8; break;
1555-
case GPU_FORMAT_BC2: return ((width + 3) / 4) * 16; break;
1556-
case GPU_FORMAT_BC3: return ((width + 3) / 4) * 16; break;
1557-
case GPU_FORMAT_BC4U: return ((width + 3) / 4) * 8; break;
1558-
case GPU_FORMAT_BC4S: return ((width + 3) / 4) * 8; break;
1559-
case GPU_FORMAT_BC5U: return ((width + 3) / 4) * 16; break;
1560-
case GPU_FORMAT_BC5S: return ((width + 3) / 4) * 16; break;
1561-
case GPU_FORMAT_BC6UF: return ((width + 3) / 4) * 16; break;
1562-
case GPU_FORMAT_BC6SF: return ((width + 3) / 4) * 16; break;
1563-
case GPU_FORMAT_BC7: return ((width + 3) / 4) * 16; break;
1564-
case GPU_FORMAT_ASTC_4x4: return ((width + 3) / 4) * 16; break;
1565-
case GPU_FORMAT_ASTC_5x4: return ((width + 4) / 5) * 16; break;
1566-
case GPU_FORMAT_ASTC_5x5: return ((width + 4) / 5) * 16; break;
1567-
case GPU_FORMAT_ASTC_6x5: return ((width + 5) / 6) * 16; break;
1568-
case GPU_FORMAT_ASTC_6x6: return ((width + 5) / 6) * 16; break;
1569-
case GPU_FORMAT_ASTC_8x5: return ((width + 7) / 8) * 16; break;
1570-
case GPU_FORMAT_ASTC_8x6: return ((width + 7) / 8) * 16; break;
1571-
case GPU_FORMAT_ASTC_8x8: return ((width + 7) / 8) * 16; break;
1572-
case GPU_FORMAT_ASTC_10x5: return ((width + 9) / 10) * 16; break;
1573-
case GPU_FORMAT_ASTC_10x6: return ((width + 9) / 10) * 16; break;
1574-
case GPU_FORMAT_ASTC_10x8: return ((width + 9) / 10) * 16; break;
1575-
case GPU_FORMAT_ASTC_10x10: return ((width + 9) / 10) * 16; break;
1576-
case GPU_FORMAT_ASTC_12x10: return ((width + 11) / 12) * 16; break;
1577-
case GPU_FORMAT_ASTC_12x12: return ((width + 11) / 12) * 16; break;
1532+
case WGPU_TEXTURE_FORMAT_R8UNORM:
1533+
return width;
1534+
case WGPU_TEXTURE_FORMAT_RG8UNORM:
1535+
case WGPU_TEXTURE_FORMAT_R16UNORM:
1536+
case WGPU_TEXTURE_FORMAT_R16FLOAT:
1537+
case WGPU_TEXTURE_FORMAT_DEPTH16UNORM:
1538+
return width * 2;
1539+
case WGPU_TEXTURE_FORMAT_RGBA8UNORM:
1540+
case WGPU_TEXTURE_FORMAT_RGBA8UNORM_SRGB:
1541+
case WGPU_TEXTURE_FORMAT_BGRA8UNORM:
1542+
case WGPU_TEXTURE_FORMAT_BGRA8UNORM_SRGB:
1543+
case WGPU_TEXTURE_FORMAT_RG16UNORM:
1544+
case WGPU_TEXTURE_FORMAT_RG16FLOAT:
1545+
case WGPU_TEXTURE_FORMAT_R32FLOAT:
1546+
case WGPU_TEXTURE_FORMAT_RG11B10UFLOAT:
1547+
case WGPU_TEXTURE_FORMAT_RGB10A2UNORM:
1548+
case WGPU_TEXTURE_FORMAT_DEPTH24PLUS:
1549+
case WGPU_TEXTURE_FORMAT_DEPTH24PLUS_STENCIL8:
1550+
case WGPU_TEXTURE_FORMAT_DEPTH32FLOAT:
1551+
return width * 4;
1552+
case WGPU_TEXTURE_FORMAT_DEPTH32FLOAT_STENCIL8:
1553+
return width * 5;
1554+
case WGPU_TEXTURE_FORMAT_RGBA16UNORM:
1555+
case WGPU_TEXTURE_FORMAT_RGBA16FLOAT:
1556+
case WGPU_TEXTURE_FORMAT_RG32FLOAT:
1557+
return width * 8;
1558+
case WGPU_TEXTURE_FORMAT_RGBA32FLOAT:
1559+
return width * 16;
1560+
case WGPU_TEXTURE_FORMAT_BC1_RGBA_UNORM: case WGPU_TEXTURE_FORMAT_BC1_RGBA_UNORM_SRGB:
1561+
case WGPU_TEXTURE_FORMAT_BC2_RGBA_UNORM: case WGPU_TEXTURE_FORMAT_BC2_RGBA_UNORM_SRGB:
1562+
case WGPU_TEXTURE_FORMAT_BC3_RGBA_UNORM: case WGPU_TEXTURE_FORMAT_BC3_RGBA_UNORM_SRGB:
1563+
case WGPU_TEXTURE_FORMAT_BC4_R_UNORM: case WGPU_TEXTURE_FORMAT_BC4_R_SNORM:
1564+
case WGPU_TEXTURE_FORMAT_BC5_RG_UNORM: case WGPU_TEXTURE_FORMAT_BC5_RG_SNORM:
1565+
case WGPU_TEXTURE_FORMAT_BC6H_RGB_UFLOAT: case WGPU_TEXTURE_FORMAT_BC6H_RGB_FLOAT:
1566+
case WGPU_TEXTURE_FORMAT_BC7_RGBA_UNORM: case WGPU_TEXTURE_FORMAT_BC7_RGBA_UNORM_SRGB:
1567+
return ((width + 3) / 4) * 16;
1568+
case WGPU_TEXTURE_FORMAT_ASTC_4X4_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_4X4_UNORM_SRGB:
1569+
return ((width + 3) / 4) * 16;
1570+
case WGPU_TEXTURE_FORMAT_ASTC_5X4_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_5X4_UNORM_SRGB:
1571+
return ((width + 4) / 5) * 16;
1572+
case WGPU_TEXTURE_FORMAT_ASTC_5X5_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_5X5_UNORM_SRGB:
1573+
return ((width + 4) / 5) * 16;
1574+
case WGPU_TEXTURE_FORMAT_ASTC_6X5_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_6X5_UNORM_SRGB:
1575+
return ((width + 5) / 6) * 16;
1576+
case WGPU_TEXTURE_FORMAT_ASTC_6X6_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_6X6_UNORM_SRGB:
1577+
return ((width + 5) / 6) * 16;
1578+
case WGPU_TEXTURE_FORMAT_ASTC_8X5_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_8X5_UNORM_SRGB:
1579+
return ((width + 7) / 8) * 16;
1580+
case WGPU_TEXTURE_FORMAT_ASTC_8X6_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_8X6_UNORM_SRGB:
1581+
return ((width + 7) / 8) * 16;
1582+
case WGPU_TEXTURE_FORMAT_ASTC_8X8_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_8X8_UNORM_SRGB:
1583+
return ((width + 7) / 8) * 16;
1584+
case WGPU_TEXTURE_FORMAT_ASTC_10X5_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_10X5_UNORM_SRGB:
1585+
return ((width + 9) / 10) * 16;
1586+
case WGPU_TEXTURE_FORMAT_ASTC_10X6_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_10X6_UNORM_SRGB:
1587+
return ((width + 9) / 10) * 16;
1588+
case WGPU_TEXTURE_FORMAT_ASTC_10X8_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_10X8_UNORM_SRGB:
1589+
return ((width + 9) / 10) * 16;
1590+
case WGPU_TEXTURE_FORMAT_ASTC_10X10_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_10X10_UNORM_SRGB:
1591+
return ((width + 9) / 10) * 16;
1592+
case WGPU_TEXTURE_FORMAT_ASTC_12X10_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_12X10_UNORM_SRGB:
1593+
return ((width + 11) / 12) * 16;
1594+
case WGPU_TEXTURE_FORMAT_ASTC_12X12_UNORM: case WGPU_TEXTURE_FORMAT_ASTC_12X12_UNORM_SRGB:
1595+
return ((width + 11) / 12) * 16;
15781596
default: return 0;
15791597
}
15801598
}

0 commit comments

Comments
 (0)