Mesa (main): clc: fix compiler features_macro CTS Test

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat May 21 12:59:28 UTC 2022


Module: Mesa
Branch: main
Commit: b6ed3c6ea2b02f67ae3aa0512678e0492f8e4df2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b6ed3c6ea2b02f67ae3aa0512678e0492f8e4df2

Author: Karol Herbst <kherbst at redhat.com>
Date:   Thu May 12 19:26:31 2022 +0200

clc: fix compiler features_macro CTS Test

Even with that alone we can't pass the test, as LLVM enables some
extensions based on the SPIR target we choose.

Signed-off-by: Karol Herbst <kherbst at redhat.com>
Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16479>

---

 src/compiler/clc/clc.h           |  9 +++++++++
 src/compiler/clc/clc_helpers.cpp | 27 +++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/src/compiler/clc/clc.h b/src/compiler/clc/clc.h
index 0431643c00d..c5c3a2b1c18 100644
--- a/src/compiler/clc/clc.h
+++ b/src/compiler/clc/clc.h
@@ -49,6 +49,14 @@ enum clc_spirv_version {
    CLC_SPIRV_VERSION_1_4,
 };
 
+struct clc_optional_features {
+   bool fp64;
+   bool int64;
+   bool images;
+   bool images_read_write;
+   bool images_write_3d;
+};
+
 struct clc_compile_args {
    const struct clc_named_value *headers;
    unsigned num_headers;
@@ -58,6 +66,7 @@ struct clc_compile_args {
 
    /* SPIRV version to target. */
    enum clc_spirv_version spirv_version;
+   struct clc_optional_features features;
 
    /* Allowed extensions SPIRV extensions the OpenCL->SPIRV translation can
     * enable. A pointer to a NULL terminated array of strings, allow any
diff --git a/src/compiler/clc/clc_helpers.cpp b/src/compiler/clc/clc_helpers.cpp
index 64d8c65dcf4..53ccb1ebca3 100644
--- a/src/compiler/clc/clc_helpers.cpp
+++ b/src/compiler/clc/clc_helpers.cpp
@@ -861,6 +861,33 @@ clc_compile_to_llvm_module(LLVMContext &llvm_ctx,
 #endif
 #endif
 
+#if LLVM_VERSION_MAJOR >= 14
+   c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("-all");
+   c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_khr_byte_addressable_store");
+   c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_khr_global_int32_base_atomics");
+   c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_khr_global_int32_extended_atomics");
+   c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_khr_local_int32_base_atomics");
+   c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_khr_local_int32_extended_atomics");
+   if (args->features.fp64) {
+      c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_khr_fp64");
+      c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+__opencl_c_fp64");
+   }
+   if (args->features.int64) {
+      c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cles_khr_int64");
+      c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+__opencl_c_int64");
+   }
+   if (args->features.images) {
+      c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+__opencl_c_images");
+   }
+   if (args->features.images_read_write) {
+      c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+__opencl_c_read_write_images");
+   }
+   if (args->features.images_write_3d) {
+      c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+cl_khr_3d_image_writes");
+      c->getTargetOpts().OpenCLExtensionsAsWritten.push_back("+__opencl_c_3d_image_writes");
+   }
+#endif
+
    if (args->num_headers) {
       ::llvm::SmallString<128> tmp_header_path;
       ::llvm::sys::path::system_temp_directory(true, tmp_header_path);



More information about the mesa-commit mailing list