From 89ee55bd0c5784f46fed68c5eea85c923ef29757 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 31 Oct 2024 12:57:12 +0000 Subject: [PATCH] Fix matching variable-less buffer formats * It's convenient and we sometimes automatically create formats that are just 'xint' so make sure they parse correctly. --- qrenderdoc/Code/BufferFormatter.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/qrenderdoc/Code/BufferFormatter.cpp b/qrenderdoc/Code/BufferFormatter.cpp index 786814e17..5a6f0e459 100644 --- a/qrenderdoc/Code/BufferFormatter.cpp +++ b/qrenderdoc/Code/BufferFormatter.cpp @@ -553,7 +553,8 @@ ParsedFormat BufferFormatter::ParseFormatString(const QString &formatString, uin "(?x[1-9])?" // or a matrix "(" // pointer or space "(?\\s*\\*\\s*)|" // pointer asterisk - "\\s+" // or just some whitespace + "\\s+|" // or just some whitespace + "$" // or the end, if it's nameless ")" // end pointer or space "(?[A-Za-z@_][A-Za-z0-9@_]*)?" // get identifier name "(?\\s*\\[[0-9]*\\])?" // optional array dimension @@ -4341,6 +4342,24 @@ TEST_CASE("Buffer format parsing", "[formatter]") } }; + SECTION("variable-less quick formats") + { + parsed = BufferFormatter::ParseFormatString(lit("float"), 0, true); + + CHECK(parsed.errors.isEmpty()); + CHECK(parsed.repeating.type.members.empty()); + REQUIRE(parsed.fixed.type.members.size() == 1); + CHECK((parsed.fixed.type.members[0].type == float_type)); + + parsed = BufferFormatter::ParseFormatString(lit("int4"), 0, true); + + CHECK(parsed.errors.isEmpty()); + CHECK(parsed.repeating.type.members.empty()); + REQUIRE(parsed.fixed.type.members.size() == 1); + CHECK(parsed.fixed.type.members[0].type.baseType == VarType::SInt); + CHECK(parsed.fixed.type.members[0].type.columns == 4); + }; + SECTION("C-style sized formats") { parsed = BufferFormatter::ParseFormatString(lit("float32_t a;"), 0, true);