e78c7c97db12f5cea8d6b9466908cd591c05c19d
[mesa.git] / src / gallium / drivers / ilo / core / ilo_state_surface.h
1 /*
2 * Mesa 3-D graphics library
3 *
4 * Copyright (C) 2015 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 *
24 * Authors:
25 * Chia-I Wu <olv@lunarg.com>
26 */
27
28 #ifndef ILO_STATE_SURFACE_H
29 #define ILO_STATE_SURFACE_H
30
31 #include "genhw/genhw.h"
32
33 #include "ilo_core.h"
34 #include "ilo_dev.h"
35
36 enum ilo_state_surface_access {
37 ILO_STATE_SURFACE_ACCESS_SAMPLER, /* sampling engine surfaces */
38 ILO_STATE_SURFACE_ACCESS_DP_RENDER, /* render target surfaces */
39 ILO_STATE_SURFACE_ACCESS_DP_TYPED, /* typed surfaces */
40 ILO_STATE_SURFACE_ACCESS_DP_UNTYPED, /* untyped surfaces */
41 ILO_STATE_SURFACE_ACCESS_DP_DATA,
42 ILO_STATE_SURFACE_ACCESS_DP_SVB,
43 };
44
45 struct ilo_vma;
46 struct ilo_image;
47
48 struct ilo_state_surface_buffer_info {
49 const struct ilo_vma *vma;
50 uint32_t offset;
51 uint32_t size;
52
53 enum ilo_state_surface_access access;
54
55 /* format_size may be less than, equal to, or greater than struct_size */
56 enum gen_surface_format format;
57 uint8_t format_size;
58
59 bool readonly;
60 uint16_t struct_size;
61 };
62
63 struct ilo_state_surface_image_info {
64 const struct ilo_image *img;
65 uint8_t level_base;
66 uint8_t level_count;
67 uint16_t slice_base;
68 uint16_t slice_count;
69
70 const struct ilo_vma *vma;
71 const struct ilo_vma *aux_vma;
72
73 enum ilo_state_surface_access access;
74
75 enum gen_surface_type type;
76
77 enum gen_surface_format format;
78 bool is_integer;
79
80 bool readonly;
81 bool is_array;
82 };
83
84 struct ilo_state_surface {
85 uint32_t surface[13];
86
87 const struct ilo_vma *vma;
88 const struct ilo_vma *aux_vma;
89
90 enum gen_surface_type type;
91 uint8_t min_lod;
92 uint8_t mip_count;
93 bool is_integer;
94
95 bool readonly;
96 bool scanout;
97 };
98
99 bool
100 ilo_state_surface_valid_format(const struct ilo_dev *dev,
101 enum ilo_state_surface_access access,
102 enum gen_surface_format format);
103
104 uint32_t
105 ilo_state_surface_buffer_size(const struct ilo_dev *dev,
106 enum ilo_state_surface_access access,
107 uint32_t size, uint32_t *alignment);
108
109 bool
110 ilo_state_surface_init_for_null(struct ilo_state_surface *surf,
111 const struct ilo_dev *dev);
112
113 bool
114 ilo_state_surface_init_for_buffer(struct ilo_state_surface *surf,
115 const struct ilo_dev *dev,
116 const struct ilo_state_surface_buffer_info *info);
117
118 bool
119 ilo_state_surface_init_for_image(struct ilo_state_surface *surf,
120 const struct ilo_dev *dev,
121 const struct ilo_state_surface_image_info *info);
122
123 bool
124 ilo_state_surface_set_scs(struct ilo_state_surface *surf,
125 const struct ilo_dev *dev,
126 enum gen_surface_scs rgba[4]);
127
128 #endif /* ILO_STATE_SURFACE_H */