xref: /aosp_15_r20/external/mesa3d/src/amd/vulkan/winsys/null/radv_null_cs.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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