blob: b2bf1006cdd721fe099f03d367ee684583c8f0dc [file] [log] [blame]
Chia-I Wu5a323262014-08-11 10:31:53 +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#include "dev.h"
26#include "gpu.h"
27#include "img.h"
28#include "mem.h"
29#include "view.h"
30
31void intel_null_view_init(struct intel_null_view *view,
32 struct intel_dev *dev)
33{
34 memset(view, 0, sizeof(*view));
35}
36
37void intel_mem_view_init(struct intel_mem_view *view,
38 struct intel_dev *dev,
39 const XGL_MEMORY_VIEW_ATTACH_INFO *info)
40{
41 memset(view, 0, sizeof(*view));
42
43 view->mem = intel_mem(info->mem);
44}
45
46static void img_view_destroy(struct intel_obj *obj)
47{
48 struct intel_img_view *view = intel_img_view_from_obj(obj);
49
50 intel_img_view_destroy(view);
51}
52
53XGL_RESULT intel_img_view_create(struct intel_dev *dev,
54 const XGL_IMAGE_VIEW_CREATE_INFO *info,
55 struct intel_img_view **view_ret)
56{
57 struct intel_img *img = intel_img(info->image);
58 struct intel_img_view *view;
59
60 view = (struct intel_img_view *) intel_base_create(dev, sizeof(*view),
61 dev->base.dbg, XGL_DBG_OBJECT_IMAGE_VIEW, info, 0);
62 if (!view)
63 return XGL_ERROR_OUT_OF_MEMORY;
64
65 view->obj.destroy = img_view_destroy;
66
67 view->img = img;
68 view->swizzles = info->channels;
69 view->min_lod = info->minLod;
70
71 *view_ret = view;
72
73 return XGL_SUCCESS;
74}
75
76void intel_img_view_destroy(struct intel_img_view *view)
77{
78 intel_base_destroy(&view->obj.base);
79}
80
81static void rt_view_destroy(struct intel_obj *obj)
82{
83 struct intel_rt_view *view = intel_rt_view_from_obj(obj);
84
85 intel_rt_view_destroy(view);
86}
87
88XGL_RESULT intel_rt_view_create(struct intel_dev *dev,
89 const XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO *info,
90 struct intel_rt_view **view_ret)
91{
92 struct intel_img *img = intel_img(info->image);
93 struct intel_rt_view *view;
94
95 view = (struct intel_rt_view *) intel_base_create(dev, sizeof(*view),
96 dev->base.dbg, XGL_DBG_OBJECT_COLOR_TARGET_VIEW, info, 0);
97 if (!view)
98 return XGL_ERROR_OUT_OF_MEMORY;
99
100 view->obj.destroy = rt_view_destroy;
101
102 view->img = img;
103
104 *view_ret = view;
105
106 return XGL_SUCCESS;
107}
108
109void intel_rt_view_destroy(struct intel_rt_view *view)
110{
111 intel_base_destroy(&view->obj.base);
112}
113
114static void ds_view_destroy(struct intel_obj *obj)
115{
116 struct intel_ds_view *view = intel_ds_view_from_obj(obj);
117
118 intel_ds_view_destroy(view);
119}
120
121XGL_RESULT intel_ds_view_create(struct intel_dev *dev,
122 const XGL_DEPTH_STENCIL_VIEW_CREATE_INFO *info,
123 struct intel_ds_view **view_ret)
124{
125 struct intel_img *img = intel_img(info->image);
126 struct intel_ds_view *view;
127
128 view = (struct intel_ds_view *) intel_base_create(dev, sizeof(*view),
129 dev->base.dbg, XGL_DBG_OBJECT_DEPTH_STENCIL_VIEW, info, 0);
130 if (!view)
131 return XGL_ERROR_OUT_OF_MEMORY;
132
133 view->obj.destroy = ds_view_destroy;
134
135 view->img = img;
136
137 *view_ret = view;
138
139 return XGL_SUCCESS;
140}
141
142void intel_ds_view_destroy(struct intel_ds_view *view)
143{
144 intel_base_destroy(&view->obj.base);
145}
146
147XGL_RESULT XGLAPI intelCreateImageView(
148 XGL_DEVICE device,
149 const XGL_IMAGE_VIEW_CREATE_INFO* pCreateInfo,
150 XGL_IMAGE_VIEW* pView)
151{
152 struct intel_dev *dev = intel_dev(device);
153
154 return intel_img_view_create(dev, pCreateInfo,
155 (struct intel_img_view **) pView);
156}
157
158XGL_RESULT XGLAPI intelCreateColorAttachmentView(
159 XGL_DEVICE device,
160 const XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO* pCreateInfo,
161 XGL_COLOR_ATTACHMENT_VIEW* pView)
162{
163 struct intel_dev *dev = intel_dev(device);
164
165 return intel_rt_view_create(dev, pCreateInfo,
166 (struct intel_rt_view **) pView);
167}
168
169XGL_RESULT XGLAPI intelCreateDepthStencilView(
170 XGL_DEVICE device,
171 const XGL_DEPTH_STENCIL_VIEW_CREATE_INFO* pCreateInfo,
172 XGL_DEPTH_STENCIL_VIEW* pView)
173{
174 struct intel_dev *dev = intel_dev(device);
175
176 return intel_ds_view_create(dev, pCreateInfo,
177 (struct intel_ds_view **) pView);
178}