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