He estado intentando enviar datos a un búfer de almacenamiento y luego volver a leerlos, pero fue en vano. Estoy creando el búfer como siempre hago, rellenelo con VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
Y dale las banderas
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
Luego, cuando leo en el búfer solo obtengo datos basura.
Buffer payload_buffer; VkDeviceSize buffer_size = sizeof(float); CreateBuffer(engine, buffer_size, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, payload_buffer); // Create the data that will be saved float payload = 5.0f; // Move the data to the GPU memcpy(payload_buffer.mapped_memory, &payload, buffer_size); // Move the data back memcpy(&payload, &payload_buffer.mapped_memory, buffer_size); // Output the data std::cout << payload << std::endl; // Destroy the buffer instance DestroyBuffer(engine, payload_buffer);
¿Alguien sabe cómo rastrearía el problema?
Elimine el ampersand del 2do parámetro. Debería ser:
memcpy(&payload, payload_buffer.mapped_memory, buffer_size);
Si mapped_memory
ya es un puntero.
De lo contrario, con el símbolo comercial está copyndo el puntero en su flotador en lugar de la memory a la que apunta.