[qfcc] Clean up the errors for some layout qualifiers

Nothing's actually implemented, but once I fix a couple more errors I'll
be able to work on that.
This commit is contained in:
Bill Currie 2024-11-21 09:35:56 +09:00
parent c16a8411bc
commit fb497cd0b2

View file

@ -123,6 +123,21 @@ glsl_layout_set_property (specifier_t spec, const expr_t *qual_name,
expr_string (qual_name), get_value_string (val->value)); expr_string (qual_name), get_value_string (val->value));
} }
static void
glsl_layout_format (specifier_t spec, const expr_t *qual_name)
{
}
static void
glsl_layout_push_constant (specifier_t spec, const expr_t *qual_name)
{
}
static void
glsl_layout_execution_mode (specifier_t spec, const expr_t *qual_name)
{
}
typedef enum { typedef enum {
decl_var = 1 << 0, decl_var = 1 << 0,
decl_qual = 1 << 1, decl_qual = 1 << 1,
@ -218,7 +233,7 @@ static layout_qual_t layout_qualifiers[] = {
.if_mask = I(uniform)|I(buffer), .if_mask = I(uniform)|I(buffer),
}, },
{ .name = "push_constant", { .name = "push_constant",
.apply = A(nullptr), .apply = A(glsl_layout_push_constant),
.obj_mask = D(block), .obj_mask = D(block),
.var_type = V(any), .var_type = V(any),
.if_mask = I(uniform), .if_mask = I(uniform),
@ -365,7 +380,7 @@ static layout_qual_t layout_qualifiers[] = {
.stage_filter = C { "fragment", nullptr }, .stage_filter = C { "fragment", nullptr },
}, },
{ .name = "early_fragment_tests", { .name = "early_fragment_tests",
.apply = A(nullptr), .apply = A(glsl_layout_execution_mode),
.obj_mask = D(qual), .obj_mask = D(qual),
.if_mask = I(in), .if_mask = I(in),
.stage_filter = C { "fragment", nullptr }, .stage_filter = C { "fragment", nullptr },
@ -518,235 +533,235 @@ static layout_qual_t layout_qualifiers[] = {
}, },
{ .name = "rgba32f", { .name = "rgba32f",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba16f", { .name = "rgba16f",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg32f", { .name = "rg32f",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg16f", { .name = "rg16f",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r11f_g11f_b10f", { .name = "r11f_g11f_b10f",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r32f", { .name = "r32f",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r16f", { .name = "r16f",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba16", { .name = "rgba16",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgb10_a2", { .name = "rgb10_a2",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba8", { .name = "rgba8",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg16", { .name = "rg16",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg8", { .name = "rg8",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r16", { .name = "r16",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r8", { .name = "r8",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba16_snorm", { .name = "rgba16_snorm",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba8_snorm", { .name = "rgba8_snorm",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg16_snorm", { .name = "rg16_snorm",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg8_snorm", { .name = "rg8_snorm",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r16_snorm", { .name = "r16_snorm",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r8_snorm", { .name = "r8_snorm",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba32i", { .name = "rgba32i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba16i", { .name = "rgba16i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba8i", { .name = "rgba8i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg32i", { .name = "rg32i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg16i", { .name = "rg16i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg8i", { .name = "rg8i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r32i", { .name = "r32i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r16i", { .name = "r16i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r8i", { .name = "r8i",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba32ui", { .name = "rgba32ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba16ui", { .name = "rgba16ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgb10_a2ui", { .name = "rgb10_a2ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rgba8ui", { .name = "rgba8ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg32ui", { .name = "rg32ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg16ui", { .name = "rg16ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "rg8ui", { .name = "rg8ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r32ui", { .name = "r32ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r16ui", { .name = "r16ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
}, },
{ .name = "r8ui", { .name = "r8ui",
.apply = A(nullptr), .apply = A(glsl_layout_format),
.obj_mask = D(var), .obj_mask = D(var),
.var_type = V(image), .var_type = V(image),
.if_mask = I(uniform), .if_mask = I(uniform),
@ -784,9 +799,22 @@ layout_check_qualifier (const layout_qual_t *qual, specifier_t spec)
if (spec.sym) { if (spec.sym) {
auto sym = spec.sym; auto sym = spec.sym;
if (sym->type) { if (sym->type) {
if (is_handle (sym->type)) { auto type = sym->type;
if (is_reference (type)) {
type = dereference_type (type);
}
//FIXME is_handle works only for glsl as there are no user handles
if (is_handle (type)) {
var_type = var_opaque; var_type = var_opaque;
} else if (spec.is_const && is_scalar (sym->type)) { // images are opaque types, but certain qualifiers support
// only images and not other opaque types, but qualifiers that
// support opaque types in general also support images
if (qual->var_type == var_image
//FIXME shouldn't rely on name
&& strstr (type->name, "image")) {
var_type = var_image;
}
} else if (spec.is_const && is_scalar (type)) {
var_type = var_scalar; var_type = var_scalar;
} else if (strcmp (sym->name, "gl_FragCoord") == 0) { } else if (strcmp (sym->name, "gl_FragCoord") == 0) {
var_type = var_gl_FragCoord; var_type = var_gl_FragCoord;
@ -868,7 +896,7 @@ layout_apply_qualifier (const expr_t *qualifier, specifier_t spec)
} }
return; return;
} else if (qual->apply) { } else if (qual->apply) {
if (!val) { if (val) {
error (qualifier, "%s does not take a value", key.name); error (qualifier, "%s does not take a value", key.name);
} else { } else {
qual->apply (spec, qualifier->expr.e1); qual->apply (spec, qualifier->expr.e1);