blob: 46382da42b5bfb1b03921f89eeafb7bea6207d7e [file] [log] [blame]
Chia-I Wu5a323262014-08-11 10:31:53 +08001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Chia-I Wu5a323262014-08-11 10:31:53 +08003 *
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.
Chia-I Wu44e42362014-09-02 08:32:09 +080023 *
24 * Authors:
25 * Chia-I Wu <olv@lunarg.com>
Chia-I Wu5a323262014-08-11 10:31:53 +080026 */
27
28#ifndef VIEW_H
29#define VIEW_H
30
31#include "obj.h"
32#include "intel.h"
33
34struct intel_img;
35struct intel_mem;
36
37struct intel_null_view {
Chia-I Wuaabb3602014-08-19 14:18:23 +080038 /* this is not an intel_obj */
Chia-I Wu5a323262014-08-11 10:31:53 +080039
40 /* SURFACE_STATE */
41 uint32_t cmd[8];
Mark Lobodzinskie2d07a52015-01-29 08:55:56 -060042 uint32_t cmd_len;
Chia-I Wu5a323262014-08-11 10:31:53 +080043};
44
Chia-I Wu714df452015-01-01 07:55:04 +080045struct intel_buf_view {
46 struct intel_obj obj;
Chia-I Wu5a323262014-08-11 10:31:53 +080047
Chia-I Wu714df452015-01-01 07:55:04 +080048 struct intel_buf *buf;
Chia-I Wu5a323262014-08-11 10:31:53 +080049
50 /* SURFACE_STATE */
51 uint32_t cmd[8];
Chia-I Wu34341ba2015-01-16 17:38:37 +080052 uint32_t fs_cmd[8];
Mark Lobodzinskie2d07a52015-01-29 08:55:56 -060053 uint32_t cmd_len;
Chia-I Wu5a323262014-08-11 10:31:53 +080054};
55
56struct intel_img_view {
57 struct intel_obj obj;
58
59 struct intel_img *img;
60
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060061 VkChannelMapping shader_swizzles;
Chia-I Wu5a323262014-08-11 10:31:53 +080062
63 /* SURFACE_STATE */
64 uint32_t cmd[8];
Mark Lobodzinskie2d07a52015-01-29 08:55:56 -060065 uint32_t cmd_len;
Chia-I Wu5a323262014-08-11 10:31:53 +080066};
67
Chia-I Wu3d4d4a62015-07-09 10:34:10 +080068struct intel_att_view {
Chia-I Wu5a323262014-08-11 10:31:53 +080069 struct intel_obj obj;
70
71 struct intel_img *img;
72
Chris Forbesfff9bf42015-06-15 15:26:19 +120073 uint32_t mipLevel;
74 uint32_t baseArraySlice;
Mark Lobodzinskie2d07a52015-01-29 08:55:56 -060075 uint32_t array_size;
Mark Lobodzinski71fcc2d2015-01-27 13:24:03 -060076
Chia-I Wu3d4d4a62015-07-09 10:34:10 +080077 /* SURFACE_STATE for readback */
Chia-I Wu5a323262014-08-11 10:31:53 +080078 uint32_t cmd[8];
Mark Lobodzinskie2d07a52015-01-29 08:55:56 -060079 uint32_t cmd_len;
Mark Lobodzinski71fcc2d2015-01-27 13:24:03 -060080
Chia-I Wu5a323262014-08-11 10:31:53 +080081 /*
Chia-I Wu3d4d4a62015-07-09 10:34:10 +080082 * SURFACE_STATE when is_rt is true. Otherwise,
83 *
Chia-I Wu5a323262014-08-11 10:31:53 +080084 * 3DSTATE_DEPTH_BUFFER
85 * 3DSTATE_STENCIL_BUFFER
86 * 3DSTATE_HIER_DEPTH_BUFFER
87 */
Chia-I Wu3d4d4a62015-07-09 10:34:10 +080088 uint32_t att_cmd[10];
89 bool is_rt;
Chia-I Wu3defd1f2015-02-18 12:21:22 -070090 bool has_stencil;
91 bool has_hiz;
Chia-I Wu5a323262014-08-11 10:31:53 +080092};
93
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060094static inline struct intel_buf_view *intel_buf_view(VkBufferView view)
Chia-I Wu714df452015-01-01 07:55:04 +080095{
Tony Barbourde4124d2015-07-03 10:33:54 -060096 return *(struct intel_buf_view **) &view;
Chia-I Wu714df452015-01-01 07:55:04 +080097}
98
99static inline struct intel_buf_view *intel_buf_view_from_obj(struct intel_obj *obj)
100{
101 return (struct intel_buf_view *) obj;
102}
103
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600104static inline struct intel_img_view *intel_img_view(VkImageView view)
Chia-I Wu5a323262014-08-11 10:31:53 +0800105{
Tony Barbourde4124d2015-07-03 10:33:54 -0600106 return *(struct intel_img_view **) &view;
Chia-I Wu5a323262014-08-11 10:31:53 +0800107}
108
109static inline struct intel_img_view *intel_img_view_from_obj(struct intel_obj *obj)
110{
111 return (struct intel_img_view *) obj;
112}
113
Chia-I Wuc278df82015-07-07 11:50:03 +0800114static inline struct intel_att_view *intel_att_view(VkAttachmentView view)
Chia-I Wu5a323262014-08-11 10:31:53 +0800115{
Tony Barbourde4124d2015-07-03 10:33:54 -0600116 return *(struct intel_att_view **) &view;
Chia-I Wu5a323262014-08-11 10:31:53 +0800117}
118
Chia-I Wu3d4d4a62015-07-09 10:34:10 +0800119static inline struct intel_att_view *intel_att_view_from_obj(struct intel_obj *obj)
Chia-I Wu5a323262014-08-11 10:31:53 +0800120{
Chia-I Wu3d4d4a62015-07-09 10:34:10 +0800121 return (struct intel_att_view *) obj;
Chia-I Wu5a323262014-08-11 10:31:53 +0800122}
123
124void intel_null_view_init(struct intel_null_view *view,
125 struct intel_dev *dev);
126
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600127VkResult intel_buf_view_create(struct intel_dev *dev,
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600128 const VkBufferViewCreateInfo *info,
Chia-I Wu714df452015-01-01 07:55:04 +0800129 struct intel_buf_view **view_ret);
130
131void intel_buf_view_destroy(struct intel_buf_view *view);
Chia-I Wu5a323262014-08-11 10:31:53 +0800132
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600133VkResult intel_img_view_create(struct intel_dev *dev,
134 const VkImageViewCreateInfo *info,
Chia-I Wu5a323262014-08-11 10:31:53 +0800135 struct intel_img_view **view_ret);
136void intel_img_view_destroy(struct intel_img_view *view);
137
Chia-I Wuc278df82015-07-07 11:50:03 +0800138VkResult intel_att_view_create(struct intel_dev *dev,
139 const VkAttachmentViewCreateInfo *info,
140 struct intel_att_view **view_ret);
Chia-I Wu3d4d4a62015-07-09 10:34:10 +0800141void intel_att_view_destroy(struct intel_att_view *view);
Chia-I Wu5a323262014-08-11 10:31:53 +0800142
Chia-I Wu5a323262014-08-11 10:31:53 +0800143#endif /* VIEW_H */