xref: /aosp_15_r20/external/virglrenderer/src/venus/vkr_render_pass.c (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker /*
2*bbecb9d1SAndroid Build Coastguard Worker  * Copyright 2020 Google LLC
3*bbecb9d1SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*bbecb9d1SAndroid Build Coastguard Worker  */
5*bbecb9d1SAndroid Build Coastguard Worker 
6*bbecb9d1SAndroid Build Coastguard Worker #include "vkr_render_pass.h"
7*bbecb9d1SAndroid Build Coastguard Worker 
8*bbecb9d1SAndroid Build Coastguard Worker #include "vkr_render_pass_gen.h"
9*bbecb9d1SAndroid Build Coastguard Worker 
10*bbecb9d1SAndroid Build Coastguard Worker static void
vkr_dispatch_vkCreateRenderPass(struct vn_dispatch_context * dispatch,struct vn_command_vkCreateRenderPass * args)11*bbecb9d1SAndroid Build Coastguard Worker vkr_dispatch_vkCreateRenderPass(struct vn_dispatch_context *dispatch,
12*bbecb9d1SAndroid Build Coastguard Worker                                 struct vn_command_vkCreateRenderPass *args)
13*bbecb9d1SAndroid Build Coastguard Worker {
14*bbecb9d1SAndroid Build Coastguard Worker    vkr_render_pass_create_and_add(dispatch->data, args);
15*bbecb9d1SAndroid Build Coastguard Worker }
16*bbecb9d1SAndroid Build Coastguard Worker 
17*bbecb9d1SAndroid Build Coastguard Worker static void
vkr_dispatch_vkCreateRenderPass2(struct vn_dispatch_context * dispatch,struct vn_command_vkCreateRenderPass2 * args)18*bbecb9d1SAndroid Build Coastguard Worker vkr_dispatch_vkCreateRenderPass2(struct vn_dispatch_context *dispatch,
19*bbecb9d1SAndroid Build Coastguard Worker                                  struct vn_command_vkCreateRenderPass2 *args)
20*bbecb9d1SAndroid Build Coastguard Worker {
21*bbecb9d1SAndroid Build Coastguard Worker    struct vkr_context *ctx = dispatch->data;
22*bbecb9d1SAndroid Build Coastguard Worker    struct vkr_device *dev = vkr_device_from_handle(args->device);
23*bbecb9d1SAndroid Build Coastguard Worker    struct vn_device_proc_table *vk = &dev->proc_table;
24*bbecb9d1SAndroid Build Coastguard Worker 
25*bbecb9d1SAndroid Build Coastguard Worker    struct vkr_render_pass *pass = vkr_context_alloc_object(
26*bbecb9d1SAndroid Build Coastguard Worker       ctx, sizeof(*pass), VK_OBJECT_TYPE_RENDER_PASS, args->pRenderPass);
27*bbecb9d1SAndroid Build Coastguard Worker    if (!pass) {
28*bbecb9d1SAndroid Build Coastguard Worker       args->ret = VK_ERROR_OUT_OF_HOST_MEMORY;
29*bbecb9d1SAndroid Build Coastguard Worker       return;
30*bbecb9d1SAndroid Build Coastguard Worker    }
31*bbecb9d1SAndroid Build Coastguard Worker 
32*bbecb9d1SAndroid Build Coastguard Worker    vn_replace_vkCreateRenderPass2_args_handle(args);
33*bbecb9d1SAndroid Build Coastguard Worker    args->ret = vk->CreateRenderPass2(args->device, args->pCreateInfo, NULL,
34*bbecb9d1SAndroid Build Coastguard Worker                                      &pass->base.handle.render_pass);
35*bbecb9d1SAndroid Build Coastguard Worker    if (args->ret != VK_SUCCESS) {
36*bbecb9d1SAndroid Build Coastguard Worker       free(pass);
37*bbecb9d1SAndroid Build Coastguard Worker       return;
38*bbecb9d1SAndroid Build Coastguard Worker    }
39*bbecb9d1SAndroid Build Coastguard Worker 
40*bbecb9d1SAndroid Build Coastguard Worker    vkr_device_add_object(ctx, dev, &pass->base);
41*bbecb9d1SAndroid Build Coastguard Worker }
42*bbecb9d1SAndroid Build Coastguard Worker 
43*bbecb9d1SAndroid Build Coastguard Worker static void
vkr_dispatch_vkDestroyRenderPass(struct vn_dispatch_context * dispatch,struct vn_command_vkDestroyRenderPass * args)44*bbecb9d1SAndroid Build Coastguard Worker vkr_dispatch_vkDestroyRenderPass(struct vn_dispatch_context *dispatch,
45*bbecb9d1SAndroid Build Coastguard Worker                                  struct vn_command_vkDestroyRenderPass *args)
46*bbecb9d1SAndroid Build Coastguard Worker {
47*bbecb9d1SAndroid Build Coastguard Worker    vkr_render_pass_destroy_and_remove(dispatch->data, args);
48*bbecb9d1SAndroid Build Coastguard Worker }
49*bbecb9d1SAndroid Build Coastguard Worker 
50*bbecb9d1SAndroid Build Coastguard Worker static void
vkr_dispatch_vkGetRenderAreaGranularity(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkGetRenderAreaGranularity * args)51*bbecb9d1SAndroid Build Coastguard Worker vkr_dispatch_vkGetRenderAreaGranularity(UNUSED struct vn_dispatch_context *dispatch,
52*bbecb9d1SAndroid Build Coastguard Worker                                         struct vn_command_vkGetRenderAreaGranularity *args)
53*bbecb9d1SAndroid Build Coastguard Worker {
54*bbecb9d1SAndroid Build Coastguard Worker    struct vkr_device *dev = vkr_device_from_handle(args->device);
55*bbecb9d1SAndroid Build Coastguard Worker    struct vn_device_proc_table *vk = &dev->proc_table;
56*bbecb9d1SAndroid Build Coastguard Worker 
57*bbecb9d1SAndroid Build Coastguard Worker    vn_replace_vkGetRenderAreaGranularity_args_handle(args);
58*bbecb9d1SAndroid Build Coastguard Worker    vk->GetRenderAreaGranularity(args->device, args->renderPass, args->pGranularity);
59*bbecb9d1SAndroid Build Coastguard Worker }
60*bbecb9d1SAndroid Build Coastguard Worker 
61*bbecb9d1SAndroid Build Coastguard Worker static void
vkr_dispatch_vkCreateFramebuffer(struct vn_dispatch_context * dispatch,struct vn_command_vkCreateFramebuffer * args)62*bbecb9d1SAndroid Build Coastguard Worker vkr_dispatch_vkCreateFramebuffer(struct vn_dispatch_context *dispatch,
63*bbecb9d1SAndroid Build Coastguard Worker                                  struct vn_command_vkCreateFramebuffer *args)
64*bbecb9d1SAndroid Build Coastguard Worker {
65*bbecb9d1SAndroid Build Coastguard Worker    vkr_framebuffer_create_and_add(dispatch->data, args);
66*bbecb9d1SAndroid Build Coastguard Worker }
67*bbecb9d1SAndroid Build Coastguard Worker 
68*bbecb9d1SAndroid Build Coastguard Worker static void
vkr_dispatch_vkDestroyFramebuffer(struct vn_dispatch_context * dispatch,struct vn_command_vkDestroyFramebuffer * args)69*bbecb9d1SAndroid Build Coastguard Worker vkr_dispatch_vkDestroyFramebuffer(struct vn_dispatch_context *dispatch,
70*bbecb9d1SAndroid Build Coastguard Worker                                   struct vn_command_vkDestroyFramebuffer *args)
71*bbecb9d1SAndroid Build Coastguard Worker {
72*bbecb9d1SAndroid Build Coastguard Worker    vkr_framebuffer_destroy_and_remove(dispatch->data, args);
73*bbecb9d1SAndroid Build Coastguard Worker }
74*bbecb9d1SAndroid Build Coastguard Worker 
75*bbecb9d1SAndroid Build Coastguard Worker void
vkr_context_init_render_pass_dispatch(struct vkr_context * ctx)76*bbecb9d1SAndroid Build Coastguard Worker vkr_context_init_render_pass_dispatch(struct vkr_context *ctx)
77*bbecb9d1SAndroid Build Coastguard Worker {
78*bbecb9d1SAndroid Build Coastguard Worker    struct vn_dispatch_context *dispatch = &ctx->dispatch;
79*bbecb9d1SAndroid Build Coastguard Worker 
80*bbecb9d1SAndroid Build Coastguard Worker    dispatch->dispatch_vkCreateRenderPass = vkr_dispatch_vkCreateRenderPass;
81*bbecb9d1SAndroid Build Coastguard Worker    dispatch->dispatch_vkCreateRenderPass2 = vkr_dispatch_vkCreateRenderPass2;
82*bbecb9d1SAndroid Build Coastguard Worker    dispatch->dispatch_vkDestroyRenderPass = vkr_dispatch_vkDestroyRenderPass;
83*bbecb9d1SAndroid Build Coastguard Worker    dispatch->dispatch_vkGetRenderAreaGranularity =
84*bbecb9d1SAndroid Build Coastguard Worker       vkr_dispatch_vkGetRenderAreaGranularity;
85*bbecb9d1SAndroid Build Coastguard Worker }
86*bbecb9d1SAndroid Build Coastguard Worker 
87*bbecb9d1SAndroid Build Coastguard Worker void
vkr_context_init_framebuffer_dispatch(struct vkr_context * ctx)88*bbecb9d1SAndroid Build Coastguard Worker vkr_context_init_framebuffer_dispatch(struct vkr_context *ctx)
89*bbecb9d1SAndroid Build Coastguard Worker {
90*bbecb9d1SAndroid Build Coastguard Worker    struct vn_dispatch_context *dispatch = &ctx->dispatch;
91*bbecb9d1SAndroid Build Coastguard Worker 
92*bbecb9d1SAndroid Build Coastguard Worker    dispatch->dispatch_vkCreateFramebuffer = vkr_dispatch_vkCreateFramebuffer;
93*bbecb9d1SAndroid Build Coastguard Worker    dispatch->dispatch_vkDestroyFramebuffer = vkr_dispatch_vkDestroyFramebuffer;
94*bbecb9d1SAndroid Build Coastguard Worker }
95