2
0
Nicolas Cannasse 3 жил өмнө
parent
commit
1ba4cfbb32
2 өөрчлөгдсөн 95 нэмэгдсэн , 23 устгасан
  1. 72 21
      libs/sdl/sdl/Vulkan.hx
  2. 23 2
      libs/sdl/vulkan.c

+ 72 - 21
libs/sdl/sdl/Vulkan.hx

@@ -12,6 +12,9 @@ abstract VkPipelineLayout(hl.Abstract<"vk_pipeline_layout">) {
 abstract VkRenderPass(hl.Abstract<"vk_render_pass">) {
 }
 
+abstract VkDescriptorSetLayout(hl.Abstract<"vk_descriptor_set">) {
+}
+
 enum abstract VkStructureType(Int) {
 	var APPLICATION_INFO = 0;
 	var INSTANCE_CREATE_INFO = 1;
@@ -448,7 +451,7 @@ abstract VkBool32(Int) {
 	public var topology : VkPrimitiveTopology;
 	public var primitiveRestartEnable : VkBool32;
 	public function new() {
-		type = PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
+		type = PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
 	}
 }
 
@@ -758,6 +761,24 @@ enum abstract VkDynamicState(Int) {
 	var STENCIL_OP_EXT = 1000267011;
 }
 
+enum abstract VkDescriptorType(Int) {
+    var SAMPLER = 0;
+    var COMBINED_IMAGE_SAMPLER = 1;
+    var SAMPLED_IMAGE = 2;
+    var STORAGE_IMAGE = 3;
+    var UNIFORM_TEXEL_BUFFER = 4;
+    var STORAGE_TEXEL_BUFFER = 5;
+    var UNIFORM_BUFFER = 6;
+    var STORAGE_BUFFER = 7;
+    var UNIFORM_BUFFER_DYNAMIC = 8;
+    var STORAGE_BUFFER_DYNAMIC = 9;
+    var INPUT_ATTACHMENT = 10;
+    var INLINE_UNIFORM_BLOCK_EXT = 1000138000;
+    var ACCELERATION_STRUCTURE_KHR = 1000150000;
+    var ACCELERATION_STRUCTURE_NV = 1000165000;
+    var MUTABLE_VALVE = 1000351000;
+}
+
 @:struct class VkPipelineDynamic {
 	public var type : VkStructureType;
 	public var next : NextPtr;
@@ -776,12 +797,32 @@ enum abstract VkDynamicState(Int) {
 	public function new() {}
 }
 
+@:struct class VkDescriptorSetLayoutBinding {
+    public var binding : Int;
+	public var descriptorType : VkDescriptorType;
+	public var descriptorCount : Int;
+    public var stageFlags : haxe.EnumFlags<VkShaderStageFlag>;
+    public var immutableSamplers : Any; //VkSampler
+	public function new() {}
+}
+
+@:struct class VkDescriptorSetLayoutInfo {
+	public var type : VkStructureType;
+	public var next : NextPtr;
+	public var flags : UnusedFlags;
+	public var bindingCount : Int;
+	public var bindings : ArrayStruct<VkDescriptorSetLayoutBinding>;
+	public function new() {
+		type = DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
+	}
+}
+
 @:struct class VkPipelineLayoutInfo {
 	public var type : VkStructureType;
 	public var next : NextPtr;
 	public var flags : UnusedFlags;
 	public var setLayoutCount : Int;
-	public var setLayouts : NextPtr; // ArrayStruct<VkPipelineSetLayout>
+	public var setLayouts : ArrayStruct<VkDescriptorSetLayout>;
 	public var pushConstantRangeCount : Int;
 	public var pushConstantRanges : ArrayStruct<VkPushConstantRange>;
 	public function new() {
@@ -806,15 +847,15 @@ enum abstract VkAttachmentStoreOp(Int) {
 }
 
 @:struct class VkAttachmentDescription {
-	var flags : haxe.EnumFlags<VkAttachmentDescriptionFlag>;
-	var format : VkFormat;
-	var samples : Int;
-	var loadOp : VkAttachmentLoadOp;
-	var storeOp : VkAttachmentStoreOp;
-	var stencilLoadOp : VkAttachmentLoadOp;
-	var stencilStoreOp : VkAttachmentStoreOp;
-	var initialLayout : VkImageLayout;
-	var finalLayout : VkImageLayout;
+	public var flags : haxe.EnumFlags<VkAttachmentDescriptionFlag>;
+	public var format : VkFormat;
+	public var samples : Int;
+	public var loadOp : VkAttachmentLoadOp;
+	public var storeOp : VkAttachmentStoreOp;
+	public var stencilLoadOp : VkAttachmentLoadOp;
+	public var stencilStoreOp : VkAttachmentStoreOp;
+	public var initialLayout : VkImageLayout;
+	public var finalLayout : VkImageLayout;
 	public function new() {}
 }
 
@@ -862,16 +903,16 @@ enum abstract VkImageLayout(Int) {
 }
 
 @:struct class VkSubpassDescription {
-	var flags : haxe.EnumFlags<VkSubpassDescriptionFlag>;
-	var pipelineBindPoint : VkPipelineBindPoint;
-	var inputAttachmentCount : Int;
-	var inputAttachments : ArrayStruct<VkAttachmentReference>;
-	var colorAttachmentCount : Int;
-	var colorAttachments : ArrayStruct<VkAttachmentReference>;
-	var resolveAttachments : ArrayStruct<VkAttachmentReference>;
-	var depthStencilAttachment : ArrayStruct<VkAttachmentReference>;
-	var preserveAttachmentCount : Int;
-	var preserveAttachments : IntArray<Int>;
+	public var flags : haxe.EnumFlags<VkSubpassDescriptionFlag>;
+	public var pipelineBindPoint : VkPipelineBindPoint;
+	public var inputAttachmentCount : Int;
+	public var inputAttachments : ArrayStruct<VkAttachmentReference>;
+	public var colorAttachmentCount : Int;
+	public var colorAttachments : ArrayStruct<VkAttachmentReference>;
+	public var resolveAttachments : ArrayStruct<VkAttachmentReference>;
+	public var depthStencilAttachment : ArrayStruct<VkAttachmentReference>;
+	public var preserveAttachmentCount : Int;
+	public var preserveAttachments : IntArray<Int>;
 	public function new() {}
 }
 
@@ -1037,6 +1078,10 @@ abstract VkContext(hl.Abstract<"vk_context">) {
 		return null;
 	}
 
+	public function createDescriptorSetLayout( inf : VkDescriptorSetLayoutInfo ) : VkDescriptorSetLayout {
+		return null;
+	}
+
 }
 
 enum abstract ShaderKind(Int) {
@@ -1060,6 +1105,12 @@ class Vulkan {
 		return @:privateAccess new haxe.io.Bytes(bytes, outSize);
 	}
 
+	public static function drawIndexed( indexCount : Int, instanceCount : Int, firstIndex : Int, vertexOffset : Int, firstInstance : Int ) {
+	}
+
+	public static function bindPipeline( bindPoint : VkPipelineBindPoint, pipeline : VkGraphicsPipeline ) {
+	}
+
 	static function compile_shader( source : hl.Bytes, shaderFile : hl.Bytes, mainFunction : hl.Bytes, kind : ShaderKind, outSize : hl.Ref<Int> ) : hl.Bytes {
 		return null;
 	}

+ 23 - 2
libs/sdl/vulkan.c

@@ -358,11 +358,21 @@ VkRenderPass HL_NAME(vk_create_render_pass)( VkContext ctx, VkRenderPassCreateIn
 	return p;
 }
 
+VkDescriptorSetLayout HL_NAME(vk_create_descriptor_set_layout)( VkContext ctx, VkDescriptorSetLayoutCreateInfo *info ) {
+	VkDescriptorSetLayout p = NULL;
+	vkCreateDescriptorSetLayout(ctx->device, info, NULL, &p);
+	return p;
+}
+
 vbyte *HL_NAME(vk_make_array)( varray *a ) {
+	if( a->size == 0 )
+		return NULL;
+	if( a->at->kind == HABSTRACT )
+		return hl_copy_bytes(hl_aptr(a,vbyte), a->size * sizeof(void*));
 #ifdef HL_DEBUG
 	if( a->at->kind != HSTRUCT ) hl_error("assert");
 #endif
-	int size = a->at->obj->rt->size;
+	int size = a->at->kind == HABSTRACT ? sizeof(void*) : a->at->obj->rt->size;
 	vbyte *ptr = hl_alloc_bytes(size * a->size);
 	int i;
 	for(i=0;i<a->size;i++)
@@ -376,6 +386,7 @@ vbyte *HL_NAME(vk_make_array)( varray *a ) {
 #define _PIPELAYOUT _ABSTRACT(vk_pipeline_layout)
 #define _RENDERPASS _ABSTRACT(vk_render_pass)
 #define _IMG _ABSTRACT(vk_image)
+#define _DESCRIPTOR_SET _ABSTRACT(vk_descriptor_set)
 
 DEFINE_PRIM(_BOOL, vk_init, _BOOL);
 DEFINE_PRIM(_BOOL, vk_init_swapchain, _VCTX _I32 _I32);
@@ -386,6 +397,7 @@ DEFINE_PRIM(_SHADER_MODULE, vk_create_shader_module, _VCTX _BYTES _I32 );
 DEFINE_PRIM(_GPIPELINE, vk_create_graphics_pipeline, _VCTX _STRUCT);
 DEFINE_PRIM(_PIPELAYOUT, vk_create_pipeline_layout, _VCTX _STRUCT);
 DEFINE_PRIM(_RENDERPASS, vk_create_render_pass, _VCTX _STRUCT);
+DEFINE_PRIM(_DESCRIPTOR_SET, vk_create_descriptor_set_layout, _VCTX _STRUCT);
 
 // ------ COMMAND BUFFER OPERATIONS -----------------------
 
@@ -408,10 +420,19 @@ HL_PRIM void HL_NAME(vk_img_clear_depth_stencil)( VkImage img, double d, int ste
 	vkCmdClearDepthStencilImage(current_buffer, img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &ds, 1, &RANGE_ALL);
 }
 
+HL_PRIM void HL_NAME(vk_draw_indexed)( int indexCount, int instanceCount, int firstIndex, int vertexOffset, int firstInstance ) {
+	vkCmdDrawIndexed(current_buffer,indexCount,instanceCount,firstIndex,vertexOffset,firstInstance);
+}
+
+HL_PRIM void HL_NAME(vk_bind_pipeline)( int bindPoint, VkPipeline pipeline ) {
+	vkCmdBindPipeline(current_buffer, (VkPipelineBindPoint)bindPoint, pipeline);
+}
+
 DEFINE_PRIM(_IMG, vk_set_current, _VCTX);
 DEFINE_PRIM(_VOID, vk_img_clear_color, _IMG _F64 _F64 _F64 _F64);
 DEFINE_PRIM(_VOID, vk_img_clear_depth_stencil, _IMG _F64 _I32);
-
+DEFINE_PRIM(_VOID, vk_draw_indexed, _I32 _I32 _I32 _I32 _I32);
+DEFINE_PRIM(_VOID, vk_bind_pipeline, _I32 _GPIPELINE);
 
 // ------ SHADER COMPILATION ------------------------------