## CORE Function Index for EX Tier Planning
This index lists all major public types and functions in the `core` tier, grouped by subsystem. Use this as a reference for designing EX wrappers and managers.
---
### Instance
- `pub struct InstanceCreateInfo`
- `pub struct Instance`
- `pub enum InstanceError`
- `pub fn Instance::new(create_info: InstanceCreateInfo) -> Result<Self, InstanceError>`
- `pub fn Instance::handle(&self) -> &ash::Instance`
- `pub fn Instance::entry(&self) -> &ash::Entry`
- `pub fn Instance::enumerate_physical_devices(&self) -> Result<Vec<vk::PhysicalDevice>, InstanceError>`
### Device
- `pub struct PhysicalDeviceInfo`
- `pub struct DeviceCreateInfo`
- `pub struct QueueCreateInfo`
- `pub struct Device`
- `pub enum DeviceError`
- `pub fn Device::new(...) -> Result<Self, DeviceError>`
- `pub fn Device::handle(&self) -> &ash::Device`
- `pub fn Device::physical_device(&self) -> vk::PhysicalDevice`
- `pub fn Device::memory_properties(&self) -> &vk::PhysicalDeviceMemoryProperties`
- `pub fn Device::queue_families(&self) -> &[vk::QueueFamilyProperties]`
- `pub fn Device::find_memory_type(...) -> Option<u32>`
- `pub fn Device::find_queue_family(&self, flags: vk::QueueFlags) -> Option<u32>`
- `pub fn Device::wait_idle(&self) -> Result<(), DeviceError>`
### Shader
- `pub struct Shader`
- `pub struct ShaderCompiler`
- `pub struct ShaderReflection`
- `pub enum ShaderError`
- `pub enum ShaderStage`
- `pub fn Shader::from_spirv(...) -> Result<Self, ShaderError>`
- `pub fn Shader::from_glsl(...) -> Result<Self, ShaderError>`
- `pub fn Shader::handle(&self) -> vk::ShaderModule`
- `pub fn Shader::stage(&self) -> ShaderStage`
- `pub fn Shader::entry_point(&self) -> &str`
- `pub fn ShaderCompiler::compile_glsl(source: &str, stage: ShaderStage) -> Result<Vec<u32>, ShaderError>`
- `pub fn ShaderReflection::from_spirv(spirv: &[u32]) -> Result<Self, ShaderError>`
### Pipeline
- `pub struct Pipeline`
- `pub struct PipelineLayout`
- `pub struct PipelineBuilder`
- `pub struct ShaderStageInfo`
- `pub enum PipelineError`
- `pub fn PipelineLayout::new(...) -> Result<Self, PipelineError>`
- `pub fn PipelineLayout::handle(&self) -> vk::PipelineLayout`
- `pub fn Pipeline::handle(&self) -> vk::Pipeline`
- `pub fn Pipeline::layout(&self) -> &PipelineLayout`
- `pub fn Pipeline::bind_point(&self) -> vk::PipelineBindPoint`
- `pub fn PipelineBuilder::new() -> Self`
- `pub fn PipelineBuilder::vertex_shader(...) -> Self`
- `pub fn PipelineBuilder::fragment_shader(...) -> Self`
- `pub fn PipelineBuilder::geometry_shader(...) -> Self`
- `pub fn PipelineBuilder::build_graphics(...) -> Result<Pipeline, PipelineError>`
### Descriptor
- `pub struct DescriptorPool`
- `pub struct DescriptorSet`
- `pub struct DescriptorSetLayout`
- `pub struct DescriptorWrite`
- `pub enum DescriptorPoolError`
- `pub enum DescriptorError`
- `pub enum DescriptorResource`
- `pub fn DescriptorPool::new(...) -> Result<Self, DescriptorPoolError>`
- `pub fn DescriptorPool::handle(&self) -> vk::DescriptorPool`
- `pub fn DescriptorPool::allocate(...) -> Result<Vec<DescriptorSet>, DescriptorPoolError>`
- `pub fn DescriptorPool::reset(...) -> Result<(), DescriptorPoolError>`
- `pub fn DescriptorSet::handle(&self) -> vk::DescriptorSet`
- `pub fn DescriptorSetLayout::new(...) -> Result<Self, DescriptorError>`
- `pub fn DescriptorSetLayout::handle(&self) -> vk::DescriptorSetLayout`
- `pub fn update_descriptor_sets(device: &Device, writes: &[DescriptorWrite])`
### Command
- `pub struct CommandPool`
- `pub struct CommandBuffer`
- `pub enum CommandPoolError`
- `pub enum CommandBufferError`
- `pub fn CommandPool::new(...) -> Result<Self, CommandPoolError>`
- `pub fn CommandPool::handle(&self) -> vk::CommandPool`
- `pub fn CommandPool::allocate(...) -> Result<Vec<CommandBuffer>, CommandPoolError>`
- `pub fn CommandPool::allocate_primary(&self, device: &Device) -> Result<CommandBuffer, CommandPoolError>`
- `pub fn CommandPool::allocate_secondary(&self, device: &Device) -> Result<CommandBuffer, CommandPoolError>`
- `pub fn CommandBuffer::handle(&self) -> vk::CommandBuffer`
- `pub fn CommandBuffer::begin(...) -> Result<(), CommandBufferError>`
- `pub fn CommandBuffer::end(&self, device: &Device) -> Result<(), CommandBufferError>`
- `pub fn CommandBuffer::bind_pipeline(...)`
- `pub fn CommandBuffer::bind_descriptor_sets(...)`
- `pub fn CommandBuffer::bind_vertex_buffers(...)`
- `pub fn CommandBuffer::bind_index_buffer(...)`
- `pub fn CommandBuffer::draw(...)`
- `pub fn CommandBuffer::draw_indexed(...)`
- `pub fn CommandBuffer::dispatch(...)`
- `pub fn CommandBuffer::begin_rendering(...)`
- `pub fn CommandBuffer::end_rendering(...)`
- `pub fn CommandBuffer::pipeline_barrier(...)`
- `pub fn CommandBuffer::copy_buffer(...)`
- `pub fn CommandBuffer::copy_buffer_to_image(...)`
### Memory
- `pub struct Buffer`
- `pub struct Image`
- `pub enum MemoryError`
- `pub fn Buffer::new(...) -> Result<Self, MemoryError>`
- `pub fn Buffer::handle(&self) -> vk::Buffer`
- `pub fn Buffer::memory(&self) -> vk::DeviceMemory`
- `pub fn Buffer::size(&self) -> vk::DeviceSize`
- `pub fn Buffer::usage(&self) -> vk::BufferUsageFlags`
- `pub fn Buffer::unmap(&self, device: &Device)`
- `pub fn Buffer::destroy(&mut self, device: &Device)`
- `pub fn Image::new(...) -> Result<Self, MemoryError>`
- `pub fn Image::handle(&self) -> vk::Image`
- `pub fn Image::memory(&self) -> vk::DeviceMemory`
- `pub fn Image::view(&self) -> vk::ImageView`
- `pub fn Image::extent(&self) -> vk::Extent3D`
- `pub fn Image::format(&self) -> vk::Format`
- `pub fn Image::usage(&self) -> vk::ImageUsageFlags`
- `pub fn Image::destroy(&mut self, device: &Device)`
### Swapchain
- `pub struct Swapchain`
- `pub enum SwapchainError`
- `pub fn Swapchain::new(...) -> Result<Self, SwapchainError>`
- `pub fn Swapchain::handle(&self) -> vk::SwapchainKHR`
- `pub fn Swapchain::images(&self) -> &[vk::Image]`
- `pub fn Swapchain::format(&self) -> vk::Format`
- `pub fn Swapchain::extent(&self) -> vk::Extent2D`
- `pub fn Swapchain::acquire_next_image(...) -> Result<u32, SwapchainError>`
- `pub fn Swapchain::queue_present(...) -> Result<(), SwapchainError>`
- `pub fn Swapchain::destroy(&mut self)`
### Surface
- `pub struct Surface`
- `pub enum SurfaceError`
- `pub fn Surface::from_raw(instance: &Instance, surface: vk::SurfaceKHR) -> Self`
- `pub fn Surface::handle(&self) -> vk::SurfaceKHR`
- `pub fn Surface::get_capabilities(...) -> vk::SurfaceCapabilitiesKHR`
- `pub fn Surface::get_formats(...) -> Vec<vk::SurfaceFormatKHR>`
- `pub fn Surface::get_present_modes(...) -> Vec<vk::PresentModeKHR>`
- `pub fn Surface::get_physical_device_surface_support(...) -> bool`
- `pub fn Surface::destroy(&mut self)`
### Queue
- `pub struct Queue`
- `pub enum QueueError`
- `pub fn Queue::get(device: &Device, family_index: u32, queue_index: u32) -> Self`
- `pub fn Queue::handle(&self) -> vk::Queue`
- `pub fn Queue::family_index(&self) -> u32`
- `pub fn Queue::queue_index(&self) -> u32`
- `pub fn Queue::submit(...) -> Result<(), QueueError>`
- `pub fn Queue::wait_idle(&self, device: &Device) -> Result<(), QueueError>`
- `pub fn Queue::present(...) -> Result<(), QueueError>`
### Sync
- `pub struct Fence`
- `pub struct Semaphore`
- `pub enum FenceError`
- `pub enum SemaphoreError`
- `pub fn Fence::new(device: &Device, signaled: bool) -> Result<Self, FenceError>`
- `pub fn Fence::handle(&self) -> vk::Fence`
- `pub fn Fence::wait(&self, device: &Device, timeout: u64) -> Result<(), FenceError>`
- `pub fn Fence::reset(&self, device: &Device) -> Result<(), FenceError>`
- `pub fn Fence::destroy(&mut self, device: &Device)`
- `pub fn Semaphore::new(device: &Device) -> Result<Self, SemaphoreError>`
- `pub fn Semaphore::handle(&self) -> vk::Semaphore`
- `pub fn Semaphore::destroy(&mut self, device: &Device)`
### Utils
- `pub fn bytes_to_u32_vec(bytes: &[u8]) -> Vec<u32>`
- `pub fn format_supports_feature(...) -> bool`
---
**Use this index to guide EX manager design, builder patterns, and resource ownership.**