1 /*
2 * Copyright © 2020 Valve Corporation
3 *
4 * based on amdgpu winsys.
5 * Copyright © 2016 Red Hat.
6 * Copyright © 2016 Bas Nieuwenhuizen
7 *
8 * SPDX-License-Identifier: MIT
9 */
10
11 #include "radv_null_cs.h"
12 #include "util/u_memory.h"
13
14 struct radv_null_cs {
15 struct radeon_cmdbuf base;
16 struct radv_null_winsys *ws;
17 };
18
19 static inline struct radv_null_cs *
radv_null_cs(struct radeon_cmdbuf * base)20 radv_null_cs(struct radeon_cmdbuf *base)
21 {
22 return (struct radv_null_cs *)base;
23 }
24
25 static VkResult
radv_null_ctx_create(struct radeon_winsys * _ws,enum radeon_ctx_priority priority,struct radeon_winsys_ctx ** rctx)26 radv_null_ctx_create(struct radeon_winsys *_ws, enum radeon_ctx_priority priority, struct radeon_winsys_ctx **rctx)
27 {
28 struct radv_null_ctx *ctx = CALLOC_STRUCT(radv_null_ctx);
29
30 if (!ctx)
31 return VK_ERROR_OUT_OF_HOST_MEMORY;
32
33 *rctx = (struct radeon_winsys_ctx *)ctx;
34 return VK_SUCCESS;
35 }
36
37 static void
radv_null_ctx_destroy(struct radeon_winsys_ctx * rwctx)38 radv_null_ctx_destroy(struct radeon_winsys_ctx *rwctx)
39 {
40 struct radv_null_ctx *ctx = (struct radv_null_ctx *)rwctx;
41 FREE(ctx);
42 }
43
44 static enum radeon_bo_domain
radv_null_cs_domain(const struct radeon_winsys * _ws)45 radv_null_cs_domain(const struct radeon_winsys *_ws)
46 {
47 return RADEON_DOMAIN_GTT;
48 }
49
50 static struct radeon_cmdbuf *
radv_null_cs_create(struct radeon_winsys * ws,enum amd_ip_type ip_type,UNUSED bool is_secondary)51 radv_null_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type, UNUSED bool is_secondary)
52 {
53 struct radv_null_cs *cs = calloc(1, sizeof(struct radv_null_cs));
54 if (!cs)
55 return NULL;
56
57 cs->ws = radv_null_winsys(ws);
58
59 cs->base.buf = malloc(16384);
60 cs->base.max_dw = 4096;
61 if (!cs->base.buf) {
62 FREE(cs);
63 return NULL;
64 }
65
66 return &cs->base;
67 }
68
69 static void
radv_null_cs_pad(struct radeon_cmdbuf * _cs,unsigned leave_dw_space)70 radv_null_cs_pad(struct radeon_cmdbuf *_cs, unsigned leave_dw_space)
71 {
72 }
73
74 static VkResult
radv_null_cs_finalize(struct radeon_cmdbuf * _cs)75 radv_null_cs_finalize(struct radeon_cmdbuf *_cs)
76 {
77 return VK_SUCCESS;
78 }
79
80 static void
radv_null_cs_destroy(struct radeon_cmdbuf * rcs)81 radv_null_cs_destroy(struct radeon_cmdbuf *rcs)
82 {
83 struct radv_null_cs *cs = radv_null_cs(rcs);
84 FREE(cs->base.buf);
85 FREE(cs);
86 }
87
88 void
radv_null_cs_init_functions(struct radv_null_winsys * ws)89 radv_null_cs_init_functions(struct radv_null_winsys *ws)
90 {
91 ws->base.ctx_create = radv_null_ctx_create;
92 ws->base.ctx_destroy = radv_null_ctx_destroy;
93 ws->base.cs_domain = radv_null_cs_domain;
94 ws->base.cs_create = radv_null_cs_create;
95 ws->base.cs_finalize = radv_null_cs_finalize;
96 ws->base.cs_destroy = radv_null_cs_destroy;
97 ws->base.cs_pad = radv_null_cs_pad;
98 }
99