spirv: Generate a spirv_capabilities struct

Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Iván Briano <ivan.briano@intel.com>
Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28905>
This commit is contained in:
Faith Ekstrand 2024-04-24 08:26:28 -05:00 committed by Marge Bot
parent 74b17b8d25
commit c07cf9c395
1 changed files with 59 additions and 1 deletions

View File

@ -76,7 +76,32 @@ TEMPLATE_H = Template("""\
#ifndef _SPIRV_INFO_H_
#define _SPIRV_INFO_H_
#include "spirv.h"
#include <stdbool.h>
#include "compiler/spirv/spirv.h"
% for kind,values,category in info:
% if kind == "Capability":
struct spirv_capabilities {
% for names in values:
% if len(names) == 1:
bool ${names[0]};
% else:
union {
% for name in names:
bool ${name};
% endfor
};
% endif
% endfor
};
% endif
% endfor
bool spirv_capabilities_get(const struct spirv_capabilities *caps,
SpvCapability cap);
void spirv_capabilities_set(struct spirv_capabilities *caps,
SpvCapability cap, bool enabled);
% for kind,values,category in info:
% if category == "BitEnum":
@ -94,6 +119,39 @@ TEMPLATE_C = Template("""\
""" + COPYRIGHT + """\
#include "spirv_info.h"
#include "util/macros.h"
% for kind,values,category in info:
% if kind == "Capability":
bool
spirv_capabilities_get(const struct spirv_capabilities *caps,
SpvCapability cap)
{
switch (cap) {
% for names in values:
case SpvCapability${names[0]}: return caps->${names[0]};
% endfor
default:
return false;
}
}
void
spirv_capabilities_set(struct spirv_capabilities *caps,
SpvCapability cap, bool enabled)
{
switch (cap) {
% for names in values:
case SpvCapability${names[0]}: caps->${names[0]} = enabled; break;
% endfor
default:
unreachable("Unknown capability");
}
}
% endif
% endfor
% for kind,values,category in info:
% if category == "BitEnum":