Fix `VK_ERROR_SURFACE_LOST_KHR`, `VK_ERROR_OUT_OF_POOL_MEMORY`, typos in shader names

- `VK_ERROR_SURFACE_LOST_KHR` was caused by the sdl window being
  dropped, it is now kept in gamestate to prevent that
- `VK_ERROR_OUT_OF_POOL_MEMORY` was caused by the descriptor pool having
  a hardcodes size for the number of descriptor sets instead of that number
  depending on the required number of sets

Note: We are still broken, a window opens and controls seem to work
      fine, but nothing is shown in the window
master
Avery 7 days ago
parent 2f15842ca4
commit dbce32f625
Signed by: Avery
GPG Key ID: 4E53F4CB69B2CC8D

@ -25,6 +25,7 @@ pub struct Camera {
impl Game<InWorld> {
pub fn main_loop(mut self) -> Game<RenderAvailable> {
println!("Starting main loop");
let mut event_pump = self
.state
.sdl_context

@ -7,14 +7,13 @@ mod render;
use ash::Device;
use ash::Entry;
use ash::Instance;
use ash::khr::surface;
use ash::vk;
use game::Camera;
use render::SwapchainCtx;
use render::loading_world::Component;
use render::loading_world::WorldComponent;
use render::skybox::Skybox;
use sdl2::Sdl;
use sdl2::{Sdl, video::Window as SdlWindow};
use std::collections::HashMap;
@ -32,7 +31,6 @@ pub struct RenderCtx {
pdev: vk::PhysicalDevice,
dev: Device,
surface: vk::SurfaceKHR,
surface_loader: surface::Instance,
queue: vk::Queue,
queue_idx: u32,
cmd_buf: vk::CommandBuffer,
@ -43,6 +41,7 @@ pub struct RenderCtx {
pub struct Window {
width: u32,
height: u32,
_sdl: SdlWindow,
}
pub struct RenderAvailable {

@ -277,11 +277,11 @@ impl Game<LoadingWorld> {
fn load_cube_shaders(ctx: &RenderCtx) -> (vk::ShaderModule, vk::ShaderModule) {
let shader_vert_shader = ctx.shader_mod_from_file(
"shaders/shader_vert.spv",
"shaders/cube_vert.spv",
vk::ShaderModuleCreateFlags::empty(),
);
let shader_frag_shader = ctx.shader_mod_from_file(
"shaders/shader_rag.spv",
"shaders/cube_frag.spv",
vk::ShaderModuleCreateFlags::empty(),
);

@ -110,7 +110,7 @@ impl Game<InWorld> {
state:
InWorld {
sdl_context,
window: Window { width, height },
window: Window { width, height, .. },
ctx: RenderCtx { dev, cmd_buf, .. },
skybox,
components,

@ -2,7 +2,6 @@ use std::ffi::{CStr, CString};
use ash::{
Device, Entry, Instance,
khr::surface,
vk::{self},
};
use raw_window_handle::{HasDisplayHandle as _, HasWindowHandle as _};
@ -43,19 +42,20 @@ impl Game<Unstarted> {
let host_invis_idx =
find_host_invisible(&instance, &pdev).expect("No host invisible memory found");
let surface_loader = surface::Instance::new(&entry, &instance);
Game {
state: RenderAvailable {
sdl_context,
window: crate::Window { width, height },
window: crate::Window {
width,
height,
_sdl: window,
},
ctx: RenderCtx {
entry,
instance,
pdev,
dev,
surface,
surface_loader,
queue,
queue_idx,
cmd_buf,

@ -137,6 +137,7 @@ impl Game<LoadingWorld> {
}
pub fn start_world(self) -> Game<InWorld> {
println!("Starting world");
let Self {
state:
LoadingWorld {
@ -153,7 +154,8 @@ impl Game<LoadingWorld> {
components,
},
} = self;
let desc_pool = setup_desc_pool(&ctx, requested_descriptors);
let desc_pool = setup_desc_pool(&ctx, requested_descriptors, (components.len() + 1) as u32);
let mut desc_sets = make_desc_sets(
&ctx,
@ -187,6 +189,8 @@ impl Game<LoadingWorld> {
let sem_finish = ctx.make_sem();
let fence_flight = ctx.make_fence();
println!("Starting world");
Game {
state: InWorld {
sdl_context,
@ -284,6 +288,7 @@ fn setup_render_pass(ctx: &RenderCtx) -> vk::RenderPass {
fn setup_desc_pool(
ctx: &RenderCtx,
requested_descriptors: HashMap<vk::DescriptorType, u32>,
num_sets: u32,
) -> vk::DescriptorPool {
let pool_sizes = requested_descriptors
.into_iter()
@ -295,7 +300,7 @@ fn setup_desc_pool(
.collect::<Vec<_>>();
let pool_info = vk::DescriptorPoolCreateInfo::default()
.max_sets(1)
.max_sets(num_sets)
.pool_sizes(&pool_sizes);
let pool = unsafe {
ctx.dev

@ -198,7 +198,7 @@ fn load_skybox_shaders(ctx: &RenderCtx) -> (vk::ShaderModule, vk::ShaderModule)
vk::ShaderModuleCreateFlags::empty(),
);
let skybox_frag_shader = ctx.shader_mod_from_file(
"shaders/skybox_rag.spv",
"shaders/skybox_frag.spv",
vk::ShaderModuleCreateFlags::empty(),
);

Loading…
Cancel
Save