xref: /aosp_15_r20/external/mesa3d/src/nouveau/compiler/nak_memstream.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2024 Collabora, Ltd.
3  * SPDX-License-Identifier: MIT
4  *
5  * This file exposes a nice interface that can be consumed from Rust. We would
6  * have to have Rust libc bindings otherwise.
7  */
8 
9 #include <assert.h>
10 #include <stdio.h>
11 #include <stdlib.h>
12 
13 #include "nak_private.h"
14 #include "nir.h"
15 
nak_open_memstream(struct nak_memstream * memstream)16 void nak_open_memstream(struct nak_memstream *memstream)
17 {
18     memstream->stream = open_memstream(&memstream->buffer, &memstream->written);
19     fflush(memstream->stream);
20     assert(memstream->stream);
21     assert(memstream->buffer);
22 }
23 
nak_close_memstream(struct nak_memstream * memstream)24 void nak_close_memstream(struct nak_memstream *memstream)
25 {
26     fclose(memstream->stream);
27     free(memstream->buffer);
28 }
29 
nak_nir_asprint_instr(struct nak_memstream * memstream,const nir_instr * instr)30 void nak_nir_asprint_instr(struct nak_memstream *memstream, const nir_instr *instr)
31 {
32     nir_print_instr(instr, memstream->stream);
33     fflush(memstream->stream);
34 }
35 
nak_clear_memstream(struct nak_memstream * memstream)36 void nak_clear_memstream(struct nak_memstream *memstream)
37 {
38     rewind(memstream->stream);
39 }