adding base Image and ICD file generation

This commit is contained in:
2025-11-23 02:39:56 +01:00
parent b586ff18e1
commit b65d5cf183
17 changed files with 438 additions and 48 deletions

View File

@@ -20,6 +20,19 @@
#define KVF_NO_KHR
#include <kvf.h>
void CreateAndBindMemoryToBuffer(VkPhysicalDevice physical_device, VkDevice device, VkBuffer buffer, VkDeviceMemory* memory , VkDeviceSize size, VkMemoryPropertyFlags props)
{
VkMemoryRequirements requirements;
vkGetBufferMemoryRequirements(device, buffer, &requirements);
VkMemoryAllocateInfo alloc_info = {0};
alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
alloc_info.allocationSize = size;
alloc_info.memoryTypeIndex = kvfFindMemoryType(physical_device, requirements.memoryTypeBits, props);
kvfCheckVk(vkAllocateMemory(device, &alloc_info, NULL, memory));
kvfCheckVk(vkBindBufferMemory(device, buffer, *memory, 0));
}
int main(void)
{
volkInitialize();
@@ -52,16 +65,15 @@ int main(void)
VkDevice device = kvfCreateDevice(physical_device, NULL, 0, NULL);
volkLoadDevice(device);
VkBuffer buffer = kvfCreateBuffer(device, VK_BUFFER_USAGE_TRANSFER_DST_BIT, 256);
VkBuffer buffer = kvfCreateBuffer(device, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, 256);
VkDeviceMemory memory;
CreateAndBindMemoryToBuffer(physical_device, device, buffer, &memory, 256, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
VkDeviceMemory memory = VK_NULL_HANDLE;
VkMemoryAllocateInfo alloc_info = {0};
alloc_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
alloc_info.allocationSize = 256;
alloc_info.memoryTypeIndex = 0;
kvfCheckVk(vkAllocateMemory(device, &alloc_info, NULL, &memory));
VkBuffer buffer2 = kvfCreateBuffer(device, VK_BUFFER_USAGE_TRANSFER_DST_BIT, 256);
VkDeviceMemory memory2;
CreateAndBindMemoryToBuffer(physical_device, device, buffer2, &memory2, 256, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT);
kvfCheckVk(vkBindBufferMemory(device, buffer, memory, 0));
VkImage image = kvfCreateImage(device, 256, 256, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT, KVF_IMAGE_COLOR);
VkQueue queue = kvfGetDeviceQueue(device, KVF_GRAPHICS_QUEUE);
VkFence fence = kvfCreateFence(device);
@@ -71,7 +83,13 @@ int main(void)
kvfBeginCommandBuffer(cmd, 0);
{
vkCmdFillBuffer(cmd, buffer, 0, VK_WHOLE_SIZE, 0x12ABCDEF);
vkCmdFillBuffer(cmd, buffer, 0, VK_WHOLE_SIZE, 0x600DCAFE);
VkBufferCopy region = {0};
region.srcOffset = 0;
region.dstOffset = 0;
region.size = 256;
vkCmdCopyBuffer(cmd, buffer, buffer2, 1, &region);
}
kvfEndCommandBuffer(cmd);
@@ -79,15 +97,19 @@ int main(void)
kvfWaitForFence(device, fence);
uint32_t* map = NULL;
kvfCheckVk(vkMapMemory(device, memory, 0, VK_WHOLE_SIZE, 0, (void**)&map));
kvfCheckVk(vkMapMemory(device, memory2, 0, VK_WHOLE_SIZE, 0, (void**)&map));
for(size_t i = 0; i < 64; i++)
printf("0x%X%s", map[i], (i + 1 == 64 ? "" : " - "));
printf("0x%X ", map[i]);
puts("");
vkUnmapMemory(device, memory);
vkUnmapMemory(device, memory2);
kvfDestroyFence(device, fence);
kvfDestroyBuffer(device, buffer);
vkFreeMemory(device, memory, NULL);
kvfDestroyBuffer(device, buffer2);
vkFreeMemory(device, memory2, NULL);
kvfDestroyImage(device, image);
kvfDestroyDevice(device);
kvfDestroyInstance(instance);