Improve GPU compatibility, RDNA2 kernels and startup diagnostics

- Match render/compute adapters and gate RR models by GPU capabilities
- Add RDNA2 native texture kernels and fix FP16 rounding
- Harden model builds, cache validation and packaging
- Add startup tracing, timeouts, documentation and regression tests
This commit is contained in:
ayo committed 2026-10-19 11:36:40 -04:00
1 parent ca93d0fbf7
commit 2558fcbd39
32 files changed
+1131 -81

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
#pragma once
#include <vulkan/vulkan_core.h>
#include <sstream>
#include <string>
// Inspect metadata before constructing any pipeline. Old default D/E and F models require FP8;
// only the explicitly marked gfx11 D/E models use widened f16 cooperative matrices.
inline bool d4r_rr_model_compatible(const std::string& metadata, bool f16Matrices, bool fp8Matrices)
{
std::istringstream lines(metadata);
std::string line;
if (!std::getline(lines, line)) return false;
if (!line.empty() && line.back() == '\r') line.pop_back();
if (line == "D4RR0002") return fp8Matrices;
if (line != "D4RR0001") return false;
bool widened = false;
while (std::getline(lines, line))
{
std::istringstream fields(line);
std::string key, value; fields >> key >> value;
if (key == "arithmetic")
{
if (value != "gfx11") return false;
widened = true;
}
}
return widened ? f16Matrices : fp8Matrices;
}
inline bool d4r_matrix_tuple(const VkCooperativeMatrixPropertiesKHR& p, VkComponentTypeKHR operand)
{
return p.MSize == 16 && p.NSize == 16 && p.KSize == 16 && p.scope == VK_SCOPE_SUBGROUP_KHR &&
p.AType == operand && p.BType == operand && p.CType == VK_COMPONENT_TYPE_FLOAT32_KHR &&
p.ResultType == VK_COMPONENT_TYPE_FLOAT32_KHR && !p.saturatingAccumulation;
}