From 95f873cdea8c70ffc9881a7f0b7207f1547e74c9 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Thu, 28 Dec 2023 23:12:22 +0200 Subject: [PATCH] Fix validation of std140 and std430 layout qualifiers They're allowed on buffer blocks as well, and std430 isn't allowed on uniform blocks. Also recognize the packed qualifier. --- source/glsl/validate.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/glsl/validate.cpp b/source/glsl/validate.cpp index 778c8b80..7f24a216 100644 --- a/source/glsl/validate.cpp +++ b/source/glsl/validate.cpp @@ -209,10 +209,17 @@ void DeclarationValidator::visit(Layout &layout) allowed = (stage->type==Stage::TESS_EVAL && iface_layout && iface_layout->interface=="in"); value = false; } - else if(q.name=="std140" || q.name=="std430") + else if(q.name=="std140" || q.name=="packed") { - allowed = (iface_block && !variable && iface_block->interface=="uniform"); + allowed = (iface_block && !variable && (iface_block->interface=="uniform" || iface_block->interface=="buffer")); + value = false; + err_descr = "non-uniform interface block"; + } + else if(q.name=="std430") + { + allowed = (iface_block && !variable && iface_block->interface=="buffer"); value = false; + err_descr = "non-buffer interface block"; } else if(q.name=="column_major" || q.name=="row_major") { -- 2.45.2