X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fvk.h;h=b9a8fb008230982eb891b72249639e08934cea72;hb=refs%2Fheads%2Fmaster;hp=3322f14a1b91e1609487b196095f5029ad175f15;hpb=e379270730e50a4659f7d690c74d36b900e664de;p=vktest3 diff --git a/src/vk.h b/src/vk.h index 3322f14..b9a8fb0 100644 --- a/src/vk.h +++ b/src/vk.h @@ -10,13 +10,71 @@ enum { VKINIT_RAY = 0x100 }; +/* queue capability flags for vk_find_qfamily and vk_init_queue */ +enum { + VKQ_GFX = 1, + VKQ_COMPUTE = 2, + VKQ_PRESENT = 4, + VKQ_XFER = 8 +}; + +/* shader types + * arranged so that: (1 << VKSDR_FOO) == VK_SHADER_STAGE_FOO_BIT + */ +enum { + VKSDR_VERTEX = 0, + VKSDR_TESS_CTL = 1, + VKSDR_TESS_EVAL = 2, + VKSDR_GEOM = 3, + VKSDR_PIXEL = 4, + VKSDR_COMPUTE = 5, + + VKSDR_TASK = 6, + VKSDR_MESH = 7, + + VKSDR_RAYGEN = 8, + VKSDR_ANYHIT = 9, + VKSDR_CLOSESTHIT = 10, + VKSDR_MISS = 11, + VKSDR_ISECT = 12, + + VKSDR_MAX +}; +#define VKSDR_STAGE(x) (1 << (x)) + +/* primitives */ +enum { + VKPRIM_POINTS = VK_PRIMITIVE_TOPOLOGY_POINT_LIST, + VKPRIM_LINES = VK_PRIMITIVE_TOPOLOGY_LINE_LIST, + VKPRIM_TRIANGLES = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST +}; + void vk_init_xwin(Display *dpy, Window win); +void vk_init_queue(unsigned int qflags, int count); int vk_init(unsigned int flags, unsigned int *usedflags); void vk_cleanup(void); int vk_reshape(int xsz, int ysz); +/* returns the number of swapchain images */ +int vk_num_swap_images(void); +VkImageView vk_swap_image(int idx); +/* returns the image index, or -1 on failure. Pass optional semaphore to signal */ +int vk_next_swap_image(VkSemaphore sem); + +int vk_submit(VkQueue q, VkCommandBuffer cmdbuf, VkSemaphore semwait, VkSemaphore semsig); +int vk_present(VkQueue q, int imgid, VkSemaphore semwait); + +int vk_find_qfamily(unsigned int flags); +VkQueue vk_getq_fam(int fam, int n); +VkQueue vk_getq(unsigned int flags, int n); + +VkCommandBuffer vk_create_cmdbuf_fam(int qfam, int level); +VkCommandBuffer vk_create_cmdbuf(unsigned int qflags, int level); +/* return one of the swap-chain command buffers */ +VkCommandBuffer vk_get_cmdbuf(int imgid); + int vk_create_rpass(void); void vk_free_rpass(int rp); void vk_rpass_colorbuf(int rp, int fmt, int n); @@ -24,5 +82,45 @@ void vk_rpass_msaa(int rp, int nsamp); void vk_rpass_clear(int rp, int clear); VkRenderPass vk_rpass(int rp); +int vk_create_fb(void); +void vk_free_fb(int fb); +void vk_fb_size(int fb, int x, int y); +void vk_fb_rpass(int fb, int rpass); +void vk_fb_images(int fb, int n, ...); +VkFramebuffer vk_fb(int fb); + +int vk_create_pipeln(void); +void vk_free_pipeln(int pp); +void vk_pipeln_rpass(int pp, VkRenderPass rp); +void vk_pipeln_viewport(int pp, int x, int y, int width, int height); +void vk_pipeln_scissor(int pp, int x, int y, int width, int height); +void vk_pipeln_shader(int pp, int type, VkShaderModule sdr); +/* TODO: vertex input */ +void vk_pipeln_prim(int pp, int prim); +void vk_pipeln_polymode(int pp, int mode); +void vk_pipeln_cull(int pp, int cull); +void vk_pipeln_frontface(int pp, int ff); +void vk_pipeln_linewidth(int pp, int w); +void vk_pipeln_multisample(int pp, int nsamples); +void vk_pipeln_colormask(int pp, int r, int g, int b, int a); +void vk_pipeln_depthmask(int pp, int z); +void vk_pipeln_stencilmask(int pp, int s); +void vk_pipeln_zbuffer(int pp, int enable); +void vk_pipeln_zbuffer_op(int pp, int op); +void vk_pipeln_stencil(int pp, int enable); +void vk_pipeln_stencil_op(int pp, int sfail, int zfail, int zpass); +void vk_pipeln_stencil_func(int pp, int op, unsigned int ref, unsigned int mask); +void vk_pipeln_blend(int pp, int enable); +void vk_pipeln_blendfunc(int pp, int src, int dst); +VkPipeline vk_pipeln(int pp); + +VkShaderModule vk_load_shader(const char *fname); +void vk_free_shader(VkShaderModule sdr); + +VkSemaphore vk_create_sem(void); +void vk_free_sem(VkSemaphore sem); + +/* random helpers */ +void vk_rect(VkRect2D *r, int x, int y, int w, int h); #endif /* VK_H_ */