blob: a07d01cd379be7b625d34c9724f0405b0817f7b7 [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
31struct intel_viewport_state {
32 struct intel_obj obj;
33
Chia-I Wu97702a62014-08-11 15:33:42 +080034 bool scissor_enable;
Chia-I Wua5714e82014-08-11 15:33:42 +080035 /* SF_CLIP_VIEWPORTs, CC_VIEWPORTs, and SCISSOR_RECTs */
36 uint32_t *cmd;
37 XGL_SIZE size;
38};
39
40struct intel_raster_state {
41 struct intel_obj obj;
42
Chia-I Wu97702a62014-08-11 15:33:42 +080043 uint32_t cmd_clip_cull;
44 uint32_t cmd_sf_fill;
45 uint32_t cmd_sf_cull;
46 uint32_t cmd_depth_offset_const;
47 uint32_t cmd_depth_offset_scale;
48 uint32_t cmd_depth_offset_clamp;
Chia-I Wua5714e82014-08-11 15:33:42 +080049};
50
51struct intel_msaa_state {
52 struct intel_obj obj;
53
54 /* 3DSTATE_MULTISAMPLE and 3DSTATE_SAMPLE_MASK */
55 uint32_t cmd[6];
56};
57
58struct intel_blend_state {
59 struct intel_obj obj;
60
61 /* BLEND_STATE */
62 uint32_t cmd[XGL_MAX_COLOR_ATTACHMENTS * 2];
Chia-I Wu97702a62014-08-11 15:33:42 +080063 /* a part of COLOR_CALC_STATE */
64 uint32_t cmd_blend_color[4];
Chia-I Wua5714e82014-08-11 15:33:42 +080065};
66
67struct intel_ds_state {
68 struct intel_obj obj;
69
70 /* DEPTH_STENCIL_STATE */
Chia-I Wu97702a62014-08-11 15:33:42 +080071 uint32_t cmd[3];
72 /* a part of COLOR_CALC_STATE */
73 uint32_t cmd_stencil_ref;
Chia-I Wua5714e82014-08-11 15:33:42 +080074};
75
76static inline struct intel_viewport_state *intel_viewport_state(XGL_VIEWPORT_STATE_OBJECT state)
77{
78 return (struct intel_viewport_state *) state;
79}
80
81static inline struct intel_viewport_state *intel_viewport_state_from_obj(struct intel_obj *obj)
82{
83 return (struct intel_viewport_state *) obj;
84}
85
86static inline struct intel_raster_state *intel_raster_state(XGL_RASTER_STATE_OBJECT state)
87{
88 return (struct intel_raster_state *) state;
89}
90
91static inline struct intel_raster_state *intel_raster_state_from_obj(struct intel_obj *obj)
92{
93 return (struct intel_raster_state *) obj;
94}
95
96static inline struct intel_msaa_state *intel_msaa_state(XGL_VIEWPORT_STATE_OBJECT state)
97{
98 return (struct intel_msaa_state *) state;
99}
100
101static inline struct intel_msaa_state *intel_msaa_state_from_obj(struct intel_obj *obj)
102{
103 return (struct intel_msaa_state *) obj;
104}
105
106static inline struct intel_blend_state *intel_blend_state(XGL_VIEWPORT_STATE_OBJECT state)
107{
108 return (struct intel_blend_state *) state;
109}
110
111static inline struct intel_blend_state *intel_blend_state_from_obj(struct intel_obj *obj)
112{
113 return (struct intel_blend_state *) obj;
114}
115
116static inline struct intel_ds_state *intel_ds_state(XGL_VIEWPORT_STATE_OBJECT state)
117{
118 return (struct intel_ds_state *) state;
119}
120
121static inline struct intel_ds_state *intel_ds_state_from_obj(struct intel_obj *obj)
122{
123 return (struct intel_ds_state *) obj;
124}
125
126XGL_RESULT intel_viewport_state_create(struct intel_dev *dev,
127 const XGL_VIEWPORT_STATE_CREATE_INFO *info,
128 struct intel_viewport_state **state_ret);
129void intel_viewport_state_destroy(struct intel_viewport_state *state);
130
131XGL_RESULT intel_raster_state_create(struct intel_dev *dev,
132 const XGL_RASTER_STATE_CREATE_INFO *info,
133 struct intel_raster_state **state_ret);
134void intel_raster_state_destroy(struct intel_raster_state *state);
135
136XGL_RESULT intel_msaa_state_create(struct intel_dev *dev,
137 const XGL_MSAA_STATE_CREATE_INFO *info,
138 struct intel_msaa_state **state_ret);
139void intel_msaa_state_destroy(struct intel_msaa_state *state);
140
141XGL_RESULT intel_blend_state_create(struct intel_dev *dev,
142 const XGL_COLOR_BLEND_STATE_CREATE_INFO *info,
143 struct intel_blend_state **state_ret);
144void intel_blend_state_destroy(struct intel_blend_state *state);
145
146XGL_RESULT intel_ds_state_create(struct intel_dev *dev,
147 const XGL_DEPTH_STENCIL_STATE_CREATE_INFO *info,
148 struct intel_ds_state **state_ret);
149void intel_ds_state_destroy(struct intel_ds_state *state);
150
151XGL_RESULT XGLAPI intelCreateViewportState(
152 XGL_DEVICE device,
153 const XGL_VIEWPORT_STATE_CREATE_INFO* pCreateInfo,
154 XGL_VIEWPORT_STATE_OBJECT* pState);
155
156XGL_RESULT XGLAPI intelCreateRasterState(
157 XGL_DEVICE device,
158 const XGL_RASTER_STATE_CREATE_INFO* pCreateInfo,
159 XGL_RASTER_STATE_OBJECT* pState);
160
161XGL_RESULT XGLAPI intelCreateMsaaState(
162 XGL_DEVICE device,
163 const XGL_MSAA_STATE_CREATE_INFO* pCreateInfo,
164 XGL_MSAA_STATE_OBJECT* pState);
165
166XGL_RESULT XGLAPI intelCreateColorBlendState(
167 XGL_DEVICE device,
168 const XGL_COLOR_BLEND_STATE_CREATE_INFO* pCreateInfo,
169 XGL_COLOR_BLEND_STATE_OBJECT* pState);
170
171XGL_RESULT XGLAPI intelCreateDepthStencilState(
172 XGL_DEVICE device,
173 const XGL_DEPTH_STENCIL_STATE_CREATE_INFO* pCreateInfo,
174 XGL_DEPTH_STENCIL_STATE_OBJECT* pState);
175
176#endif /* STATE_H */