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

Alejandro Piñeiro apinheiro at igalia.com
Tue Nov 28 08:23:41 UTC 2017


On 27/11/17 23:02, Ian Romanick wrote:
> 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.

Yes I also thought on that. But, this way the code on vulkan and opengl
more similar. It is also not clear if in the future the supported
extensions will be different or not, it is just a possibility. I found
this approach more simple. We could switch to the other  option if we
see problems with the current approach in the future.

>
>> 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?

Yes, Neil catched last week, and we already move to Calloc on our local
branch. But if we move it to static, it would not be needed.

>
>> +
>> +   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.

Ok.

>
>>  }
>>  
>>  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);
>>  }
>>  
>>  
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev




More information about the mesa-dev mailing list