Context: Nouveau uses NULL strings for unnamed parameter of texture gather offsets opcode.
Fix piglit crashes of the 'texturegatheroffsets' tests on Nouveau v2: based on Nicolai feedback Adds an extra flag byte that will be null if the string is null. This way, null strings are handled transparently for Mesa. Signed-off-by: Gregory Hainaut <gregory.hain...@gmail.com> --- src/compiler/glsl/blob.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/compiler/glsl/blob.c b/src/compiler/glsl/blob.c index 769ebf1..b520044 100644 --- a/src/compiler/glsl/blob.c +++ b/src/compiler/glsl/blob.c @@ -176,7 +176,18 @@ blob_write_intptr(struct blob *blob, intptr_t value) bool blob_write_string(struct blob *blob, const char *str) { - return blob_write_bytes(blob, str, strlen(str) + 1); + bool ret = true; + const uint8_t flag = str != NULL ? 1 : 0; + + ret = blob_write_bytes(blob, &flag, 1); + + if (!ret) + return false; + + if (flag) + ret = blob_write_bytes(blob, str, strlen(str) + 1); + + return ret; } void @@ -293,8 +304,15 @@ blob_read_string(struct blob_reader *blob) { int size; char *ret; + uint8_t *flag; uint8_t *nul; + flag = (uint8_t *)blob_read_bytes(blob, 1); + + if (flag == NULL || *flag == 0) { + return NULL; + } + /* If we're already at the end, then this is an overrun. */ if (blob->current >= blob->end) { blob->overrun = true; -- 2.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev