[Mesa-dev] [PATCH v4] i965: initialize SPIR-V capabilities

Alejandro Piñeiro apinheiro at igalia.com
Fri Mar 30 07:10:48 UTC 2018



On 29/03/18 16:59, Jason Ekstrand wrote:
> On March 29, 2018 02:45:36 Alejandro Piñeiro <apinheiro at igalia.com>
> wrote:
>
> Needed for ARB_gl_spirv. Those are not the same that the Intel vulkan
> driver. 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."
>
> So in addition to the core SPIR-V support, 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. For this reason it is better to keep them separated.
>
> As an example: at the time of this patch writing Intel vulkan driver
> support multiview, but there isn't any OpenGL multiview GL extension
> supported.
>
> Note: we initialize SPIR-V capabilities at brwCreateContext instead of
> the usual brw_initialize_context_constants because we want to do that
> only if the extension is enabled.
>
> v2:
> * Rebase update (SpirVCapabilities not a pointer anymore)
> * Fill spirv capabilities for OpenGL >= 3.3 (Ian Romanick)
>
> v3:
> * Drop multiview support, as i965 doesn't support any multiview GL
> extension (Jason)
> * Fill spirv capabilities only if the extension is enabled (Jason)
> ---
>
> Minor tweak after last rebase against master.
>
>
> src/mesa/drivers/dri/i965/brw_context.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_context.c
> b/src/mesa/drivers/dri/i965/brw_context.c
> index fca5c8e3072..11bd68ae61e 100644
> --- a/src/mesa/drivers/dri/i965/brw_context.c
> +++ b/src/mesa/drivers/dri/i965/brw_context.c
> @@ -78,6 +78,7 @@
>
> #include "common/gen_defines.h"
>
> +#include "compiler/spirv/nir_spirv.h"
> /***************************************
> * Mesa's Driver Functions
> ***************************************/
> @@ -343,6 +344,20 @@ brw_init_driver_functions(struct brw_context *brw,
> brw_deserialize_program_binary;
> }
>
> +static void
> +brw_initialize_spirv_supported_capabilities(struct brw_context *brw)
> +{
> +   const struct gen_device_info *devinfo = &brw->screen->devinfo;
> +   struct gl_context *ctx = &brw->ctx;
> +
>
> Not all of this is supported on all hardware so I assume this
> extension is gen7+ only.

Yes, the patch that will enable the extension for i965 will do that only
for gen7+

> If so, please add a comment 

Ok.

> it an assert to that effect and you'd patch will be

Ok.

>
> Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

Thanks!

>
>
> +   ctx->Const.SpirVCapabilities.float64 = devinfo->gen >= 8;
> +   ctx->Const.SpirVCapabilities.int64 = devinfo->gen >= 8;
> +   ctx->Const.SpirVCapabilities.tessellation = true;
> +   ctx->Const.SpirVCapabilities.draw_parameters = true;
> +   ctx->Const.SpirVCapabilities.image_write_without_format = true;
> +   ctx->Const.SpirVCapabilities.variable_pointers = true;
> +}
> +
> static void
> brw_initialize_context_constants(struct brw_context *brw)
> {
> @@ -1063,6 +1078,10 @@ brwCreateContext(gl_api api,
> _mesa_override_extensions(ctx);
> _mesa_compute_version(ctx);
>
> +   /* GL_ARB_gl_spirv */
> +   if (ctx->Extensions.ARB_gl_spirv)
> +      brw_initialize_spirv_supported_capabilities(brw);
> +
> _mesa_initialize_dispatch_tables(ctx);
> _mesa_initialize_vbo_vtxfmt(ctx);
>
> -- 
> 2.14.1
>
>
>
>




More information about the mesa-dev mailing list