Skip to content

Commit ab65c3a

Browse files
committed
feat: add double support for vulkan backend
1 parent 5d5f91a commit ab65c3a

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

extensions/pl_graphics_ext.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,7 +1323,9 @@ enum _plDeviceCapability
13231323
PL_DEVICE_CAPABILITY_SWAPCHAIN = 1 << 0,
13241324
PL_DEVICE_CAPABILITY_BIND_GROUP_INDEXING = 1 << 1,
13251325
PL_DEVICE_CAPABILITY_SAMPLER_ANISOTROPY = 1 << 2,
1326-
PL_DEVICE_CAPABILITY_MULTIPLE_VIEWPORTS = 1 << 3
1326+
PL_DEVICE_CAPABILITY_MULTIPLE_VIEWPORTS = 1 << 3,
1327+
PL_DEVICE_CAPABILITY_SHADER_FLOAT_64 = 1 << 4,
1328+
PL_DEVICE_CAPABILITY_SHADER_INT_64 = 1 << 5
13271329
};
13281330

13291331
enum _plCommandPoolResetFlags
@@ -1564,7 +1566,12 @@ enum _plVertexFormat
15641566
PL_VERTEX_FORMAT_INT,
15651567
PL_VERTEX_FORMAT_INT2,
15661568
PL_VERTEX_FORMAT_INT3,
1567-
PL_VERTEX_FORMAT_INT4,
1569+
PL_VERTEX_FORMAT_INT4,
1570+
1571+
PL_VERTEX_FORMAT_DOUBLE, // must check for support (no metal support)
1572+
PL_VERTEX_FORMAT_DOUBLE2, // must check for support (no metal support)
1573+
PL_VERTEX_FORMAT_DOUBLE3, // must check for support (no metal support)
1574+
PL_VERTEX_FORMAT_DOUBLE4, // must check for support (no metal support)
15681575

15691576
PL_VERTEX_FORMAT_COUNT
15701577
};

extensions/pl_graphics_metal.m

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3143,6 +3143,15 @@
31433143
case PL_VERTEX_FORMAT_INT2: return MTLVertexFormatInt2;
31443144
case PL_VERTEX_FORMAT_INT3: return MTLVertexFormatInt3;
31453145
case PL_VERTEX_FORMAT_INT4: return MTLVertexFormatInt4;
3146+
3147+
case PL_VERTEX_FORMAT_DOUBLE:
3148+
case PL_VERTEX_FORMAT_DOUBLE2:
3149+
case PL_VERTEX_FORMAT_DOUBLE3:
3150+
case PL_VERTEX_FORMAT_DOUBLE4:
3151+
{
3152+
PL_ASSERT(false && "Unsupported vertex format");
3153+
return MTLVertexFormatInvalid;
3154+
}
31463155
}
31473156

31483157
PL_ASSERT(false && "Unsupported vertex format");

extensions/pl_graphics_vulkan.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2822,6 +2822,9 @@ pl_enumerate_devices(plDeviceInfo *atDeviceInfo, uint32_t* puDeviceCount)
28222822
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES,
28232823
.pNext = &tDeviceFeatures12};
28242824

2825+
if(tDeviceFeatures.shaderFloat64) atDeviceInfo[i].tCapabilities |= PL_DEVICE_CAPABILITY_SHADER_FLOAT_64;
2826+
if(tDeviceFeatures.shaderInt64) atDeviceInfo[i].tCapabilities |= PL_DEVICE_CAPABILITY_SHADER_INT_64;
2827+
28252828
// create logical device
28262829
tDeviceFeatures12.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
28272830
tDeviceFeatures2.pNext = &tDescriptorIndexingFeatures;
@@ -4922,6 +4925,10 @@ pl__vulkan_vertex_format(plVertexFormat tFormat)
49224925
case PL_VERTEX_FORMAT_FLOAT2: return VK_FORMAT_R32G32_SFLOAT;
49234926
case PL_VERTEX_FORMAT_FLOAT3: return VK_FORMAT_R32G32B32_SFLOAT;
49244927
case PL_VERTEX_FORMAT_FLOAT4: return VK_FORMAT_R32G32B32A32_SFLOAT;
4928+
case PL_VERTEX_FORMAT_DOUBLE: return VK_FORMAT_R64_SFLOAT;
4929+
case PL_VERTEX_FORMAT_DOUBLE2: return VK_FORMAT_R64G64_SFLOAT;
4930+
case PL_VERTEX_FORMAT_DOUBLE3: return VK_FORMAT_R64G64B64_SFLOAT;
4931+
case PL_VERTEX_FORMAT_DOUBLE4: return VK_FORMAT_R64G64B64A64_SFLOAT;
49254932
case PL_VERTEX_FORMAT_UCHAR: return VK_FORMAT_R8_UNORM;
49264933
case PL_VERTEX_FORMAT_UCHAR2: return VK_FORMAT_R8G8_UNORM;
49274934
case PL_VERTEX_FORMAT_UCHAR3: return VK_FORMAT_R8G8B8_UNORM;

0 commit comments

Comments
 (0)