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. Note: we initialize SPIR-V capabilities at brwCreateContext instead of the usual brw_initialize_context_constants because we want to do that only for version >= 3.3. At brw_initialize_context_constans GL version is still not computed. v2: * Rebase update (SpirVCapabilities not a pointer anymore) * Fill spirv capabilities for OpenGL >= 3.3 (Ian Romanick) --- src/mesa/drivers/dri/i965/brw_context.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index fca5c8e3072..abd1592c0f5 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,21 @@ 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; + + 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.multiview = true; + ctx->Const.SpirVCapabilities.variable_pointers = true; +} + static void brw_initialize_context_constants(struct brw_context *brw) { @@ -1063,6 +1079,10 @@ brwCreateContext(gl_api api, _mesa_override_extensions(ctx); _mesa_compute_version(ctx); + /* GL_ARB_gl_spirv */ + if (ctx->Version >= 33) + brw_initialize_spirv_supported_capabilities(brw); + _mesa_initialize_dispatch_tables(ctx); _mesa_initialize_vbo_vtxfmt(ctx); -- 2.14.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev