[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