• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google LLC
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #include "vkr_pipeline.h"
7 
8 #include "vkr_pipeline_gen.h"
9 
10 static void
vkr_dispatch_vkCreateShaderModule(struct vn_dispatch_context * dispatch,struct vn_command_vkCreateShaderModule * args)11 vkr_dispatch_vkCreateShaderModule(struct vn_dispatch_context *dispatch,
12                                   struct vn_command_vkCreateShaderModule *args)
13 {
14    vkr_shader_module_create_and_add(dispatch->data, args);
15 }
16 
17 static void
vkr_dispatch_vkDestroyShaderModule(struct vn_dispatch_context * dispatch,struct vn_command_vkDestroyShaderModule * args)18 vkr_dispatch_vkDestroyShaderModule(struct vn_dispatch_context *dispatch,
19                                    struct vn_command_vkDestroyShaderModule *args)
20 {
21    vkr_shader_module_destroy_and_remove(dispatch->data, args);
22 }
23 
24 static void
vkr_dispatch_vkCreatePipelineLayout(struct vn_dispatch_context * dispatch,struct vn_command_vkCreatePipelineLayout * args)25 vkr_dispatch_vkCreatePipelineLayout(struct vn_dispatch_context *dispatch,
26                                     struct vn_command_vkCreatePipelineLayout *args)
27 {
28    vkr_pipeline_layout_create_and_add(dispatch->data, args);
29 }
30 
31 static void
vkr_dispatch_vkDestroyPipelineLayout(struct vn_dispatch_context * dispatch,struct vn_command_vkDestroyPipelineLayout * args)32 vkr_dispatch_vkDestroyPipelineLayout(struct vn_dispatch_context *dispatch,
33                                      struct vn_command_vkDestroyPipelineLayout *args)
34 {
35    vkr_pipeline_layout_destroy_and_remove(dispatch->data, args);
36 }
37 
38 static void
vkr_dispatch_vkCreatePipelineCache(struct vn_dispatch_context * dispatch,struct vn_command_vkCreatePipelineCache * args)39 vkr_dispatch_vkCreatePipelineCache(struct vn_dispatch_context *dispatch,
40                                    struct vn_command_vkCreatePipelineCache *args)
41 {
42    vkr_pipeline_cache_create_and_add(dispatch->data, args);
43 }
44 
45 static void
vkr_dispatch_vkDestroyPipelineCache(struct vn_dispatch_context * dispatch,struct vn_command_vkDestroyPipelineCache * args)46 vkr_dispatch_vkDestroyPipelineCache(struct vn_dispatch_context *dispatch,
47                                     struct vn_command_vkDestroyPipelineCache *args)
48 {
49    vkr_pipeline_cache_destroy_and_remove(dispatch->data, args);
50 }
51 
52 static void
vkr_dispatch_vkGetPipelineCacheData(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkGetPipelineCacheData * args)53 vkr_dispatch_vkGetPipelineCacheData(UNUSED struct vn_dispatch_context *dispatch,
54                                     struct vn_command_vkGetPipelineCacheData *args)
55 {
56    vn_replace_vkGetPipelineCacheData_args_handle(args);
57    args->ret = vkGetPipelineCacheData(args->device, args->pipelineCache, args->pDataSize,
58                                       args->pData);
59 }
60 
61 static void
vkr_dispatch_vkMergePipelineCaches(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkMergePipelineCaches * args)62 vkr_dispatch_vkMergePipelineCaches(UNUSED struct vn_dispatch_context *dispatch,
63                                    struct vn_command_vkMergePipelineCaches *args)
64 {
65    vn_replace_vkMergePipelineCaches_args_handle(args);
66    args->ret = vkMergePipelineCaches(args->device, args->dstCache, args->srcCacheCount,
67                                      args->pSrcCaches);
68 }
69 
70 static void
vkr_dispatch_vkCreateGraphicsPipelines(struct vn_dispatch_context * dispatch,struct vn_command_vkCreateGraphicsPipelines * args)71 vkr_dispatch_vkCreateGraphicsPipelines(struct vn_dispatch_context *dispatch,
72                                        struct vn_command_vkCreateGraphicsPipelines *args)
73 {
74    struct vkr_context *ctx = dispatch->data;
75    struct vkr_device *dev = vkr_device_from_handle(args->device);
76    struct object_array arr;
77 
78    if (vkr_graphics_pipeline_create_array(ctx, args, &arr) != VK_SUCCESS)
79       return;
80 
81    vkr_pipeline_add_array(ctx, dev, &arr);
82 }
83 
84 static void
vkr_dispatch_vkCreateComputePipelines(struct vn_dispatch_context * dispatch,struct vn_command_vkCreateComputePipelines * args)85 vkr_dispatch_vkCreateComputePipelines(struct vn_dispatch_context *dispatch,
86                                       struct vn_command_vkCreateComputePipelines *args)
87 {
88    struct vkr_context *ctx = dispatch->data;
89    struct vkr_device *dev = vkr_device_from_handle(args->device);
90    struct object_array arr;
91 
92    if (vkr_compute_pipeline_create_array(ctx, args, &arr) != VK_SUCCESS)
93       return;
94 
95    vkr_pipeline_add_array(ctx, dev, &arr);
96 }
97 
98 static void
vkr_dispatch_vkDestroyPipeline(struct vn_dispatch_context * dispatch,struct vn_command_vkDestroyPipeline * args)99 vkr_dispatch_vkDestroyPipeline(struct vn_dispatch_context *dispatch,
100                                struct vn_command_vkDestroyPipeline *args)
101 {
102    vkr_pipeline_destroy_and_remove(dispatch->data, args);
103 }
104 
105 void
vkr_context_init_shader_module_dispatch(struct vkr_context * ctx)106 vkr_context_init_shader_module_dispatch(struct vkr_context *ctx)
107 {
108    struct vn_dispatch_context *dispatch = &ctx->dispatch;
109 
110    dispatch->dispatch_vkCreateShaderModule = vkr_dispatch_vkCreateShaderModule;
111    dispatch->dispatch_vkDestroyShaderModule = vkr_dispatch_vkDestroyShaderModule;
112 }
113 
114 void
vkr_context_init_pipeline_layout_dispatch(struct vkr_context * ctx)115 vkr_context_init_pipeline_layout_dispatch(struct vkr_context *ctx)
116 {
117    struct vn_dispatch_context *dispatch = &ctx->dispatch;
118 
119    dispatch->dispatch_vkCreatePipelineLayout = vkr_dispatch_vkCreatePipelineLayout;
120    dispatch->dispatch_vkDestroyPipelineLayout = vkr_dispatch_vkDestroyPipelineLayout;
121 }
122 
123 void
vkr_context_init_pipeline_cache_dispatch(struct vkr_context * ctx)124 vkr_context_init_pipeline_cache_dispatch(struct vkr_context *ctx)
125 {
126    struct vn_dispatch_context *dispatch = &ctx->dispatch;
127 
128    dispatch->dispatch_vkCreatePipelineCache = vkr_dispatch_vkCreatePipelineCache;
129    dispatch->dispatch_vkDestroyPipelineCache = vkr_dispatch_vkDestroyPipelineCache;
130    dispatch->dispatch_vkGetPipelineCacheData = vkr_dispatch_vkGetPipelineCacheData;
131    dispatch->dispatch_vkMergePipelineCaches = vkr_dispatch_vkMergePipelineCaches;
132 }
133 
134 void
vkr_context_init_pipeline_dispatch(struct vkr_context * ctx)135 vkr_context_init_pipeline_dispatch(struct vkr_context *ctx)
136 {
137    struct vn_dispatch_context *dispatch = &ctx->dispatch;
138 
139    dispatch->dispatch_vkCreateGraphicsPipelines = vkr_dispatch_vkCreateGraphicsPipelines;
140    dispatch->dispatch_vkCreateComputePipelines = vkr_dispatch_vkCreateComputePipelines;
141    dispatch->dispatch_vkDestroyPipeline = vkr_dispatch_vkDestroyPipeline;
142 }
143