diff --git a/src/virtio/vulkan/vn_cs.h b/src/virtio/vulkan/vn_cs.h index 3d1e8e19691..8c59d5b84b8 100644 --- a/src/virtio/vulkan/vn_cs.h +++ b/src/virtio/vulkan/vn_cs.h @@ -8,17 +8,26 @@ #include "vn_common.h" +#define VN_CS_ENCODER_BUFFER_INITIALIZER(storage) \ + (struct vn_cs_encoder_buffer) { .base = storage, } + +/* note that buffers points to an unamed local variable */ #define VN_CS_ENCODER_INITIALIZER_LOCAL(storage, size) \ (struct vn_cs_encoder) \ { \ - .buffers = \ - &(struct vn_cs_encoder_buffer){ \ - .base = storage, \ - }, \ + .buffers = &VN_CS_ENCODER_BUFFER_INITIALIZER(storage), \ .buffer_count = 1, .buffer_max = 1, .current_buffer_size = size, \ .cur = storage, .end = (const void *)(storage) + (size), \ } +#define VN_CS_ENCODER_INITIALIZER(buf, size) \ + (struct vn_cs_encoder) \ + { \ + .buffers = (buf), .buffer_count = 1, .buffer_max = 1, \ + .current_buffer_size = size, .cur = (buf)->base, \ + .end = (buf)->base + (size), \ + } + #define VN_CS_DECODER_INITIALIZER(storage, size) \ (struct vn_cs_decoder) \ { \ diff --git a/src/virtio/vulkan/vn_instance.h b/src/virtio/vulkan/vn_instance.h index 5c84e0286f5..a6e971430f5 100644 --- a/src/virtio/vulkan/vn_instance.h +++ b/src/virtio/vulkan/vn_instance.h @@ -128,10 +128,8 @@ vn_instance_submit_command_init(struct vn_instance *instance, size_t cmd_size, size_t reply_size) { - submit->command = VN_CS_ENCODER_INITIALIZER_LOCAL(cmd_data, cmd_size); - /* fix submit->command.buffers to not point to a local variable */ - submit->buffer = submit->command.buffers[0]; - submit->command.buffers = &submit->buffer; + submit->buffer = VN_CS_ENCODER_BUFFER_INITIALIZER(cmd_data); + submit->command = VN_CS_ENCODER_INITIALIZER(&submit->buffer, cmd_size); submit->reply_size = reply_size; submit->reply_shmem = NULL;