]> git.nega.tv - josh/narcissus/commitdiff
narcissus: Remove cstr macro
authorJoshua Simmons <josh@nega.tv>
Sun, 28 Apr 2024 06:30:37 +0000 (08:30 +0200)
committerJoshua Simmons <josh@nega.tv>
Sun, 28 Apr 2024 06:30:37 +0000 (08:30 +0200)
We've got builtin functionality now!

engine/narcissus-core/src/lib.rs
engine/narcissus-gpu/src/backend/vulkan/mod.rs
engine/narcissus-gpu/src/backend/vulkan/wsi.rs
engine/narcissus-sqlite/src/lib.rs
external/renderdoc-sys/src/helpers.rs [deleted file]
external/renderdoc-sys/src/lib.rs
external/vulkan-sys/examples/triangle.rs
external/vulkan-sys/src/helpers.rs [deleted file]
external/vulkan-sys/src/lib.rs
title/shark/src/pipelines/basic.rs
title/shark/src/pipelines/text.rs

index 3115868a8ba0f9803cb5fa7908aac6386fadd8ce..40e8169f228a6994babe006517fbb6426d1aa05b 100644 (file)
@@ -226,28 +226,6 @@ pub fn oom() -> ! {
     panic!("out of memory")
 }
 
-#[doc(hidden)]
-pub const fn validate_cstr_contents(bytes: &[u8]) {
-    let mut i = 0;
-    while i < bytes.len() {
-        if bytes[i] == b'\0' {
-            panic!("illegal null byte in string");
-        }
-        i += 1;
-    }
-}
-
-#[macro_export]
-macro_rules! cstr {
-    ( $s:literal ) => {{
-        $crate::validate_cstr_contents($s.as_bytes());
-        #[allow(unused_unsafe)]
-        unsafe {
-            std::ffi::CStr::from_bytes_with_nul_unchecked(concat!($s, "\0").as_bytes())
-        }
-    }};
-}
-
 /// Constructs a new box with uninitialized contents.
 #[inline]
 pub fn uninit_box<T>() -> Box<MaybeUninit<T>> {
@@ -437,17 +415,7 @@ pub fn mul_full_width_u8(x: u8, y: u8) -> (u8, u8) {
 
 #[cfg(test)]
 mod tests {
-    use std::ffi::CStr;
-
-    use super::{cstr, mod_inverse_u32, mod_inverse_u64};
-
-    #[test]
-    fn test_cstr() {
-        assert_eq!(
-            cstr!("hello"),
-            CStr::from_bytes_with_nul(b"hello\0").unwrap()
-        );
-    }
+    use super::{mod_inverse_u32, mod_inverse_u64};
 
     // Test is exhaustive and quite slow in debug mode. So ignore by default.
     #[test]
index 94169d1ab4f5ce74066b617465694de1fc695485..e6affadd135cd943a293f448bd48797015301661 100644 (file)
@@ -9,7 +9,7 @@ use std::{
 };
 
 use narcissus_core::{
-    box_assume_init, cstr, default, is_aligned_to, manual_arc, manual_arc::ManualArc,
+    box_assume_init, default, is_aligned_to, manual_arc, manual_arc::ManualArc,
     raw_window::AsRawWindow, zeroed_box, Arena, HybridArena, Mutex, PhantomUnsend, Pool, Widen,
 };
 
@@ -376,7 +376,7 @@ impl VulkanDevice {
     pub(crate) fn new() -> Self {
         let get_proc_addr = unsafe {
             let module = libc::dlopen(
-                cstr!("libvulkan.so.1").as_ptr(),
+                c"libvulkan.so.1".as_ptr(),
                 libc::RTLD_NOW | libc::RTLD_LOCAL,
             );
             libc::dlsym(module, (c"vkGetInstanceProcAddr").as_ptr())
@@ -431,9 +431,9 @@ impl VulkanDevice {
 
         let instance = {
             let application_info = vk::ApplicationInfo {
-                application_name: cstr!("TRIANGLE").as_ptr(),
+                application_name: c"TRIANGLE".as_ptr(),
                 application_version: 0,
-                engine_name: cstr!("NARCISSUS").as_ptr(),
+                engine_name: c"NARCISSUS".as_ptr(),
                 engine_version: 0,
                 api_version: vk::VERSION_1_3,
                 ..default()
index 74949b144f477387ee4ebbc3003a21af9683aa4c..5731b5eef65cff25d2a58d386ad93b8dcf1d32b0 100644 (file)
@@ -4,7 +4,7 @@ use std::{
 };
 
 use narcissus_core::{
-    cstr, default,
+    default,
     raw_window::{AsRawWindow, RawWindow},
     HybridArena, Mutex, Pool, Widen,
 };
@@ -118,7 +118,7 @@ impl VulkanWsi {
         // If we found any surface extensions, we need to additionally enable
         // `VK_KHR_surface`.
         if wsi_support.wayland || wsi_support.xlib || wsi_support.xcb {
-            enabled_extensions.push(cstr!("VK_KHR_surface"));
+            enabled_extensions.push(c"VK_KHR_surface");
         }
     }
 
index 1df7c4ee3eff07054a764e83ef0ad3fc4f72dc40..90cd3cd59ce9f255a4f82e6de2f480e36580f7df 100644 (file)
@@ -11,28 +11,6 @@ use std::sync::OnceLock;
 
 use sqlite_sys as ffi;
 
-#[doc(hidden)]
-pub const fn validate_cstr_contents(bytes: &[u8]) {
-    let mut i = 0;
-    while i < bytes.len() {
-        if bytes[i] == b'\0' {
-            panic!("illegal null byte in string");
-        }
-        i += 1;
-    }
-}
-
-#[macro_export]
-macro_rules! cstr {
-    ( $s:literal ) => {{
-        $crate::validate_cstr_contents($s.as_bytes());
-        #[allow(unused_unsafe)]
-        unsafe {
-            std::ffi::CStr::from_bytes_with_nul_unchecked(concat!($s, "\0").as_bytes())
-        }
-    }};
-}
-
 static SQLITE_GLOBAL_INIT: OnceLock<()> = OnceLock::new();
 
 #[cold]
@@ -227,7 +205,7 @@ impl Connection {
     }
 
     pub fn open_memory() -> Result<Self> {
-        Self::open(cstr!(":memory:"))
+        Self::open(c":memory:")
     }
 
     pub fn prepare<'conn>(&'conn self, sql: &str) -> Result<Statement<'conn>> {
diff --git a/external/renderdoc-sys/src/helpers.rs b/external/renderdoc-sys/src/helpers.rs
deleted file mode 100644 (file)
index 8aee19c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#[doc(hidden)]
-pub const fn validate_cstr_contents(bytes: &[u8]) {
-    let mut i = 0;
-    while i < bytes.len() {
-        if bytes[i] == b'\0' {
-            panic!("illegal null byte in string");
-        }
-        i += 1;
-    }
-}
-
-#[macro_export]
-macro_rules! cstr {
-    ( $s:literal ) => {{
-        $crate::helpers::validate_cstr_contents($s.as_bytes());
-        #[allow(unused_unsafe)]
-        unsafe {
-            std::ffi::CStr::from_bytes_with_nul_unchecked(concat!($s, "\0").as_bytes())
-        }
-    }};
-}
-
-#[cfg(test)]
-mod tests {
-    use std::ffi::CStr;
-
-    #[test]
-    fn test_cstr() {
-        assert_eq!(
-            cstr!("hello"),
-            CStr::from_bytes_with_nul(b"hello\0").unwrap()
-        );
-    }
-}
index 80bc22c8703664c634dec4d3783a17d6608fb32e..5786cf5ad35e10ae369e1abc3f8d0dee8cc6ddb0 100644 (file)
@@ -4,8 +4,6 @@ use std::{
     os::raw::c_char,
 };
 
-mod helpers;
-
 #[repr(C)]
 pub enum Version {
     Version1_0_0 = 10000,
@@ -360,13 +358,13 @@ impl RenderdocApi1_5_0 {
     pub fn load() -> Option<Self> {
         unsafe {
             let module = libc::dlopen(
-                cstr!("librenderdoc.so").as_ptr(),
+                c"librenderdoc.so".as_ptr(),
                 libc::RTLD_NOW | libc::RTLD_NOLOAD,
             );
             if module.is_null() {
                 return None;
             }
-            let get_api_ptr = libc::dlsym(module, cstr!("RENDERDOC_GetAPI").as_ptr());
+            let get_api_ptr = libc::dlsym(module, c"RENDERDOC_GetAPI".as_ptr());
             if get_api_ptr.is_null() {
                 return None;
             }
index c58313de5f0b80ca4dbb6c346aeb792e59c1b691..09f2b51e86abc37dd874a866957c02afe294ca65 100644 (file)
@@ -1,7 +1,6 @@
 use std::os::raw::c_void;
 
 use vulkan_sys as vk;
-use vulkan_sys::cstr;
 
 mod libc {
     use std::os::raw::{c_char, c_int, c_void};
@@ -50,10 +49,10 @@ fn default<T: Default>() -> T {
 pub fn main() {
     let get_proc_addr = unsafe {
         let module = libc::dlopen(
-            cstr!("libvulkan.so.1").as_ptr(),
+            c"libvulkan.so.1".as_ptr(),
             libc::RTLD_NOW | libc::RTLD_LOCAL,
         );
-        libc::dlsym(module, cstr!("vkGetInstanceProcAddr").as_ptr())
+        libc::dlsym(module, c"vkGetInstanceProcAddr".as_ptr())
     };
 
     let global_fn = unsafe { vk::GlobalFunctions::new(get_proc_addr) };
@@ -69,15 +68,15 @@ pub fn main() {
     }
 
     #[cfg(debug_assertions)]
-    let enabled_layers = &[cstr!("VK_LAYER_KHRONOS_validation").as_ptr()];
+    let enabled_layers = &[c"VK_LAYER_KHRONOS_validation".as_ptr()];
     #[cfg(not(debug_assertions))]
     let enabled_layers = &[];
 
     let instance = {
         let application_info = vk::ApplicationInfo {
-            application_name: cstr!("TRIANGLE").as_ptr(),
+            application_name: c"TRIANGLE".as_ptr(),
             application_version: 0,
-            engine_name: cstr!("TRIANGLE").as_ptr(),
+            engine_name: c"TRIANGLE".as_ptr(),
             engine_version: 0,
             api_version: vk::VERSION_1_3,
             ..default()
@@ -260,13 +259,13 @@ pub fn main() {
                 vk::PipelineShaderStageCreateInfo {
                     stage: vk::ShaderStageFlags::VERTEX,
                     module: vert_shader_module,
-                    name: cstr!("main").as_ptr(),
+                    name: c"main".as_ptr(),
                     ..default()
                 },
                 vk::PipelineShaderStageCreateInfo {
                     stage: vk::ShaderStageFlags::FRAGMENT,
                     module: frag_shader_module,
-                    name: cstr!("main").as_ptr(),
+                    name: c"main".as_ptr(),
                     ..default()
                 },
             ];
diff --git a/external/vulkan-sys/src/helpers.rs b/external/vulkan-sys/src/helpers.rs
deleted file mode 100644 (file)
index 8aee19c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#[doc(hidden)]
-pub const fn validate_cstr_contents(bytes: &[u8]) {
-    let mut i = 0;
-    while i < bytes.len() {
-        if bytes[i] == b'\0' {
-            panic!("illegal null byte in string");
-        }
-        i += 1;
-    }
-}
-
-#[macro_export]
-macro_rules! cstr {
-    ( $s:literal ) => {{
-        $crate::helpers::validate_cstr_contents($s.as_bytes());
-        #[allow(unused_unsafe)]
-        unsafe {
-            std::ffi::CStr::from_bytes_with_nul_unchecked(concat!($s, "\0").as_bytes())
-        }
-    }};
-}
-
-#[cfg(test)]
-mod tests {
-    use std::ffi::CStr;
-
-    #[test]
-    fn test_cstr() {
-        assert_eq!(
-            cstr!("hello"),
-            CStr::from_bytes_with_nul(b"hello\0").unwrap()
-        );
-    }
-}
index a0f0c7816ed5b1910245b0d6cfdca559bf45f025..50494d49ac28c6086a1517c16d8872eee17a46ab 100644 (file)
@@ -7,7 +7,6 @@ mod enums;
 mod flags;
 mod functions;
 mod handles;
-pub mod helpers;
 mod structs;
 
 pub use enums::*;
@@ -314,14 +313,14 @@ impl GlobalFunctions {
             get_instance_proc_addr,
             enumerate_instance_version: transmute::<_, _>(get_instance_proc_addr(
                 Instance::null(),
-                cstr!("vkEnumerateInstanceVersion").as_ptr(),
+                c"vkEnumerateInstanceVersion".as_ptr(),
             )),
             enumerate_instance_extension_properties: transmute::<_, _>(get_instance_proc_addr(
                 Instance::null(),
-                cstr!("vkEnumerateInstanceExtensionProperties").as_ptr(),
+                c"vkEnumerateInstanceExtensionProperties".as_ptr(),
             )),
             create_instance: transmute::<_, _>(
-                get_instance_proc_addr(Instance::null(), cstr!("vkCreateInstance").as_ptr())
+                get_instance_proc_addr(Instance::null(), c"vkCreateInstance".as_ptr())
                     .expect("failed to load vkCreateInstance"),
             ),
         }
@@ -405,44 +404,41 @@ impl InstanceFunctions {
             };
 
             Self {
-                destroy_instance: transmute::<_, _>(load(cstr!("vkDestroyInstance"), VERSION_1_0)),
+                destroy_instance: transmute::<_, _>(load(c"vkDestroyInstance", VERSION_1_0)),
                 enumerate_physical_devices: transmute::<_, _>(load(
-                    cstr!("vkEnumeratePhysicalDevices"),
+                    c"vkEnumeratePhysicalDevices",
                     VERSION_1_0,
                 )),
                 enumerate_device_extension_properties: transmute::<_, _>(load(
-                    cstr!("vkEnumerateDeviceExtensionProperties"),
+                    c"vkEnumerateDeviceExtensionProperties",
                     VERSION_1_0,
                 )),
                 get_physical_device_features: transmute::<_, _>(load(
-                    cstr!("vkGetPhysicalDeviceFeatures"),
+                    c"vkGetPhysicalDeviceFeatures",
                     VERSION_1_0,
                 )),
                 get_physical_device_properties: transmute::<_, _>(load(
-                    cstr!("vkGetPhysicalDeviceProperties"),
+                    c"vkGetPhysicalDeviceProperties",
                     VERSION_1_0,
                 )),
                 get_physical_device_queue_family_properties: transmute::<_, _>(load(
-                    cstr!("vkGetPhysicalDeviceQueueFamilyProperties"),
+                    c"vkGetPhysicalDeviceQueueFamilyProperties",
                     VERSION_1_0,
                 )),
                 get_physical_device_memory_properties: transmute::<_, _>(load(
-                    cstr!("vkGetPhysicalDeviceMemoryProperties"),
-                    VERSION_1_0,
-                )),
-                create_device: transmute::<_, _>(load(cstr!("vkCreateDevice"), VERSION_1_0)),
-                get_device_proc_addr: transmute::<_, _>(load(
-                    cstr!("vkGetDeviceProcAddr"),
+                    c"vkGetPhysicalDeviceMemoryProperties",
                     VERSION_1_0,
                 )),
+                create_device: transmute::<_, _>(load(c"vkCreateDevice", VERSION_1_0)),
+                get_device_proc_addr: transmute::<_, _>(load(c"vkGetDeviceProcAddr", VERSION_1_0)),
 
                 // VERSION_1_1
                 get_physical_device_features2: transmute::<_, _>(load(
-                    cstr!("vkGetPhysicalDeviceFeatures2"),
+                    c"vkGetPhysicalDeviceFeatures2",
                     VERSION_1_1,
                 )),
                 get_physical_device_properties2: transmute::<_, _>(load(
-                    cstr!("vkGetPhysicalDeviceProperties2"),
+                    c"vkGetPhysicalDeviceProperties2",
                     VERSION_1_1,
                 )),
             }
@@ -702,326 +698,239 @@ impl DeviceFunctions {
             };
 
             Self {
-                destroy_device: transmute::<_, _>(load(cstr!("vkDestroyDevice"), VERSION_1_0)),
-                get_device_queue: transmute::<_, _>(load(cstr!("vkGetDeviceQueue"), VERSION_1_0)),
-                queue_submit: transmute::<_, _>(load(cstr!("vkQueueSubmit"), VERSION_1_0)),
-                queue_wait_idle: transmute::<_, _>(load(cstr!("vkQueueWaitIdle"), VERSION_1_0)),
-                device_wait_idle: transmute::<_, _>(load(cstr!("vkDeviceWaitIdle"), VERSION_1_0)),
-                allocate_memory: transmute::<_, _>(load(cstr!("vkAllocateMemory"), VERSION_1_0)),
-                free_memory: transmute::<_, _>(load(cstr!("vkFreeMemory"), VERSION_1_0)),
-                map_memory: transmute::<_, _>(load(cstr!("vkMapMemory"), VERSION_1_0)),
-                unmap_memory: transmute::<_, _>(load(cstr!("vkUnmapMemory"), VERSION_1_0)),
-                create_buffer: transmute::<_, _>(load(cstr!("vkCreateBuffer"), VERSION_1_0)),
-                destroy_buffer: transmute::<_, _>(load(cstr!("vkDestroyBuffer"), VERSION_1_0)),
-                create_buffer_view: transmute::<_, _>(load(
-                    cstr!("vkCreateBufferView"),
-                    VERSION_1_0,
-                )),
-                destroy_buffer_view: transmute::<_, _>(load(
-                    cstr!("vkDestroyBufferView"),
-                    VERSION_1_0,
-                )),
-                create_image: transmute::<_, _>(load(cstr!("vkCreateImage"), VERSION_1_0)),
-                destroy_image: transmute::<_, _>(load(cstr!("vkDestroyImage"), VERSION_1_0)),
+                destroy_device: transmute::<_, _>(load(c"vkDestroyDevice", VERSION_1_0)),
+                get_device_queue: transmute::<_, _>(load(c"vkGetDeviceQueue", VERSION_1_0)),
+                queue_submit: transmute::<_, _>(load(c"vkQueueSubmit", VERSION_1_0)),
+                queue_wait_idle: transmute::<_, _>(load(c"vkQueueWaitIdle", VERSION_1_0)),
+                device_wait_idle: transmute::<_, _>(load(c"vkDeviceWaitIdle", VERSION_1_0)),
+                allocate_memory: transmute::<_, _>(load(c"vkAllocateMemory", VERSION_1_0)),
+                free_memory: transmute::<_, _>(load(c"vkFreeMemory", VERSION_1_0)),
+                map_memory: transmute::<_, _>(load(c"vkMapMemory", VERSION_1_0)),
+                unmap_memory: transmute::<_, _>(load(c"vkUnmapMemory", VERSION_1_0)),
+                create_buffer: transmute::<_, _>(load(c"vkCreateBuffer", VERSION_1_0)),
+                destroy_buffer: transmute::<_, _>(load(c"vkDestroyBuffer", VERSION_1_0)),
+                create_buffer_view: transmute::<_, _>(load(c"vkCreateBufferView", VERSION_1_0)),
+                destroy_buffer_view: transmute::<_, _>(load(c"vkDestroyBufferView", VERSION_1_0)),
+                create_image: transmute::<_, _>(load(c"vkCreateImage", VERSION_1_0)),
+                destroy_image: transmute::<_, _>(load(c"vkDestroyImage", VERSION_1_0)),
                 get_image_subresource_layout: transmute::<_, _>(load(
-                    cstr!("vkGetImageSubresourceLayout"),
-                    VERSION_1_0,
-                )),
-                create_image_view: transmute::<_, _>(load(cstr!("vkCreateImageView"), VERSION_1_0)),
-                destroy_image_view: transmute::<_, _>(load(
-                    cstr!("vkDestroyImageView"),
-                    VERSION_1_0,
-                )),
-                create_command_pool: transmute::<_, _>(load(
-                    cstr!("vkCreateCommandPool"),
-                    VERSION_1_0,
-                )),
-                destroy_command_pool: transmute::<_, _>(load(
-                    cstr!("vkDestroyCommandPool"),
-                    VERSION_1_0,
-                )),
-                reset_command_pool: transmute::<_, _>(load(
-                    cstr!("vkResetCommandPool"),
+                    c"vkGetImageSubresourceLayout",
                     VERSION_1_0,
                 )),
+                create_image_view: transmute::<_, _>(load(c"vkCreateImageView", VERSION_1_0)),
+                destroy_image_view: transmute::<_, _>(load(c"vkDestroyImageView", VERSION_1_0)),
+                create_command_pool: transmute::<_, _>(load(c"vkCreateCommandPool", VERSION_1_0)),
+                destroy_command_pool: transmute::<_, _>(load(c"vkDestroyCommandPool", VERSION_1_0)),
+                reset_command_pool: transmute::<_, _>(load(c"vkResetCommandPool", VERSION_1_0)),
                 allocate_command_buffers: transmute::<_, _>(load(
-                    cstr!("vkAllocateCommandBuffers"),
-                    VERSION_1_0,
-                )),
-                free_command_buffers: transmute::<_, _>(load(
-                    cstr!("vkFreeCommandBuffers"),
-                    VERSION_1_0,
-                )),
-                begin_command_buffer: transmute::<_, _>(load(
-                    cstr!("vkBeginCommandBuffer"),
-                    VERSION_1_0,
-                )),
-                end_command_buffer: transmute::<_, _>(load(
-                    cstr!("vkEndCommandBuffer"),
-                    VERSION_1_0,
-                )),
-                reset_command_buffer: transmute::<_, _>(load(
-                    cstr!("vkResetCommandBuffer"),
-                    VERSION_1_0,
-                )),
-                create_framebuffer: transmute::<_, _>(load(
-                    cstr!("vkCreateFramebuffer"),
-                    VERSION_1_0,
-                )),
-                destroy_framebuffer: transmute::<_, _>(load(
-                    cstr!("vkDestroyFramebuffer"),
-                    VERSION_1_0,
-                )),
-                create_render_pass: transmute::<_, _>(load(
-                    cstr!("vkCreateRenderPass"),
-                    VERSION_1_0,
-                )),
-                destroy_render_pass: transmute::<_, _>(load(
-                    cstr!("vkDestroyRenderPass"),
-                    VERSION_1_0,
-                )),
-                create_semaphore: transmute::<_, _>(load(cstr!("vkCreateSemaphore"), VERSION_1_0)),
-                destroy_semaphore: transmute::<_, _>(load(
-                    cstr!("vkDestroySemaphore"),
-                    VERSION_1_0,
-                )),
-
-                wait_semaphores: transmute::<_, _>(load(cstr!("vkWaitSemaphores"), VERSION_1_0)),
-                signal_semaphore: transmute::<_, _>(load(cstr!("vkSignalSemaphore"), VERSION_1_0)),
-                create_fence: transmute::<_, _>(load(cstr!("vkCreateFence"), VERSION_1_0)),
-                destroy_fence: transmute::<_, _>(load(cstr!("vkDestroyFence"), VERSION_1_0)),
-                reset_fences: transmute::<_, _>(load(cstr!("vkResetFences"), VERSION_1_0)),
-                get_fence_status: transmute::<_, _>(load(cstr!("vkGetFenceStatus"), VERSION_1_0)),
-                wait_for_fences: transmute::<_, _>(load(cstr!("vkWaitForFences"), VERSION_1_0)),
+                    c"vkAllocateCommandBuffers",
+                    VERSION_1_0,
+                )),
+                free_command_buffers: transmute::<_, _>(load(c"vkFreeCommandBuffers", VERSION_1_0)),
+                begin_command_buffer: transmute::<_, _>(load(c"vkBeginCommandBuffer", VERSION_1_0)),
+                end_command_buffer: transmute::<_, _>(load(c"vkEndCommandBuffer", VERSION_1_0)),
+                reset_command_buffer: transmute::<_, _>(load(c"vkResetCommandBuffer", VERSION_1_0)),
+                create_framebuffer: transmute::<_, _>(load(c"vkCreateFramebuffer", VERSION_1_0)),
+                destroy_framebuffer: transmute::<_, _>(load(c"vkDestroyFramebuffer", VERSION_1_0)),
+                create_render_pass: transmute::<_, _>(load(c"vkCreateRenderPass", VERSION_1_0)),
+                destroy_render_pass: transmute::<_, _>(load(c"vkDestroyRenderPass", VERSION_1_0)),
+                create_semaphore: transmute::<_, _>(load(c"vkCreateSemaphore", VERSION_1_0)),
+                destroy_semaphore: transmute::<_, _>(load(c"vkDestroySemaphore", VERSION_1_0)),
+
+                wait_semaphores: transmute::<_, _>(load(c"vkWaitSemaphores", VERSION_1_0)),
+                signal_semaphore: transmute::<_, _>(load(c"vkSignalSemaphore", VERSION_1_0)),
+                create_fence: transmute::<_, _>(load(c"vkCreateFence", VERSION_1_0)),
+                destroy_fence: transmute::<_, _>(load(c"vkDestroyFence", VERSION_1_0)),
+                reset_fences: transmute::<_, _>(load(c"vkResetFences", VERSION_1_0)),
+                get_fence_status: transmute::<_, _>(load(c"vkGetFenceStatus", VERSION_1_0)),
+                wait_for_fences: transmute::<_, _>(load(c"vkWaitForFences", VERSION_1_0)),
                 invalidate_mapped_memory_ranges: transmute::<_, _>(load(
-                    cstr!("vkInvalidateMappedMemoryRanges"),
-                    VERSION_1_0,
-                )),
-                create_shader_module: transmute::<_, _>(load(
-                    cstr!("vkCreateShaderModule"),
+                    c"vkInvalidateMappedMemoryRanges",
                     VERSION_1_0,
                 )),
+                create_shader_module: transmute::<_, _>(load(c"vkCreateShaderModule", VERSION_1_0)),
                 destroy_shader_module: transmute::<_, _>(load(
-                    cstr!("vkDestroyShaderModule"),
+                    c"vkDestroyShaderModule",
                     VERSION_1_0,
                 )),
-                create_sampler: transmute::<_, _>(load(cstr!("vkCreateSampler"), VERSION_1_0)),
-                destroy_sampler: transmute::<_, _>(load(cstr!("vkDestroySampler"), VERSION_1_0)),
+                create_sampler: transmute::<_, _>(load(c"vkCreateSampler", VERSION_1_0)),
+                destroy_sampler: transmute::<_, _>(load(c"vkDestroySampler", VERSION_1_0)),
                 create_descriptor_set_layout: transmute::<_, _>(load(
-                    cstr!("vkCreateDescriptorSetLayout"),
+                    c"vkCreateDescriptorSetLayout",
                     VERSION_1_0,
                 )),
                 destroy_descriptor_set_layout: transmute::<_, _>(load(
-                    cstr!("vkDestroyDescriptorSetLayout"),
+                    c"vkDestroyDescriptorSetLayout",
                     VERSION_1_0,
                 )),
                 create_descriptor_pool: transmute::<_, _>(load(
-                    cstr!("vkCreateDescriptorPool"),
+                    c"vkCreateDescriptorPool",
                     VERSION_1_0,
                 )),
                 destroy_descriptor_pool: transmute::<_, _>(load(
-                    cstr!("vkDestroyDescriptorPool"),
+                    c"vkDestroyDescriptorPool",
                     VERSION_1_0,
                 )),
                 reset_descriptor_pool: transmute::<_, _>(load(
-                    cstr!("vkResetDescriptorPool"),
+                    c"vkResetDescriptorPool",
                     VERSION_1_0,
                 )),
                 allocate_descriptor_sets: transmute::<_, _>(load(
-                    cstr!("vkAllocateDescriptorSets"),
-                    VERSION_1_0,
-                )),
-                free_descriptor_sets: transmute::<_, _>(load(
-                    cstr!("vkFreeDescriptorSets"),
+                    c"vkAllocateDescriptorSets",
                     VERSION_1_0,
                 )),
+                free_descriptor_sets: transmute::<_, _>(load(c"vkFreeDescriptorSets", VERSION_1_0)),
                 update_descriptor_sets: transmute::<_, _>(load(
-                    cstr!("vkUpdateDescriptorSets"),
+                    c"vkUpdateDescriptorSets",
                     VERSION_1_0,
                 )),
                 create_pipeline_layout: transmute::<_, _>(load(
-                    cstr!("vkCreatePipelineLayout"),
+                    c"vkCreatePipelineLayout",
                     VERSION_1_0,
                 )),
                 destroy_pipeline_layout: transmute::<_, _>(load(
-                    cstr!("vkDestroyPipelineLayout"),
+                    c"vkDestroyPipelineLayout",
                     VERSION_1_0,
                 )),
                 create_graphics_pipelines: transmute::<_, _>(load(
-                    cstr!("vkCreateGraphicsPipelines"),
+                    c"vkCreateGraphicsPipelines",
                     VERSION_1_0,
                 )),
                 create_compute_pipelines: transmute::<_, _>(load(
-                    cstr!("vkCreateComputePipelines"),
-                    VERSION_1_0,
-                )),
-                destroy_pipeline: transmute::<_, _>(load(cstr!("vkDestroyPipeline"), VERSION_1_0)),
-                cmd_bind_pipeline: transmute::<_, _>(load(cstr!("vkCmdBindPipeline"), VERSION_1_0)),
-                cmd_set_viewport: transmute::<_, _>(load(cstr!("vkCmdSetViewport"), VERSION_1_0)),
-                cmd_set_scissor: transmute::<_, _>(load(cstr!("vkCmdSetScissor"), VERSION_1_0)),
-                cmd_set_line_width: transmute::<_, _>(load(
-                    cstr!("vkCmdSetLineWidth"),
-                    VERSION_1_0,
-                )),
-                cmd_set_depth_bias: transmute::<_, _>(load(
-                    cstr!("vkCmdSetDepthBias"),
+                    c"vkCreateComputePipelines",
                     VERSION_1_0,
                 )),
+                destroy_pipeline: transmute::<_, _>(load(c"vkDestroyPipeline", VERSION_1_0)),
+                cmd_bind_pipeline: transmute::<_, _>(load(c"vkCmdBindPipeline", VERSION_1_0)),
+                cmd_set_viewport: transmute::<_, _>(load(c"vkCmdSetViewport", VERSION_1_0)),
+                cmd_set_scissor: transmute::<_, _>(load(c"vkCmdSetScissor", VERSION_1_0)),
+                cmd_set_line_width: transmute::<_, _>(load(c"vkCmdSetLineWidth", VERSION_1_0)),
+                cmd_set_depth_bias: transmute::<_, _>(load(c"vkCmdSetDepthBias", VERSION_1_0)),
                 cmd_set_blend_constants: transmute::<_, _>(load(
-                    cstr!("vkCmdSetBlendConstants"),
-                    VERSION_1_0,
-                )),
-                cmd_set_depth_bounds: transmute::<_, _>(load(
-                    cstr!("vkCmdSetDepthBounds"),
+                    c"vkCmdSetBlendConstants",
                     VERSION_1_0,
                 )),
+                cmd_set_depth_bounds: transmute::<_, _>(load(c"vkCmdSetDepthBounds", VERSION_1_0)),
                 cmd_set_stencil_compare_mask: transmute::<_, _>(load(
-                    cstr!("vkCmdSetStencilCompareMask"),
+                    c"vkCmdSetStencilCompareMask",
                     VERSION_1_0,
                 )),
                 cmd_set_stencil_write_mask: transmute::<_, _>(load(
-                    cstr!("vkCmdSetStencilWriteMask"),
+                    c"vkCmdSetStencilWriteMask",
                     VERSION_1_0,
                 )),
                 cmd_set_stencil_reference: transmute::<_, _>(load(
-                    cstr!("vkCmdSetStencilReference"),
+                    c"vkCmdSetStencilReference",
                     VERSION_1_0,
                 )),
                 cmd_bind_descriptor_sets: transmute::<_, _>(load(
-                    cstr!("vkCmdBindDescriptorSets"),
+                    c"vkCmdBindDescriptorSets",
                     VERSION_1_0,
                 )),
                 cmd_bind_index_buffer: transmute::<_, _>(load(
-                    cstr!("vkCmdBindIndexBuffer"),
+                    c"vkCmdBindIndexBuffer",
                     VERSION_1_0,
                 )),
                 cmd_bind_vertex_buffers: transmute::<_, _>(load(
-                    cstr!("vkCmdBindVertexBuffers"),
+                    c"vkCmdBindVertexBuffers",
                     VERSION_1_0,
                 )),
-                cmd_draw: transmute::<_, _>(load(cstr!("vkCmdDraw"), VERSION_1_0)),
-                cmd_draw_indexed: transmute::<_, _>(load(cstr!("vkCmdDrawIndexed"), VERSION_1_0)),
-                cmd_draw_indirect: transmute::<_, _>(load(cstr!("vkCmdDrawIndirect"), VERSION_1_0)),
+                cmd_draw: transmute::<_, _>(load(c"vkCmdDraw", VERSION_1_0)),
+                cmd_draw_indexed: transmute::<_, _>(load(c"vkCmdDrawIndexed", VERSION_1_0)),
+                cmd_draw_indirect: transmute::<_, _>(load(c"vkCmdDrawIndirect", VERSION_1_0)),
                 cmd_draw_indexed_indirect: transmute::<_, _>(load(
-                    cstr!("vkCmdDrawIndexedIndirect"),
+                    c"vkCmdDrawIndexedIndirect",
                     VERSION_1_0,
                 )),
-                cmd_dispatch: transmute::<_, _>(load(cstr!("vkCmdDispatch"), VERSION_1_0)),
+                cmd_dispatch: transmute::<_, _>(load(c"vkCmdDispatch", VERSION_1_0)),
                 cmd_dispatch_indirect: transmute::<_, _>(load(
-                    cstr!("vkCmdDispatchIndirect"),
+                    c"vkCmdDispatchIndirect",
                     VERSION_1_0,
                 )),
-                cmd_copy_buffer: transmute::<_, _>(load(cstr!("vkCmdCopyBuffer"), VERSION_1_0)),
-                cmd_copy_image: transmute::<_, _>(load(cstr!("vkCmdCopyImage"), VERSION_1_0)),
-                cmd_blit_image: transmute::<_, _>(load(cstr!("vkCmdBlitImage"), VERSION_1_0)),
+                cmd_copy_buffer: transmute::<_, _>(load(c"vkCmdCopyBuffer", VERSION_1_0)),
+                cmd_copy_image: transmute::<_, _>(load(c"vkCmdCopyImage", VERSION_1_0)),
+                cmd_blit_image: transmute::<_, _>(load(c"vkCmdBlitImage", VERSION_1_0)),
                 cmd_copy_buffer_to_image: transmute::<_, _>(load(
-                    cstr!("vkCmdCopyBufferToImage"),
+                    c"vkCmdCopyBufferToImage",
                     VERSION_1_0,
                 )),
                 cmd_copy_image_to_buffer: transmute::<_, _>(load(
-                    cstr!("vkCmdCopyImageToBuffer"),
+                    c"vkCmdCopyImageToBuffer",
                     VERSION_1_0,
                 )),
-                cmd_update_buffer: transmute::<_, _>(load(cstr!("vkCmdUpdateBuffer"), VERSION_1_0)),
-                cmd_fill_buffer: transmute::<_, _>(load(cstr!("vkCmdFillBuffer"), VERSION_1_0)),
+                cmd_update_buffer: transmute::<_, _>(load(c"vkCmdUpdateBuffer", VERSION_1_0)),
+                cmd_fill_buffer: transmute::<_, _>(load(c"vkCmdFillBuffer", VERSION_1_0)),
                 cmd_clear_color_image: transmute::<_, _>(load(
-                    cstr!("vkCmdClearColorImage"),
+                    c"vkCmdClearColorImage",
                     VERSION_1_0,
                 )),
                 cmd_clear_depth_stencil_image: transmute::<_, _>(load(
-                    cstr!("vkCmdClearDepthStencilImage"),
+                    c"vkCmdClearDepthStencilImage",
                     VERSION_1_0,
                 )),
                 cmd_clear_attachments: transmute::<_, _>(load(
-                    cstr!("vkCmdClearAttachments"),
-                    VERSION_1_0,
-                )),
-                cmd_resolve_image: transmute::<_, _>(load(cstr!("vkCmdResolveImage"), VERSION_1_0)),
-                cmd_set_event: transmute::<_, _>(load(cstr!("vkCmdSetEvent"), VERSION_1_0)),
-                cmd_reset_event: transmute::<_, _>(load(cstr!("vkCmdResetEvent"), VERSION_1_0)),
-                cmd_wait_events: transmute::<_, _>(load(cstr!("vkCmdWaitEvents"), VERSION_1_0)),
-                cmd_pipeline_barrier: transmute::<_, _>(load(
-                    cstr!("vkCmdPipelineBarrier"),
-                    VERSION_1_0,
-                )),
-                cmd_begin_query: transmute::<_, _>(load(cstr!("vkCmdBeginQuery"), VERSION_1_0)),
-                cmd_end_query: transmute::<_, _>(load(cstr!("vkCmdEndQuery"), VERSION_1_0)),
-                cmd_reset_query_pool: transmute::<_, _>(load(
-                    cstr!("vkCmdResetQueryPool"),
-                    VERSION_1_0,
-                )),
-                cmd_write_timestamp: transmute::<_, _>(load(
-                    cstr!("vkCmdWriteTimestamp"),
-                    VERSION_1_0,
-                )),
+                    c"vkCmdClearAttachments",
+                    VERSION_1_0,
+                )),
+                cmd_resolve_image: transmute::<_, _>(load(c"vkCmdResolveImage", VERSION_1_0)),
+                cmd_set_event: transmute::<_, _>(load(c"vkCmdSetEvent", VERSION_1_0)),
+                cmd_reset_event: transmute::<_, _>(load(c"vkCmdResetEvent", VERSION_1_0)),
+                cmd_wait_events: transmute::<_, _>(load(c"vkCmdWaitEvents", VERSION_1_0)),
+                cmd_pipeline_barrier: transmute::<_, _>(load(c"vkCmdPipelineBarrier", VERSION_1_0)),
+                cmd_begin_query: transmute::<_, _>(load(c"vkCmdBeginQuery", VERSION_1_0)),
+                cmd_end_query: transmute::<_, _>(load(c"vkCmdEndQuery", VERSION_1_0)),
+                cmd_reset_query_pool: transmute::<_, _>(load(c"vkCmdResetQueryPool", VERSION_1_0)),
+                cmd_write_timestamp: transmute::<_, _>(load(c"vkCmdWriteTimestamp", VERSION_1_0)),
                 cmd_copy_query_pool_results: transmute::<_, _>(load(
-                    cstr!("vkCmdCopyQueryPoolResults"),
-                    VERSION_1_0,
-                )),
-                cmd_push_constants: transmute::<_, _>(load(
-                    cstr!("vkCmdPushConstants"),
+                    c"vkCmdCopyQueryPoolResults",
                     VERSION_1_0,
                 )),
+                cmd_push_constants: transmute::<_, _>(load(c"vkCmdPushConstants", VERSION_1_0)),
                 cmd_begin_render_pass: transmute::<_, _>(load(
-                    cstr!("vkCmdBeginRenderPass"),
-                    VERSION_1_0,
-                )),
-                cmd_next_subpass: transmute::<_, _>(load(cstr!("vkCmdNextSubpass"), VERSION_1_0)),
-                cmd_end_render_pass: transmute::<_, _>(load(
-                    cstr!("vkCmdEndRenderPass"),
-                    VERSION_1_0,
-                )),
-                cmd_execute_commands: transmute::<_, _>(load(
-                    cstr!("vkCmdExecuteCommands"),
+                    c"vkCmdBeginRenderPass",
                     VERSION_1_0,
                 )),
+                cmd_next_subpass: transmute::<_, _>(load(c"vkCmdNextSubpass", VERSION_1_0)),
+                cmd_end_render_pass: transmute::<_, _>(load(c"vkCmdEndRenderPass", VERSION_1_0)),
+                cmd_execute_commands: transmute::<_, _>(load(c"vkCmdExecuteCommands", VERSION_1_0)),
 
                 // VERSION_1_1
                 get_image_memory_requirements2: transmute::<_, _>(load(
-                    cstr!("vkGetImageMemoryRequirements2"),
-                    VERSION_1_1,
-                )),
-                bind_image_memory2: transmute::<_, _>(load(
-                    cstr!("vkBindImageMemory2"),
+                    c"vkGetImageMemoryRequirements2",
                     VERSION_1_1,
                 )),
+                bind_image_memory2: transmute::<_, _>(load(c"vkBindImageMemory2", VERSION_1_1)),
                 get_buffer_memory_requirements2: transmute::<_, _>(load(
-                    cstr!("vkGetBufferMemoryRequirements2"),
-                    VERSION_1_1,
-                )),
-                bind_buffer_memory2: transmute::<_, _>(load(
-                    cstr!("vkBindBufferMemory2"),
+                    c"vkGetBufferMemoryRequirements2",
                     VERSION_1_1,
                 )),
+                bind_buffer_memory2: transmute::<_, _>(load(c"vkBindBufferMemory2", VERSION_1_1)),
 
                 // VERSION_1_2
                 get_semaphore_counter_value: transmute::<_, _>(load(
-                    cstr!("vkGetSemaphoreCounterValue"),
+                    c"vkGetSemaphoreCounterValue",
                     VERSION_1_2,
                 )),
 
                 // VERSION_1_3
                 cmd_pipeline_barrier2: transmute::<_, _>(load(
-                    cstr!("vkCmdPipelineBarrier2"),
+                    c"vkCmdPipelineBarrier2",
                     VERSION_1_3,
                 )),
-                cmd_wait_events2: transmute::<_, _>(load(cstr!("vkCmdWaitEvents2"), VERSION_1_3)),
-                cmd_set_event2: transmute::<_, _>(load(cstr!("vkCmdSetEvent2"), VERSION_1_3)),
+                cmd_wait_events2: transmute::<_, _>(load(c"vkCmdWaitEvents2", VERSION_1_3)),
+                cmd_set_event2: transmute::<_, _>(load(c"vkCmdSetEvent2", VERSION_1_3)),
 
-                cmd_begin_rendering: transmute::<_, _>(load(
-                    cstr!("vkCmdBeginRendering"),
-                    VERSION_1_3,
-                )),
-                cmd_end_rendering: transmute::<_, _>(load(cstr!("vkCmdEndRendering"), VERSION_1_3)),
+                cmd_begin_rendering: transmute::<_, _>(load(c"vkCmdBeginRendering", VERSION_1_3)),
+                cmd_end_rendering: transmute::<_, _>(load(c"vkCmdEndRendering", VERSION_1_3)),
                 cmd_set_viewport_with_count: transmute::<_, _>(load(
-                    cstr!("vkCmdSetViewportWithCount"),
+                    c"vkCmdSetViewportWithCount",
                     VERSION_1_3,
                 )),
                 cmd_set_scissor_with_count: transmute::<_, _>(load(
-                    cstr!("vkCmdSetScissorWithCount"),
+                    c"vkCmdSetScissorWithCount",
                     VERSION_1_3,
                 )),
-                queue_submit2: transmute::<_, _>(load(cstr!("vkQueueSubmit2"), VERSION_1_3)),
+                queue_submit2: transmute::<_, _>(load(c"vkQueueSubmit2", VERSION_1_3)),
             }
         }
     }
@@ -2391,19 +2300,19 @@ impl SurfaceKHRFunctions {
                     )
             };
             Self {
-                destroy_surface: transmute::<_, _>(load(cstr!("vkDestroySurfaceKHR"))),
-                get_physical_device_surface_support: transmute::<_, _>(load(cstr!(
-                    "vkGetPhysicalDeviceSurfaceSupportKHR"
-                ))),
-                get_physical_device_surface_capabilities: transmute::<_, _>(load(cstr!(
-                    "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"
-                ))),
-                get_physical_device_surface_formats: transmute::<_, _>(load(cstr!(
-                    "vkGetPhysicalDeviceSurfaceFormatsKHR"
-                ))),
-                get_physical_device_surface_present_modes: transmute::<_, _>(load(cstr!(
-                    "vkGetPhysicalDeviceSurfacePresentModesKHR"
-                ))),
+                destroy_surface: transmute::<_, _>(load(c"vkDestroySurfaceKHR")),
+                get_physical_device_surface_support: transmute::<_, _>(load(
+                    c"vkGetPhysicalDeviceSurfaceSupportKHR",
+                )),
+                get_physical_device_surface_capabilities: transmute::<_, _>(load(
+                    c"vkGetPhysicalDeviceSurfaceCapabilitiesKHR",
+                )),
+                get_physical_device_surface_formats: transmute::<_, _>(load(
+                    c"vkGetPhysicalDeviceSurfaceFormatsKHR",
+                )),
+                get_physical_device_surface_present_modes: transmute::<_, _>(load(
+                    c"vkGetPhysicalDeviceSurfacePresentModesKHR",
+                )),
             }
         }
     }
@@ -2492,7 +2401,7 @@ impl XcbSurfaceKHRFunctions {
                     )
             };
             Self {
-                create_xcb_surface: transmute::<_, _>(load(cstr!("vkCreateXcbSurfaceKHR"))),
+                create_xcb_surface: transmute::<_, _>(load(c"vkCreateXcbSurfaceKHR")),
             }
         }
     }
@@ -2524,7 +2433,7 @@ impl XlibSurfaceKHRFunctions {
                     )
             };
             Self {
-                create_xlib_surface: transmute::<_, _>(load(cstr!("vkCreateXlibSurfaceKHR"))),
+                create_xlib_surface: transmute::<_, _>(load(c"vkCreateXlibSurfaceKHR")),
             }
         }
     }
@@ -2556,7 +2465,7 @@ impl WaylandSurfaceKHRFunctions {
                     )
             };
             Self {
-                create_wayland_surface: transmute::<_, _>(load(cstr!("vkCreateWaylandSurfaceKHR"))),
+                create_wayland_surface: transmute::<_, _>(load(c"vkCreateWaylandSurfaceKHR")),
             }
         }
     }
@@ -2598,26 +2507,17 @@ impl SwapchainKHRFunctions {
                 }
             };
             Self {
-                create_swapchain: transmute::<_, _>(load(
-                    cstr!("vkCreateSwapchainKHR"),
-                    VERSION_1_0,
-                )),
-                destroy_swapchain: transmute::<_, _>(load(
-                    cstr!("vkDestroySwapchainKHR"),
-                    VERSION_1_0,
-                )),
+                create_swapchain: transmute::<_, _>(load(c"vkCreateSwapchainKHR", VERSION_1_0)),
+                destroy_swapchain: transmute::<_, _>(load(c"vkDestroySwapchainKHR", VERSION_1_0)),
                 get_swapchain_images: transmute::<_, _>(load(
-                    cstr!("vkGetSwapchainImagesKHR"),
-                    VERSION_1_0,
-                )),
-                acquire_next_image: transmute::<_, _>(load(
-                    cstr!("vkAcquireNextImageKHR"),
+                    c"vkGetSwapchainImagesKHR",
                     VERSION_1_0,
                 )),
-                queue_present: transmute::<_, _>(load(cstr!("vkQueuePresentKHR"), VERSION_1_0)),
+                acquire_next_image: transmute::<_, _>(load(c"vkAcquireNextImageKHR", VERSION_1_0)),
+                queue_present: transmute::<_, _>(load(c"vkQueuePresentKHR", VERSION_1_0)),
 
                 acquire_next_image2: transmute::<_, _>(load(
-                    cstr!("vkAcquireNextImage2KHR"),
+                    c"vkAcquireNextImage2KHR",
                     VERSION_1_1,
                 )),
             }
index 2678376be8b8b5b4f334eda34ad089f6c902e599..063d885082961a555f9981bb499549991263ed23 100644 (file)
@@ -1,4 +1,4 @@
-use narcissus_core::{cstr, default, include_bytes_align};
+use narcissus_core::{default, include_bytes_align};
 use narcissus_gpu::{
     Bind, BindGroupLayout, BindGroupLayoutDesc, BindGroupLayoutEntryDesc, BindingType, BlendMode,
     BufferUsageFlags, CmdEncoder, CompareOp, CullingMode, Device, DeviceExt, Frame, FrontFace,
@@ -83,11 +83,11 @@ impl BasicPipeline {
 
         let pipeline = device.create_graphics_pipeline(&GraphicsPipelineDesc {
             vertex_shader: ShaderDesc {
-                entry: cstr!("main"),
+                entry: c"main",
                 code: VERT_SPV,
             },
             fragment_shader: ShaderDesc {
-                entry: cstr!("main"),
+                entry: c"main",
                 code: FRAG_SPV,
             },
             bind_group_layouts: &[uniforms_bind_group_layout, storage_bind_group_layout],
index 766e74fd160e3fe01e4fbed72c33f1b70edc2bc7..6239ea295773914dcf9214a43a0e412782d69c10 100644 (file)
@@ -1,4 +1,4 @@
-use narcissus_core::{cstr, default, include_bytes_align};
+use narcissus_core::{default, include_bytes_align};
 use narcissus_font::{TouchedGlyph, TouchedGlyphIndex};
 use narcissus_gpu::{
     Bind, BindGroupLayout, BindGroupLayoutDesc, BindGroupLayoutEntryDesc, BindingType, BlendMode,
@@ -106,11 +106,11 @@ impl TextPipeline {
 
         let pipeline = device.create_graphics_pipeline(&GraphicsPipelineDesc {
             vertex_shader: ShaderDesc {
-                entry: cstr!("main"),
+                entry: c"main",
                 code: VERT_SPV,
             },
             fragment_shader: ShaderDesc {
-                entry: cstr!("main"),
+                entry: c"main",
                 code: FRAG_SPV,
             },
             bind_group_layouts: &[bind_group_layout],