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