소스 검색

more vulkan api

Nicolas Cannasse 3 년 전
부모
커밋
ead0f04083
2개의 변경된 파일164개의 추가작업 그리고 1개의 파일을 삭제
  1. 103 0
      libs/sdl/sdl/Vulkan.hx
  2. 61 1
      libs/sdl/vulkan.c

+ 103 - 0
libs/sdl/sdl/Vulkan.hx

@@ -1635,6 +1635,69 @@ enum VkImageUsageFlag {
 	}
 	}
 }
 }
 
 
+@:struct class VkBufferImageCopy {
+    public var bufferOffset : hl.I64;
+    public var bufferRowLength : Int;
+    public var bufferImageHeight : Int;
+    public var aspectMask : haxe.EnumFlags<VkImageAspectFlag>;
+	public var mipLevel : Int;
+	public var baseArrayLayer : Int;
+	public var layerCount : Int;
+    public var imageOffsetX : Int;
+    public var imageOffsetY : Int;
+    public var imageOffsetZ : Int;
+    public var imageWidth : Int;
+    public var imageHeight : Int;
+    public var imageDepth : Int;
+	public function new() {
+	}
+}
+
+@:struct class VkMemoryBarrier {
+	public var type : VkStructureType;
+	public var next : NextPtr;
+	public var srcAccessMask : haxe.EnumFlags<VkAccessFlag>;
+	public var dstAccessMask : haxe.EnumFlags<VkAccessFlag>;
+	public function new() {
+		type = MEMORY_BARRIER;
+	}
+}
+
+@:struct class VkBufferMemoryBarrier {
+	public var type : VkStructureType;
+	public var next : NextPtr;
+	public var srcAccessMask : haxe.EnumFlags<VkAccessFlag>;
+	public var dstAccessMask : haxe.EnumFlags<VkAccessFlag>;
+    public var srcQueueFamilyIndex : Int;
+    public var dstQueueFamilyIndex : Int;
+    public var buffer : VkBuffer;
+    public var offset : hl.I64;
+    public var size : hl.I64;
+	public function new() {
+		type = BUFFER_MEMORY_BARRIER;
+	}
+}
+
+@:struct class VkImageMemoryBarrier {
+	public var type : VkStructureType;
+	public var next : NextPtr;
+	public var srcAccessMask : haxe.EnumFlags<VkAccessFlag>;
+	public var dstAccessMask : haxe.EnumFlags<VkAccessFlag>;
+	public var oldLayout : VkImageLayout;
+	public var newLayout : VkImageLayout;
+    public var srcQueueFamilyIndex : Int;
+    public var dstQueueFamilyIndex : Int;
+    public var image : VkImage;
+    public var aspectMask : haxe.EnumFlags<VkImageAspectFlag>;
+    public var baseMipLevel : Int;
+    public var levelCount : Int;
+    public var baseArrayLayer : Int;
+    public var layerCount : Int;
+	public function new() {
+		type = IMAGE_MEMORY_BARRIER;
+	}
+}
+
 @:hlNative("?sdl","vk_")
 @:hlNative("?sdl","vk_")
 abstract VkContext(hl.Abstract<"vk_context">) {
 abstract VkContext(hl.Abstract<"vk_context">) {
 
 
@@ -1752,9 +1815,39 @@ abstract VkContext(hl.Abstract<"vk_context">) {
 	public function queueSubmit( submit : VkSubmitInfo, fence : VkFence ) {
 	public function queueSubmit( submit : VkSubmitInfo, fence : VkFence ) {
 	}
 	}
 
 
+	public function queueWaitIdle() {
+	}
+
 	public function present( sem : VkSemaphore, currentImage : Int ) {
 	public function present( sem : VkSemaphore, currentImage : Int ) {
 	}
 	}
 
 
+	public function destroyImage( img : VkImage ) {
+	}
+
+	public function destroyImageView( view : VkImageView ) {
+	}
+
+	public function destroyFramebuffer( buf : VkFramebuffer ) {
+	}
+
+	public function freeCommandBuffers( pool : VkCommandPool, arr : hl.NativeArray<VkCommandBuffer> ) {
+	}
+
+	public function destroyCommandPool( pool : VkCommandPool ) {
+	}
+
+	public function destroyBuffer( buf : VkBuffer ) {
+	}
+
+	public function destroyFence( fence : VkFence ) {
+	}
+
+	public function destroySemaphore( sem : VkSemaphore ) {
+	}
+
+	public function freeMemory( mem : VkDeviceMemory ) {
+	}
+
 }
 }
 
 
 @:hlNative("?sdl","vk_")
 @:hlNative("?sdl","vk_")
@@ -1790,6 +1883,16 @@ abstract VkCommandBuffer(hl.Abstract<"vk_command_buffer">) {
 	public function pushConstants( layout : VkPipelineLayout, flags : haxe.EnumFlags<VkShaderStageFlag>, offset : Int, size : Int, data : hl.Bytes ) {
 	public function pushConstants( layout : VkPipelineLayout, flags : haxe.EnumFlags<VkShaderStageFlag>, offset : Int, size : Int, data : hl.Bytes ) {
 	}
 	}
 
 
+	public function copyBufferToImage( buf : VkBuffer, img : VkImage, layout : VkImageLayout, count : Int, regions : ArrayStruct<VkBufferImageCopy> ) {
+	}
+
+	public function pipelineBarrier(
+		srcMask : haxe.EnumFlags<VkPipelineStageFlag>, dstMask : haxe.EnumFlags<VkPipelineStageFlag>, flags : haxe.EnumFlags<VkDependencyFlag>,
+		memCount : Int, memBarriers : ArrayStruct<VkMemoryBarrier>,
+		bufferCount : Int, bufBarriers : ArrayStruct<VkBufferMemoryBarrier>,
+		imageCount : Int, imgBarriers : ArrayStruct<VkImageMemoryBarrier> ) {
+	}
+
 	@:hlNative("?sdl","vk_command_begin")
 	@:hlNative("?sdl","vk_command_begin")
 	public function begin( inf : VkCommandBufferBeginInfo ) {
 	public function begin( inf : VkCommandBufferBeginInfo ) {
 	}
 	}

+ 61 - 1
libs/sdl/vulkan.c

@@ -316,7 +316,7 @@ VkCommandPool HL_NAME(vk_create_command_pool)( VkContext ctx, VkCommandPoolCreat
 }
 }
 
 
 bool HL_NAME(vk_allocate_command_buffers)( VkContext ctx, VkCommandBufferAllocateInfo *inf, varray *buffers ) {
 bool HL_NAME(vk_allocate_command_buffers)( VkContext ctx, VkCommandBufferAllocateInfo *inf, varray *buffers ) {
-	return vkAllocateCommandBuffers(ctx->device, inf, hl_aptr(buffers,void)) == VK_SUCCESS;
+	return vkAllocateCommandBuffers(ctx->device, inf, hl_aptr(buffers,VkCommandBuffer)) == VK_SUCCESS;
 }
 }
 
 
 VkFence HL_NAME(vk_create_fence)( VkContext ctx, VkFenceCreateInfo *inf ) {
 VkFence HL_NAME(vk_create_fence)( VkContext ctx, VkFenceCreateInfo *inf ) {
@@ -351,6 +351,10 @@ void HL_NAME(vk_queue_submit)( VkContext ctx, VkSubmitInfo *inf, VkFence fence )
 	vkQueueSubmit(ctx->queue, 1, inf, fence);
 	vkQueueSubmit(ctx->queue, 1, inf, fence);
 }
 }
 
 
+void HL_NAME(vk_queue_wait_idle)( VkContext ctx ) {
+	vkQueueWaitIdle(ctx->queue);
+}
+
 void HL_NAME(vk_present)( VkContext ctx, VkSemaphore sem, int image ) {
 void HL_NAME(vk_present)( VkContext ctx, VkSemaphore sem, int image ) {
 	VkPresentInfoKHR presentInfo = {
 	VkPresentInfoKHR presentInfo = {
 		.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
 		.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
@@ -363,6 +367,42 @@ void HL_NAME(vk_present)( VkContext ctx, VkSemaphore sem, int image ) {
 	vkQueuePresentKHR(ctx->queue, &presentInfo);
 	vkQueuePresentKHR(ctx->queue, &presentInfo);
 }
 }
 
 
+void HL_NAME(vk_destroy_buffer)( VkContext ctx, VkBuffer buf ) {
+	vkDestroyBuffer(ctx->device, buf, NULL);
+}
+
+void HL_NAME(vk_destroy_image)( VkContext ctx, VkImage img ) {
+	vkDestroyImage(ctx->device, img, NULL);
+}
+
+void HL_NAME(vk_destroy_image_view)( VkContext ctx, VkImageView view ) {
+	vkDestroyImageView(ctx->device, view, NULL);
+}
+
+void HL_NAME(vk_free_memory)( VkContext ctx, VkDeviceMemory mem ) {
+	vkFreeMemory(ctx->device, mem, NULL);
+}
+
+void HL_NAME(vk_destroy_fence)( VkContext ctx, VkFence fence ) {
+	vkDestroyFence(ctx->device, fence, NULL);
+}
+
+void HL_NAME(vk_destroy_semaphore)( VkContext ctx, VkSemaphore sem ) {
+	vkDestroySemaphore(ctx->device, sem, NULL);
+}
+
+void HL_NAME(vk_destroy_command_pool)( VkContext ctx, VkCommandPool pool ) {
+	vkDestroyCommandPool(ctx->device, pool, NULL);
+}
+
+void HL_NAME(vk_free_command_buffers)( VkContext ctx, VkCommandPool pool, varray *cmd ) {
+	vkFreeCommandBuffers(ctx->device, pool, cmd->size, hl_aptr(cmd,VkCommandBuffer));
+}
+
+void HL_NAME(vk_destroy_framebuffer)( VkContext ctx, VkFramebuffer fb ) {
+	vkDestroyFramebuffer(ctx->device, fb, NULL);
+}
+
 #define _VCTX _ABSTRACT(vk_context)
 #define _VCTX _ABSTRACT(vk_context)
 #define _SHADER_MODULE _ABSTRACT(vk_shader_module)
 #define _SHADER_MODULE _ABSTRACT(vk_shader_module)
 #define _GPIPELINE _ABSTRACT(vk_gpipeline)
 #define _GPIPELINE _ABSTRACT(vk_gpipeline)
@@ -411,8 +451,18 @@ DEFINE_PRIM(_BOOL, vk_bind_buffer_memory, _VCTX _BUFFER _MEMORY _I32);
 DEFINE_PRIM(_SEMAPHORE, vk_create_semaphore, _VCTX _STRUCT);
 DEFINE_PRIM(_SEMAPHORE, vk_create_semaphore, _VCTX _STRUCT);
 DEFINE_PRIM(_I32, vk_get_next_image_index, _VCTX _SEMAPHORE);
 DEFINE_PRIM(_I32, vk_get_next_image_index, _VCTX _SEMAPHORE);
 DEFINE_PRIM(_VOID, vk_queue_submit, _VCTX _STRUCT _FENCE);
 DEFINE_PRIM(_VOID, vk_queue_submit, _VCTX _STRUCT _FENCE);
+DEFINE_PRIM(_VOID, vk_queue_wait_idle, _VCTX);
 DEFINE_PRIM(_VOID, vk_present, _VCTX _SEMAPHORE _I32);
 DEFINE_PRIM(_VOID, vk_present, _VCTX _SEMAPHORE _I32);
 DEFINE_PRIM(_VOID, vk_get_pdevice_format_props, _VCTX _I32 _STRUCT);
 DEFINE_PRIM(_VOID, vk_get_pdevice_format_props, _VCTX _I32 _STRUCT);
+DEFINE_PRIM(_VOID, vk_destroy_image, _VCTX _IMAGE);
+DEFINE_PRIM(_VOID, vk_destroy_image_view, _VCTX _IMAGE_VIEW);
+DEFINE_PRIM(_VOID, vk_destroy_framebuffer, _VCTX _FRAMEBUFFER);
+DEFINE_PRIM(_VOID, vk_free_command_buffers, _VCTX _CMD_POOL _ARR);
+DEFINE_PRIM(_VOID, vk_destroy_command_pool, _VCTX _CMD_POOL);
+DEFINE_PRIM(_VOID, vk_destroy_buffer, _VCTX _BUFFER);
+DEFINE_PRIM(_VOID, vk_destroy_fence, _VCTX _FENCE);
+DEFINE_PRIM(_VOID, vk_destroy_semaphore, _VCTX _SEMAPHORE);
+DEFINE_PRIM(_VOID, vk_free_memory, _VCTX _MEMORY);
 
 
 // ------ COMMAND BUFFER OPERATIONS -----------------------
 // ------ COMMAND BUFFER OPERATIONS -----------------------
 
 
@@ -464,6 +514,14 @@ HL_PRIM void HL_NAME(vk_push_constants)( VkCommandBuffer out, VkPipelineLayout l
 	vkCmdPushConstants(out, layout, flags, offset, size, data);
 	vkCmdPushConstants(out, layout, flags, offset, size, data);
 }
 }
 
 
+HL_PRIM void HL_NAME(vk_copy_buffer_to_image)( VkCommandBuffer out, VkBuffer buf, VkImage img, VkImageLayout layout, int count, VkBufferImageCopy *regions ) {
+	vkCmdCopyBufferToImage(out, buf, img, layout, count, regions);
+}
+
+HL_PRIM void HL_NAME(vk_pipeline_barrier)( VkCommandBuffer out, VkPipelineStageFlags srcMask, VkPipelineStageFlags dstMask, VkDependencyFlags flags, int memCount, VkMemoryBarrier *memBarriers, int bufferCount, VkBufferMemoryBarrier *bufBarriers, int imageCount, VkImageMemoryBarrier *imgBarriers ) {
+	vkCmdPipelineBarrier(out, srcMask, dstMask, flags, memCount, memBarriers, bufferCount, bufBarriers, imageCount, imgBarriers);
+}
+
 DEFINE_PRIM(_VOID, vk_command_begin, _CMD _STRUCT);
 DEFINE_PRIM(_VOID, vk_command_begin, _CMD _STRUCT);
 DEFINE_PRIM(_VOID, vk_command_end, _CMD);
 DEFINE_PRIM(_VOID, vk_command_end, _CMD);
 DEFINE_PRIM(_VOID, vk_clear_color_image, _CMD _IMAGE _I32 _BYTES _I32 _STRUCT);
 DEFINE_PRIM(_VOID, vk_clear_color_image, _CMD _IMAGE _I32 _BYTES _I32 _STRUCT);
@@ -476,6 +534,8 @@ DEFINE_PRIM(_VOID, vk_bind_index_buffer, _CMD _BUFFER _I32 _I32);
 DEFINE_PRIM(_VOID, vk_bind_vertex_buffers, _CMD _I32 _I32 _BYTES _BYTES);
 DEFINE_PRIM(_VOID, vk_bind_vertex_buffers, _CMD _I32 _I32 _BYTES _BYTES);
 DEFINE_PRIM(_VOID, vk_push_constants, _CMD _PIPELAYOUT _I32 _I32 _I32 _BYTES);
 DEFINE_PRIM(_VOID, vk_push_constants, _CMD _PIPELAYOUT _I32 _I32 _I32 _BYTES);
 DEFINE_PRIM(_VOID, vk_end_render_pass, _CMD);
 DEFINE_PRIM(_VOID, vk_end_render_pass, _CMD);
+DEFINE_PRIM(_VOID, vk_copy_buffer_to_image, _CMD _BUFFER _IMAGE _I32 _I32 _BYTES);
+DEFINE_PRIM(_VOID, vk_pipeline_barrier, _CMD _I32 _I32 _I32 _I32 _BYTES _I32 _BYTES _I32 _BYTES);
 
 
 // ------ SHADER COMPILATION ------------------------------
 // ------ SHADER COMPILATION ------------------------------