diff --git a/examples/example_4.c b/examples/example_4.c index dd689275..bb6719a8 100644 --- a/examples/example_4.c +++ b/examples/example_4.c @@ -290,8 +290,8 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData) { .uByteStride = sizeof(float) * 6, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 2, .tFormat = PL_FORMAT_R32G32B32A32_FLOAT}, + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 2, .tFormat = PL_VERTEX_FORMAT_FLOAT4}, } } }, diff --git a/examples/example_5.c b/examples/example_5.c index cec37b89..e5a166e9 100644 --- a/examples/example_5.c +++ b/examples/example_5.c @@ -362,8 +362,8 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData) { .uByteStride = sizeof(float) * 6, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 2, .tFormat = PL_FORMAT_R32G32B32A32_FLOAT}, + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 2, .tFormat = PL_VERTEX_FORMAT_FLOAT4}, } } }, diff --git a/examples/example_6.c b/examples/example_6.c index 84a5b2cf..d386c5de 100644 --- a/examples/example_6.c +++ b/examples/example_6.c @@ -502,8 +502,8 @@ pl_app_load(plApiRegistryI* ptApiRegistry, plAppData* ptAppData) { .uByteStride = sizeof(float) * 4, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 2, .tFormat = PL_FORMAT_R32G32_FLOAT}, + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 2, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, } } }, diff --git a/extensions/pl_draw_backend_ext.c b/extensions/pl_draw_backend_ext.c index 1d3e9def..10cc09e3 100644 --- a/extensions/pl_draw_backend_ext.c +++ b/extensions/pl_draw_backend_ext.c @@ -397,8 +397,8 @@ pl__get_3d_pipeline(plRenderPassHandle tRenderPass, uint32_t uMSAASampleCount, p { .uByteStride = sizeof(float) * 4, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32B32_FLOAT}, - {.uByteOffset = sizeof(float) * 3, .tFormat = PL_FORMAT_R32_UINT}, + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT3}, + {.uByteOffset = sizeof(float) * 3, .tFormat = PL_VERTEX_FORMAT_UINT}, } } }, @@ -441,10 +441,10 @@ pl__get_3d_pipeline(plRenderPassHandle tRenderPass, uint32_t uMSAASampleCount, p { .uByteStride = sizeof(float) * 10, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32B32_FLOAT}, - {.uByteOffset = sizeof(float) * 3, .tFormat = PL_FORMAT_R32G32B32_FLOAT}, - {.uByteOffset = sizeof(float) * 6, .tFormat = PL_FORMAT_R32G32B32_FLOAT}, - {.uByteOffset = sizeof(float) * 9, .tFormat = PL_FORMAT_R32_UINT}, + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT3}, + {.uByteOffset = sizeof(float) * 3, .tFormat = PL_VERTEX_FORMAT_FLOAT3}, + {.uByteOffset = sizeof(float) * 6, .tFormat = PL_VERTEX_FORMAT_FLOAT3}, + {.uByteOffset = sizeof(float) * 9, .tFormat = PL_VERTEX_FORMAT_UINT}, } } }, @@ -510,9 +510,9 @@ pl__get_2d_pipeline(plRenderPassHandle tRenderPass, uint32_t uMSAASampleCount, u { .uByteStride = sizeof(float) * 5, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 2, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 4, .tFormat = PL_FORMAT_R32_UINT}, + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 2, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 4, .tFormat = PL_VERTEX_FORMAT_UINT}, } } }, @@ -565,9 +565,9 @@ pl__get_2d_pipeline(plRenderPassHandle tRenderPass, uint32_t uMSAASampleCount, u { .uByteStride = sizeof(float) * 5, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 2, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 4, .tFormat = PL_FORMAT_R32_UINT}, + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 2, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 4, .tFormat = PL_VERTEX_FORMAT_UINT}, } } }, diff --git a/extensions/pl_graphics_ext.h b/extensions/pl_graphics_ext.h index b8f3057d..c183387c 100644 --- a/extensions/pl_graphics_ext.h +++ b/extensions/pl_graphics_ext.h @@ -172,6 +172,7 @@ typedef int plTextureType; // -> enum _plTextureType // Enu typedef int plTextureUsage; // -> enum _plTextureUsage // Flag: texture type (PL_TEXTURE_USAGE_XXXX) typedef int plCompareMode; // -> enum _plCompareMode // Enum: texture sampling comparison modes (PL_COMPARE_MODE_XXXX) typedef int plFormat; // -> enum _plFormat // Enum: formats (PL_FORMAT_XXXX) +typedef int plVertexFormat; // -> enum _plVertexFormat // Enum: formats (PL_FORMAT_VERTEX_XXXX) typedef int plBufferUsage; // -> enum _plBufferUsage // Flag: buffer usage flags (PL_BUFFER_USAGE_XXXX) typedef int plStageFlags; // -> enum _plStageFlags // Flag: GPU pipeline stage (PL_STAGE_XXXX) typedef int plCullMode; // -> enum _plCullMode // Flag: face culling mode (PL_CULL_MODE_XXXX) @@ -644,8 +645,8 @@ typedef struct _plBlendState typedef struct _plVertexAttribute { - uint32_t uByteOffset; - plFormat tFormat; + uint32_t uByteOffset; + plVertexFormat tFormat; } plVertexAttribute; typedef struct _plVertexBufferLayout @@ -1102,27 +1103,6 @@ enum _plCullMode PL_CULL_MODE_CULL_BACK = 1 << 1, }; -enum _plFormat -{ - PL_FORMAT_UNKNOWN = 0, - PL_FORMAT_R32G32B32_FLOAT, - PL_FORMAT_R32G32B32A32_FLOAT, - PL_FORMAT_R8G8B8A8_UNORM, - PL_FORMAT_R32G32_FLOAT, - PL_FORMAT_R32_UINT, - PL_FORMAT_R8_UNORM, - PL_FORMAT_R8G8_UNORM, - PL_FORMAT_R8G8B8A8_SRGB, - PL_FORMAT_B8G8R8A8_SRGB, - PL_FORMAT_B8G8R8A8_UNORM, - PL_FORMAT_D32_FLOAT, - PL_FORMAT_D32_FLOAT_S8_UINT, - PL_FORMAT_D24_UNORM_S8_UINT, - PL_FORMAT_D16_UNORM_S8_UINT, - - PL_FORMAT_COUNT -}; - enum _plBufferBindingType { PL_BUFFER_BINDING_TYPE_UNSPECIFIED, @@ -1249,6 +1229,190 @@ enum _plDataType PL_DATA_TYPE_UNSIGNED_LONG4, }; +enum _plVertexFormat +{ + PL_VERTEX_FORMAT_UNKNOWN = 0, + + PL_VERTEX_FORMAT_HALF, + PL_VERTEX_FORMAT_HALF2, + PL_VERTEX_FORMAT_HALF3, + PL_VERTEX_FORMAT_HALF4, + + PL_VERTEX_FORMAT_FLOAT, + PL_VERTEX_FORMAT_FLOAT2, + PL_VERTEX_FORMAT_FLOAT3, + PL_VERTEX_FORMAT_FLOAT4, + + PL_VERTEX_FORMAT_UCHAR, + PL_VERTEX_FORMAT_UCHAR2, + PL_VERTEX_FORMAT_UCHAR3, + PL_VERTEX_FORMAT_UCHAR4, + + PL_VERTEX_FORMAT_CHAR, + PL_VERTEX_FORMAT_CHAR2, + PL_VERTEX_FORMAT_CHAR3, + PL_VERTEX_FORMAT_CHAR4, + + PL_VERTEX_FORMAT_USHORT, + PL_VERTEX_FORMAT_USHORT2, + PL_VERTEX_FORMAT_USHORT3, + PL_VERTEX_FORMAT_USHORT4, + + PL_VERTEX_FORMAT_SHORT, + PL_VERTEX_FORMAT_SHORT2, + PL_VERTEX_FORMAT_SHORT3, + PL_VERTEX_FORMAT_SHORT4, + + PL_VERTEX_FORMAT_UINT, + PL_VERTEX_FORMAT_UINT2, + PL_VERTEX_FORMAT_UINT3, + PL_VERTEX_FORMAT_UINT4, + + PL_VERTEX_FORMAT_INT, + PL_VERTEX_FORMAT_INT2, + PL_VERTEX_FORMAT_INT3, + PL_VERTEX_FORMAT_INT4, + + PL_VERTEX_FORMAT_COUNT +}; + +enum _plFormat +{ + PL_FORMAT_UNKNOWN = 0, + + // vertex format only + PL_FORMAT_R32G32B32_FLOAT, + + // 8-bit pixel formats + PL_FORMAT_R8_UNORM, + PL_FORMAT_R8_SNORM, + PL_FORMAT_R8_UINT, + PL_FORMAT_R8_SINT, + PL_FORMAT_R8_SRGB, + + // 16-bit pixel formats + PL_FORMAT_R8G8_UNORM, + PL_FORMAT_R16_UNORM, + PL_FORMAT_R16_SNORM, + PL_FORMAT_R16_UINT, + PL_FORMAT_R16_SINT, + PL_FORMAT_R16_FLOAT, + PL_FORMAT_R8G8_SNORM, + PL_FORMAT_R8G8_UINT, + PL_FORMAT_R8G8_SINT, + PL_FORMAT_R8G8_SRGB, + + // packed 16-bit pixel formats + PL_FORMAT_B5G6R5_UNORM, + PL_FORMAT_A1R5G5B5_UNORM, + PL_FORMAT_B5G5R5A1_UNORM, + + // 32-bit pixel formats + PL_FORMAT_R8G8B8A8_SRGB, + PL_FORMAT_B8G8R8A8_SRGB, + PL_FORMAT_B8G8R8A8_UNORM, + PL_FORMAT_R8G8B8A8_UNORM, + PL_FORMAT_R32_UINT, + PL_FORMAT_R32_SINT, + PL_FORMAT_R32_FLOAT, + PL_FORMAT_R16G16_UNORM, + PL_FORMAT_R16G16_SNORM, + PL_FORMAT_R16G16_UINT, + PL_FORMAT_R16G16_SINT, + PL_FORMAT_R16G16_FLOAT, + PL_FORMAT_R8G8B8A8_SNORM, + PL_FORMAT_R8G8B8A8_UINT, + PL_FORMAT_R8G8B8A8_SINT, + + // packed 32-bit pixel formats + PL_FORMAT_B10G10R10A2_UNORM, + PL_FORMAT_R10G10B10A2_UNORM, + PL_FORMAT_R10G10B10A2_UINT, + PL_FORMAT_R11G11B10_FLOAT, + PL_FORMAT_R9G9B9E5_FLOAT, + + // 64-bit pixel formats + PL_FORMAT_R32G32_FLOAT, + PL_FORMAT_R32G32_UINT, + PL_FORMAT_R32G32_SINT, + PL_FORMAT_R16G16B16A16_UNORM, + PL_FORMAT_R16G16B16A16_SNORM, + PL_FORMAT_R16G16B16A16_UINT, + PL_FORMAT_R16G16B16A16_SINT, + PL_FORMAT_R16G16B16A16_FLOAT, + + // 128-bit pixel formats + PL_FORMAT_R32G32B32A32_FLOAT, + PL_FORMAT_R32G32B32A32_UINT, + PL_FORMAT_R32G32B32A32_SINT, + + // compressed bc pixel formats + PL_FORMAT_BC1_RGBA_UNORM, + PL_FORMAT_BC1_RGBA_SRGB, + PL_FORMAT_BC2_UNORM, + PL_FORMAT_BC2_SRGB, + PL_FORMAT_BC3_UNORM, + PL_FORMAT_BC3_SRGB, + PL_FORMAT_BC4_UNORM, + PL_FORMAT_BC4_SNORM, + PL_FORMAT_BC5_UNORM, + PL_FORMAT_BC5_SNORM, + PL_FORMAT_BC6H_UFLOAT, + PL_FORMAT_BC6H_FLOAT, + PL_FORMAT_BC7_UNORM, + PL_FORMAT_BC7_SRGB, + + // compressed eac/etc pixel formats + PL_FORMAT_ETC2_R8G8B8_UNORM, + PL_FORMAT_ETC2_R8G8B8_SRGB, + PL_FORMAT_ETC2_R8G8B8A1_UNORM, + PL_FORMAT_ETC2_R8G8B8A1_SRGB, + PL_FORMAT_EAC_R11_UNORM, + PL_FORMAT_EAC_R11_SNORM, + PL_FORMAT_EAC_R11G11_UNORM, + PL_FORMAT_EAC_R11G11_SNORM, + + // compressed astc pixel formats + PL_FORMAT_ASTC_4x4_UNORM, + PL_FORMAT_ASTC_4x4_SRGB, + PL_FORMAT_ASTC_5x4_UNORM, + PL_FORMAT_ASTC_5x4_SRGB, + PL_FORMAT_ASTC_5x5_UNORM, + PL_FORMAT_ASTC_5x5_SRGB, + PL_FORMAT_ASTC_6x5_UNORM, + PL_FORMAT_ASTC_6x5_SRGB, + PL_FORMAT_ASTC_6x6_UNORM, + PL_FORMAT_ASTC_6x6_SRGB, + PL_FORMAT_ASTC_8x5_UNORM, + PL_FORMAT_ASTC_8x5_SRGB, + PL_FORMAT_ASTC_8x6_UNORM, + PL_FORMAT_ASTC_8x6_SRGB, + PL_FORMAT_ASTC_8x8_UNORM, + PL_FORMAT_ASTC_8x8_SRGB, + PL_FORMAT_ASTC_10x5_UNORM, + PL_FORMAT_ASTC_10x5_SRGB, + PL_FORMAT_ASTC_10x6_UNORM, + PL_FORMAT_ASTC_10x6_SRGB, + PL_FORMAT_ASTC_10x8_UNORM, + PL_FORMAT_ASTC_10x8_SRGB, + PL_FORMAT_ASTC_10x10_UNORM, + PL_FORMAT_ASTC_10x10_SRGB, + PL_FORMAT_ASTC_12x10_UNORM, + PL_FORMAT_ASTC_12x10_SRGB, + PL_FORMAT_ASTC_12x12_UNORM, + PL_FORMAT_ASTC_12x12_SRGB, + + // depth + PL_FORMAT_D32_FLOAT, + PL_FORMAT_D32_FLOAT_S8_UINT, + PL_FORMAT_D24_UNORM_S8_UINT, + PL_FORMAT_D16_UNORM_S8_UINT, + PL_FORMAT_D16_UNORM, + PL_FORMAT_S8_UINT, + + PL_FORMAT_COUNT +}; + //----------------------------------------------------------------------------- // [SECTION] internal enums (NOT FOR PUBLIC CONSUMPTION) //----------------------------------------------------------------------------- diff --git a/extensions/pl_graphics_metal.m b/extensions/pl_graphics_metal.m index 59c1116f..6f9ca4b5 100644 --- a/extensions/pl_graphics_metal.m +++ b/extensions/pl_graphics_metal.m @@ -277,7 +277,7 @@ static MTLCompareFunction pl__metal_compare(plCompareMode tCompare); static MTLStencilOperation pl__metal_stencil_op(plStencilOp tOp); static MTLPixelFormat pl__metal_format(plFormat tFormat); -static MTLVertexFormat pl__metal_vertex_format(plFormat tFormat); +static MTLVertexFormat pl__metal_vertex_format(plVertexFormat tFormat); static MTLCullMode pl__metal_cull(plCullMode tCullMode); static MTLLoadAction pl__metal_load_op (plLoadOp tOp); static MTLStoreAction pl__metal_store_op (plStoreOp tOp); @@ -1231,7 +1231,7 @@ uint32_t uCurrentAttributeCount = 0; for(uint32_t i = 0; i < PL_MAX_VERTEX_ATTRIBUTES; i++) { - if(ptDescription->atVertexBufferLayouts[0].atAttributes[i].tFormat == PL_FORMAT_UNKNOWN) + if(ptDescription->atVertexBufferLayouts[0].atAttributes[i].tFormat == PL_VERTEX_FORMAT_UNKNOWN) break; vertexDescriptor.attributes[i].bufferIndex = 4; vertexDescriptor.attributes[i].offset = ptDescription->atVertexBufferLayouts[0].atAttributes[i].uByteOffset; @@ -2692,6 +2692,98 @@ case PL_FORMAT_D32_FLOAT: return MTLPixelFormatDepth32Float; case PL_FORMAT_D32_FLOAT_S8_UINT: return MTLPixelFormatDepth32Float_Stencil8; case PL_FORMAT_D24_UNORM_S8_UINT: return MTLPixelFormatDepth24Unorm_Stencil8; + case PL_FORMAT_D16_UNORM_S8_UINT: return MTLPixelFormatDepth16Unorm; + case PL_FORMAT_R8_SNORM: return MTLPixelFormatR8Unorm; + case PL_FORMAT_R8_UINT: return MTLPixelFormatR8Uint; + case PL_FORMAT_R8_SINT: return MTLPixelFormatR8Sint; + case PL_FORMAT_R8_SRGB: return MTLPixelFormatR8Unorm_sRGB; + case PL_FORMAT_R16_UNORM: return MTLPixelFormatR16Unorm; + case PL_FORMAT_R16_SNORM: return MTLPixelFormatR16Snorm; + case PL_FORMAT_R16_UINT: return MTLPixelFormatR16Uint; + case PL_FORMAT_R16_SINT: return MTLPixelFormatR16Sint; + case PL_FORMAT_R16_FLOAT: return MTLPixelFormatR16Float; + case PL_FORMAT_R8G8_SNORM: return MTLPixelFormatRG8Snorm; + case PL_FORMAT_R8G8_UINT: return MTLPixelFormatRG8Uint; + case PL_FORMAT_R8G8_SINT: return MTLPixelFormatRG8Sint; + case PL_FORMAT_R8G8_SRGB: return MTLPixelFormatRG8Unorm_sRGB; + case PL_FORMAT_B5G6R5_UNORM: return MTLPixelFormatB5G6R5Unorm; + case PL_FORMAT_A1R5G5B5_UNORM: return MTLPixelFormatA1BGR5Unorm; + case PL_FORMAT_B5G5R5A1_UNORM: return MTLPixelFormatBGR5A1Unorm; + case PL_FORMAT_R32_SINT: return MTLPixelFormatR32Sint; + case PL_FORMAT_R32_FLOAT: return MTLPixelFormatR32Float; + case PL_FORMAT_R16G16_UNORM: return MTLPixelFormatRG16Unorm; + case PL_FORMAT_R16G16_SNORM: return MTLPixelFormatRG16Snorm; + case PL_FORMAT_R16G16_UINT: return MTLPixelFormatRG16Uint; + case PL_FORMAT_R16G16_SINT: return MTLPixelFormatRG16Sint; + case PL_FORMAT_R16G16_FLOAT: return MTLPixelFormatRG16Float; + case PL_FORMAT_R8G8B8A8_SNORM: return MTLPixelFormatRGBA8Snorm; + case PL_FORMAT_R8G8B8A8_UINT: return MTLPixelFormatRGBA8Uint; + case PL_FORMAT_R8G8B8A8_SINT: return MTLPixelFormatRGBA8Sint; + case PL_FORMAT_B10G10R10A2_UNORM: return MTLPixelFormatBGR10A2Unorm; + case PL_FORMAT_R10G10B10A2_UNORM: return MTLPixelFormatRGB10A2Unorm; + case PL_FORMAT_R10G10B10A2_UINT: return MTLPixelFormatRGB10A2Uint; + case PL_FORMAT_R11G11B10_FLOAT: return MTLPixelFormatRG11B10Float; + case PL_FORMAT_R9G9B9E5_FLOAT: return MTLPixelFormatRGB9E5Float; + case PL_FORMAT_R32G32_UINT: return MTLPixelFormatRG32Uint; + case PL_FORMAT_R32G32_SINT: return MTLPixelFormatRG32Sint; + case PL_FORMAT_R16G16B16A16_UNORM: return MTLPixelFormatRGBA16Unorm; + case PL_FORMAT_R16G16B16A16_SNORM: return MTLPixelFormatRGBA16Snorm; + case PL_FORMAT_R16G16B16A16_UINT: return MTLPixelFormatRGBA16Uint; + case PL_FORMAT_R16G16B16A16_SINT: return MTLPixelFormatRGBA16Sint; + case PL_FORMAT_R16G16B16A16_FLOAT: return MTLPixelFormatRGBA16Float; + case PL_FORMAT_R32G32B32A32_UINT: return MTLPixelFormatRGBA32Uint; + case PL_FORMAT_R32G32B32A32_SINT: return MTLPixelFormatRGBA32Sint; + case PL_FORMAT_BC1_RGBA_UNORM: return MTLPixelFormatBC1_RGBA; + case PL_FORMAT_BC1_RGBA_SRGB: return MTLPixelFormatBC1_RGBA_sRGB; + case PL_FORMAT_BC2_UNORM: return MTLPixelFormatBC2_RGBA; + case PL_FORMAT_BC2_SRGB: return MTLPixelFormatBC2_RGBA_sRGB; + case PL_FORMAT_BC3_UNORM: return MTLPixelFormatBC3_RGBA; + case PL_FORMAT_BC3_SRGB: return MTLPixelFormatBC3_RGBA_sRGB; + case PL_FORMAT_BC4_UNORM: return MTLPixelFormatBC4_RUnorm; + case PL_FORMAT_BC4_SNORM: return MTLPixelFormatBC4_RSnorm; + case PL_FORMAT_BC5_UNORM: return MTLPixelFormatBC5_RGUnorm; + case PL_FORMAT_BC5_SNORM: return MTLPixelFormatBC5_RGSnorm; + case PL_FORMAT_BC6H_UFLOAT: return MTLPixelFormatBC6H_RGBUfloat; + case PL_FORMAT_BC6H_FLOAT: return MTLPixelFormatBC6H_RGBFloat; + case PL_FORMAT_BC7_UNORM: return MTLPixelFormatBC7_RGBAUnorm; + case PL_FORMAT_BC7_SRGB: return MTLPixelFormatBC7_RGBAUnorm_sRGB; + case PL_FORMAT_ETC2_R8G8B8_UNORM: return MTLPixelFormatETC2_RGB8; + case PL_FORMAT_ETC2_R8G8B8_SRGB: return MTLPixelFormatETC2_RGB8_sRGB; + case PL_FORMAT_ETC2_R8G8B8A1_UNORM: return MTLPixelFormatETC2_RGB8A1; + case PL_FORMAT_ETC2_R8G8B8A1_SRGB: return MTLPixelFormatETC2_RGB8A1_sRGB; + case PL_FORMAT_EAC_R11_UNORM: return MTLPixelFormatEAC_R11Unorm; + case PL_FORMAT_EAC_R11_SNORM: return MTLPixelFormatEAC_R11Snorm; + case PL_FORMAT_EAC_R11G11_UNORM: return MTLPixelFormatEAC_RG11Unorm; + case PL_FORMAT_EAC_R11G11_SNORM: return MTLPixelFormatEAC_RG11Snorm; + case PL_FORMAT_ASTC_4x4_UNORM: return MTLPixelFormatASTC_4x4_LDR; + case PL_FORMAT_ASTC_4x4_SRGB: return MTLPixelFormatASTC_4x4_sRGB; + case PL_FORMAT_ASTC_5x4_UNORM: return MTLPixelFormatASTC_4x4_LDR; + case PL_FORMAT_ASTC_5x4_SRGB: return MTLPixelFormatASTC_5x4_sRGB; + case PL_FORMAT_ASTC_5x5_UNORM: return MTLPixelFormatASTC_5x5_LDR; + case PL_FORMAT_ASTC_5x5_SRGB: return MTLPixelFormatASTC_5x5_sRGB; + case PL_FORMAT_ASTC_6x5_UNORM: return MTLPixelFormatASTC_6x5_LDR; + case PL_FORMAT_ASTC_6x5_SRGB: return MTLPixelFormatASTC_6x5_sRGB; + case PL_FORMAT_ASTC_6x6_UNORM: return MTLPixelFormatASTC_6x6_LDR; + case PL_FORMAT_ASTC_6x6_SRGB: return MTLPixelFormatASTC_6x6_sRGB; + case PL_FORMAT_ASTC_8x5_UNORM: return MTLPixelFormatASTC_8x5_LDR; + case PL_FORMAT_ASTC_8x5_SRGB: return MTLPixelFormatASTC_8x5_sRGB; + case PL_FORMAT_ASTC_8x6_UNORM: return MTLPixelFormatASTC_8x6_LDR; + case PL_FORMAT_ASTC_8x6_SRGB: return MTLPixelFormatASTC_8x6_sRGB; + case PL_FORMAT_ASTC_8x8_UNORM: return MTLPixelFormatASTC_8x8_LDR; + case PL_FORMAT_ASTC_8x8_SRGB: return MTLPixelFormatASTC_8x8_sRGB; + case PL_FORMAT_ASTC_10x5_UNORM: return MTLPixelFormatASTC_10x5_LDR; + case PL_FORMAT_ASTC_10x5_SRGB: return MTLPixelFormatASTC_10x5_sRGB; + case PL_FORMAT_ASTC_10x6_UNORM: return MTLPixelFormatASTC_10x6_LDR; + case PL_FORMAT_ASTC_10x6_SRGB: return MTLPixelFormatASTC_10x6_sRGB; + case PL_FORMAT_ASTC_10x8_UNORM: return MTLPixelFormatASTC_10x8_LDR; + case PL_FORMAT_ASTC_10x8_SRGB: return MTLPixelFormatASTC_10x8_sRGB; + case PL_FORMAT_ASTC_10x10_UNORM: return MTLPixelFormatASTC_10x10_LDR; + case PL_FORMAT_ASTC_10x10_SRGB: return MTLPixelFormatASTC_10x10_sRGB; + case PL_FORMAT_ASTC_12x10_UNORM: return MTLPixelFormatASTC_12x10_LDR; + case PL_FORMAT_ASTC_12x10_SRGB: return MTLPixelFormatASTC_12x10_sRGB; + case PL_FORMAT_ASTC_12x12_UNORM: return MTLPixelFormatASTC_12x12_LDR; + case PL_FORMAT_ASTC_12x12_SRGB: return MTLPixelFormatASTC_12x12_sRGB; + case PL_FORMAT_S8_UINT: return MTLPixelFormatStencil8; } PL_ASSERT(false && "Unsupported format"); @@ -2699,18 +2791,42 @@ } static MTLVertexFormat -pl__metal_vertex_format(plFormat tFormat) +pl__metal_vertex_format(plVertexFormat tFormat) { switch(tFormat) { - case PL_FORMAT_R32G32B32A32_FLOAT: return MTLVertexFormatFloat4; - case PL_FORMAT_R32G32B32_FLOAT: return MTLVertexFormatFloat3; - case PL_FORMAT_R32G32_FLOAT: return MTLVertexFormatFloat2; - - case PL_FORMAT_B8G8R8A8_UNORM: - case PL_FORMAT_R8G8B8A8_UNORM: return MTLVertexFormatUChar4; - - case PL_FORMAT_R32_UINT: return MTLVertexFormatUInt; + case PL_VERTEX_FORMAT_HALF: return MTLVertexFormatHalf; + case PL_VERTEX_FORMAT_HALF2: return MTLVertexFormatHalf2; + case PL_VERTEX_FORMAT_HALF3: return MTLVertexFormatHalf3; + case PL_VERTEX_FORMAT_HALF4: return MTLVertexFormatHalf4; + case PL_VERTEX_FORMAT_FLOAT: return MTLVertexFormatFloat; + case PL_VERTEX_FORMAT_FLOAT2: return MTLVertexFormatFloat2; + case PL_VERTEX_FORMAT_FLOAT3: return MTLVertexFormatFloat3; + case PL_VERTEX_FORMAT_FLOAT4: return MTLVertexFormatFloat4; + case PL_VERTEX_FORMAT_UCHAR: return MTLVertexFormatUChar; + case PL_VERTEX_FORMAT_UCHAR2: return MTLVertexFormatUChar2; + case PL_VERTEX_FORMAT_UCHAR3: return MTLVertexFormatUChar3; + case PL_VERTEX_FORMAT_UCHAR4: return MTLVertexFormatUChar4; + case PL_VERTEX_FORMAT_CHAR: return MTLVertexFormatChar; + case PL_VERTEX_FORMAT_CHAR2: return MTLVertexFormatChar2; + case PL_VERTEX_FORMAT_CHAR3: return MTLVertexFormatChar3; + case PL_VERTEX_FORMAT_CHAR4: return MTLVertexFormatChar4; + case PL_VERTEX_FORMAT_USHORT: return MTLVertexFormatUShort; + case PL_VERTEX_FORMAT_USHORT2: return MTLVertexFormatUShort2; + case PL_VERTEX_FORMAT_USHORT3: return MTLVertexFormatUShort3; + case PL_VERTEX_FORMAT_USHORT4: return MTLVertexFormatUShort4; + case PL_VERTEX_FORMAT_SHORT: return MTLVertexFormatShort; + case PL_VERTEX_FORMAT_SHORT2: return MTLVertexFormatShort2; + case PL_VERTEX_FORMAT_SHORT3: return MTLVertexFormatShort3; + case PL_VERTEX_FORMAT_SHORT4: return MTLVertexFormatShort4; + case PL_VERTEX_FORMAT_UINT: return MTLVertexFormatUInt; + case PL_VERTEX_FORMAT_UINT2: return MTLVertexFormatUInt2; + case PL_VERTEX_FORMAT_UINT3: return MTLVertexFormatUInt3; + case PL_VERTEX_FORMAT_UINT4: return MTLVertexFormatUInt4; + case PL_VERTEX_FORMAT_INT: return MTLVertexFormatInt; + case PL_VERTEX_FORMAT_INT2: return MTLVertexFormatInt2; + case PL_VERTEX_FORMAT_INT3: return MTLVertexFormatInt3; + case PL_VERTEX_FORMAT_INT4: return MTLVertexFormatInt4; } PL_ASSERT(false && "Unsupported vertex format"); diff --git a/extensions/pl_graphics_vulkan.c b/extensions/pl_graphics_vulkan.c index f700716c..95034181 100644 --- a/extensions/pl_graphics_vulkan.c +++ b/extensions/pl_graphics_vulkan.c @@ -337,19 +337,20 @@ typedef struct _plSwapchain //----------------------------------------------------------------------------- // conversion between pilotlight & vulkan types -static VkFilter pl__vulkan_filter (plFilter); -static VkSamplerAddressMode pl__vulkan_wrap (plAddressMode); -static VkCompareOp pl__vulkan_compare (plCompareMode); -static VkFormat pl__vulkan_format (plFormat); -static VkImageLayout pl__vulkan_layout (plTextureUsage); -static VkAttachmentLoadOp pl__vulkan_load_op (plLoadOp); -static VkAttachmentStoreOp pl__vulkan_store_op (plStoreOp); -static VkCullModeFlags pl__vulkan_cull (plCullMode); -static VkShaderStageFlagBits pl__vulkan_stage_flags (plStageFlags); -static plFormat pl__pilotlight_format (VkFormat); -static VkStencilOp pl__vulkan_stencil_op (plStencilOp); -static VkBlendFactor pl__vulkan_blend_factor(plBlendFactor); -static VkBlendOp pl__vulkan_blend_op (plBlendOp); +static VkFilter pl__vulkan_filter (plFilter); +static VkSamplerAddressMode pl__vulkan_wrap (plAddressMode); +static VkCompareOp pl__vulkan_compare (plCompareMode); +static VkFormat pl__vulkan_format (plFormat); +static VkFormat pl__vulkan_vertex_format(plVertexFormat); +static VkImageLayout pl__vulkan_layout (plTextureUsage); +static VkAttachmentLoadOp pl__vulkan_load_op (plLoadOp); +static VkAttachmentStoreOp pl__vulkan_store_op (plStoreOp); +static VkCullModeFlags pl__vulkan_cull (plCullMode); +static VkShaderStageFlagBits pl__vulkan_stage_flags (plStageFlags); +static plFormat pl__pilotlight_format (VkFormat); +static VkStencilOp pl__vulkan_stencil_op (plStencilOp); +static VkBlendFactor pl__vulkan_blend_factor (plBlendFactor); +static VkBlendOp pl__vulkan_blend_op (plBlendOp); // misc static plDeviceMemoryAllocation pl__allocate_staging_dynamic(struct plDeviceMemoryAllocatorO*, uint32_t uTypeFilter, uint64_t ulSize, uint64_t ulAlignment, const char* pcName); @@ -1342,12 +1343,12 @@ pl_create_shader(plDevice* ptDevice, const plShaderDesc* ptDescription) uint32_t uCurrentAttributeCount = 0; for (uint32_t i = 0; i < PL_MAX_VERTEX_ATTRIBUTES; i++) { - if (ptDescription->atVertexBufferLayouts[0].atAttributes[i].tFormat == PL_FORMAT_UNKNOWN) + if (ptDescription->atVertexBufferLayouts[0].atAttributes[i].tFormat == PL_VERTEX_FORMAT_UNKNOWN) break; atAttributeDescription[i].binding = 0; atAttributeDescription[i].location = i; atAttributeDescription[i].offset = ptDescription->atVertexBufferLayouts[0].atAttributes[i].uByteOffset; - atAttributeDescription[i].format = pl__vulkan_format(ptDescription->atVertexBufferLayouts[0].atAttributes[i].tFormat); + atAttributeDescription[i].format = pl__vulkan_vertex_format(ptDescription->atVertexBufferLayouts[0].atAttributes[i].tFormat); uCurrentAttributeCount++; } @@ -4714,39 +4715,160 @@ pl__vulkan_compare(plCompareMode tCompare) return VK_COMPARE_OP_NEVER; } +static VkFormat +pl__vulkan_vertex_format(plVertexFormat tFormat) +{ + switch(tFormat) + { + case PL_VERTEX_FORMAT_HALF: return VK_FORMAT_R16_SFLOAT; + case PL_VERTEX_FORMAT_HALF2: return VK_FORMAT_R16G16_SFLOAT; + case PL_VERTEX_FORMAT_HALF3: return VK_FORMAT_R16G16B16_SFLOAT; + case PL_VERTEX_FORMAT_HALF4: return VK_FORMAT_R16G16B16A16_SFLOAT; + case PL_VERTEX_FORMAT_FLOAT: return VK_FORMAT_R32_SFLOAT; + case PL_VERTEX_FORMAT_FLOAT2: return VK_FORMAT_R32G32_SFLOAT; + case PL_VERTEX_FORMAT_FLOAT3: return VK_FORMAT_R32G32B32_SFLOAT; + case PL_VERTEX_FORMAT_FLOAT4: return VK_FORMAT_R32G32B32A32_SFLOAT; + case PL_VERTEX_FORMAT_UCHAR: return VK_FORMAT_R8_UNORM; + case PL_VERTEX_FORMAT_UCHAR2: return VK_FORMAT_R8G8_UNORM; + case PL_VERTEX_FORMAT_UCHAR3: return VK_FORMAT_R8G8B8_UNORM; + case PL_VERTEX_FORMAT_UCHAR4: return VK_FORMAT_R8G8B8A8_UNORM; + case PL_VERTEX_FORMAT_CHAR: return VK_FORMAT_R8_SNORM; + case PL_VERTEX_FORMAT_CHAR2: return VK_FORMAT_R8G8_SNORM; + case PL_VERTEX_FORMAT_CHAR3: return VK_FORMAT_R8G8B8_SNORM; + case PL_VERTEX_FORMAT_CHAR4: return VK_FORMAT_R8G8B8A8_SNORM; + case PL_VERTEX_FORMAT_USHORT: return VK_FORMAT_R16_UINT; + case PL_VERTEX_FORMAT_USHORT2: return VK_FORMAT_R16G16_UINT; + case PL_VERTEX_FORMAT_USHORT3: return VK_FORMAT_R16G16B16_UINT; + case PL_VERTEX_FORMAT_USHORT4: return VK_FORMAT_R16G16B16A16_UINT; + case PL_VERTEX_FORMAT_SHORT: return VK_FORMAT_R16_SINT; + case PL_VERTEX_FORMAT_SHORT2: return VK_FORMAT_R16G16_SINT; + case PL_VERTEX_FORMAT_SHORT3: return VK_FORMAT_R16G16B16_SINT; + case PL_VERTEX_FORMAT_SHORT4: return VK_FORMAT_R16G16B16A16_SINT; + case PL_VERTEX_FORMAT_UINT: return VK_FORMAT_R32_UINT; + case PL_VERTEX_FORMAT_UINT2: return VK_FORMAT_R32G32_UINT; + case PL_VERTEX_FORMAT_UINT3: return VK_FORMAT_R32G32B32_UINT; + case PL_VERTEX_FORMAT_UINT4: return VK_FORMAT_R32G32B32A32_UINT; + case PL_VERTEX_FORMAT_INT: return VK_FORMAT_R32_SINT; + case PL_VERTEX_FORMAT_INT2: return VK_FORMAT_R32G32_SINT; + case PL_VERTEX_FORMAT_INT3: return VK_FORMAT_R32G32B32_SINT; + case PL_VERTEX_FORMAT_INT4: return VK_FORMAT_R32G32B32A32_SINT; + } + + PL_ASSERT(false && "Unsupported vertex format"); + return VK_FORMAT_UNDEFINED; +} + static VkFormat pl__vulkan_format(plFormat tFormat) { switch (tFormat) { - case PL_FORMAT_R32G32B32A32_FLOAT: - return VK_FORMAT_R32G32B32A32_SFLOAT; - case PL_FORMAT_R32G32B32_FLOAT: - return VK_FORMAT_R32G32B32_SFLOAT; - case PL_FORMAT_R8G8B8A8_UNORM: - return VK_FORMAT_R8G8B8A8_UNORM; - case PL_FORMAT_R32G32_FLOAT: - return VK_FORMAT_R32G32_SFLOAT; - case PL_FORMAT_R8G8B8A8_SRGB: - return VK_FORMAT_R8G8B8A8_SRGB; - case PL_FORMAT_B8G8R8A8_SRGB: - return VK_FORMAT_B8G8R8A8_SRGB; - case PL_FORMAT_B8G8R8A8_UNORM: - return VK_FORMAT_B8G8R8A8_UNORM; - case PL_FORMAT_D32_FLOAT: - return VK_FORMAT_D32_SFLOAT; - case PL_FORMAT_R8_UNORM: - return VK_FORMAT_R8_UNORM; - case PL_FORMAT_R32_UINT: - return VK_FORMAT_R32_UINT; - case PL_FORMAT_R8G8_UNORM: - return VK_FORMAT_R8G8_UNORM; - case PL_FORMAT_D32_FLOAT_S8_UINT: - return VK_FORMAT_D32_SFLOAT_S8_UINT; - case PL_FORMAT_D24_UNORM_S8_UINT: - return VK_FORMAT_D24_UNORM_S8_UINT; - case PL_FORMAT_D16_UNORM_S8_UINT: - return VK_FORMAT_D16_UNORM_S8_UINT; + case PL_FORMAT_R32G32B32A32_FLOAT: return VK_FORMAT_R32G32B32A32_SFLOAT; + case PL_FORMAT_R32G32B32_FLOAT: return VK_FORMAT_R32G32B32_SFLOAT; + case PL_FORMAT_R8G8B8A8_UNORM: return VK_FORMAT_R8G8B8A8_UNORM; + case PL_FORMAT_R32G32_FLOAT: return VK_FORMAT_R32G32_SFLOAT; + case PL_FORMAT_R8G8B8A8_SRGB: return VK_FORMAT_R8G8B8A8_SRGB; + case PL_FORMAT_B8G8R8A8_SRGB: return VK_FORMAT_B8G8R8A8_SRGB; + case PL_FORMAT_B8G8R8A8_UNORM: return VK_FORMAT_B8G8R8A8_UNORM; + case PL_FORMAT_D32_FLOAT: return VK_FORMAT_D32_SFLOAT; + case PL_FORMAT_R8_UNORM: return VK_FORMAT_R8_UNORM; + case PL_FORMAT_R32_UINT: return VK_FORMAT_R32_UINT; + case PL_FORMAT_R8G8_UNORM: return VK_FORMAT_R8G8_UNORM; + case PL_FORMAT_D32_FLOAT_S8_UINT: return VK_FORMAT_D32_SFLOAT_S8_UINT; + case PL_FORMAT_D24_UNORM_S8_UINT: return VK_FORMAT_D24_UNORM_S8_UINT; + case PL_FORMAT_D16_UNORM_S8_UINT: return VK_FORMAT_D16_UNORM_S8_UINT; + case PL_FORMAT_R8_SNORM: return VK_FORMAT_R8_SNORM; + case PL_FORMAT_R8_UINT: return VK_FORMAT_R8_UINT; + case PL_FORMAT_R8_SINT: return VK_FORMAT_R8_SINT; + case PL_FORMAT_R8_SRGB: return VK_FORMAT_R8_SRGB; + case PL_FORMAT_R16_UNORM: return VK_FORMAT_R16_UNORM; + case PL_FORMAT_R16_SNORM: return VK_FORMAT_R16_SNORM; + case PL_FORMAT_R16_UINT: return VK_FORMAT_R16_UINT; + case PL_FORMAT_R16_SINT: return VK_FORMAT_R16_SINT; + case PL_FORMAT_R16_FLOAT: return VK_FORMAT_R16_SFLOAT; + case PL_FORMAT_R8G8_SNORM: return VK_FORMAT_R8G8_SNORM; + case PL_FORMAT_R8G8_UINT: return VK_FORMAT_R8G8_UINT; + case PL_FORMAT_R8G8_SINT: return VK_FORMAT_R8G8_SINT; + case PL_FORMAT_R8G8_SRGB: return VK_FORMAT_R8G8_SRGB; + case PL_FORMAT_B5G6R5_UNORM: return VK_FORMAT_B5G6R5_UNORM_PACK16; + case PL_FORMAT_A1R5G5B5_UNORM: return VK_FORMAT_A1R5G5B5_UNORM_PACK16; + case PL_FORMAT_B5G5R5A1_UNORM: return VK_FORMAT_B5G5R5A1_UNORM_PACK16; + case PL_FORMAT_R32_SINT: return VK_FORMAT_R32_SINT; + case PL_FORMAT_R32_FLOAT: return VK_FORMAT_R32_SFLOAT; + case PL_FORMAT_R16G16_UNORM: return VK_FORMAT_R16G16_UNORM; + case PL_FORMAT_R16G16_SNORM: return VK_FORMAT_R16G16_SNORM; + case PL_FORMAT_R16G16_UINT: return VK_FORMAT_R16G16_UINT; + case PL_FORMAT_R16G16_SINT: return VK_FORMAT_R16G16_SINT; + case PL_FORMAT_R16G16_FLOAT: return VK_FORMAT_R16G16_SFLOAT; + case PL_FORMAT_R8G8B8A8_SNORM: return VK_FORMAT_R8G8B8A8_SNORM; + case PL_FORMAT_R8G8B8A8_UINT: return VK_FORMAT_R8G8B8A8_UINT; + case PL_FORMAT_R8G8B8A8_SINT: return VK_FORMAT_R8G8B8A8_SINT; + case PL_FORMAT_B10G10R10A2_UNORM: return VK_FORMAT_A2R10G10B10_UNORM_PACK32; + case PL_FORMAT_R10G10B10A2_UNORM: return VK_FORMAT_A2B10G10R10_UNORM_PACK32; + case PL_FORMAT_R10G10B10A2_UINT: return VK_FORMAT_A2B10G10R10_UINT_PACK32; + case PL_FORMAT_R11G11B10_FLOAT: return VK_FORMAT_B10G11R11_UFLOAT_PACK32; + case PL_FORMAT_R9G9B9E5_FLOAT: return VK_FORMAT_E5B9G9R9_UFLOAT_PACK32; + case PL_FORMAT_R32G32_UINT: return VK_FORMAT_R32G32_UINT; + case PL_FORMAT_R32G32_SINT: return VK_FORMAT_R32G32_SINT; + case PL_FORMAT_R16G16B16A16_UNORM: return VK_FORMAT_R16G16B16A16_UNORM; + case PL_FORMAT_R16G16B16A16_SNORM: return VK_FORMAT_R16G16B16A16_SNORM; + case PL_FORMAT_R16G16B16A16_UINT: return VK_FORMAT_R16G16B16A16_UINT; + case PL_FORMAT_R16G16B16A16_SINT: return VK_FORMAT_R16G16B16A16_SINT; + case PL_FORMAT_R16G16B16A16_FLOAT: return VK_FORMAT_R16G16B16A16_SFLOAT; + case PL_FORMAT_R32G32B32A32_UINT: return VK_FORMAT_R32G32B32A32_UINT; + case PL_FORMAT_R32G32B32A32_SINT: return VK_FORMAT_R32G32B32A32_SINT; + case PL_FORMAT_BC1_RGBA_UNORM: return VK_FORMAT_BC1_RGBA_UNORM_BLOCK; + case PL_FORMAT_BC1_RGBA_SRGB: return VK_FORMAT_BC1_RGBA_SRGB_BLOCK; + case PL_FORMAT_BC2_UNORM: return VK_FORMAT_BC2_UNORM_BLOCK; + case PL_FORMAT_BC2_SRGB: return VK_FORMAT_BC2_SRGB_BLOCK; + case PL_FORMAT_BC3_UNORM: return VK_FORMAT_BC3_UNORM_BLOCK; + case PL_FORMAT_BC3_SRGB: return VK_FORMAT_BC3_SRGB_BLOCK; + case PL_FORMAT_BC4_UNORM: return VK_FORMAT_BC4_UNORM_BLOCK; + case PL_FORMAT_BC4_SNORM: return VK_FORMAT_BC4_SNORM_BLOCK; + case PL_FORMAT_BC5_UNORM: return VK_FORMAT_BC5_UNORM_BLOCK; + case PL_FORMAT_BC5_SNORM: return VK_FORMAT_BC5_SNORM_BLOCK; + case PL_FORMAT_BC6H_UFLOAT: return VK_FORMAT_BC6H_UFLOAT_BLOCK; + case PL_FORMAT_BC6H_FLOAT: return VK_FORMAT_BC6H_SFLOAT_BLOCK; + case PL_FORMAT_BC7_UNORM: return VK_FORMAT_BC7_UNORM_BLOCK; + case PL_FORMAT_BC7_SRGB: return VK_FORMAT_BC7_SRGB_BLOCK; + case PL_FORMAT_ETC2_R8G8B8_UNORM: return VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK; + case PL_FORMAT_ETC2_R8G8B8_SRGB: return VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK; + case PL_FORMAT_ETC2_R8G8B8A1_UNORM: return VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK; + case PL_FORMAT_ETC2_R8G8B8A1_SRGB: return VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK; + case PL_FORMAT_EAC_R11_UNORM: return VK_FORMAT_EAC_R11_UNORM_BLOCK; + case PL_FORMAT_EAC_R11_SNORM: return VK_FORMAT_EAC_R11_SNORM_BLOCK; + case PL_FORMAT_EAC_R11G11_UNORM: return VK_FORMAT_EAC_R11G11_UNORM_BLOCK; + case PL_FORMAT_EAC_R11G11_SNORM: return VK_FORMAT_EAC_R11G11_SNORM_BLOCK; + case PL_FORMAT_ASTC_4x4_UNORM: return VK_FORMAT_ASTC_4x4_UNORM_BLOCK; + case PL_FORMAT_ASTC_4x4_SRGB: return VK_FORMAT_ASTC_4x4_SRGB_BLOCK; + case PL_FORMAT_ASTC_5x4_UNORM: return VK_FORMAT_ASTC_5x4_UNORM_BLOCK; + case PL_FORMAT_ASTC_5x4_SRGB: return VK_FORMAT_ASTC_5x4_SRGB_BLOCK; + case PL_FORMAT_ASTC_5x5_UNORM: return VK_FORMAT_ASTC_5x5_UNORM_BLOCK; + case PL_FORMAT_ASTC_5x5_SRGB: return VK_FORMAT_ASTC_5x5_SRGB_BLOCK; + case PL_FORMAT_ASTC_6x5_UNORM: return VK_FORMAT_ASTC_6x5_UNORM_BLOCK; + case PL_FORMAT_ASTC_6x5_SRGB: return VK_FORMAT_ASTC_6x5_SRGB_BLOCK; + case PL_FORMAT_ASTC_6x6_UNORM: return VK_FORMAT_ASTC_6x6_UNORM_BLOCK; + case PL_FORMAT_ASTC_6x6_SRGB: return VK_FORMAT_ASTC_6x6_SRGB_BLOCK; + case PL_FORMAT_ASTC_8x5_UNORM: return VK_FORMAT_ASTC_8x5_UNORM_BLOCK; + case PL_FORMAT_ASTC_8x5_SRGB: return VK_FORMAT_ASTC_8x5_SRGB_BLOCK; + case PL_FORMAT_ASTC_8x6_UNORM: return VK_FORMAT_ASTC_8x6_UNORM_BLOCK; + case PL_FORMAT_ASTC_8x6_SRGB: return VK_FORMAT_ASTC_8x6_SRGB_BLOCK; + case PL_FORMAT_ASTC_8x8_UNORM: return VK_FORMAT_ASTC_8x8_UNORM_BLOCK; + case PL_FORMAT_ASTC_8x8_SRGB: return VK_FORMAT_ASTC_8x8_SRGB_BLOCK; + case PL_FORMAT_ASTC_10x5_UNORM: return VK_FORMAT_ASTC_10x5_UNORM_BLOCK; + case PL_FORMAT_ASTC_10x5_SRGB: return VK_FORMAT_ASTC_10x5_SRGB_BLOCK; + case PL_FORMAT_ASTC_10x6_UNORM: return VK_FORMAT_ASTC_10x6_UNORM_BLOCK; + case PL_FORMAT_ASTC_10x6_SRGB: return VK_FORMAT_ASTC_10x6_SRGB_BLOCK; + case PL_FORMAT_ASTC_10x8_UNORM: return VK_FORMAT_ASTC_10x8_UNORM_BLOCK; + case PL_FORMAT_ASTC_10x8_SRGB: return VK_FORMAT_ASTC_10x8_SRGB_BLOCK; + case PL_FORMAT_ASTC_10x10_UNORM: return VK_FORMAT_ASTC_10x10_UNORM_BLOCK; + case PL_FORMAT_ASTC_10x10_SRGB: return VK_FORMAT_ASTC_10x10_SRGB_BLOCK; + case PL_FORMAT_ASTC_12x10_UNORM: return VK_FORMAT_ASTC_12x10_UNORM_BLOCK; + case PL_FORMAT_ASTC_12x10_SRGB: return VK_FORMAT_ASTC_12x10_SRGB_BLOCK; + case PL_FORMAT_ASTC_12x12_UNORM: return VK_FORMAT_ASTC_12x12_UNORM_BLOCK; + case PL_FORMAT_ASTC_12x12_SRGB: return VK_FORMAT_ASTC_12x12_SRGB_BLOCK; + case PL_FORMAT_D16_UNORM: return VK_FORMAT_D16_UNORM; + case PL_FORMAT_S8_UINT: return VK_FORMAT_S8_UINT; } PL_ASSERT(false && "Unsupported format"); @@ -4943,32 +5065,112 @@ pl__pilotlight_format(VkFormat tFormat) { switch (tFormat) { - case VK_FORMAT_R32G32B32_SFLOAT: - return PL_FORMAT_R32G32B32_FLOAT; - case VK_FORMAT_R8G8B8A8_UNORM: - return PL_FORMAT_R8G8B8A8_UNORM; - case VK_FORMAT_R32G32_SFLOAT: - return PL_FORMAT_R32G32_FLOAT; - case VK_FORMAT_R8G8B8A8_SRGB: - return PL_FORMAT_R8G8B8A8_SRGB; - case VK_FORMAT_B8G8R8A8_SRGB: - return PL_FORMAT_B8G8R8A8_SRGB; - case VK_FORMAT_B8G8R8A8_UNORM: - return PL_FORMAT_B8G8R8A8_UNORM; - case VK_FORMAT_R8_UNORM: - return PL_FORMAT_R8_UNORM; - case VK_FORMAT_R8G8_UNORM: - return PL_FORMAT_R8G8_UNORM; - case VK_FORMAT_R32_UINT: - return PL_FORMAT_R32_UINT; - case VK_FORMAT_D32_SFLOAT: - return PL_FORMAT_D32_FLOAT; - case VK_FORMAT_D32_SFLOAT_S8_UINT: - return PL_FORMAT_D32_FLOAT_S8_UINT; - case VK_FORMAT_D24_UNORM_S8_UINT: - return PL_FORMAT_D24_UNORM_S8_UINT; - case VK_FORMAT_D16_UNORM_S8_UINT: - return PL_FORMAT_D16_UNORM_S8_UINT; + case VK_FORMAT_R32G32B32A32_SFLOAT: return PL_FORMAT_R32G32B32A32_FLOAT; + case VK_FORMAT_R32G32B32_SFLOAT: return PL_FORMAT_R32G32B32_FLOAT; + case VK_FORMAT_R8G8B8A8_UNORM: return PL_FORMAT_R8G8B8A8_UNORM; + case VK_FORMAT_R32G32_SFLOAT: return PL_FORMAT_R32G32_FLOAT; + case VK_FORMAT_R8G8B8A8_SRGB: return PL_FORMAT_R8G8B8A8_SRGB; + case VK_FORMAT_B8G8R8A8_SRGB: return PL_FORMAT_B8G8R8A8_SRGB; + case VK_FORMAT_B8G8R8A8_UNORM: return PL_FORMAT_B8G8R8A8_UNORM; + case VK_FORMAT_D32_SFLOAT: return PL_FORMAT_D32_FLOAT; + case VK_FORMAT_R8_UNORM: return PL_FORMAT_R8_UNORM; + case VK_FORMAT_R32_UINT: return PL_FORMAT_R32_UINT; + case VK_FORMAT_R8G8_UNORM: return PL_FORMAT_R8G8_UNORM; + case VK_FORMAT_D32_SFLOAT_S8_UINT: return PL_FORMAT_D32_FLOAT_S8_UINT; + case VK_FORMAT_D24_UNORM_S8_UINT: return PL_FORMAT_D24_UNORM_S8_UINT; + case VK_FORMAT_D16_UNORM_S8_UINT: return PL_FORMAT_D16_UNORM_S8_UINT; + case VK_FORMAT_R8_SNORM: return PL_FORMAT_R8_SNORM; + case VK_FORMAT_R8_UINT: return PL_FORMAT_R8_UINT; + case VK_FORMAT_R8_SINT: return PL_FORMAT_R8_SINT; + case VK_FORMAT_R8_SRGB: return PL_FORMAT_R8_SRGB; + case VK_FORMAT_R16_UNORM: return PL_FORMAT_R16_UNORM; + case VK_FORMAT_R16_SNORM: return PL_FORMAT_R16_SNORM; + case VK_FORMAT_R16_UINT: return PL_FORMAT_R16_UINT; + case VK_FORMAT_R16_SINT: return PL_FORMAT_R16_SINT; + case VK_FORMAT_R16_SFLOAT: return PL_FORMAT_R16_FLOAT; + case VK_FORMAT_R8G8_SNORM: return PL_FORMAT_R8G8_SNORM; + case VK_FORMAT_R8G8_UINT: return PL_FORMAT_R8G8_UINT; + case VK_FORMAT_R8G8_SINT: return PL_FORMAT_R8G8_SINT; + case VK_FORMAT_R8G8_SRGB: return PL_FORMAT_R8G8_SRGB; + case VK_FORMAT_B5G6R5_UNORM_PACK16: return PL_FORMAT_B5G6R5_UNORM; + case VK_FORMAT_A1R5G5B5_UNORM_PACK16: return PL_FORMAT_A1R5G5B5_UNORM; + case VK_FORMAT_B5G5R5A1_UNORM_PACK16: return PL_FORMAT_B5G5R5A1_UNORM; + case VK_FORMAT_R32_SINT: return PL_FORMAT_R32_SINT; + case VK_FORMAT_R32_SFLOAT: return PL_FORMAT_R32_FLOAT; + case VK_FORMAT_R16G16_UNORM: return PL_FORMAT_R16G16_UNORM; + case VK_FORMAT_R16G16_SNORM: return PL_FORMAT_R16G16_SNORM; + case VK_FORMAT_R16G16_UINT: return PL_FORMAT_R16G16_UINT; + case VK_FORMAT_R16G16_SINT: return PL_FORMAT_R16G16_SINT; + case VK_FORMAT_R16G16_SFLOAT: return PL_FORMAT_R16G16_FLOAT; + case VK_FORMAT_R8G8B8A8_SNORM: return PL_FORMAT_R8G8B8A8_SNORM; + case VK_FORMAT_R8G8B8A8_UINT: return PL_FORMAT_R8G8B8A8_UINT; + case VK_FORMAT_R8G8B8A8_SINT: return PL_FORMAT_R8G8B8A8_SINT; + case VK_FORMAT_A2R10G10B10_UNORM_PACK32: return PL_FORMAT_B10G10R10A2_UNORM; + case VK_FORMAT_A2B10G10R10_UNORM_PACK32: return PL_FORMAT_R10G10B10A2_UNORM; + case VK_FORMAT_A2B10G10R10_UINT_PACK32: return PL_FORMAT_R10G10B10A2_UINT; + case VK_FORMAT_B10G11R11_UFLOAT_PACK32: return PL_FORMAT_R11G11B10_FLOAT; + case VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: return PL_FORMAT_R9G9B9E5_FLOAT; + case VK_FORMAT_R32G32_UINT: return PL_FORMAT_R32G32_UINT; + case VK_FORMAT_R32G32_SINT: return PL_FORMAT_R32G32_SINT; + case VK_FORMAT_R16G16B16A16_UNORM: return PL_FORMAT_R16G16B16A16_UNORM; + case VK_FORMAT_R16G16B16A16_SNORM: return PL_FORMAT_R16G16B16A16_SNORM; + case VK_FORMAT_R16G16B16A16_UINT: return PL_FORMAT_R16G16B16A16_UINT; + case VK_FORMAT_R16G16B16A16_SINT: return PL_FORMAT_R16G16B16A16_SINT; + case VK_FORMAT_R16G16B16A16_SFLOAT: return PL_FORMAT_R16G16B16A16_FLOAT; + case VK_FORMAT_R32G32B32A32_UINT: return PL_FORMAT_R32G32B32A32_UINT; + case VK_FORMAT_R32G32B32A32_SINT: return PL_FORMAT_R32G32B32A32_SINT; + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: return PL_FORMAT_BC1_RGBA_UNORM; + case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: return PL_FORMAT_BC1_RGBA_SRGB; + case VK_FORMAT_BC2_UNORM_BLOCK: return PL_FORMAT_BC2_UNORM; + case VK_FORMAT_BC2_SRGB_BLOCK: return PL_FORMAT_BC2_SRGB; + case VK_FORMAT_BC3_UNORM_BLOCK: return PL_FORMAT_BC3_UNORM; + case VK_FORMAT_BC3_SRGB_BLOCK: return PL_FORMAT_BC3_SRGB; + case VK_FORMAT_BC4_UNORM_BLOCK: return PL_FORMAT_BC4_UNORM; + case VK_FORMAT_BC4_SNORM_BLOCK: return PL_FORMAT_BC4_SNORM; + case VK_FORMAT_BC5_UNORM_BLOCK: return PL_FORMAT_BC5_UNORM; + case VK_FORMAT_BC5_SNORM_BLOCK: return PL_FORMAT_BC5_SNORM; + case VK_FORMAT_BC6H_UFLOAT_BLOCK: return PL_FORMAT_BC6H_UFLOAT; + case VK_FORMAT_BC6H_SFLOAT_BLOCK: return PL_FORMAT_BC6H_FLOAT; + case VK_FORMAT_BC7_UNORM_BLOCK: return PL_FORMAT_BC7_UNORM; + case VK_FORMAT_BC7_SRGB_BLOCK: return PL_FORMAT_BC7_SRGB; + case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: return PL_FORMAT_ETC2_R8G8B8_UNORM; + case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: return PL_FORMAT_ETC2_R8G8B8_SRGB; + case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: return PL_FORMAT_ETC2_R8G8B8A1_UNORM; + case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: return PL_FORMAT_ETC2_R8G8B8A1_SRGB; + case VK_FORMAT_EAC_R11_UNORM_BLOCK: return PL_FORMAT_EAC_R11_UNORM; + case VK_FORMAT_EAC_R11_SNORM_BLOCK: return PL_FORMAT_EAC_R11_SNORM; + case VK_FORMAT_EAC_R11G11_UNORM_BLOCK: return PL_FORMAT_EAC_R11G11_UNORM; + case VK_FORMAT_EAC_R11G11_SNORM_BLOCK: return PL_FORMAT_EAC_R11G11_SNORM; + case VK_FORMAT_ASTC_4x4_UNORM_BLOCK: return PL_FORMAT_ASTC_4x4_UNORM; + case VK_FORMAT_ASTC_4x4_SRGB_BLOCK: return PL_FORMAT_ASTC_4x4_SRGB; + case VK_FORMAT_ASTC_5x4_UNORM_BLOCK: return PL_FORMAT_ASTC_5x4_UNORM; + case VK_FORMAT_ASTC_5x4_SRGB_BLOCK: return PL_FORMAT_ASTC_5x4_SRGB; + case VK_FORMAT_ASTC_5x5_UNORM_BLOCK: return PL_FORMAT_ASTC_5x5_UNORM; + case VK_FORMAT_ASTC_5x5_SRGB_BLOCK: return PL_FORMAT_ASTC_5x5_SRGB; + case VK_FORMAT_ASTC_6x5_UNORM_BLOCK: return PL_FORMAT_ASTC_6x5_UNORM; + case VK_FORMAT_ASTC_6x5_SRGB_BLOCK: return PL_FORMAT_ASTC_6x5_SRGB; + case VK_FORMAT_ASTC_6x6_UNORM_BLOCK: return PL_FORMAT_ASTC_6x6_UNORM; + case VK_FORMAT_ASTC_6x6_SRGB_BLOCK: return PL_FORMAT_ASTC_6x6_SRGB; + case VK_FORMAT_ASTC_8x5_UNORM_BLOCK: return PL_FORMAT_ASTC_8x5_UNORM; + case VK_FORMAT_ASTC_8x5_SRGB_BLOCK: return PL_FORMAT_ASTC_8x5_SRGB; + case VK_FORMAT_ASTC_8x6_UNORM_BLOCK: return PL_FORMAT_ASTC_8x6_UNORM; + case VK_FORMAT_ASTC_8x6_SRGB_BLOCK: return PL_FORMAT_ASTC_8x6_SRGB; + case VK_FORMAT_ASTC_8x8_UNORM_BLOCK: return PL_FORMAT_ASTC_8x8_UNORM; + case VK_FORMAT_ASTC_8x8_SRGB_BLOCK: return PL_FORMAT_ASTC_8x8_SRGB; + case VK_FORMAT_ASTC_10x5_UNORM_BLOCK: return PL_FORMAT_ASTC_10x5_UNORM; + case VK_FORMAT_ASTC_10x5_SRGB_BLOCK: return PL_FORMAT_ASTC_10x5_SRGB; + case VK_FORMAT_ASTC_10x6_UNORM_BLOCK: return PL_FORMAT_ASTC_10x6_UNORM; + case VK_FORMAT_ASTC_10x6_SRGB_BLOCK: return PL_FORMAT_ASTC_10x6_SRGB; + case VK_FORMAT_ASTC_10x8_UNORM_BLOCK: return PL_FORMAT_ASTC_10x8_UNORM; + case VK_FORMAT_ASTC_10x8_SRGB_BLOCK: return PL_FORMAT_ASTC_10x8_SRGB; + case VK_FORMAT_ASTC_10x10_UNORM_BLOCK: return PL_FORMAT_ASTC_10x10_UNORM; + case VK_FORMAT_ASTC_10x10_SRGB_BLOCK: return PL_FORMAT_ASTC_10x10_SRGB; + case VK_FORMAT_ASTC_12x10_UNORM_BLOCK: return PL_FORMAT_ASTC_12x10_UNORM; + case VK_FORMAT_ASTC_12x10_SRGB_BLOCK: return PL_FORMAT_ASTC_12x10_SRGB; + case VK_FORMAT_ASTC_12x12_UNORM_BLOCK: return PL_FORMAT_ASTC_12x12_UNORM; + case VK_FORMAT_ASTC_12x12_SRGB_BLOCK: return PL_FORMAT_ASTC_12x12_SRGB; + case VK_FORMAT_D16_UNORM: return PL_FORMAT_D16_UNORM; + case VK_FORMAT_S8_UINT: return PL_FORMAT_S8_UINT; default: break; } diff --git a/extensions/pl_renderer_ext.c b/extensions/pl_renderer_ext.c index 0382a386..7f291230 100644 --- a/extensions/pl_renderer_ext.c +++ b/extensions/pl_renderer_ext.c @@ -788,7 +788,7 @@ pl_refr_initialize(plWindow* ptWindow) .atVertexBufferLayouts = { { .uByteStride = sizeof(float) * 3, - .atAttributes = { {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32B32_FLOAT}} + .atAttributes = { {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT3}} } }, .pTempConstantData = aiConstantData, @@ -866,7 +866,7 @@ pl_refr_initialize(plWindow* ptWindow) .atVertexBufferLayouts = { { .uByteStride = sizeof(float) * 3, - .atAttributes = { {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32B32_FLOAT}} + .atAttributes = { {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT3}} } }, .pTempConstantData = aiConstantData, @@ -953,7 +953,7 @@ pl_refr_initialize(plWindow* ptWindow) .atVertexBufferLayouts = { { .uByteStride = sizeof(float) * 3, - .atAttributes = { {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32B32_FLOAT}} + .atAttributes = { {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT3}} } }, .pTempConstantData = aiConstantData, @@ -1010,7 +1010,7 @@ pl_refr_initialize(plWindow* ptWindow) .atVertexBufferLayouts = { { .uByteStride = sizeof(float) * 3, - .atAttributes = { {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32B32_FLOAT}} + .atAttributes = { {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT3}} } }, .atBlendStates = { @@ -1048,8 +1048,8 @@ pl_refr_initialize(plWindow* ptWindow) { .uByteStride = sizeof(float) * 4, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 2, .tFormat = PL_FORMAT_R32G32_FLOAT}, + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 2, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, } } }, @@ -1913,7 +1913,7 @@ pl_refr_load_skybox_from_panorama(uint32_t uSceneHandle, const char* pcPath, int .atVertexBufferLayouts = { { .uByteStride = sizeof(float) * 3, - .atAttributes = { {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32B32_FLOAT}} + .atAttributes = { {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT3}} } }, .atBlendStates = { @@ -3186,8 +3186,8 @@ pl_refr_finalize_scene(uint32_t uSceneHandle) { .uByteStride = sizeof(float) * 4, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 2, .tFormat = PL_FORMAT_R32G32_FLOAT} + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 2, .tFormat = PL_VERTEX_FORMAT_FLOAT2} } } }, @@ -3276,8 +3276,8 @@ pl_refr_finalize_scene(uint32_t uSceneHandle) { .uByteStride = sizeof(float) * 4, .atAttributes = { - {.uByteOffset = 0, .tFormat = PL_FORMAT_R32G32_FLOAT}, - {.uByteOffset = sizeof(float) * 2, .tFormat = PL_FORMAT_R32G32_FLOAT} + {.uByteOffset = 0, .tFormat = PL_VERTEX_FORMAT_FLOAT2}, + {.uByteOffset = sizeof(float) * 2, .tFormat = PL_VERTEX_FORMAT_FLOAT2} } } },