diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index 2bffee43a48..ef1bea49922 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -540,6 +540,9 @@ typedef struct shader_info { uint16_t max_vertices_out; uint16_t max_primitives_out; uint16_t primitive_type; /* GL_POINTS, GL_LINES or GL_TRIANGLES. */ + + /* TODO: remove this when we stop supporting NV_mesh_shader. */ + bool nv; } mesh; }; } shader_info; diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 4f71268ebb1..f9b93debd55 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -4458,9 +4458,18 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode, break; } + case SpvOpExtension: { + /* Implementing both NV_mesh_shader and EXT_mesh_shader + * is difficult without knowing which we're dealing with. + * TODO: remove this when we stop supporting NV_mesh_shader. + */ + const char *ext_name = (const char *)&w[1]; + if (strcmp(ext_name, "SPV_NV_mesh_shader") == 0) + b->shader->info.mesh.nv = true; + break; + } case SpvOpSourceExtension: case SpvOpSourceContinued: - case SpvOpExtension: case SpvOpModuleProcessed: /* Unhandled, but these are for debug so that's ok. */ break;