X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fvk.h;h=772f2e3691d2e97d46244320b13768ab24aff214;hb=refs%2Fheads%2Fmaster;hp=5adfbd71b96624646a60b32e3eba645ff06e1769;hpb=35f7d10bf03cc666b551490bcae87ac389d63cb7;p=vkrt diff --git a/src/vk.h b/src/vk.h index 5adfbd7..772f2e3 100644 --- a/src/vk.h +++ b/src/vk.h @@ -6,6 +6,21 @@ #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +enum GEOM_BIND { + VERTEX_BIND, + NORMAL_BIND, + TEXCOORD_BIND, + TANGENT_BIND, + IDX_BIND +}; + +enum GEOM_LOC { + VERTEX_LOC, + NORMAL_LOC, + TANGENT_LOC, + IDX_LOC +}; + struct vk_ctx { VkInstance inst; @@ -22,19 +37,6 @@ struct vk_ctx uint8_t driverUUID[VK_UUID_SIZE]; }; -struct vk_swapchain -{ - VkSwapchainKHR swapchain; - VkSurfaceFormatKHR surf_fmt; - - /* image properties */ - VkFormat image_fmt; - VkExtent2D extent2d; - - uint32_t num_atts; - struct vk_attachment *atts; -}; - struct vk_att_props { uint32_t w; @@ -57,6 +59,25 @@ struct vk_att_props bool need_export; }; +struct vk_swapchain +{ + VkSwapchainKHR swapchain; + VkSurfaceFormatKHR surf_fmt; + + /* image properties */ + /* FIXME: do I really need those 2?*/ + VkFormat image_fmt; + VkExtent2D extent2d; + + struct vk_att_props img_props; + + uint32_t num_images; + VkImage *images; + VkImageView *views; +}; + +/* for allocated images */ + struct vk_mem_obj { VkDeviceMemory mem; VkDeviceSize mem_sz; @@ -76,18 +97,27 @@ struct vk_attachment { struct vk_att_props props; }; -struct vk_vertex_info +struct vk_buf { - int num_verts; - int num_components; + VkBuffer buf; + struct vk_mem_obj mobj; +}; - VkPrimitiveTopology topology; +struct vk_vbo { + int num_vertices; + struct vk_buf vbo; + + /* int num_components; */ }; -struct vk_buf +struct vk_geometry { - VkBuffer buf; - struct vk_mem_obj mobj; + struct vk_vbo vertices; + struct vk_vbo normals; + struct vk_vbo tangents; + struct vk_vbo indices; + + VkPrimitiveTopology topo; }; struct vk_renderer @@ -97,9 +127,8 @@ struct vk_renderer VkRenderPass renderpass; VkShaderModule vs; VkShaderModule fs; - VkFramebuffer fb; - struct vk_vertex_info vertex_info; + struct vk_geometry *geometry; }; struct vk_dims @@ -130,6 +159,10 @@ bool vk_init_ctx_for_rendering(struct vk_ctx *ctx, void vk_cleanup_ctx(struct vk_ctx *ctx); /* images */ +bool +vk_create_ext_image(struct vk_ctx *ctx, + struct vk_att_props *props, + struct vk_image_obj *img); bool vk_create_image(struct vk_ctx *ctx, @@ -140,6 +173,14 @@ vk_destroy_image(struct vk_ctx *ctx, struct vk_image_obj *img_obj); bool +vk_create_image_view(struct vk_ctx *ctx, + VkImage image, + VkImageViewType view_type, + VkFormat format, + bool is_swapchain, + VkImageView *image_view); + +bool vk_fill_image_props(struct vk_ctx *ctx, uint32_t w, uint32_t h, uint32_t depth, @@ -155,6 +196,15 @@ vk_fill_image_props(struct vk_ctx *ctx, bool need_export, struct vk_att_props *props); +struct vk_attachment +vk_create_attachment_from_obj(struct vk_image_obj *obj, + struct vk_att_props *props); + +struct vk_attachment +vk_create_attachment(VkImage image, + VkImageView view, + struct vk_att_props *props); + /* buffers */ bool @@ -196,6 +246,21 @@ vk_destroy_fences(struct vk_ctx *ctc, VkFence *fences); /* renderer */ +bool +vk_create_framebuffer(struct vk_ctx *ctx, + int width, int height, + int num_color_atts, + VkImageView *color_views, + VkImageView *depth_view, + VkRenderPass rb, + VkFramebuffer *fb); + +bool +vk_create_renderpass(struct vk_ctx *ctx, + uint32_t num_color_atts, + struct vk_att_props *color_props, + struct vk_att_props *depth_props, + VkRenderPass *renderpass); bool vk_create_renderer(struct vk_ctx *ctx, @@ -208,9 +273,9 @@ vk_create_renderer(struct vk_ctx *ctx, bool enable_depth, bool enable_stencil, int num_color_att, - struct vk_attachment *color_att, - struct vk_attachment *depth_att, - struct vk_vertex_info *vert_info, + struct vk_att_props *color_props, + struct vk_att_props *depth_props, + struct vk_geometry *geometry, struct vk_renderer *renderer); void @@ -229,9 +294,9 @@ bool vk_record_cmd_buffer(struct vk_ctx *ctx, VkCommandBuffer cmd_buf, struct vk_renderer *renderer, - struct vk_buf *vbo, uint32_t vk_fb_color_count, float *vk_fb_color, + VkFramebuffer fb, uint32_t num_atts, struct vk_attachment *atts, float x, float y, @@ -256,6 +321,7 @@ vk_clear_color(struct vk_ctx *ctx, struct vk_renderer *renderer, float *vk_fb_color, uint32_t vk_fb_color_count, + VkFramebuffer fb, struct vk_semaphores *semaphores, bool has_wait, bool has_signal, struct vk_attachment *attachments,