mirror of
https://github.com/PancakeTAS/lsfg-vk.git
synced 2025-10-30 07:01:10 +00:00
feat(fp16): fetch for fp16 support
This commit is contained in:
parent
b34dd6ddaa
commit
b93a4eeaf2
2 changed files with 22 additions and 2 deletions
|
|
@ -34,6 +34,8 @@ namespace LSFG::Core {
|
||||||
[[nodiscard]] uint32_t getComputeFamilyIdx() const { return this->computeFamilyIdx; }
|
[[nodiscard]] uint32_t getComputeFamilyIdx() const { return this->computeFamilyIdx; }
|
||||||
/// Get the compute queue.
|
/// Get the compute queue.
|
||||||
[[nodiscard]] VkQueue getComputeQueue() const { return this->computeQueue; }
|
[[nodiscard]] VkQueue getComputeQueue() const { return this->computeQueue; }
|
||||||
|
/// Check if the device supports FP16.
|
||||||
|
[[nodiscard]] bool getFP16Support() const { return this->supportsFP16; }
|
||||||
|
|
||||||
// Trivially copyable, moveable and destructible
|
// Trivially copyable, moveable and destructible
|
||||||
Device(const Core::Device&) noexcept = default;
|
Device(const Core::Device&) noexcept = default;
|
||||||
|
|
@ -46,6 +48,7 @@ namespace LSFG::Core {
|
||||||
VkPhysicalDevice physicalDevice{};
|
VkPhysicalDevice physicalDevice{};
|
||||||
|
|
||||||
uint32_t computeFamilyIdx{0};
|
uint32_t computeFamilyIdx{0};
|
||||||
|
bool supportsFP16{false};
|
||||||
|
|
||||||
VkQueue computeQueue{};
|
VkQueue computeQueue{};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
#include <iostream>
|
||||||
#include <volk.h>
|
#include <volk.h>
|
||||||
#include <vulkan/vulkan_core.h>
|
#include <vulkan/vulkan_core.h>
|
||||||
|
|
||||||
|
|
@ -15,7 +16,7 @@ using namespace LSFG::Core;
|
||||||
const std::vector<const char*> requiredExtensions = {
|
const std::vector<const char*> requiredExtensions = {
|
||||||
"VK_KHR_external_memory_fd",
|
"VK_KHR_external_memory_fd",
|
||||||
"VK_KHR_external_semaphore_fd",
|
"VK_KHR_external_semaphore_fd",
|
||||||
"VK_EXT_robustness2",
|
"VK_EXT_robustness2"
|
||||||
};
|
};
|
||||||
|
|
||||||
Device::Device(const Instance& instance, uint64_t deviceUUID) {
|
Device::Device(const Instance& instance, uint64_t deviceUUID) {
|
||||||
|
|
@ -62,11 +63,26 @@ Device::Device(const Instance& instance, uint64_t deviceUUID) {
|
||||||
if (!computeFamilyIdx)
|
if (!computeFamilyIdx)
|
||||||
throw LSFG::vulkan_error(VK_ERROR_INITIALIZATION_FAILED, "No compute queue family found");
|
throw LSFG::vulkan_error(VK_ERROR_INITIALIZATION_FAILED, "No compute queue family found");
|
||||||
|
|
||||||
|
// check if physical device supports float16
|
||||||
|
VkPhysicalDeviceVulkan12Features supported12Features{
|
||||||
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES
|
||||||
|
};
|
||||||
|
VkPhysicalDeviceFeatures2 supportedFeatures{
|
||||||
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
|
||||||
|
.pNext = &supported12Features
|
||||||
|
};
|
||||||
|
vkGetPhysicalDeviceFeatures2(*physicalDevice, &supportedFeatures);
|
||||||
|
this->supportsFP16 = supported12Features.shaderFloat16;
|
||||||
|
if (this->supportsFP16)
|
||||||
|
std::cerr << "lsfg-vk: Using FP16 acceleration" << '\n';
|
||||||
|
else
|
||||||
|
std::cerr << "lsfg-vk: FP16 acceleration not supported, using FP32" << '\n';
|
||||||
|
|
||||||
// create logical device
|
// create logical device
|
||||||
const float queuePriority{1.0F}; // highest priority
|
const float queuePriority{1.0F}; // highest priority
|
||||||
VkPhysicalDeviceRobustness2FeaturesEXT robustness2{
|
VkPhysicalDeviceRobustness2FeaturesEXT robustness2{
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT,
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT,
|
||||||
.nullDescriptor = VK_TRUE,
|
.nullDescriptor = VK_TRUE
|
||||||
};
|
};
|
||||||
VkPhysicalDeviceVulkan13Features features13{
|
VkPhysicalDeviceVulkan13Features features13{
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
|
||||||
|
|
@ -76,6 +92,7 @@ Device::Device(const Instance& instance, uint64_t deviceUUID) {
|
||||||
const VkPhysicalDeviceVulkan12Features features12{
|
const VkPhysicalDeviceVulkan12Features features12{
|
||||||
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
|
.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES,
|
||||||
.pNext = &features13,
|
.pNext = &features13,
|
||||||
|
.shaderFloat16 = this->supportsFP16,
|
||||||
.timelineSemaphore = VK_TRUE,
|
.timelineSemaphore = VK_TRUE,
|
||||||
.vulkanMemoryModel = VK_TRUE
|
.vulkanMemoryModel = VK_TRUE
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue