From: Nikolay Sivov nsivov@codeweavers.com
This is useful for implicit $Globals buffer when writing effects binaries. It should not be written out if there is no global variables, but when there are some, it should appear first in order.
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- libs/vkd3d-shader/hlsl.c | 1 + libs/vkd3d-shader/hlsl.h | 2 ++ libs/vkd3d-shader/hlsl.y | 1 + 3 files changed, 4 insertions(+)
diff --git a/libs/vkd3d-shader/hlsl.c b/libs/vkd3d-shader/hlsl.c index 04c37498d..7522c270d 100644 --- a/libs/vkd3d-shader/hlsl.c +++ b/libs/vkd3d-shader/hlsl.c @@ -2012,6 +2012,7 @@ struct hlsl_buffer *hlsl_new_buffer(struct hlsl_ctx *ctx, enum hlsl_buffer_type if (reservation) buffer->reservation = *reservation; buffer->loc = *loc; + buffer->empty = true; list_add_tail(&ctx->buffers, &buffer->entry); return buffer; } diff --git a/libs/vkd3d-shader/hlsl.h b/libs/vkd3d-shader/hlsl.h index 58188ce6f..57d7ad781 100644 --- a/libs/vkd3d-shader/hlsl.h +++ b/libs/vkd3d-shader/hlsl.h @@ -804,6 +804,8 @@ struct hlsl_buffer
bool manually_packed_elements; bool automatically_packed_elements; + /* Marks buffers with no elements. Implicit buffers are created like that. */ + bool empty; };
struct hlsl_ctx diff --git a/libs/vkd3d-shader/hlsl.y b/libs/vkd3d-shader/hlsl.y index 8dc353e11..1981390e6 100644 --- a/libs/vkd3d-shader/hlsl.y +++ b/libs/vkd3d-shader/hlsl.y @@ -2237,6 +2237,7 @@ static void declare_var(struct hlsl_ctx *ctx, struct parse_variable_def *v) }
var->buffer = ctx->cur_buffer; + var->buffer->empty = false;
if (var->buffer == ctx->globals_buffer) {