MCPcopy Create free account
hub / github.com/SaschaWillems/VulkanCapsViewer / CppBuilder

Class CppBuilder

tools/deviceExtensionsFileGenerator.php:154–390  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

152}
153
154class CppBuilder
155{
156
157 private $header_functions = [];
158 private $vk_header_version = null;
159
160 function __construct($vk_header_version)
161 {
162 $this->vk_header_version = $vk_header_version;
163 }
164
165 public function generateFeatures2CodeBlock($extension)
166 {
167 $sType = TypeContainer::getsType($extension->features2);
168 $res = "\tif (extensionSupported(\"{$extension->name}\")) {\n";
169 $res .= "\t\tconst char* extension(\"{$extension->name}\");\n";
170 $res .= "\t\t{$extension->features2['name']}* extFeatures = new {$extension->features2['name']}{};\n";
171 $res .= "\t\textFeatures->sType = $sType;\n";
172 $res .= "\t\tdeviceFeatures2 = initDeviceFeatures2(extFeatures);\n";
173 $res .= "\t\tvulkanContext.vkGetPhysicalDeviceFeatures2KHR(device, &deviceFeatures2);\n";
174 foreach ($extension->features2->member as $member) {
175 // Skip types that are not related to feature details
176 $type = (string)$member->type;
177 if (in_array($type, ['VkStructureType', 'void'])) {
178 continue;
179 }
180 $name = (string)$member->name;
181 $res .= "\t\tpushFeature2(extension, \"$name\", extFeatures->$name);\n";
182 }
183 $res .= "\t\tdelete extFeatures;\n";
184 $res .= "\t}\n";
185 return $res;
186 }
187
188 public function generateProperties2CodeBlock($extension)
189 {
190 $sType = TypeContainer::getsType($extension->properties2);
191 $res = "\tif (extensionSupported(\"{$extension->name}\")) {\n";
192 $res .= "\t\tconst char* extension(\"{$extension->name}\");\n";
193 $res .= "\t\t{$extension->properties2['name']}* extProps = new {$extension->properties2['name']}{};\n";
194 $res .= "\t\textProps->sType = $sType;\n";
195 $res .= "\t\tdeviceProps2 = initDeviceProperties2(extProps);\n";
196 $res .= "\t\tvulkanContext.vkGetPhysicalDeviceProperties2KHR(device, &deviceProps2);\n";
197 // @todo: QVariant vs. QVariant::fromValue
198 foreach ($extension->properties2->member as $member) {
199 // Skip types that are not related to feature details
200 $type = (string)$member->type;
201 if (in_array($type, ['VkStructureType', 'void'])) {
202 continue;
203 }
204 $name = (string)$member->name;
205 $vktype = (string)$member->type;
206 if ($type == "VkExtent2D") {
207 $res .= "\t\tpushProperty2(extension, \"$name\", QVariant::fromValue(QVariantList({ extProps->$name.width, extProps->$name.height })));\n";
208 continue;
209 }
210 if ($type == "size_t") {
211 $res .= "\t\tpushProperty2(extension, \"$name\", QVariant::fromValue(extProps->$name));\n";

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected