EdB <edb+m...@sigluy.net> writes:

> ---
>  src/gallium/state_trackers/clover/api/program.cpp | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/src/gallium/state_trackers/clover/api/program.cpp 
> b/src/gallium/state_trackers/clover/api/program.cpp
> index b81ce69..05f3840 100644
> --- a/src/gallium/state_trackers/clover/api/program.cpp
> +++ b/src/gallium/state_trackers/clover/api/program.cpp
> @@ -232,6 +232,24 @@ clGetProgramInfo(cl_program d_prog, cl_program_info 
> param,
>           prog.devices());
>        break;
>  
> +   case CL_PROGRAM_NUM_KERNELS:
> +      buf.as_scalar<cl_uint>() = prog.symbols().size();
> +      break;
> +
> +   case CL_PROGRAM_KERNEL_NAMES: {
> +      std::string names;
> +      for (auto &symbol : prog.symbols()) {
> +         std::string name(symbol.name.begin(), symbol.name.size());
> +         name += ";";
> +         names += name;
> +      }
> +      if (!names.empty())
> +         names.pop_back(); //remove ';'
> +
> +      buf.as_string() = names;
> +      }
> +      break;
> +

How about we implement this using fold()?  It's quite a bit more
concise.  See attachment.

>     default:
>        throw error(CL_INVALID_VALUE);
>     }
> -- 
> 2.0.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

diff --git a/src/gallium/state_trackers/clover/api/program.cpp b/src/gallium/state_trackers/clover/api/program.cpp
index ab6cf7c..6771735 100644
--- a/src/gallium/state_trackers/clover/api/program.cpp
+++ b/src/gallium/state_trackers/clover/api/program.cpp
@@ -235,6 +235,17 @@ clGetProgramInfo(cl_program d_prog, cl_program_info param,
          prog.devices());
       break;
 
+   case CL_PROGRAM_NUM_KERNELS:
+      buf.as_scalar<cl_uint>() = prog.symbols().size();
+      break;
+
+   case CL_PROGRAM_KERNEL_NAMES:
+      buf.as_string() = fold([](const std::string &a, const module::symbol &s) {
+            return ((a.empty() ? "" : a + ";") +
+                    std::string(s.name.begin(), s.name.size()));
+         }, std::string(), prog.symbols());
+      break;
+
    default:
       throw error(CL_INVALID_VALUE);
    }

Attachment: pgpDbZprOa3Jv.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to