zink/codegen: allow conditional enabling of instance extensions
authorHoe Hao Cheng <haochengho12907@gmail.com>
Sun, 30 May 2021 10:53:56 +0000 (18:53 +0800)
committerMarge Bot <eric+marge@anholt.net>
Thu, 10 Jun 2021 20:24:40 +0000 (20:24 +0000)
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11036>

src/gallium/drivers/zink/zink_instance.py

index 73f983a..299a680 100644 (file)
@@ -137,7 +137,6 @@ zink_create_instance(struct zink_instance_info *instance_info)
         %for ext in extensions:
                 if (!strcmp(extension_props[i].extensionName, ${ext.extension_name_literal()})) {
                     have_${ext.name_with_vendor()} = true;
-                    extensions[num_extensions++] = ${ext.extension_name_literal()};
                 }
         %endfor
               }
@@ -172,7 +171,17 @@ zink_create_instance(struct zink_instance_info *instance_info)
     }
 
 %for ext in extensions:
-   instance_info->have_${ext.name_with_vendor()} = have_${ext.name_with_vendor()};
+<%
+    conditions = ""
+    if ext.enable_conds:
+        for cond in ext.enable_conds:
+            conditions += "&& (" + cond + ") "
+    conditions = conditions.strip()
+%>\
+   if (have_${ext.name_with_vendor()} ${conditions}) {
+      instance_info->have_${ext.name_with_vendor()} = have_${ext.name_with_vendor()};
+      extensions[num_extensions++] = ${ext.extension_name_literal()};
+   }
 %endfor
 
 %for layer in layers: