@@ -0,0 +1,407 @@ | |||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||||
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd"> | |||||
<!--Created by yEd 3.14--> | |||||
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/> | |||||
<key for="port" id="d1" yfiles.type="portgraphics"/> | |||||
<key for="port" id="d2" yfiles.type="portgeometry"/> | |||||
<key for="port" id="d3" yfiles.type="portuserdata"/> | |||||
<key attr.name="url" attr.type="string" for="node" id="d4"/> | |||||
<key attr.name="description" attr.type="string" for="node" id="d5"/> | |||||
<key for="node" id="d6" yfiles.type="nodegraphics"/> | |||||
<key for="graphml" id="d7" yfiles.type="resources"/> | |||||
<key attr.name="url" attr.type="string" for="edge" id="d8"/> | |||||
<key attr.name="description" attr.type="string" for="edge" id="d9"/> | |||||
<key for="edge" id="d10" yfiles.type="edgegraphics"/> | |||||
<graph edgedefault="directed" id="G"> | |||||
<data key="d0"/> | |||||
<node id="n0"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="130.0" x="385.0" y="255.0"/> | |||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/> | |||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="49.36328125" x="40.318359375" y="5.6494140625">Instance<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n1"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="130.0" x="385.0" y="165.0"/> | |||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/> | |||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="89.37109375" x="20.314453125" y="5.6494140625">InstanceFactory<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n2"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="130.0" x="565.0" y="165.0"/> | |||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/> | |||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="125.37109375" x="2.314453125" y="5.6494140625">PhysicalDeviceFactory<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n3"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="130.0" x="565.0" y="255.0"/> | |||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/> | |||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="85.36328125" x="22.318359375" y="5.6494140625">PhysicalDevice<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n4"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="130.0" x="745.0" y="165.0"/> | |||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/> | |||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="80.6875" x="24.65625" y="5.6494140625">DeviceFactory<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n5"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="130.0" x="745.0" y="255.0"/> | |||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/> | |||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="40.6796875" x="44.66015625" y="5.6494140625">Device<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n6"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="130.0" x="235.0" y="315.0"/> | |||||
<y:Fill color="#FFFFFFE6" color2="#D4D4D4CC" transparent="false"/> | |||||
<y:BorderStyle color="#123EA2" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="98.0546875" x="15.97265625" y="5.6494140625">AllocationHandler<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n7"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="30.0" x="405.0" y="405.0"/> | |||||
<y:Fill hasColor="false" transparent="false"/> | |||||
<y:BorderStyle hasColor="false" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="13.0" y="13.0"> | |||||
<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n8"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="30.0" x="555.0" y="405.0"/> | |||||
<y:Fill hasColor="false" transparent="false"/> | |||||
<y:BorderStyle hasColor="false" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="13.0" y="13.0"> | |||||
<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n9"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="30.0" x="405.0" y="465.0"/> | |||||
<y:Fill hasColor="false" transparent="false"/> | |||||
<y:BorderStyle hasColor="false" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="13.0" y="13.0"> | |||||
<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<node id="n10"> | |||||
<data key="d5"/> | |||||
<data key="d6"> | |||||
<y:GenericNode configuration="com.yworks.bpmn.Activity.withShadow"> | |||||
<y:Geometry height="30.0" width="30.0" x="555.0" y="465.0"/> | |||||
<y:Fill hasColor="false" transparent="false"/> | |||||
<y:BorderStyle hasColor="false" type="line" width="1.0"/> | |||||
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="13.0" y="13.0"> | |||||
<y:LabelModel> | |||||
<y:SmartNodeLabelModel distance="4.0"/> | |||||
</y:LabelModel> | |||||
<y:ModelParameter> | |||||
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/> | |||||
</y:ModelParameter> | |||||
</y:NodeLabel> | |||||
<y:StyleProperties> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.line.color" value="#000000"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.TaskTypeEnum" name="com.yworks.bpmn.taskType" value="TASK_TYPE_ABSTRACT"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill2" value="#d4d4d4cc"/> | |||||
<y:Property class="java.awt.Color" name="com.yworks.bpmn.icon.fill" value="#ffffffe6"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.BPMNTypeEnum" name="com.yworks.bpmn.type" value="ACTIVITY_TYPE"/> | |||||
<y:Property class="com.yworks.yfiles.bpmn.view.ActivityTypeEnum" name="com.yworks.bpmn.activityType" value="ACTIVITY_TYPE_TASK"/> | |||||
</y:StyleProperties> | |||||
</y:GenericNode> | |||||
</data> | |||||
</node> | |||||
<edge id="e0" source="n1" target="n0"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e1" source="n2" target="n3"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e2" source="n4" target="n5"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e3" source="n0" target="n6"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"> | |||||
<y:Point x="450.0" y="330.0"/> | |||||
</y:Path> | |||||
<y:LineStyle color="#000000" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e4" source="n5" target="n6"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"> | |||||
<y:Point x="810.0" y="330.0"/> | |||||
</y:Path> | |||||
<y:LineStyle color="#000000" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e5" source="n7" target="n8"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="line" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="side_slider" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="43.3515625" x="38.34619140625" y="-19.701171875">creates<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/> | |||||
</y:EdgeLabel> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e6" source="n9" target="n10"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="side_slider" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="29.34765625" x="45.34814453125" y="-19.701171875">uses<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/> | |||||
</y:EdgeLabel> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e7" source="n3" target="n0"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
<edge id="e8" source="n5" target="n3"> | |||||
<data key="d9"/> | |||||
<data key="d10"> | |||||
<y:PolyLineEdge> | |||||
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/> | |||||
<y:LineStyle color="#000000" type="dashed" width="1.0"/> | |||||
<y:Arrows source="none" target="standard"/> | |||||
<y:BendStyle smoothed="false"/> | |||||
</y:PolyLineEdge> | |||||
</data> | |||||
</edge> | |||||
</graph> | |||||
<data key="d7"> | |||||
<y:Resources/> | |||||
</data> | |||||
</graphml> |
@@ -33,7 +33,7 @@ | |||||
<PackageName Value="LCL"/> | <PackageName Value="LCL"/> | ||||
</Item1> | </Item1> | ||||
</RequiredPackages> | </RequiredPackages> | ||||
<Units Count="8"> | |||||
<Units Count="11"> | |||||
<Unit0> | <Unit0> | ||||
<Filename Value="triangle.lpr"/> | <Filename Value="triangle.lpr"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
@@ -69,6 +69,18 @@ | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | <Filename Value="..\utils\uvkuDevice.pas"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
</Unit7> | </Unit7> | ||||
<Unit8> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<IsPartOfProject Value="True"/> | |||||
</Unit8> | |||||
<Unit9> | |||||
<Filename Value="..\utils\uvkuPhysicalDeviceFactory.pas"/> | |||||
<IsPartOfProject Value="True"/> | |||||
</Unit9> | |||||
<Unit10> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<IsPartOfProject Value="True"/> | |||||
</Unit10> | |||||
</Units> | </Units> | ||||
</ProjectOptions> | </ProjectOptions> | ||||
<CompilerOptions> | <CompilerOptions> | ||||
@@ -7,7 +7,8 @@ uses | |||||
{$IFDEF UNIX}{$IFDEF UseCThreads} | {$IFDEF UNIX}{$IFDEF UseCThreads} | ||||
cthreads, | cthreads, | ||||
{$ENDIF}{$ENDIF} | {$ENDIF}{$ENDIF} | ||||
Interfaces, Dialogs, Forms, uMainForm, Vulkan, uvkuDevice; | |||||
Interfaces, Dialogs, Forms, uMainForm, Vulkan, uvkuDevice, uvkuDeviceFactory, uvkuPhysicalDeviceFactory, | |||||
uvkuAllocationHandler; | |||||
{$R *.res} | {$R *.res} | ||||
@@ -4,14 +4,13 @@ | |||||
<PathDelim Value="\"/> | <PathDelim Value="\"/> | ||||
<Version Value="9"/> | <Version Value="9"/> | ||||
<BuildModes Active="Default"/> | <BuildModes Active="Default"/> | ||||
<Units Count="13"> | |||||
<Units Count="16"> | |||||
<Unit0> | <Unit0> | ||||
<Filename Value="triangle.lpr"/> | <Filename Value="triangle.lpr"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
<EditorIndex Value="1"/> | |||||
<CursorPos X="60" Y="10"/> | |||||
<UsageCount Value="34"/> | |||||
<Loaded Value="True"/> | |||||
<EditorIndex Value="-1"/> | |||||
<CursorPos X="44" Y="22"/> | |||||
<UsageCount Value="40"/> | |||||
</Unit0> | </Unit0> | ||||
<Unit1> | <Unit1> | ||||
<Filename Value="uMainForm.pas"/> | <Filename Value="uMainForm.pas"/> | ||||
@@ -19,63 +18,65 @@ | |||||
<ComponentName Value="MainForm"/> | <ComponentName Value="MainForm"/> | ||||
<HasResources Value="True"/> | <HasResources Value="True"/> | ||||
<ResourceBaseClass Value="Form"/> | <ResourceBaseClass Value="Form"/> | ||||
<TopLine Value="6"/> | |||||
<CursorPos X="44" Y="9"/> | |||||
<UsageCount Value="34"/> | |||||
<EditorIndex Value="3"/> | |||||
<TopLine Value="72"/> | |||||
<CursorPos X="41" Y="98"/> | |||||
<UsageCount Value="40"/> | |||||
<Loaded Value="True"/> | <Loaded Value="True"/> | ||||
<LoadedDesigner Value="True"/> | |||||
</Unit1> | </Unit1> | ||||
<Unit2> | <Unit2> | ||||
<Filename Value="..\Vulkan.pas"/> | <Filename Value="..\Vulkan.pas"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
<EditorIndex Value="7"/> | |||||
<CursorPos X="33" Y="1694"/> | |||||
<UsageCount Value="34"/> | |||||
<EditorIndex Value="2"/> | |||||
<WindowIndex Value="1"/> | |||||
<TopLine Value="1634"/> | |||||
<CursorPos X="27" Y="1645"/> | |||||
<UsageCount Value="40"/> | |||||
<Loaded Value="True"/> | <Loaded Value="True"/> | ||||
</Unit2> | </Unit2> | ||||
<Unit3> | <Unit3> | ||||
<Filename Value="..\utils\uvkuInstance.pas"/> | <Filename Value="..\utils\uvkuInstance.pas"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
<EditorIndex Value="4"/> | |||||
<TopLine Value="3"/> | |||||
<CursorPos X="44" Y="18"/> | |||||
<UsageCount Value="32"/> | |||||
<IsVisibleTab Value="True"/> | |||||
<WindowIndex Value="1"/> | |||||
<TopLine Value="42"/> | |||||
<CursorPos X="5" Y="57"/> | |||||
<UsageCount Value="38"/> | |||||
<Loaded Value="True"/> | <Loaded Value="True"/> | ||||
</Unit3> | </Unit3> | ||||
<Unit4> | <Unit4> | ||||
<Filename Value="..\utils\uvkuUtils.pas"/> | <Filename Value="..\utils\uvkuUtils.pas"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
<EditorIndex Value="9"/> | |||||
<EditorIndex Value="-1"/> | |||||
<TopLine Value="28"/> | <TopLine Value="28"/> | ||||
<CursorPos Y="40"/> | <CursorPos Y="40"/> | ||||
<UsageCount Value="29"/> | |||||
<Loaded Value="True"/> | |||||
<UsageCount Value="35"/> | |||||
</Unit4> | </Unit4> | ||||
<Unit5> | <Unit5> | ||||
<Filename Value="..\utils\uvkuInstanceFactory.pas"/> | <Filename Value="..\utils\uvkuInstanceFactory.pas"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
<IsVisibleTab Value="True"/> | |||||
<EditorIndex Value="2"/> | |||||
<TopLine Value="170"/> | |||||
<CursorPos Y="186"/> | |||||
<UsageCount Value="26"/> | |||||
<EditorIndex Value="1"/> | |||||
<WindowIndex Value="1"/> | |||||
<TopLine Value="123"/> | |||||
<CursorPos X="3" Y="126"/> | |||||
<UsageCount Value="32"/> | |||||
<Loaded Value="True"/> | <Loaded Value="True"/> | ||||
</Unit5> | </Unit5> | ||||
<Unit6> | <Unit6> | ||||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | <Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
<EditorIndex Value="5"/> | |||||
<CursorPos X="32" Y="38"/> | |||||
<UsageCount Value="26"/> | |||||
<EditorIndex Value="4"/> | |||||
<TopLine Value="42"/> | |||||
<CursorPos X="14" Y="18"/> | |||||
<UsageCount Value="32"/> | |||||
<Loaded Value="True"/> | <Loaded Value="True"/> | ||||
</Unit6> | </Unit6> | ||||
<Unit7> | <Unit7> | ||||
<Filename Value="..\..\data\Vulkan.tpl"/> | <Filename Value="..\..\data\Vulkan.tpl"/> | ||||
<EditorIndex Value="3"/> | |||||
<EditorIndex Value="-1"/> | |||||
<TopLine Value="44"/> | <TopLine Value="44"/> | ||||
<CursorPos X="27" Y="22"/> | <CursorPos X="27" Y="22"/> | ||||
<UsageCount Value="15"/> | |||||
<Loaded Value="True"/> | |||||
<UsageCount Value="14"/> | |||||
<DefaultSyntaxHighlighter Value="None"/> | <DefaultSyntaxHighlighter Value="None"/> | ||||
</Unit7> | </Unit7> | ||||
<Unit8> | <Unit8> | ||||
@@ -84,108 +85,180 @@ | |||||
<EditorIndex Value="-1"/> | <EditorIndex Value="-1"/> | ||||
<TopLine Value="72"/> | <TopLine Value="72"/> | ||||
<CursorPos X="14" Y="86"/> | <CursorPos X="14" Y="86"/> | ||||
<UsageCount Value="10"/> | |||||
<UsageCount Value="9"/> | |||||
</Unit8> | </Unit8> | ||||
<Unit9> | <Unit9> | ||||
<Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\inc\objpash.inc"/> | <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\inc\objpash.inc"/> | ||||
<EditorIndex Value="-1"/> | <EditorIndex Value="-1"/> | ||||
<TopLine Value="213"/> | <TopLine Value="213"/> | ||||
<CursorPos X="21" Y="224"/> | <CursorPos X="21" Y="224"/> | ||||
<UsageCount Value="10"/> | |||||
<UsageCount Value="9"/> | |||||
</Unit9> | </Unit9> | ||||
<Unit10> | <Unit10> | ||||
<Filename Value="C:\Zusatzprogramme\Lazarus\lcl\include\customform.inc"/> | <Filename Value="C:\Zusatzprogramme\Lazarus\lcl\include\customform.inc"/> | ||||
<EditorIndex Value="-1"/> | <EditorIndex Value="-1"/> | ||||
<TopLine Value="138"/> | <TopLine Value="138"/> | ||||
<CursorPos Y="154"/> | <CursorPos Y="154"/> | ||||
<UsageCount Value="10"/> | |||||
<UsageCount Value="9"/> | |||||
</Unit10> | </Unit10> | ||||
<Unit11> | <Unit11> | ||||
<Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\objpas\sysutils\sysstrh.inc"/> | <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\objpas\sysutils\sysstrh.inc"/> | ||||
<EditorIndex Value="8"/> | |||||
<EditorIndex Value="-1"/> | |||||
<TopLine Value="96"/> | <TopLine Value="96"/> | ||||
<CursorPos X="10" Y="112"/> | <CursorPos X="10" Y="112"/> | ||||
<UsageCount Value="11"/> | |||||
<Loaded Value="True"/> | |||||
<UsageCount Value="10"/> | |||||
</Unit11> | </Unit11> | ||||
<Unit12> | <Unit12> | ||||
<Filename Value="..\utils\uvkuDevice.pas"/> | <Filename Value="..\utils\uvkuDevice.pas"/> | ||||
<IsPartOfProject Value="True"/> | <IsPartOfProject Value="True"/> | ||||
<EditorIndex Value="6"/> | |||||
<TopLine Value="8"/> | |||||
<CursorPos X="29" Y="31"/> | |||||
<UsageCount Value="22"/> | |||||
<IsVisibleTab Value="True"/> | |||||
<CursorPos X="35" Y="14"/> | |||||
<UsageCount Value="28"/> | |||||
<Loaded Value="True"/> | <Loaded Value="True"/> | ||||
</Unit12> | </Unit12> | ||||
<Unit13> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<IsPartOfProject Value="True"/> | |||||
<EditorIndex Value="1"/> | |||||
<TopLine Value="17"/> | |||||
<CursorPos X="38" Y="223"/> | |||||
<UsageCount Value="26"/> | |||||
<Loaded Value="True"/> | |||||
</Unit13> | |||||
<Unit14> | |||||
<Filename Value="..\utils\uvkuPhysicalDeviceFactory.pas"/> | |||||
<IsPartOfProject Value="True"/> | |||||
<EditorIndex Value="-1"/> | |||||
<CursorPos Y="16"/> | |||||
<UsageCount Value="26"/> | |||||
</Unit14> | |||||
<Unit15> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<IsPartOfProject Value="True"/> | |||||
<EditorIndex Value="2"/> | |||||
<TopLine Value="73"/> | |||||
<CursorPos Y="100"/> | |||||
<UsageCount Value="22"/> | |||||
<Loaded Value="True"/> | |||||
</Unit15> | |||||
</Units> | </Units> | ||||
<JumpHistory Count="14" HistoryIndex="13"> | |||||
<JumpHistory Count="29" HistoryIndex="28"> | |||||
<Position1> | <Position1> | ||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="83" Column="19" TopLine="64"/> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<Caret Line="94" TopLine="73"/> | |||||
</Position1> | </Position1> | ||||
<Position2> | <Position2> | ||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="84" Column="16" TopLine="64"/> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<Caret Line="95" TopLine="73"/> | |||||
</Position2> | </Position2> | ||||
<Position3> | <Position3> | ||||
<Filename Value="triangle.lpr"/> | |||||
<Caret Line="10" Column="40"/> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<Caret Line="96" TopLine="73"/> | |||||
</Position3> | </Position3> | ||||
<Position4> | <Position4> | ||||
<Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||||
<Caret Line="136" TopLine="14"/> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<Caret Line="97" TopLine="73"/> | |||||
</Position4> | </Position4> | ||||
<Position5> | <Position5> | ||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="18" Column="23"/> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<Caret Line="98" TopLine="73"/> | |||||
</Position5> | </Position5> | ||||
<Position6> | <Position6> | ||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="31" Column="29" TopLine="8"/> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<Caret Line="99" TopLine="73"/> | |||||
</Position6> | </Position6> | ||||
<Position7> | <Position7> | ||||
<Filename Value="..\Vulkan.pas"/> | |||||
<Caret Line="1836" Column="25" TopLine="1817"/> | |||||
<Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||||
<Caret Line="100" TopLine="73"/> | |||||
</Position7> | </Position7> | ||||
<Position8> | <Position8> | ||||
<Filename Value="..\utils\uvkuInstance.pas"/> | |||||
<Caret Line="13" Column="27" TopLine="6"/> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="67" TopLine="52"/> | |||||
</Position8> | </Position8> | ||||
<Position9> | <Position9> | ||||
<Filename Value="..\utils\uvkuInstance.pas"/> | |||||
<Caret Line="29" Column="87" TopLine="17"/> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="72" TopLine="52"/> | |||||
</Position9> | </Position9> | ||||
<Position10> | <Position10> | ||||
<Filename Value="..\utils\uvkuInstance.pas"/> | |||||
<Caret Line="84" Column="29" TopLine="65"/> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="69" TopLine="52"/> | |||||
</Position10> | </Position10> | ||||
<Position11> | <Position11> | ||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="9" Column="56"/> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="70" TopLine="52"/> | |||||
</Position11> | </Position11> | ||||
<Position12> | <Position12> | ||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="73" Column="26" TopLine="56"/> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="71" TopLine="52"/> | |||||
</Position12> | </Position12> | ||||
<Position13> | <Position13> | ||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="25" Column="28" TopLine="10"/> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="47" TopLine="35"/> | |||||
</Position13> | </Position13> | ||||
<Position14> | <Position14> | ||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="9" Column="44" TopLine="6"/> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="48" TopLine="35"/> | |||||
</Position14> | </Position14> | ||||
<Position15> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="49" TopLine="35"/> | |||||
</Position15> | |||||
<Position16> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="51" TopLine="35"/> | |||||
</Position16> | |||||
<Position17> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="52" TopLine="35"/> | |||||
</Position17> | |||||
<Position18> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="58" Column="27" TopLine="35"/> | |||||
</Position18> | |||||
<Position19> | |||||
<Filename Value="..\utils\uvkuDevice.pas"/> | |||||
<Caret Line="72" TopLine="57"/> | |||||
</Position19> | |||||
<Position20> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<Caret Line="77" TopLine="55"/> | |||||
</Position20> | |||||
<Position21> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<Caret Line="150" TopLine="136"/> | |||||
</Position21> | |||||
<Position22> | |||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="91" TopLine="69"/> | |||||
</Position22> | |||||
<Position23> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<Caret Line="56" Column="48" TopLine="37"/> | |||||
</Position23> | |||||
<Position24> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<Caret Line="149" Column="47" TopLine="133"/> | |||||
</Position24> | |||||
<Position25> | |||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="92" Column="38" TopLine="77"/> | |||||
</Position25> | |||||
<Position26> | |||||
<Filename Value="uMainForm.pas"/> | |||||
<Caret Line="91" Column="25" TopLine="74"/> | |||||
</Position26> | |||||
<Position27> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<Caret Line="183" Column="31" TopLine="172"/> | |||||
</Position27> | |||||
<Position28> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<Caret Line="184" Column="66" TopLine="170"/> | |||||
</Position28> | |||||
<Position29> | |||||
<Filename Value="..\utils\uvkuDeviceFactory.pas"/> | |||||
<Caret Line="151" Column="32" TopLine="134"/> | |||||
</Position29> | |||||
</JumpHistory> | </JumpHistory> | ||||
</ProjectSession> | </ProjectSession> | ||||
<Debugging> | |||||
<BreakPoints Count="1"> | |||||
<Item1> | |||||
<Kind Value="bpkSource"/> | |||||
<WatchScope Value="wpsLocal"/> | |||||
<WatchKind Value="wpkWrite"/> | |||||
<Source Value="..\utils\uvkuInstanceFactory.pas"/> | |||||
<Line Value="186"/> | |||||
</Item1> | |||||
</BreakPoints> | |||||
</Debugging> | |||||
</CONFIG> | </CONFIG> |
@@ -6,7 +6,7 @@ interface | |||||
uses | uses | ||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, | ||||
Vulkan, uvkuInstance, uvkuInstanceFactory, uvkuPhysicalDevice, uvkuUtils; | |||||
Vulkan, uvkuInstance, uvkuInstanceFactory, uvkuPhysicalDevice, uvkuUtils, uvkuAllocationHandler, uvkuDevice, uvkuDeviceFactory; | |||||
type | type | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
@@ -22,7 +22,9 @@ type | |||||
procedure FormCreate(Sender: TObject); | procedure FormCreate(Sender: TObject); | ||||
procedure FormDestroy(Sender: TObject); | procedure FormDestroy(Sender: TObject); | ||||
private | private | ||||
fAllocHandler: TCustomAllocHandler; | |||||
fInstance: TvkuInstance; | fInstance: TvkuInstance; | ||||
fDevice: TvkuDevice; | |||||
public | public | ||||
{ public declarations } | { public declarations } | ||||
end; | end; | ||||
@@ -64,22 +66,49 @@ end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
procedure TMainForm.FormCreate(Sender: TObject); | procedure TMainForm.FormCreate(Sender: TObject); | ||||
var | var | ||||
i: Integer; | |||||
PhyDevices: TvkuPhysicalDeviceArr; | |||||
QueueFamProps: TVkQueueFamilyPropertiesArr; | |||||
iFactory: TvkuInstanceFactory; | iFactory: TvkuInstanceFactory; | ||||
dFactory: TvkuDeviceFactory; | |||||
qci: TvkuQueueCreateInfo; | |||||
begin | begin | ||||
fAllocHandler := TCustomAllocHandler.Create; | |||||
WriteLn('create vulkan instance'); | WriteLn('create vulkan instance'); | ||||
iFactory := TvkuInstanceFactory.Create; | iFactory := TvkuInstanceFactory.Create; | ||||
try | try | ||||
fInstance := iFactory.CreateInstance(TCustomAllocHandler.Create, true); | |||||
fInstance := iFactory.CreateInstance(fAllocHandler, false); | |||||
finally | finally | ||||
FreeAndNil(iFactory); | FreeAndNil(iFactory); | ||||
end; | end; | ||||
PhyDevices := fInstance.GetPhysicalDevices; | |||||
if (Length(PhyDevices) <= 0) then | |||||
raise Exception.Create('unable to get physical device'); | |||||
WriteLn('create vulkan device'); | |||||
dFactory := TvkuDeviceFactory.Create; | |||||
try | |||||
SetLength(qci.Priorities, 1); | |||||
qci.Priorities[0] := 1.0; | |||||
qci.FamilyIndex := 0; | |||||
qci.Flags := 0; | |||||
dFactory.QueueCreateInfoCount := 1; | |||||
dFactory.QueueCreateInfo[0] := qci; | |||||
fDevice := dFactory.CreateDevice(PhyDevices[0], fAllocHandler, false); | |||||
finally | |||||
FreeAndNil(dFactory); | |||||
end; | |||||
end; | end; | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
procedure TMainForm.FormDestroy(Sender: TObject); | procedure TMainForm.FormDestroy(Sender: TObject); | ||||
begin | begin | ||||
FreeAndNil(fDevice); | |||||
FreeAndNil(fInstance); | FreeAndNil(fInstance); | ||||
FreeAndNil(fAllocHandler); | |||||
end; | end; | ||||
end. | end. | ||||
@@ -0,0 +1,103 @@ | |||||
unit uvkuAllocationHandler; | |||||
{$mode objfpc}{$H+} | |||||
interface | |||||
uses | |||||
Classes, SysUtils, | |||||
Vulkan; | |||||
type | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
TvkuAllocationHandler = class(TObject) | |||||
protected | |||||
function AllocateMemory(const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; virtual; | |||||
function ReallocateMemory(const aOriginal: PVkVoid; const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; virtual; | |||||
procedure FreeMemory(const aMemory: PVkVoid); virtual; | |||||
procedure InternalAllocationNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||||
procedure InternalFreeNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||||
public | |||||
function GetAllocationCallbacks: TVkAllocationCallbacks; | |||||
end; | |||||
implementation | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function AllocateMemoryCallback(aUserData: PVkVoid; aSize: VkSize; aAlignment: VkSize; aScope: TVkSystemAllocationScope): PVkVoid; stdcall; | |||||
begin | |||||
result := TvkuAllocationHandler(aUserData).AllocateMemory(aSize, aAlignment, aScope); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function ReallocateMemoryCallback(aUserData: PVkVoid; aOriginal: PVkVoid; aSize: VkSize; | |||||
aAlignment: VkSize; aScope: TVkSystemAllocationScope): PVkVoid; stdcall; | |||||
begin | |||||
result := TvkuAllocationHandler(aUserData).ReallocateMemory(aOriginal, aSize, aAlignment, aScope); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure FreeMemoryCallback(aUserData: PVkVoid; aMemory: PVkVoid); stdcall; | |||||
begin | |||||
TvkuAllocationHandler(aUserData).FreeMemory(aMemory); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure InternalAllocationCallback(aUserData: PVkVoid; aSize: VkSize; aType: TVkInternalAllocationType; aScope: TVkSystemAllocationScope); stdcall; | |||||
begin | |||||
TvkuAllocationHandler(aUserData).InternalAllocationNotification(aSize, aType, aScope); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure InternalFreeCallback(aUserData: PVkVoid; aSize: VkSize; aType: TVkInternalAllocationType; aScope: TVkSystemAllocationScope); stdcall; | |||||
begin | |||||
TvkuAllocationHandler(aUserData).InternalFreeNotification(aSize, aType, aScope); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
//TvkuAllocationHandler////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuAllocationHandler.AllocateMemory(const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; | |||||
begin | |||||
result := System.GetMemory(aSize); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuAllocationHandler.ReallocateMemory(const aOriginal: PVkVoid; const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; | |||||
begin | |||||
result := System.ReAllocMemory(aOriginal, aSize); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure TvkuAllocationHandler.FreeMemory(const aMemory: PVkVoid); | |||||
begin | |||||
System.FreeMemory(aMemory); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure TvkuAllocationHandler.InternalAllocationNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||||
begin | |||||
// DUMMY | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure TvkuAllocationHandler.InternalFreeNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||||
begin | |||||
// DUMMY | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuAllocationHandler.GetAllocationCallbacks: TVkAllocationCallbacks; | |||||
begin | |||||
FillByte(result, SizeOf(result), 0); | |||||
result.pUserData := self; | |||||
result.pfnAllocation := @AllocateMemoryCallback; | |||||
result.pfnReallocation := @ReallocateMemoryCallback; | |||||
result.pfnFree := @FreeMemoryCallback; | |||||
result.pfnInternalAllocation := @InternalAllocationCallback; | |||||
result.pfnInternalFree := @InternalFreeCallback; | |||||
end; | |||||
end. | |||||
@@ -13,28 +13,75 @@ type | |||||
TvkuDevice = class(TObject) | TvkuDevice = class(TObject) | ||||
private | private | ||||
fHandle: VkDevice; | fHandle: VkDevice; | ||||
fPhysicalDevice: VkPhysicalDevice; | |||||
fAllocCallbacks: PVkAllocationCallbacks; | |||||
procedure CreateHandle( | |||||
const aCreateInfo: PVkDeviceCreateInfo; | |||||
const aAllocCallbacks: PVkAllocationCallbacks); | |||||
public | public | ||||
property Handle: VkDevice read fHandle; | |||||
property Handle: VkDevice read fHandle; | |||||
property PhysicalDevice: VkPhysicalDevice read fPhysicalDevice; | |||||
constructor Create(const aPhysicalDevice: VkDevice); | |||||
constructor Create( | |||||
const aPhysicalDevice: VkPhysicalDevice; | |||||
const aCreateInfo: TVkDeviceCreateInfo); | |||||
constructor Create( | |||||
const aPhysicalDevice: VkPhysicalDevice; | |||||
const aCreateInfo: TVkDeviceCreateInfo; | |||||
const aAllocCallbacks: TVkAllocationCallbacks); | |||||
destructor Destroy; override; | destructor Destroy; override; | ||||
end; | end; | ||||
implementation | implementation | ||||
uses | |||||
uvkuUtils; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
//TvkuDevice///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | //TvkuDevice///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
constructor TvkuDevice.Create(const aPhysicalDevice: VkDevice); | |||||
var | |||||
info: TVkDeviceCreateInfo; | |||||
procedure TvkuDevice.CreateHandle(const aCreateInfo: PVkDeviceCreateInfo; const aAllocCallbacks: PVkAllocationCallbacks); | |||||
var err: TVkResult; | |||||
begin | |||||
if Assigned(aAllocCallbacks) then begin | |||||
new(fAllocCallbacks); | |||||
fAllocCallbacks^ := aAllocCallbacks^; | |||||
end; | |||||
err := vkCreateDevice(fPhysicalDevice, aCreateInfo, fAllocCallbacks, @fHandle); | |||||
if (err < VK_SUCCESS) then | |||||
raise TvkuErrorException.Create('unable to create device', err); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
constructor TvkuDevice.Create(const aPhysicalDevice: VkPhysicalDevice; const aCreateInfo: TVkDeviceCreateInfo); | |||||
begin | begin | ||||
inherited Create; | inherited Create; | ||||
fHandle := nil; | |||||
fPhysicalDevice := aPhysicalDevice; | |||||
CreateHandle(@aCreateInfo, nil); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
constructor TvkuDevice.Create(const aPhysicalDevice: VkPhysicalDevice; const aCreateInfo: TVkDeviceCreateInfo; const aAllocCallbacks: TVkAllocationCallbacks); | |||||
begin | |||||
inherited Create; | |||||
fHandle := nil; | |||||
fPhysicalDevice := aPhysicalDevice; | |||||
CreateHandle(@aCreateInfo, @aAllocCallbacks); | |||||
end; | end; | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
destructor TvkuDevice.Destroy; | destructor TvkuDevice.Destroy; | ||||
begin | begin | ||||
if Assigned(fHandle) then begin | |||||
vkDestroyDevice(fHandle, fAllocCallbacks); | |||||
fHandle := nil; | |||||
end; | |||||
if Assigned(fAllocCallbacks) then begin | |||||
Dispose(fAllocCallbacks); | |||||
fAllocCallbacks := nil; | |||||
end; | |||||
inherited Destroy; | inherited Destroy; | ||||
end; | end; | ||||
@@ -0,0 +1,242 @@ | |||||
unit uvkuDeviceFactory; | |||||
{$mode objfpc}{$H+} | |||||
interface | |||||
uses | |||||
Classes, SysUtils, | |||||
Vulkan, uvkuDevice, uvkuAllocationHandler; | |||||
type | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
TvkuQueuePriorityArr = array of VkFloat; | |||||
TvkuQueueCreateInfo = packed record | |||||
Flags: VkDeviceQueueCreateFlags; | |||||
FamilyIndex: VkUint32; | |||||
Priorities: TvkuQueuePriorityArr; | |||||
end; | |||||
TvkuQueueCreateInfoArr = array of TvkuQueueCreateInfo; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
TvkuDeviceEx = class(TvkuDevice) | |||||
private | |||||
fAllocHandler: TvkuAllocationHandler; | |||||
fOwnsHandler: Boolean; | |||||
public | |||||
constructor Create( | |||||
const aPhysicalDevice: VkPhysicalDevice; | |||||
const aCreateInfo: TVkDeviceCreateInfo); | |||||
constructor Create( | |||||
const aPhysicalDevice: VkPhysicalDevice; | |||||
const aCreateInfo: TVkDeviceCreateInfo; | |||||
const aAllocHandler: TvkuAllocationHandler; | |||||
const aOwnsHandler: Boolean); | |||||
destructor Destroy; override; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
TvkuDeviceFactory = class(TObject) | |||||
private | |||||
fFeatures: TVkPhysicalDeviceFeatures; | |||||
fFlags: VkDeviceCreateFlags; | |||||
fLayers: TStringList; | |||||
fExtensions: TStringList; | |||||
fQueueCreateInfos: TvkuQueueCreateInfoArr; | |||||
function GetLayers: TStrings; | |||||
function GetExtensions: TStrings; | |||||
function GetQueueCreateInfoCount: Integer; | |||||
function GetQueueCreateInfo(const aIndex: Integer): TvkuQueueCreateInfo; | |||||
function GetQueueCreateInfos: TvkuQueueCreateInfoArr; | |||||
procedure SetQueueCreateInfoCount(aValue: Integer); | |||||
procedure SetQueueCreateInfo(const aIndex: Integer; aValue: TvkuQueueCreateInfo); | |||||
procedure SetQueueCreateInfos(aValue: TvkuQueueCreateInfoArr); | |||||
public | |||||
property Flags: VkDeviceCreateFlags read fFlags write fFlags; | |||||
property EnabledLayers: TStrings read GetLayers; | |||||
property EnabledExtensions: TStrings read GetExtensions; | |||||
property EnabledFeatures: TVkPhysicalDeviceFeatures read fFeatures; | |||||
property QueueCreateInfos: TvkuQueueCreateInfoArr read GetQueueCreateInfos write SetQueueCreateInfos; | |||||
property QueueCreateInfoCount: Integer read GetQueueCreateInfoCount write SetQueueCreateInfoCount; | |||||
property QueueCreateInfo[const aIndex: Integer]: TvkuQueueCreateInfo read GetQueueCreateInfo write SetQueueCreateInfo; | |||||
function CreateDevice( | |||||
const aPhysicalDevice: VkPhysicalDevice): TvkuDevice; | |||||
function CreateDevice( | |||||
const aPhysicalDevice: VkPhysicalDevice; | |||||
const aAllocHandler: TvkuAllocationHandler; | |||||
const aOwnsHandler: Boolean): TvkuDevice; | |||||
constructor Create; | |||||
destructor Destroy; override; | |||||
end; | |||||
implementation | |||||
uses | |||||
uvkuUtils; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
//TvkuDeviceEx/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
constructor TvkuDeviceEx.Create(const aPhysicalDevice: VkPhysicalDevice; const aCreateInfo: TVkDeviceCreateInfo); | |||||
begin | |||||
inherited Create(aPhysicalDevice, aCreateInfo); | |||||
fAllocHandler := nil; | |||||
fOwnsHandler := false; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
constructor TvkuDeviceEx.Create(const aPhysicalDevice: VkPhysicalDevice; const aCreateInfo: TVkDeviceCreateInfo; | |||||
const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean); | |||||
begin | |||||
fAllocHandler := aAllocHandler; | |||||
fOwnsHandler := aOwnsHandler; | |||||
if Assigned(fAllocHandler) | |||||
then inherited Create(aPhysicalDevice, aCreateInfo, fAllocHandler.GetAllocationCallbacks) | |||||
else inherited Create(aPhysicalDevice, aCreateInfo); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
destructor TvkuDeviceEx.Destroy; | |||||
begin | |||||
inherited Destroy; | |||||
if fOwnsHandler then | |||||
FreeAndNil(fAllocHandler); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
//TvkuDeviceFactory////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuDeviceFactory.GetLayers: TStrings; | |||||
begin | |||||
result := fLayers; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuDeviceFactory.GetExtensions: TStrings; | |||||
begin | |||||
result := fExtensions; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuDeviceFactory.GetQueueCreateInfoCount: Integer; | |||||
begin | |||||
result := Length(fQueueCreateInfos); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuDeviceFactory.GetQueueCreateInfo(const aIndex: Integer): TvkuQueueCreateInfo; | |||||
begin | |||||
if (aIndex < low(fQueueCreateInfos)) or (aIndex > high(fQueueCreateInfos)) then | |||||
raise TvkuException.CreateFmt('index (%d) out of range (%d : %d)', [aIndex, Low(fQueueCreateInfos), High(fQueueCreateInfos)]); | |||||
result := fQueueCreateInfos[aIndex]; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuDeviceFactory.GetQueueCreateInfos: TvkuQueueCreateInfoArr; | |||||
begin | |||||
result := fQueueCreateInfos; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure TvkuDeviceFactory.SetQueueCreateInfoCount(aValue: Integer); | |||||
begin | |||||
if (aValue < 0) then | |||||
aValue := 0; | |||||
SetLength(fQueueCreateInfos, aValue); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure TvkuDeviceFactory.SetQueueCreateInfo(const aIndex: Integer; aValue: TvkuQueueCreateInfo); | |||||
begin | |||||
if (aIndex < low(fQueueCreateInfos)) or (aIndex > high(fQueueCreateInfos)) then | |||||
raise TvkuException.CreateFmt('index (%d) out of range (%d : %d)', [aIndex, Low(fQueueCreateInfos), High(fQueueCreateInfos)]); | |||||
fQueueCreateInfos[aIndex] := aValue; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure TvkuDeviceFactory.SetQueueCreateInfos(aValue: TvkuQueueCreateInfoArr); | |||||
begin | |||||
fQueueCreateInfos := aValue; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuDeviceFactory.CreateDevice(const aPhysicalDevice: VkPhysicalDevice): TvkuDevice; | |||||
begin | |||||
result := CreateDevice(aPhysicalDevice, nil, false); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuDeviceFactory.CreateDevice(const aPhysicalDevice: VkPhysicalDevice; const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean): TvkuDevice; | |||||
var | |||||
CreateInfo: TVkDeviceCreateInfo; | |||||
QueueInfos: array of TVkDeviceQueueCreateInfo; | |||||
lay: array of PVkChar; | |||||
ext: array of PVkChar; | |||||
i: Integer; | |||||
prio: VkFloat; | |||||
err: TVkResult; | |||||
begin | |||||
if (Length(fQueueCreateInfos) <= 0) then | |||||
raise TvkuException.Create('no queue create infos assigned'); | |||||
SetLength(lay, fLayers.Count); | |||||
for i := 0 to fLayers.Count-1 do | |||||
lay[i] := PVkChar(fLayers[i]); | |||||
SetLength(ext, fExtensions.Count); | |||||
for i := 0 to fExtensions.Count-1 do | |||||
ext[i] := PVkChar(fExtensions[i]); | |||||
SetLength(QueueInfos, Length(fQueueCreateInfos)); | |||||
for i := 0 to high(fQueueCreateInfos) do begin | |||||
FillByte(QueueInfos[i], SizeOf(QueueInfos[0]), 0); | |||||
QueueInfos[i].sType := VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; | |||||
QueueInfos[i].pNext := nil; | |||||
QueueInfos[i].flags := fQueueCreateInfos[i].Flags; | |||||
QueueInfos[i].queueFamilyIndex := fQueueCreateInfos[i].FamilyIndex; | |||||
QueueInfos[i].queueCount := Length(fQueueCreateInfos[i].Priorities); | |||||
if (QueueInfos[i].queueCount > 0) | |||||
then QueueInfos[i].pQueuePriorities := @fQueueCreateInfos[i].Priorities[0] | |||||
else QueueInfos[i].pQueuePriorities := nil; | |||||
end; | |||||
FillByte(CreateInfo, SizeOf(CreateInfo), 0); | |||||
CreateInfo.sType := VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; | |||||
CreateInfo.pNext := nil; | |||||
CreateInfo.flags := fFlags; | |||||
CreateInfo.queueCreateInfoCount := Length(QueueInfos); | |||||
CreateInfo.pQueueCreateInfos := @QueueInfos[0]; | |||||
CreateInfo.enabledLayerCount := Length(lay); | |||||
CreateInfo.ppEnabledLayerNames := @lay[0]; | |||||
CreateInfo.enabledExtensionCount := Length(ext); | |||||
CreateInfo.ppEnabledExtensionNames := @ext[0]; | |||||
CreateInfo.pEnabledFeatures := @fFeatures; | |||||
result := TvkuDeviceEx.Create(aPhysicalDevice, CreateInfo, aAllocHandler, aOwnsHandler); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
constructor TvkuDeviceFactory.Create; | |||||
begin | |||||
inherited Create; | |||||
FillByte(fFeatures, SizeOf(fFeatures), 0); | |||||
fLayers := TStringList.Create; | |||||
fExtensions := TStringList.Create; | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
destructor TvkuDeviceFactory.Destroy; | |||||
begin | |||||
FreeAndNil(fLayers); | |||||
FreeAndNil(fExtensions); | |||||
inherited Destroy; | |||||
end; | |||||
end. | |||||
@@ -21,7 +21,7 @@ type | |||||
function GetPhysicalDevice(const aIndex: Integer): VkPhysicalDevice; | function GetPhysicalDevice(const aIndex: Integer): VkPhysicalDevice; | ||||
procedure UpdatePhysicalDevices; | procedure UpdatePhysicalDevices; | ||||
protected | protected | ||||
procedure CreateHandle(aCreateInfo: PVkInstanceCreateInfo; aAllocCallbacks: PVkAllocationCallbacks); | |||||
procedure CreateHandle(const aCreateInfo: PVkInstanceCreateInfo; const aAllocCallbacks: PVkAllocationCallbacks); | |||||
constructor Create; | constructor Create; | ||||
public | public | ||||
property Handle: VkInstance read fHandle; | property Handle: VkInstance read fHandle; | ||||
@@ -85,7 +85,7 @@ begin | |||||
end; | end; | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
procedure TvkuInstance.CreateHandle(aCreateInfo: PVkInstanceCreateInfo; aAllocCallbacks: PVkAllocationCallbacks); | |||||
procedure TvkuInstance.CreateHandle(const aCreateInfo: PVkInstanceCreateInfo; const aAllocCallbacks: PVkAllocationCallbacks); | |||||
var e: TVkResult; | var e: TVkResult; | ||||
begin | begin | ||||
if Assigned(aAllocCallbacks) then begin | if Assigned(aAllocCallbacks) then begin | ||||
@@ -6,7 +6,7 @@ interface | |||||
uses | uses | ||||
Classes, SysUtils, | Classes, SysUtils, | ||||
Vulkan, uvkuInstance; | |||||
Vulkan, uvkuInstance, uvkuAllocationHandler; | |||||
type | type | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
@@ -19,28 +19,20 @@ type | |||||
end; | end; | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
TvkuAllocationHandler = class(TObject) | |||||
protected | |||||
function AllocateMemory(const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; virtual; | |||||
function ReallocateMemory(const aOriginal: PVkVoid; const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; virtual; | |||||
procedure FreeMemory(const aMemory: PVkVoid); virtual; | |||||
procedure InternalAllocationNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||||
procedure InternalFreeNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||||
TvkuInstanceEx = class(TvkuInstance) | |||||
private | |||||
fAllocHandler: TvkuAllocationHandler; | |||||
fOwnsHandler: Boolean; | |||||
public | |||||
constructor Create( | |||||
const aCreateInfo: TVkInstanceCreateInfo; | |||||
const aAllocHandler: TvkuAllocationHandler; | |||||
const aOwnsHandler: Boolean); | |||||
destructor Destroy; override; | |||||
end; | end; | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
TvkuInstanceFactory = class(TObject) | TvkuInstanceFactory = class(TObject) | ||||
private type | |||||
TvkuInstanceEx = class(TvkuInstance) | |||||
private | |||||
fAllocHandler: TvkuAllocationHandler; | |||||
fOwnsHandler: Boolean; | |||||
public | |||||
constructor Create(const aCreateInfo: TVkInstanceCreateInfo; const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean); | |||||
destructor Destroy; override; | |||||
end; | |||||
private | private | ||||
fFlags: VkInstanceCreateFlags; | fFlags: VkInstanceCreateFlags; | ||||
fApplicationInfo: TvkuApplicationInfo; | fApplicationInfo: TvkuApplicationInfo; | ||||
@@ -95,92 +87,19 @@ begin | |||||
end; | end; | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
//TvkuAllocationHandler////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuAllocationHandler.AllocateMemory(const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; | |||||
begin | |||||
result := System.GetMemory(aSize); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuAllocationHandler.ReallocateMemory(const aOriginal: PVkVoid; const aSize: VkSize; const aAlignment: VkSize; const aScope: TVkSystemAllocationScope): PVkVoid; | |||||
begin | |||||
result := System.ReAllocMemory(aOriginal, aSize); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure TvkuAllocationHandler.FreeMemory(const aMemory: PVkVoid); | |||||
begin | |||||
System.FreeMemory(aMemory); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure TvkuAllocationHandler.InternalAllocationNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||||
begin | |||||
// DUMMY | |||||
end; | |||||
//TvkuInstanceEx///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
procedure TvkuAllocationHandler.InternalFreeNotification(const aSize: VkSize; const aType: TVkInternalAllocationType; const aScope: TVkSystemAllocationScope); | |||||
begin | |||||
// DUMMY | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function AllocateMemoryCallback(aUserData: PVkVoid; aSize: VkSize; aAlignment: VkSize; aScope: TVkSystemAllocationScope): PVkVoid; stdcall; | |||||
begin | |||||
result := TvkuAllocationHandler(aUserData).AllocateMemory(aSize, aAlignment, aScope); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function ReallocateMemoryCallback(aUserData: PVkVoid; aOriginal: PVkVoid; aSize: VkSize; | |||||
aAlignment: VkSize; aScope: TVkSystemAllocationScope): PVkVoid; stdcall; | |||||
begin | |||||
result := TvkuAllocationHandler(aUserData).ReallocateMemory(aOriginal, aSize, aAlignment, aScope); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure FreeMemoryCallback(aUserData: PVkVoid; aMemory: PVkVoid); stdcall; | |||||
begin | |||||
TvkuAllocationHandler(aUserData).FreeMemory(aMemory); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure InternalAllocationCallback(aUserData: PVkVoid; aSize: VkSize; aType: TVkInternalAllocationType; aScope: TVkSystemAllocationScope); stdcall; | |||||
begin | |||||
TvkuAllocationHandler(aUserData).InternalAllocationNotification(aSize, aType, aScope); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
procedure InternalFreeCallback(aUserData: PVkVoid; aSize: VkSize; aType: TVkInternalAllocationType; aScope: TVkSystemAllocationScope); stdcall; | |||||
begin | |||||
TvkuAllocationHandler(aUserData).InternalFreeNotification(aSize, aType, aScope); | |||||
end; | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
//TvkuInstanceFactory.TvkuInstanceEx///////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
constructor TvkuInstanceFactory.TvkuInstanceEx.Create(const aCreateInfo: TVkInstanceCreateInfo; const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean); | |||||
var | |||||
AllocCallbacks: TVkAllocationCallbacks; | |||||
constructor TvkuInstanceEx.Create(const aCreateInfo: TVkInstanceCreateInfo; const aAllocHandler: TvkuAllocationHandler; const aOwnsHandler: Boolean); | |||||
begin | begin | ||||
fOwnsHandler := aOwnsHandler; | fOwnsHandler := aOwnsHandler; | ||||
fAllocHandler := aAllocHandler; | fAllocHandler := aAllocHandler; | ||||
if Assigned(fAllocHandler) then begin | |||||
FillByte(AllocCallbacks, SizeOf(AllocCallbacks), 0); | |||||
AllocCallbacks.pUserData := fAllocHandler; | |||||
AllocCallbacks.pfnAllocation := @AllocateMemoryCallback; | |||||
AllocCallbacks.pfnReallocation := @ReallocateMemoryCallback; | |||||
AllocCallbacks.pfnFree := @FreeMemoryCallback; | |||||
AllocCallbacks.pfnInternalAllocation := @InternalAllocationCallback; | |||||
AllocCallbacks.pfnInternalFree := @InternalFreeCallback; | |||||
inherited Create(aCreateInfo, AllocCallbacks); | |||||
end else | |||||
inherited Create(aCreateInfo); | |||||
if Assigned(fAllocHandler) | |||||
then inherited Create(aCreateInfo, fAllocHandler.GetAllocationCallbacks) | |||||
else inherited Create(aCreateInfo); | |||||
end; | end; | ||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
destructor TvkuInstanceFactory.TvkuInstanceEx.Destroy; | |||||
destructor TvkuInstanceEx.Destroy; | |||||
begin | begin | ||||
inherited Destroy; | inherited Destroy; | ||||
if fOwnsHandler then | if fOwnsHandler then | ||||
@@ -0,0 +1,29 @@ | |||||
unit uvkuPhysicalDeviceFactory; | |||||
{$mode objfpc}{$H+} | |||||
interface | |||||
uses | |||||
Classes, SysUtils, | |||||
Vulkan, uvkuPhysicalDevice; | |||||
type | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
TvkuPhysicalDeviceFactory = class(TObject) | |||||
public | |||||
function CreatePhysicalDevice(const aHandle: VkPhysicalDevice): TvkuPhysicalDevice; | |||||
end; | |||||
implementation | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
//TvkuPhysicalDeviceFactory////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||||
function TvkuPhysicalDeviceFactory.CreatePhysicalDevice(const aHandle: VkPhysicalDevice): TvkuPhysicalDevice; | |||||
begin | |||||
result := TvkuPhysicalDevice.Create(aHandle); | |||||
end; | |||||
end. | |||||