mirror of
https://github.com/italicsjenga/portability.git
synced 2024-11-22 23:11:30 +11:00
Implement vkAllocateMemory and vkFreeMemory
This commit is contained in:
parent
04835a3aeb
commit
4f409de59e
|
@ -10,12 +10,10 @@ name = "portability_gfx"
|
||||||
lazy_static = "1.0"
|
lazy_static = "1.0"
|
||||||
|
|
||||||
[dependencies.gfx-hal]
|
[dependencies.gfx-hal]
|
||||||
#path = "../gfx/src/hal"
|
|
||||||
git = "https://github.com/gfx-rs/gfx"
|
git = "https://github.com/gfx-rs/gfx"
|
||||||
branch = "portable"
|
branch = "portable"
|
||||||
|
|
||||||
[dependencies.gfx-backend-vulkan]
|
[dependencies.gfx-backend-vulkan]
|
||||||
#path = "../gfx/src/backend/vulkan"
|
|
||||||
git = "https://github.com/gfx-rs/gfx"
|
git = "https://github.com/gfx-rs/gfx"
|
||||||
branch = "portable"
|
branch = "portable"
|
||||||
features = ["portable"]
|
features = ["portable"]
|
||||||
|
|
|
@ -262,11 +262,25 @@ pub extern fn gfxAllocateMemory(
|
||||||
_pAllocator: *const VkAllocationCallbacks,
|
_pAllocator: *const VkAllocationCallbacks,
|
||||||
pMemory: *mut VkDeviceMemory,
|
pMemory: *mut VkDeviceMemory,
|
||||||
) -> VkResult {
|
) -> VkResult {
|
||||||
unimplemented!()
|
let info = unsafe { &*pAllocateInfo };
|
||||||
|
let memory = gpu
|
||||||
|
.device
|
||||||
|
.allocate_memory(
|
||||||
|
hal::MemoryTypeId(info.memoryTypeIndex as _),
|
||||||
|
info.allocationSize,
|
||||||
|
)
|
||||||
|
.unwrap(); // TODO:
|
||||||
|
|
||||||
|
unsafe { *pMemory = Handle::new(memory); }
|
||||||
|
VkResult::VK_SUCCESS
|
||||||
}
|
}
|
||||||
extern "C" {
|
#[inline]
|
||||||
pub fn vkFreeMemory(device: VkDevice, memory: VkDeviceMemory,
|
pub extern fn gfxFreeMemory(
|
||||||
pAllocator: *const VkAllocationCallbacks);
|
gpu: VkDevice,
|
||||||
|
memory: VkDeviceMemory,
|
||||||
|
pAllocator: *const VkAllocationCallbacks,
|
||||||
|
) {
|
||||||
|
gpu.device.free_memory(*memory.unwrap());
|
||||||
}
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn vkMapMemory(device: VkDevice, memory: VkDeviceMemory,
|
pub fn vkMapMemory(device: VkDevice, memory: VkDeviceMemory,
|
||||||
|
|
|
@ -26,6 +26,7 @@ pub type VkPhysicalDevice = Handle<hal::Adapter<B>>;
|
||||||
pub type VkDevice = Handle<hal::Gpu<B>>;
|
pub type VkDevice = Handle<hal::Gpu<B>>;
|
||||||
pub type VkCommandPool = Handle<<B as hal::Backend>::CommandPool>;
|
pub type VkCommandPool = Handle<<B as hal::Backend>::CommandPool>;
|
||||||
pub type VkCommandBuffer = Handle<<B as hal::Backend>::CommandBuffer>;
|
pub type VkCommandBuffer = Handle<<B as hal::Backend>::CommandBuffer>;
|
||||||
|
pub type VkDeviceMemory = Handle<<B as hal::Backend>::Memory>;
|
||||||
|
|
||||||
pub enum Image<B: hal::Backend> {
|
pub enum Image<B: hal::Backend> {
|
||||||
Image(B::Image),
|
Image(B::Image),
|
||||||
|
@ -512,12 +513,6 @@ pub struct VkFence_T {
|
||||||
pub type VkFence = *mut VkFence_T;
|
pub type VkFence = *mut VkFence_T;
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
pub struct VkDeviceMemory_T {
|
|
||||||
_unused: [u8; 0],
|
|
||||||
}
|
|
||||||
pub type VkDeviceMemory = *mut VkDeviceMemory_T;
|
|
||||||
#[repr(C)]
|
|
||||||
#[derive(Debug, Copy, Clone)]
|
|
||||||
pub struct VkBuffer_T {
|
pub struct VkBuffer_T {
|
||||||
_unused: [u8; 0],
|
_unused: [u8; 0],
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,14 @@ pub extern fn vkAllocateMemory(
|
||||||
gfxAllocateMemory(device, pAllocateInfo, pAllocator, pMemory)
|
gfxAllocateMemory(device, pAllocateInfo, pAllocator, pMemory)
|
||||||
}
|
}
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
pub extern fn vkFreeMemory(
|
||||||
|
device: VkDevice,
|
||||||
|
memory: VkDeviceMemory,
|
||||||
|
pAllocator: *const VkAllocationCallbacks,
|
||||||
|
) {
|
||||||
|
gfxFreeMemory(device, memory, pAllocator)
|
||||||
|
}
|
||||||
|
#[no_mangle]
|
||||||
pub extern fn vkBindImageMemory(
|
pub extern fn vkBindImageMemory(
|
||||||
device: VkDevice,
|
device: VkDevice,
|
||||||
image: VkImage,
|
image: VkImage,
|
||||||
|
|
|
@ -311,6 +311,11 @@ int main() {
|
||||||
&mem_alloc.memoryTypeIndex);
|
&mem_alloc.memoryTypeIndex);
|
||||||
assert(pass);
|
assert(pass);
|
||||||
|
|
||||||
|
VkDeviceMemory depth_memory = 0;
|
||||||
|
res = vkAllocateMemory(device, &mem_alloc, NULL, &depth_memory);
|
||||||
|
printf("\tvkAllocateMemory: res=%d\n", res);
|
||||||
|
assert(!res);
|
||||||
|
|
||||||
VkCommandPool cmd_pool = 0;
|
VkCommandPool cmd_pool = 0;
|
||||||
VkCommandPoolCreateInfo cmd_pool_info = {};
|
VkCommandPoolCreateInfo cmd_pool_info = {};
|
||||||
cmd_pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
cmd_pool_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||||
|
@ -339,6 +344,8 @@ int main() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vkFreeMemory(device, depth_memory, NULL);
|
||||||
|
printf("\tvkFreeMemory\n");
|
||||||
for(auto view : swapchain_views) {
|
for(auto view : swapchain_views) {
|
||||||
vkDestroyImageView(device, view, NULL);
|
vkDestroyImageView(device, view, NULL);
|
||||||
printf("\tvkDestroyImageView\n");
|
printf("\tvkDestroyImageView\n");
|
||||||
|
|
Loading…
Reference in a new issue