• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright © 2024 Collabora Ltd. and Red Hat Inc.
3  * SPDX-License-Identifier: MIT
4  */
5 #ifndef NVK_INDIRECT_EXECUTION_SET
6 #define NVK_INDIRECT_EXECUTION_SET 1
7 
8 #include "nvk_private.h"
9 
10 struct nvk_physical_device;
11 struct nvk_shader;
12 struct nvkmd_mem;
13 
14 enum nvk_ies_type {
15    NVK_IES_TYPE_CS_QMD,
16    NVK_IES_TYPE_GFX_SHADER,
17    NVK_IES_TYPE_GFX_PIPELINE,
18 };
19 
20 PRAGMA_DIAGNOSTIC_PUSH
21 PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
22 struct nvk_ies_cs_qmd {
23    uint32_t qmd[64];
24 };
25 PRAGMA_DIAGNOSTIC_POP
26 
27 static inline uint16_t
nvk_ies_cs_qmd_max_dw_count(struct nvk_physical_device * pdev)28 nvk_ies_cs_qmd_max_dw_count(struct nvk_physical_device *pdev)
29 {
30    return 64;
31 }
32 
33 void nvk_ies_cs_qmd_init(struct nvk_physical_device *pdev,
34                          struct nvk_ies_cs_qmd *qmd,
35                          struct nvk_shader *shader);
36 
37 PRAGMA_DIAGNOSTIC_PUSH
38 PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
39 struct nvk_ies_gfx_shader {
40    uint16_t dw_count;
41    uint16_t vtgm_dw_count;
42    uint32_t push[0];
43 };
44 PRAGMA_DIAGNOSTIC_POP
45 static_assert(sizeof(struct nvk_ies_gfx_shader) == 4,
46               "nvk_ies_gfx_shader has no holes");
47 
48 uint16_t nvk_ies_gfx_shader_max_dw_count(struct nvk_physical_device *pdev,
49                                          VkShaderStageFlags stages,
50                                          bool last_vtgm);
51 
52 PRAGMA_DIAGNOSTIC_PUSH
53 PRAGMA_DIAGNOSTIC_ERROR(-Wpadded)
54 struct nvk_ies_gfx_pipeline {
55    uint32_t dw_count;
56    uint32_t push[0];
57 };
58 PRAGMA_DIAGNOSTIC_POP
59 static_assert(sizeof(struct nvk_ies_gfx_pipeline) == 4,
60               "nvk_ies_gfx_pipeline has no holes");
61 
62 uint16_t nvk_ies_gfx_pipeline_max_dw_count(struct nvk_physical_device *pdev,
63                                            VkShaderStageFlags stages);
64 
65 struct nvk_indirect_execution_set {
66    struct vk_object_base base;
67 
68    enum nvk_ies_type type;
69    uint32_t stride_B;
70    uint32_t count;
71 
72    struct nvkmd_mem *mem;
73 };
74 
75 VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_indirect_execution_set, base,
76                                VkIndirectExecutionSetEXT,
77                                VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT);
78 
79 #endif
80