• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright © 2016 Red Hat.
3  * Copyright © 2016 Bas Nieuwenhuizen
4  * SPDX-License-Identifier: MIT
5  *
6  * based in part on anv driver which is:
7  * Copyright © 2015 Intel Corporation
8  */
9 
10 #ifndef TU_SHADER_H
11 #define TU_SHADER_H
12 
13 #include "tu_common.h"
14 
15 struct tu_push_constant_range
16 {
17    uint32_t lo;
18    uint32_t dwords;
19 };
20 
21 struct tu_shader
22 {
23    struct ir3_shader *ir3_shader;
24 
25    struct tu_push_constant_range push_consts;
26    uint8_t active_desc_sets;
27    bool multi_pos_output;
28 };
29 
30 struct tu_shader_key {
31    unsigned multiview_mask;
32    bool force_sample_interp;
33    enum ir3_wavesize_option api_wavesize, real_wavesize;
34 };
35 
36 bool
37 tu_nir_lower_multiview(nir_shader *nir, uint32_t mask, bool *multi_pos_output,
38                        struct tu_device *dev);
39 
40 nir_shader *
41 tu_spirv_to_nir(struct tu_device *dev,
42                 void *mem_ctx,
43                 const VkPipelineShaderStageCreateInfo *stage_info,
44                 gl_shader_stage stage);
45 
46 struct tu_shader *
47 tu_shader_create(struct tu_device *dev,
48                  nir_shader *nir,
49                  const struct tu_shader_key *key,
50                  struct tu_pipeline_layout *layout,
51                  const VkAllocationCallbacks *alloc);
52 
53 void
54 tu_shader_destroy(struct tu_device *dev,
55                   struct tu_shader *shader,
56                   const VkAllocationCallbacks *alloc);
57 
58 #endif /* TU_SHADER_H */
59