[Mesa-dev] [PATCH 09/24] i965: initialize SPIR-V capabilities

Ian Romanick idr at freedesktop.org
Mon Nov 27 22:02:40 UTC 2017


On 11/15/2017 05:22 AM, Eduardo Lima Mitev wrote:
> From: Alejandro PiƱeiro <apinheiro at igalia.com>
> 
> Needed for ARB_gl_spirv. Right now those are the same that the intel
> vulkan driver, but those are not shared. From the ARB_spirv_extensions
> spec:
> 
>    "3. If a new GL extension is added that includes SPIR-V support via
>    a new SPIR-V extension does it's SPIR-V extension also get
>    enumerated by the SPIR_V_EXTENSIONS_ARB query?.
> 
>    RESOLVED. Yes. It's good to include it for consistency. Any SPIR-V
>    functionality supported beyond the SPIR-V version that is required
>    for the GL API version should be enumerated."
> 
> Reading between lines, there is the possibility of specific GL
> extensions enabling specific SPIR-V extensions (so capabilities). That
> would mean that it is possible that OpenGL and Vulkan not having the
> same capabilities supported, even for the same driver. So for now we
> keep them separate. Perhaps in the future it is better to keep them
> the same and synced.

Hm... I wonder if we should enable SPIR-V extensions based on OpenGL
extensions rather than from lower-level NIR capabilities.  I guess that
would have other potential problems.

> v2: Fix off-tree compilation, including full path to nir/nir.h inside
>    spirv/nir_spirv.h. (Eduardo Lima)
> ---
>  src/compiler/spirv/nir_spirv.h          |  2 +-
>  src/mesa/drivers/dri/i965/brw_context.c | 23 +++++++++++++++++++++++
>  src/mesa/main/context.c                 |  2 ++
>  3 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/src/compiler/spirv/nir_spirv.h b/src/compiler/spirv/nir_spirv.h
> index 0204e81d091..d975254047a 100644
> --- a/src/compiler/spirv/nir_spirv.h
> +++ b/src/compiler/spirv/nir_spirv.h
> @@ -28,7 +28,7 @@
>  #ifndef _NIR_SPIRV_H_
>  #define _NIR_SPIRV_H_
>  
> -#include "nir/nir.h"
> +#include "compiler/nir/nir.h"
>  
>  #ifdef __cplusplus
>  extern "C" {
> diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
> index 19d5a2e3503..b85f36cfbbd 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.c
> +++ b/src/mesa/drivers/dri/i965/brw_context.c
> @@ -75,6 +75,7 @@
>  #include "util/debug.h"
>  #include "isl/isl.h"
>  
> +#include "compiler/spirv/nir_spirv.h"
>  /***************************************
>   * Mesa's Driver Functions
>   ***************************************/
> @@ -331,6 +332,24 @@ brw_init_driver_functions(struct brw_context *brw,
>        functions->GetSamplePosition = gen6_get_sample_position;
>  }
>  
> +static struct nir_spirv_supported_capabilities *
> +brw_initialize_spirv_supported_capabilities(struct brw_context *brw)
> +{
> +   const struct gen_device_info *devinfo = &brw->screen->devinfo;
> +   struct nir_spirv_supported_capabilities *cap =
> +      MALLOC_STRUCT(nir_spirv_supported_capabilities);

calloc?

> +
> +   cap->float64 = devinfo->gen >= 8;
> +   cap->int64 = devinfo->gen >= 8;
> +   cap->tessellation = true;
> +   cap->draw_parameters = true;
> +   cap->image_write_without_format = true;
> +   cap->multiview = true;
> +   cap->variable_pointers = true;
> +
> +   return cap;
> +}
> +
>  static void
>  brw_initialize_context_constants(struct brw_context *brw)
>  {
> @@ -697,6 +716,10 @@ brw_initialize_context_constants(struct brw_context *brw)
>  
>     if (!(ctx->Const.ContextFlags & GL_CONTEXT_FLAG_DEBUG_BIT))
>        ctx->Const.AllowMappedBuffersDuringExecution = true;
> +
> +   /* GL_ARB_gl_spirv */
> +   ctx->Const.SpirVCapabilities =
> +      brw_initialize_spirv_supported_capabilities(brw);

I think this should only occur when the GL version is >= 3.3.

>  }
>  
>  static void
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index 61099eb39f2..837c1138998 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -1378,6 +1378,8 @@ _mesa_free_context_data( struct gl_context *ctx )
>     if (ctx == _mesa_get_current_context()) {
>        _mesa_make_current(NULL, NULL, NULL);
>     }
> +
> +   free(ctx->Const.SpirVCapabilities);
>  }
>  
>  


More information about the mesa-dev mailing list