2 * Copyright 2013 Advanced Micro Devices, Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * Authors: Marek Olšák <maraeo@gmail.com>
27 #include "r600_pipe_common.h"
29 void r600_common_screen_init(struct r600_common_screen
*rscreen
,
30 struct radeon_winsys
*ws
)
32 ws
->query_info(ws
, &rscreen
->info
);
35 rscreen
->family
= rscreen
->info
.family
;
36 rscreen
->chip_class
= rscreen
->info
.chip_class
;
39 bool r600_common_context_init(struct r600_common_context
*rctx
,
40 struct r600_common_screen
*rscreen
)
42 rctx
->ws
= rscreen
->ws
;
43 rctx
->family
= rscreen
->family
;
44 rctx
->chip_class
= rscreen
->chip_class
;
46 r600_streamout_init(rctx
);
48 rctx
->allocator_so_filled_size
= u_suballocator_create(&rctx
->b
, 4096, 4,
49 0, PIPE_USAGE_STATIC
, TRUE
);
50 if (!rctx
->allocator_so_filled_size
)
56 void r600_common_context_cleanup(struct r600_common_context
*rctx
)
58 if (rctx
->allocator_so_filled_size
) {
59 u_suballocator_destroy(rctx
->allocator_so_filled_size
);
63 void r600_context_add_resource_size(struct pipe_context
*ctx
, struct pipe_resource
*r
)
65 struct r600_common_context
*rctx
= (struct r600_common_context
*)ctx
;
66 struct r600_resource
*rr
= (struct r600_resource
*)r
;
73 * The idea is to compute a gross estimate of memory requirement of
74 * each draw call. After each draw call, memory will be precisely
75 * accounted. So the uncertainty is only on the current draw call.
76 * In practice this gave very good estimate (+/- 10% of the target
79 if (rr
->domains
& RADEON_DOMAIN_GTT
) {
80 rctx
->gtt
+= rr
->buf
->size
;
82 if (rr
->domains
& RADEON_DOMAIN_VRAM
) {
83 rctx
->vram
+= rr
->buf
->size
;