diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2021-03-08 23:37:50 +0100 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2021-03-08 23:37:50 +0100 |
| commit | 14b00bdd8d0f3a6bdbc5623a964177cc6df2f4cc (patch) | |
| tree | a7907aef4980ad783053e323c6ea3b87809e5a53 /src/vk-api.cpp | |
| parent | a14e25e7954b6101830c604f87694da5aee7625f (diff) | |
Add sampler creation/descruction and draw functions to the api
Diffstat (limited to 'src/vk-api.cpp')
| -rw-r--r-- | src/vk-api.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/vk-api.cpp b/src/vk-api.cpp index 117f461..5dbe010 100644 --- a/src/vk-api.cpp +++ b/src/vk-api.cpp @@ -219,6 +219,37 @@ void vkapi::destroy_semaphores(std::vector<VkSemaphore> &semaphores) { } +VkSampler vkapi::create_sampler(VkFilter filter, VkSamplerAddressMode address_mode) { + VkSamplerCreateInfo sampler_create_info = {}; + sampler_create_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; + sampler_create_info.pNext = VK_NULL_HANDLE; + sampler_create_info.flags = 0; + sampler_create_info.magFilter = filter; + sampler_create_info.minFilter = filter; + sampler_create_info.mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST; + sampler_create_info.addressModeU = address_mode; + sampler_create_info.addressModeV = address_mode; + sampler_create_info.addressModeW = address_mode; + sampler_create_info.mipLodBias = 0.f; + sampler_create_info.anisotropyEnable = VK_FALSE; + sampler_create_info.compareEnable = VK_FALSE; + sampler_create_info.compareOp = VK_COMPARE_OP_ALWAYS; + sampler_create_info.minLod = 0.f; + sampler_create_info.maxLod = 0.f; + sampler_create_info.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK; + sampler_create_info.unnormalizedCoordinates = VK_FALSE; + + VkSampler sampler; + VKRESULT(vkCreateSampler(context.device, &sampler_create_info, VK_NULL_HANDLE, &sampler)) + + return sampler; +} + +void vkapi::destroy_sampler(VkSampler sampler) { + vkDestroySampler(context.device, sampler, VK_NULL_HANDLE); +} + + std::vector<VkCommandBuffer> vkapi::create_command_buffers(size_t command_buffers_count) { VkCommandBufferAllocateInfo cmd_buf_allocate_info = {}; cmd_buf_allocate_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; @@ -845,6 +876,35 @@ void vkapi::image_barrier(VkCommandBuffer command_buffer, VkImageLayout src_layo ); } + +void vkapi::begin_render_pass(VkCommandBuffer command_buffer, VkRenderPass render_pass, VkFramebuffer framebuffer, VkExtent2D size, Pipeline pipeline) { + VkRect2D render_area = { + { + 0, + 0, + }, + size + }; + + VkClearValue clear_value = { 0.f, 0.f, 0.f, 1.f }; + VkRenderPassBeginInfo render_pass_begin_info = {}; + render_pass_begin_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; + render_pass_begin_info.pNext = VK_NULL_HANDLE; + render_pass_begin_info.renderPass = render_pass; + render_pass_begin_info.framebuffer = framebuffer; + render_pass_begin_info.renderArea = render_area; + render_pass_begin_info.clearValueCount = 1; + render_pass_begin_info.pClearValues = &clear_value; + + vkCmdBeginRenderPass(command_buffer, &render_pass_begin_info, VK_SUBPASS_CONTENTS_INLINE); + vkCmdBindPipeline(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.handle); +} + +void vkapi::end_render_pass(VkCommandBuffer command_buffer) { + vkCmdEndRenderPass(command_buffer); +} + + void vkapi::run_compute_pipeline(VkCommandBuffer command_buffer, Pipeline pipeline, VkDescriptorSet set, size_t group_count_x, size_t group_count_y, size_t group_count_z) { vkCmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline.layout, 0, 1, &set, 0, nullptr); @@ -853,6 +913,20 @@ void vkapi::run_compute_pipeline(VkCommandBuffer command_buffer, Pipeline pipeli vkCmdDispatch(command_buffer, group_count_x, group_count_y, group_count_z); } +void vkapi::draw(VkCommandBuffer command_buffer, Pipeline pipeline, VkDescriptorSet set, uint32_t vertex_count, uint32_t vertex_offset) { + vkCmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.layout, 0, 1, &set, 0, nullptr); + vkCmdBindPipeline(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.handle); + + vkCmdDraw(command_buffer, vertex_count, 1, vertex_offset, 0); +} + +void vkapi::draw(VkCommandBuffer command_buffer, Pipeline pipeline, VkDescriptorSet set, Buffer index_buffer, uint32_t index_count, uint32_t index_offset, uint32_t vertex_offset) { + vkCmdBindIndexBuffer(command_buffer, index_buffer.handle, 0, VK_INDEX_TYPE_UINT16); + vkCmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline.layout, 0, 1, &set, 0, nullptr); + + vkCmdDrawIndexed(command_buffer, index_count, 1, index_offset, vertex_offset, 0); +} + void vkapi::blit_full(VkCommandBuffer command_buffer, Image src_image, Image dst_image) { VkImageSubresourceLayers images_subres_layers { .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT, |
