xref: /aosp_15_r20/external/mesa3d/src/gallium/drivers/svga/svga_shader_buffer.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright (c) 2022-2024 Broadcom. All Rights Reserved.
3  * The term “Broadcom” refers to Broadcom Inc.
4  * and/or its subsidiaries.
5  * SPDX-License-Identifier: MIT
6  */
7 
8 #ifndef SVGA_SHADER_BUFFER_H
9 #define SVGA_SHADER_BUFFER_H
10 
11 struct svga_shader_buffer {
12    struct pipe_shader_buffer desc;
13    struct pipe_resource *resource;
14    unsigned uav_index;
15    struct svga_winsys_surface *handle;
16    bool writeAccess;
17 };
18 
19 void
20 svga_init_shader_buffer_functions(struct svga_context *svga);
21 
22 void
23 svga_cleanup_shader_buffer_state(struct svga_context *svga);
24 
25 enum pipe_error
26 svga_validate_shader_buffer_resources(struct svga_context *svga,
27                                       unsigned count,
28                                       struct svga_shader_buffer *buffers,
29                                       bool rebind);
30 
31 SVGA3dUAViewId
32 svga_create_uav_buffer(struct svga_context *svga,
33                        const struct pipe_shader_buffer *buf,
34                        SVGA3dSurfaceFormat format,
35                        SVGA3dUABufferFlags bufFlag);
36 
37 void
38 svga_uav_cache_purge_buffers(struct svga_context *svga);
39 
40 bool
41 svga_shader_buffer_can_use_srv(struct svga_context *svga,
42                                enum pipe_shader_type shader,
43                                unsigned index,
44                                struct svga_shader_buffer *buffer);
45 
46 enum pipe_error
47 svga_shader_buffer_bind_srv(struct svga_context *svga,
48                             enum pipe_shader_type shader,
49                             unsigned index,
50                             struct svga_shader_buffer *buffer);
51 
52 enum pipe_error
53 svga_shader_buffer_unbind_srv(struct svga_context *svga,
54                               enum pipe_shader_type shader,
55                               unsigned index,
56                               struct svga_shader_buffer *buffer);
57 
58 enum pipe_error
59 svga_emit_rawbuf(struct svga_context *svga,
60                  unsigned slot,
61                  enum pipe_shader_type shader,
62                  unsigned buffer_offset,
63                  unsigned buffer_size,
64                  void *buffer);
65 
66 #endif /* SVGA_SHADER_BUFFER_H */
67