[Beignet] [PATCH] improve clCreateContext conformance

Zhigang Gong zhigang.gong at linux.intel.com
Thu Jul 11 18:10:04 PDT 2013


Pushed, Thanks.

On Wed, Jul 10, 2013 at 01:22:01PM +0800, Homer Hsing wrote:
> OpenCL specification says "clCreateContext" function returns
> CL_INVALID_PROPERTY if the same property name appears more than once.
> 
> But "clCreateContext" did not follow that.
> 
> This patch uses a local temp integer to track whether a property name has
> appeared. If so, returns CL_INVALID_PROPERTY.
> 
> This patch makes Piglit test case "clCreateContext" pass.
> 
> Signed-off-by: Homer Hsing <homer.xing at intel.com>
> ---
>  src/cl_context.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/src/cl_context.c b/src/cl_context.c
> index 338706b..a48436c 100644
> --- a/src/cl_context.c
> +++ b/src/cl_context.c
> @@ -36,10 +36,22 @@
>  #include <assert.h>
>  #include <string.h>
>  
> +#define CHECK(var) \
> +  if (var) \
> +    return CL_INVALID_PROPERTY; \
> +  else \
> +    var = 1;
> +
>  static cl_int
>  cl_context_properties_process(const cl_context_properties *prop,
>                                struct _cl_context_prop *cl_props, cl_uint * prop_len)
>  {
> +  int set_cl_context_platform = 0,
> +      set_cl_gl_context_khr = 0,
> +      set_cl_egl_display_khr = 0,
> +      set_cl_glx_display_khr = 0,
> +      set_cl_wgl_hdc_khr = 0,
> +      set_cl_cgl_sharegroup_khr = 0;
>    cl_int err = CL_SUCCESS;
>  
>    cl_props->gl_type = CL_GL_NOSHARE;
> @@ -52,6 +64,7 @@ cl_context_properties_process(const cl_context_properties *prop,
>    while(*prop) {
>      switch (*prop) {
>      case CL_CONTEXT_PLATFORM:
> +      CHECK (set_cl_context_platform);
>        cl_props->platform_id = *(prop + 1);
>        if (UNLIKELY((cl_platform_id) cl_props->platform_id != intel_platform)) {
>          err = CL_INVALID_PLATFORM;
> @@ -59,21 +72,26 @@ cl_context_properties_process(const cl_context_properties *prop,
>        }
>        break;
>      case CL_GL_CONTEXT_KHR:
> +      CHECK (set_cl_gl_context_khr);
>        cl_props->gl_context = *(prop + 1);
>        break;
>      case CL_EGL_DISPLAY_KHR:
> +      CHECK (set_cl_egl_display_khr);
>        cl_props->gl_type = CL_GL_EGL_DISPLAY;
>        cl_props->egl_display = *(prop + 1);
>        break;
>      case CL_GLX_DISPLAY_KHR:
> +      CHECK (set_cl_glx_display_khr);
>        cl_props->gl_type = CL_GL_GLX_DISPLAY;
>        cl_props->glx_display = *(prop + 1);
>        break;
>      case CL_WGL_HDC_KHR:
> +      CHECK (set_cl_wgl_hdc_khr);
>        cl_props->gl_type = CL_GL_WGL_HDC;
>        cl_props->wgl_hdc = *(prop + 1);
>        break;
>      case CL_CGL_SHAREGROUP_KHR:
> +      CHECK (set_cl_cgl_sharegroup_khr);
>        cl_props->gl_type = CL_GL_CGL_SHAREGROUP;
>        cl_props->cgl_sharegroup = *(prop + 1);
>        break;
> -- 
> 1.8.1.2
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list