| @@ -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"/> | |||
| </Item1> | |||
| </RequiredPackages> | |||
| <Units Count="8"> | |||
| <Units Count="11"> | |||
| <Unit0> | |||
| <Filename Value="triangle.lpr"/> | |||
| <IsPartOfProject Value="True"/> | |||
| @@ -69,6 +69,18 @@ | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| </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> | |||
| </ProjectOptions> | |||
| <CompilerOptions> | |||
| @@ -7,7 +7,8 @@ uses | |||
| {$IFDEF UNIX}{$IFDEF UseCThreads} | |||
| cthreads, | |||
| {$ENDIF}{$ENDIF} | |||
| Interfaces, Dialogs, Forms, uMainForm, Vulkan, uvkuDevice; | |||
| Interfaces, Dialogs, Forms, uMainForm, Vulkan, uvkuDevice, uvkuDeviceFactory, uvkuPhysicalDeviceFactory, | |||
| uvkuAllocationHandler; | |||
| {$R *.res} | |||
| @@ -4,14 +4,13 @@ | |||
| <PathDelim Value="\"/> | |||
| <Version Value="9"/> | |||
| <BuildModes Active="Default"/> | |||
| <Units Count="13"> | |||
| <Units Count="16"> | |||
| <Unit0> | |||
| <Filename Value="triangle.lpr"/> | |||
| <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> | |||
| <Unit1> | |||
| <Filename Value="uMainForm.pas"/> | |||
| @@ -19,63 +18,65 @@ | |||
| <ComponentName Value="MainForm"/> | |||
| <HasResources Value="True"/> | |||
| <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"/> | |||
| <LoadedDesigner Value="True"/> | |||
| </Unit1> | |||
| <Unit2> | |||
| <Filename Value="..\Vulkan.pas"/> | |||
| <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"/> | |||
| </Unit2> | |||
| <Unit3> | |||
| <Filename Value="..\utils\uvkuInstance.pas"/> | |||
| <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"/> | |||
| </Unit3> | |||
| <Unit4> | |||
| <Filename Value="..\utils\uvkuUtils.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <EditorIndex Value="9"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="28"/> | |||
| <CursorPos Y="40"/> | |||
| <UsageCount Value="29"/> | |||
| <Loaded Value="True"/> | |||
| <UsageCount Value="35"/> | |||
| </Unit4> | |||
| <Unit5> | |||
| <Filename Value="..\utils\uvkuInstanceFactory.pas"/> | |||
| <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"/> | |||
| </Unit5> | |||
| <Unit6> | |||
| <Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
| <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"/> | |||
| </Unit6> | |||
| <Unit7> | |||
| <Filename Value="..\..\data\Vulkan.tpl"/> | |||
| <EditorIndex Value="3"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="44"/> | |||
| <CursorPos X="27" Y="22"/> | |||
| <UsageCount Value="15"/> | |||
| <Loaded Value="True"/> | |||
| <UsageCount Value="14"/> | |||
| <DefaultSyntaxHighlighter Value="None"/> | |||
| </Unit7> | |||
| <Unit8> | |||
| @@ -84,108 +85,180 @@ | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="72"/> | |||
| <CursorPos X="14" Y="86"/> | |||
| <UsageCount Value="10"/> | |||
| <UsageCount Value="9"/> | |||
| </Unit8> | |||
| <Unit9> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\inc\objpash.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="213"/> | |||
| <CursorPos X="21" Y="224"/> | |||
| <UsageCount Value="10"/> | |||
| <UsageCount Value="9"/> | |||
| </Unit9> | |||
| <Unit10> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\lcl\include\customform.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="138"/> | |||
| <CursorPos Y="154"/> | |||
| <UsageCount Value="10"/> | |||
| <UsageCount Value="9"/> | |||
| </Unit10> | |||
| <Unit11> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\3.1.1\source\rtl\objpas\sysutils\sysstrh.inc"/> | |||
| <EditorIndex Value="8"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="96"/> | |||
| <CursorPos X="10" Y="112"/> | |||
| <UsageCount Value="11"/> | |||
| <Loaded Value="True"/> | |||
| <UsageCount Value="10"/> | |||
| </Unit11> | |||
| <Unit12> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <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"/> | |||
| </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> | |||
| <JumpHistory Count="14" HistoryIndex="13"> | |||
| <JumpHistory Count="29" HistoryIndex="28"> | |||
| <Position1> | |||
| <Filename Value="uMainForm.pas"/> | |||
| <Caret Line="83" Column="19" TopLine="64"/> | |||
| <Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||
| <Caret Line="94" TopLine="73"/> | |||
| </Position1> | |||
| <Position2> | |||
| <Filename Value="uMainForm.pas"/> | |||
| <Caret Line="84" Column="16" TopLine="64"/> | |||
| <Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||
| <Caret Line="95" TopLine="73"/> | |||
| </Position2> | |||
| <Position3> | |||
| <Filename Value="triangle.lpr"/> | |||
| <Caret Line="10" Column="40"/> | |||
| <Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||
| <Caret Line="96" TopLine="73"/> | |||
| </Position3> | |||
| <Position4> | |||
| <Filename Value="..\utils\uvkuPhysicalDevice.pas"/> | |||
| <Caret Line="136" TopLine="14"/> | |||
| <Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||
| <Caret Line="97" TopLine="73"/> | |||
| </Position4> | |||
| <Position5> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="18" Column="23"/> | |||
| <Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||
| <Caret Line="98" TopLine="73"/> | |||
| </Position5> | |||
| <Position6> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="31" Column="29" TopLine="8"/> | |||
| <Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||
| <Caret Line="99" TopLine="73"/> | |||
| </Position6> | |||
| <Position7> | |||
| <Filename Value="..\Vulkan.pas"/> | |||
| <Caret Line="1836" Column="25" TopLine="1817"/> | |||
| <Filename Value="..\utils\uvkuAllocationHandler.pas"/> | |||
| <Caret Line="100" TopLine="73"/> | |||
| </Position7> | |||
| <Position8> | |||
| <Filename Value="..\utils\uvkuInstance.pas"/> | |||
| <Caret Line="13" Column="27" TopLine="6"/> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="67" TopLine="52"/> | |||
| </Position8> | |||
| <Position9> | |||
| <Filename Value="..\utils\uvkuInstance.pas"/> | |||
| <Caret Line="29" Column="87" TopLine="17"/> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="72" TopLine="52"/> | |||
| </Position9> | |||
| <Position10> | |||
| <Filename Value="..\utils\uvkuInstance.pas"/> | |||
| <Caret Line="84" Column="29" TopLine="65"/> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="69" TopLine="52"/> | |||
| </Position10> | |||
| <Position11> | |||
| <Filename Value="uMainForm.pas"/> | |||
| <Caret Line="9" Column="56"/> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="70" TopLine="52"/> | |||
| </Position11> | |||
| <Position12> | |||
| <Filename Value="uMainForm.pas"/> | |||
| <Caret Line="73" Column="26" TopLine="56"/> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="71" TopLine="52"/> | |||
| </Position12> | |||
| <Position13> | |||
| <Filename Value="uMainForm.pas"/> | |||
| <Caret Line="25" Column="28" TopLine="10"/> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="47" TopLine="35"/> | |||
| </Position13> | |||
| <Position14> | |||
| <Filename Value="uMainForm.pas"/> | |||
| <Caret Line="9" Column="44" TopLine="6"/> | |||
| <Filename Value="..\utils\uvkuDevice.pas"/> | |||
| <Caret Line="48" TopLine="35"/> | |||
| </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> | |||
| </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> | |||
| @@ -6,7 +6,7 @@ interface | |||
| uses | |||
| Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, | |||
| Vulkan, uvkuInstance, uvkuInstanceFactory, uvkuPhysicalDevice, uvkuUtils; | |||
| Vulkan, uvkuInstance, uvkuInstanceFactory, uvkuPhysicalDevice, uvkuUtils, uvkuAllocationHandler, uvkuDevice, uvkuDeviceFactory; | |||
| type | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| @@ -22,7 +22,9 @@ type | |||
| procedure FormCreate(Sender: TObject); | |||
| procedure FormDestroy(Sender: TObject); | |||
| private | |||
| fAllocHandler: TCustomAllocHandler; | |||
| fInstance: TvkuInstance; | |||
| fDevice: TvkuDevice; | |||
| public | |||
| { public declarations } | |||
| end; | |||
| @@ -64,22 +66,49 @@ end; | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TMainForm.FormCreate(Sender: TObject); | |||
| var | |||
| i: Integer; | |||
| PhyDevices: TvkuPhysicalDeviceArr; | |||
| QueueFamProps: TVkQueueFamilyPropertiesArr; | |||
| iFactory: TvkuInstanceFactory; | |||
| dFactory: TvkuDeviceFactory; | |||
| qci: TvkuQueueCreateInfo; | |||
| begin | |||
| fAllocHandler := TCustomAllocHandler.Create; | |||
| WriteLn('create vulkan instance'); | |||
| iFactory := TvkuInstanceFactory.Create; | |||
| try | |||
| fInstance := iFactory.CreateInstance(TCustomAllocHandler.Create, true); | |||
| fInstance := iFactory.CreateInstance(fAllocHandler, false); | |||
| finally | |||
| FreeAndNil(iFactory); | |||
| 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; | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TMainForm.FormDestroy(Sender: TObject); | |||
| begin | |||
| FreeAndNil(fDevice); | |||
| FreeAndNil(fInstance); | |||
| FreeAndNil(fAllocHandler); | |||
| 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) | |||
| private | |||
| fHandle: VkDevice; | |||
| fPhysicalDevice: VkPhysicalDevice; | |||
| fAllocCallbacks: PVkAllocationCallbacks; | |||
| procedure CreateHandle( | |||
| const aCreateInfo: PVkDeviceCreateInfo; | |||
| const aAllocCallbacks: PVkAllocationCallbacks); | |||
| 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; | |||
| end; | |||
| implementation | |||
| uses | |||
| uvkuUtils; | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| //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 | |||
| 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; | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| destructor TvkuDevice.Destroy; | |||
| begin | |||
| if Assigned(fHandle) then begin | |||
| vkDestroyDevice(fHandle, fAllocCallbacks); | |||
| fHandle := nil; | |||
| end; | |||
| if Assigned(fAllocCallbacks) then begin | |||
| Dispose(fAllocCallbacks); | |||
| fAllocCallbacks := nil; | |||
| end; | |||
| inherited Destroy; | |||
| 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; | |||
| procedure UpdatePhysicalDevices; | |||
| protected | |||
| procedure CreateHandle(aCreateInfo: PVkInstanceCreateInfo; aAllocCallbacks: PVkAllocationCallbacks); | |||
| procedure CreateHandle(const aCreateInfo: PVkInstanceCreateInfo; const aAllocCallbacks: PVkAllocationCallbacks); | |||
| constructor Create; | |||
| public | |||
| property Handle: VkInstance read fHandle; | |||
| @@ -85,7 +85,7 @@ begin | |||
| end; | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TvkuInstance.CreateHandle(aCreateInfo: PVkInstanceCreateInfo; aAllocCallbacks: PVkAllocationCallbacks); | |||
| procedure TvkuInstance.CreateHandle(const aCreateInfo: PVkInstanceCreateInfo; const aAllocCallbacks: PVkAllocationCallbacks); | |||
| var e: TVkResult; | |||
| begin | |||
| if Assigned(aAllocCallbacks) then begin | |||
| @@ -6,7 +6,7 @@ interface | |||
| uses | |||
| Classes, SysUtils, | |||
| Vulkan, uvkuInstance; | |||
| Vulkan, uvkuInstance, uvkuAllocationHandler; | |||
| type | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| @@ -19,28 +19,20 @@ type | |||
| 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; | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| 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 | |||
| fFlags: VkInstanceCreateFlags; | |||
| fApplicationInfo: TvkuApplicationInfo; | |||
| @@ -95,92 +87,19 @@ begin | |||
| 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 | |||
| fOwnsHandler := aOwnsHandler; | |||
| 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; | |||
| ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| destructor TvkuInstanceFactory.TvkuInstanceEx.Destroy; | |||
| destructor TvkuInstanceEx.Destroy; | |||
| begin | |||
| inherited Destroy; | |||
| 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. | |||