blob: 33edc56db0650796185f1ea567f932f996cd7583 [file] [log] [blame]
Chia-I Wua5714e82014-08-11 15:33:42 +08001/*
2 * XGL
3 *
4 * Copyright (C) 2014 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
25#ifndef STATE_H
26#define STATE_H
27
28#include "intel.h"
29#include "obj.h"
30
Chia-I Wuaabb3602014-08-19 14:18:23 +080031/* Should we add intel_state back, as the base class for dynamic states? */
32
Chia-I Wua5714e82014-08-11 15:33:42 +080033struct intel_viewport_state {
34 struct intel_obj obj;
35
Chia-I Wu7d841502014-08-30 14:29:15 +080036 XGL_UINT viewport_count;
Chia-I Wu97702a62014-08-11 15:33:42 +080037 bool scissor_enable;
Chia-I Wua5714e82014-08-11 15:33:42 +080038 /* SF_CLIP_VIEWPORTs, CC_VIEWPORTs, and SCISSOR_RECTs */
39 uint32_t *cmd;
Chia-I Wu7b566a42014-08-22 10:58:57 +080040 XGL_UINT cmd_len;
41 XGL_UINT cmd_align;
42 XGL_UINT cmd_clip_offset;
43 XGL_UINT cmd_cc_offset;
44 XGL_UINT cmd_scissor_rect_offset;
Chia-I Wua5714e82014-08-11 15:33:42 +080045};
46
47struct intel_raster_state {
48 struct intel_obj obj;
49
Chia-I Wu97702a62014-08-11 15:33:42 +080050 uint32_t cmd_clip_cull;
51 uint32_t cmd_sf_fill;
52 uint32_t cmd_sf_cull;
53 uint32_t cmd_depth_offset_const;
54 uint32_t cmd_depth_offset_scale;
55 uint32_t cmd_depth_offset_clamp;
Chia-I Wua5714e82014-08-11 15:33:42 +080056};
57
58struct intel_msaa_state {
59 struct intel_obj obj;
60
Chia-I Wu0b171262014-08-29 15:03:28 +080061 XGL_UINT sample_count;
62
Chia-I Wua5714e82014-08-11 15:33:42 +080063 /* 3DSTATE_MULTISAMPLE and 3DSTATE_SAMPLE_MASK */
64 uint32_t cmd[6];
Chia-I Wuf3c59252014-08-22 09:26:22 +080065 XGL_UINT cmd_len;
Chia-I Wua5714e82014-08-11 15:33:42 +080066};
67
68struct intel_blend_state {
69 struct intel_obj obj;
70
71 /* BLEND_STATE */
72 uint32_t cmd[XGL_MAX_COLOR_ATTACHMENTS * 2];
Chia-I Wu97702a62014-08-11 15:33:42 +080073 /* a part of COLOR_CALC_STATE */
74 uint32_t cmd_blend_color[4];
Chia-I Wua5714e82014-08-11 15:33:42 +080075};
76
77struct intel_ds_state {
78 struct intel_obj obj;
79
80 /* DEPTH_STENCIL_STATE */
Chia-I Wu97702a62014-08-11 15:33:42 +080081 uint32_t cmd[3];
82 /* a part of COLOR_CALC_STATE */
83 uint32_t cmd_stencil_ref;
Chia-I Wua5714e82014-08-11 15:33:42 +080084};
85
86static inline struct intel_viewport_state *intel_viewport_state(XGL_VIEWPORT_STATE_OBJECT state)
87{
88 return (struct intel_viewport_state *) state;
89}
90
91static inline struct intel_viewport_state *intel_viewport_state_from_obj(struct intel_obj *obj)
92{
93 return (struct intel_viewport_state *) obj;
94}
95
96static inline struct intel_raster_state *intel_raster_state(XGL_RASTER_STATE_OBJECT state)
97{
98 return (struct intel_raster_state *) state;
99}
100
101static inline struct intel_raster_state *intel_raster_state_from_obj(struct intel_obj *obj)
102{
103 return (struct intel_raster_state *) obj;
104}
105
106static inline struct intel_msaa_state *intel_msaa_state(XGL_VIEWPORT_STATE_OBJECT state)
107{
108 return (struct intel_msaa_state *) state;
109}
110
111static inline struct intel_msaa_state *intel_msaa_state_from_obj(struct intel_obj *obj)
112{
113 return (struct intel_msaa_state *) obj;
114}
115
116static inline struct intel_blend_state *intel_blend_state(XGL_VIEWPORT_STATE_OBJECT state)
117{
118 return (struct intel_blend_state *) state;
119}
120
121static inline struct intel_blend_state *intel_blend_state_from_obj(struct intel_obj *obj)
122{
123 return (struct intel_blend_state *) obj;
124}
125
126static inline struct intel_ds_state *intel_ds_state(XGL_VIEWPORT_STATE_OBJECT state)
127{
128 return (struct intel_ds_state *) state;
129}
130
131static inline struct intel_ds_state *intel_ds_state_from_obj(struct intel_obj *obj)
132{
133 return (struct intel_ds_state *) obj;
134}
135
136XGL_RESULT intel_viewport_state_create(struct intel_dev *dev,
137 const XGL_VIEWPORT_STATE_CREATE_INFO *info,
138 struct intel_viewport_state **state_ret);
139void intel_viewport_state_destroy(struct intel_viewport_state *state);
140
141XGL_RESULT intel_raster_state_create(struct intel_dev *dev,
142 const XGL_RASTER_STATE_CREATE_INFO *info,
143 struct intel_raster_state **state_ret);
144void intel_raster_state_destroy(struct intel_raster_state *state);
145
146XGL_RESULT intel_msaa_state_create(struct intel_dev *dev,
147 const XGL_MSAA_STATE_CREATE_INFO *info,
148 struct intel_msaa_state **state_ret);
149void intel_msaa_state_destroy(struct intel_msaa_state *state);
150
151XGL_RESULT intel_blend_state_create(struct intel_dev *dev,
152 const XGL_COLOR_BLEND_STATE_CREATE_INFO *info,
153 struct intel_blend_state **state_ret);
154void intel_blend_state_destroy(struct intel_blend_state *state);
155
156XGL_RESULT intel_ds_state_create(struct intel_dev *dev,
157 const XGL_DEPTH_STENCIL_STATE_CREATE_INFO *info,
158 struct intel_ds_state **state_ret);
159void intel_ds_state_destroy(struct intel_ds_state *state);
160
161XGL_RESULT XGLAPI intelCreateViewportState(
162 XGL_DEVICE device,
163 const XGL_VIEWPORT_STATE_CREATE_INFO* pCreateInfo,
164 XGL_VIEWPORT_STATE_OBJECT* pState);
165
166XGL_RESULT XGLAPI intelCreateRasterState(
167 XGL_DEVICE device,
168 const XGL_RASTER_STATE_CREATE_INFO* pCreateInfo,
169 XGL_RASTER_STATE_OBJECT* pState);
170
171XGL_RESULT XGLAPI intelCreateMsaaState(
172 XGL_DEVICE device,
173 const XGL_MSAA_STATE_CREATE_INFO* pCreateInfo,
174 XGL_MSAA_STATE_OBJECT* pState);
175
176XGL_RESULT XGLAPI intelCreateColorBlendState(
177 XGL_DEVICE device,
178 const XGL_COLOR_BLEND_STATE_CREATE_INFO* pCreateInfo,
179 XGL_COLOR_BLEND_STATE_OBJECT* pState);
180
181XGL_RESULT XGLAPI intelCreateDepthStencilState(
182 XGL_DEVICE device,
183 const XGL_DEPTH_STENCIL_STATE_CREATE_INFO* pCreateInfo,
184 XGL_DEPTH_STENCIL_STATE_OBJECT* pState);
185
186#endif /* STATE_H */