| 69 | } |
| 70 | |
| 71 | static void* create_func(GraphicContext* ctx, const uint64_t* /*params*/, const uint64_t* vaddr, const uint64_t* size, int vaddr_num, |
| 72 | VulkanMemory* mem) |
| 73 | { |
| 74 | KYTY_PROFILER_BLOCK("IndexBufferGpuObject::Create"); |
| 75 | |
| 76 | EXIT_IF(vaddr_num != 1 || size == nullptr || vaddr == nullptr || *vaddr == 0); |
| 77 | |
| 78 | EXIT_IF(mem == nullptr); |
| 79 | EXIT_IF(ctx == nullptr); |
| 80 | |
| 81 | auto* vk_obj = new VulkanBuffer; |
| 82 | |
| 83 | vk_obj->usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT; |
| 84 | vk_obj->memory.property = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; |
| 85 | vk_obj->buffer = nullptr; |
| 86 | |
| 87 | VulkanCreateBuffer(ctx, *size, vk_obj); |
| 88 | EXIT_NOT_IMPLEMENTED(vk_obj->buffer == nullptr); |
| 89 | |
| 90 | VulkanBuffer staging_buffer {}; |
| 91 | staging_buffer.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; |
| 92 | staging_buffer.memory.property = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; |
| 93 | |
| 94 | VulkanCreateBuffer(ctx, *size, &staging_buffer); |
| 95 | EXIT_NOT_IMPLEMENTED(staging_buffer.buffer == nullptr); |
| 96 | |
| 97 | void* data = nullptr; |
| 98 | // vkMapMemory(ctx->device, staging_buffer.memory.memory, staging_buffer.memory.offset, *size, 0, &data); |
| 99 | VulkanMapMemory(ctx, &staging_buffer.memory, &data); |
| 100 | memcpy(data, reinterpret_cast<void*>(*vaddr), *size); |
| 101 | // vkUnmapMemory(ctx->device, staging_buffer.memory.memory); |
| 102 | VulkanUnmapMemory(ctx, &staging_buffer.memory); |
| 103 | |
| 104 | UtilCopyBuffer(&staging_buffer, vk_obj, *size); |
| 105 | |
| 106 | VulkanDeleteBuffer(ctx, &staging_buffer); |
| 107 | |
| 108 | return vk_obj; |
| 109 | } |
| 110 | |
| 111 | static void update_func(GraphicContext* /*ctx*/, const uint64_t* /*params*/, void* /*obj*/, const uint64_t* /*vaddr*/, |
| 112 | const uint64_t* /*size*/, int /*vaddr_num*/) |
nothing calls this directly
no test coverage detected