Fix issues with older Vulkan headers on Ubuntu 22.04
This commit is contained in:
parent
75518890d2
commit
471a1b009d
1 changed files with 27 additions and 12 deletions
|
@ -56,6 +56,16 @@
|
||||||
static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2");
|
static_assert(K_QUANTS_PER_ITERATION == 1 || K_QUANTS_PER_ITERATION == 2, "K_QUANTS_PER_ITERATION must be 1 or 2");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define VK_CHECK(err, msg) \
|
||||||
|
do { \
|
||||||
|
vk::Result err_ = (err); \
|
||||||
|
if (err_ != vk::Result::eSuccess) { \
|
||||||
|
fprintf(stderr, "ggml_vulkan: %s error %d at %s:%d\n", \
|
||||||
|
#err, err_, __FILE__, __LINE__); \
|
||||||
|
exit(1); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
typedef void (*ggml_vk_func_t)(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst);
|
typedef void (*ggml_vk_func_t)(const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst);
|
||||||
|
|
||||||
struct vk_buffer {
|
struct vk_buffer {
|
||||||
|
@ -436,7 +446,7 @@ static void ggml_vk_submit(vk_queue& q, std::vector<vk_sequence>& sequences, vk:
|
||||||
});
|
});
|
||||||
tl_submit_infos[idx].sType = vk::StructureType::eTimelineSemaphoreSubmitInfo;
|
tl_submit_infos[idx].sType = vk::StructureType::eTimelineSemaphoreSubmitInfo;
|
||||||
tl_submit_infos[idx].pNext = nullptr;
|
tl_submit_infos[idx].pNext = nullptr;
|
||||||
submit_infos.push_back({
|
vk::SubmitInfo si{
|
||||||
(uint32_t) submission.wait_semaphores.size(),
|
(uint32_t) submission.wait_semaphores.size(),
|
||||||
tl_wait_semaphores[idx].data(),
|
tl_wait_semaphores[idx].data(),
|
||||||
stage_flags[idx].data(),
|
stage_flags[idx].data(),
|
||||||
|
@ -444,8 +454,9 @@ static void ggml_vk_submit(vk_queue& q, std::vector<vk_sequence>& sequences, vk:
|
||||||
&submission.buffer,
|
&submission.buffer,
|
||||||
(uint32_t) submission.signal_semaphores.size(),
|
(uint32_t) submission.signal_semaphores.size(),
|
||||||
tl_signal_semaphores[idx].data(),
|
tl_signal_semaphores[idx].data(),
|
||||||
&tl_submit_infos[idx],
|
};
|
||||||
});
|
si.setPNext(&tl_submit_infos[idx]);
|
||||||
|
submit_infos.push_back(si);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -519,8 +530,10 @@ static vk_semaphore * ggml_vk_create_binary_semaphore() {
|
||||||
#ifdef VK_DEBUG
|
#ifdef VK_DEBUG
|
||||||
std::cerr << "ggml_vk_create_timeline_semaphore()" << std::endl;
|
std::cerr << "ggml_vk_create_timeline_semaphore()" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
vk::SemaphoreTypeCreateInfo info{ vk::SemaphoreType::eBinary, 0 };
|
vk::SemaphoreTypeCreateInfo tci{ vk::SemaphoreType::eBinary, 0 };
|
||||||
vk::Semaphore semaphore = vk_device.device.createSemaphore(vk::SemaphoreCreateInfo{ {}, &info });
|
vk::SemaphoreCreateInfo ci{};
|
||||||
|
ci.setPNext(&tci);
|
||||||
|
vk::Semaphore semaphore = vk_device.device.createSemaphore(ci);
|
||||||
vk_gc.semaphores.push_back({ semaphore, 0 });
|
vk_gc.semaphores.push_back({ semaphore, 0 });
|
||||||
return &vk_gc.semaphores[vk_gc.semaphores.size() - 1];
|
return &vk_gc.semaphores[vk_gc.semaphores.size() - 1];
|
||||||
}
|
}
|
||||||
|
@ -530,8 +543,10 @@ static vk_semaphore * ggml_vk_create_timeline_semaphore() {
|
||||||
std::cerr << "ggml_vk_create_timeline_semaphore()" << std::endl;
|
std::cerr << "ggml_vk_create_timeline_semaphore()" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
if (vk_semaphore_idx >= vk_gc.tl_semaphores.size()) {
|
if (vk_semaphore_idx >= vk_gc.tl_semaphores.size()) {
|
||||||
vk::SemaphoreTypeCreateInfo info{ vk::SemaphoreType::eTimeline, 0 };
|
vk::SemaphoreTypeCreateInfo tci{ vk::SemaphoreType::eTimeline, 0 };
|
||||||
vk::Semaphore semaphore = vk_device.device.createSemaphore(vk::SemaphoreCreateInfo{ {}, &info });
|
vk::SemaphoreCreateInfo ci{};
|
||||||
|
ci.setPNext(&tci);
|
||||||
|
vk::Semaphore semaphore = vk_device.device.createSemaphore(ci);
|
||||||
vk_gc.tl_semaphores.push_back({ semaphore, 0 });
|
vk_gc.tl_semaphores.push_back({ semaphore, 0 });
|
||||||
return &vk_gc.tl_semaphores[vk_semaphore_idx++];
|
return &vk_gc.tl_semaphores[vk_semaphore_idx++];
|
||||||
}
|
}
|
||||||
|
@ -941,7 +956,7 @@ std::cerr << "ggml_vulkan: Validation layers enabled" << std::endl;
|
||||||
VkPhysicalDeviceFeatures2 device_features2;
|
VkPhysicalDeviceFeatures2 device_features2;
|
||||||
device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
|
device_features2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
|
||||||
device_features2.pNext = nullptr;
|
device_features2.pNext = nullptr;
|
||||||
device_features2.features = device_features;
|
device_features2.features = (VkPhysicalDeviceFeatures)device_features;
|
||||||
|
|
||||||
VkPhysicalDeviceVulkan11Features vk11_features;
|
VkPhysicalDeviceVulkan11Features vk11_features;
|
||||||
vk11_features.pNext = nullptr;
|
vk11_features.pNext = nullptr;
|
||||||
|
@ -1405,7 +1420,7 @@ static void ggml_vk_buffer_write_2d(vk_buffer* dst, size_t offset, const void *
|
||||||
vk::Fence fence = vk_device.device.createFence({});
|
vk::Fence fence = vk_device.device.createFence({});
|
||||||
std::vector<vk_sequence> s = { ggml_vk_buffer_write_2d_async(dst, offset, src, spitch, width, height, q, {}, {}, nullptr) };
|
std::vector<vk_sequence> s = { ggml_vk_buffer_write_2d_async(dst, offset, src, spitch, width, height, q, {}, {}, nullptr) };
|
||||||
ggml_vk_submit(q, s, fence);
|
ggml_vk_submit(q, s, fence);
|
||||||
vk::resultCheck(vk_device.device.waitForFences({ fence }, true, uint64_t(-1)), "vk_buffer_write_2d waitForFences");
|
VK_CHECK(vk_device.device.waitForFences({ fence }, true, uint64_t(-1)), "vk_buffer_write_2d waitForFences");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1509,7 +1524,7 @@ static void ggml_vk_buffer_read(vk_buffer* src, size_t offset, void * dst, size_
|
||||||
vkCmdCopyBuffer(s[0][0].buffer, src->buffer, buf->buffer, 1, &buf_copy);
|
vkCmdCopyBuffer(s[0][0].buffer, src->buffer, buf->buffer, 1, &buf_copy);
|
||||||
s[0][0].buffer.end();
|
s[0][0].buffer.end();
|
||||||
ggml_vk_submit(q, s, fence);
|
ggml_vk_submit(q, s, fence);
|
||||||
vk::resultCheck(vk_device.device.waitForFences({ fence }, true, uint64_t(-1)), "vk_buffer_read waitForFences");
|
VK_CHECK(vk_device.device.waitForFences({ fence }, true, uint64_t(-1)), "vk_buffer_read waitForFences");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1538,7 +1553,7 @@ static void ggml_vk_buffer_read(vk_buffer* src, size_t offset, void * dst, size_
|
||||||
1,
|
1,
|
||||||
&cmd_buffer);
|
&cmd_buffer);
|
||||||
q.queue.submit({ submit_info }, fence);
|
q.queue.submit({ submit_info }, fence);
|
||||||
vk::resultCheck(vk_device.device.waitForFences({ fence }, true, uint64_t(-1)), "vk_buffer_read staging waitForFences");
|
VK_CHECK(vk_device.device.waitForFences({ fence }, true, uint64_t(-1)), "vk_buffer_read staging waitForFences");
|
||||||
vk_device.device.destroyFence(fence);
|
vk_device.device.destroyFence(fence);
|
||||||
memcpy(dst, src->sb_read->ptr, size);
|
memcpy(dst, src->sb_read->ptr, size);
|
||||||
}
|
}
|
||||||
|
@ -2824,7 +2839,7 @@ bool ggml_vk_compute_forward(ggml_compute_params * params, ggml_tensor * tensor)
|
||||||
ggml_vk_submit(vk_device.transfer_queues[1], extra->out_seqs, vk_fence);
|
ggml_vk_submit(vk_device.transfer_queues[1], extra->out_seqs, vk_fence);
|
||||||
}
|
}
|
||||||
|
|
||||||
vk::resultCheck(vk_device.device.waitForFences({ vk_fence }, true, uint64_t(-1)), "ggml_vk_compute_forward waitForFences");
|
VK_CHECK(vk_device.device.waitForFences({ vk_fence }, true, uint64_t(-1)), "ggml_vk_compute_forward waitForFences");
|
||||||
vk_device.device.resetFences({ vk_fence });
|
vk_device.device.resetFences({ vk_fence });
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue