turnip: parse VkPipelineInputAssemblyStateCreateInfo
authorChia-I Wu <olvaffe@gmail.com>
Thu, 21 Feb 2019 19:07:38 +0000 (11:07 -0800)
committerChia-I Wu <olvaffe@gmail.com>
Mon, 11 Mar 2019 17:02:13 +0000 (10:02 -0700)
src/freedreno/vulkan/tu_pipeline.c
src/freedreno/vulkan/tu_private.h

index 50b3a02e6226b386d4a415252fd87ef255de5fef..b8c76971f8975bc18fb94e25771ac907b0aa98b8 100644 (file)
@@ -75,6 +75,37 @@ tu_dynamic_state_bit(VkDynamicState state)
    }
 }
 
    }
 }
 
+static enum pc_di_primtype
+tu6_primtype(VkPrimitiveTopology topology)
+{
+   switch (topology) {
+   case VK_PRIMITIVE_TOPOLOGY_POINT_LIST:
+      return DI_PT_POINTLIST;
+   case VK_PRIMITIVE_TOPOLOGY_LINE_LIST:
+      return DI_PT_LINELIST;
+   case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP:
+      return DI_PT_LINESTRIP;
+   case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST:
+      return DI_PT_TRILIST;
+   case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP:
+      return DI_PT_TRILIST;
+   case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN:
+      return DI_PT_TRIFAN;
+   case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY:
+      return DI_PT_LINE_ADJ;
+   case VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY:
+      return DI_PT_LINESTRIP_ADJ;
+   case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY:
+      return DI_PT_TRI_ADJ;
+   case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY:
+      return DI_PT_TRISTRIP_ADJ;
+   case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST:
+   default:
+      unreachable("invalid primitive topology");
+      return DI_PT_NONE;
+   }
+}
+
 static VkResult
 tu_pipeline_builder_create_pipeline(struct tu_pipeline_builder *builder,
                                     struct tu_pipeline **out_pipeline)
 static VkResult
 tu_pipeline_builder_create_pipeline(struct tu_pipeline_builder *builder,
                                     struct tu_pipeline **out_pipeline)
@@ -117,6 +148,17 @@ tu_pipeline_builder_parse_dynamic(struct tu_pipeline_builder *builder,
    }
 }
 
    }
 }
 
+static void
+tu_pipeline_builder_parse_input_assembly(struct tu_pipeline_builder *builder,
+                                         struct tu_pipeline *pipeline)
+{
+   const VkPipelineInputAssemblyStateCreateInfo *ia_info =
+      builder->create_info->pInputAssemblyState;
+
+   pipeline->ia.primtype = tu6_primtype(ia_info->topology);
+   pipeline->ia.primitive_restart = ia_info->primitiveRestartEnable;
+}
+
 static void
 tu_pipeline_finish(struct tu_pipeline *pipeline,
                    struct tu_device *dev,
 static void
 tu_pipeline_finish(struct tu_pipeline *pipeline,
                    struct tu_device *dev,
@@ -134,6 +176,7 @@ tu_pipeline_builder_build(struct tu_pipeline_builder *builder,
       return result;
 
    tu_pipeline_builder_parse_dynamic(builder, *pipeline);
       return result;
 
    tu_pipeline_builder_parse_dynamic(builder, *pipeline);
+   tu_pipeline_builder_parse_input_assembly(builder, *pipeline);
 
    /* we should have reserved enough space upfront such that the CS never
     * grows
 
    /* we should have reserved enough space upfront such that the CS never
     * grows
index 9a5a1a7170159dcfad91bd7cffb85a9ecc004c31..adaad2dfb02a1bd914ef91ab7b98691a23beec85 100644 (file)
@@ -985,6 +985,12 @@ struct tu_pipeline
 
    bool need_indirect_descriptor_sets;
    VkShaderStageFlags active_stages;
 
    bool need_indirect_descriptor_sets;
    VkShaderStageFlags active_stages;
+
+   struct
+   {
+      enum pc_di_primtype primtype;
+      bool primitive_restart;
+   } ia;
 };
 
 struct tu_userdata_info *
 };
 
 struct tu_userdata_info *