blob: 95b3581596dba1f91e89b317eda4238d263eb77b [file] [edit]
/*
* Copyright © 2024 Valve Corporation
*
* SPDX-License-Identifier: MIT
*/
#ifndef RADV_DGC_H
#define RADV_DGC_H
#include "compiler/shader_enums.h"
#include "radv_constants.h"
#include "vk_device_generated_commands.h"
struct radv_cmd_buffer;
struct radv_device;
enum radv_queue_family;
struct radv_indirect_command_layout {
struct vk_indirect_command_layout vk;
uint64_t push_constant_mask;
uint32_t push_constant_offsets[MAX_PUSH_CONSTANTS_SIZE / 4];
uint64_t sequence_index_mask;
VkPipelineLayout pipeline_layout;
VkPipeline pipeline;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(radv_indirect_command_layout, vk.base, VkIndirectCommandsLayoutEXT,
VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT)
struct radv_indirect_execution_set {
struct vk_object_base base;
struct radeon_winsys_bo *bo;
uint64_t va;
uint8_t *mapped_ptr;
uint32_t stride;
uint32_t compute_scratch_size_per_wave;
uint32_t compute_scratch_waves;
};
VK_DEFINE_NONDISP_HANDLE_CASTS(radv_indirect_execution_set, base, VkIndirectExecutionSetEXT,
VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT);
uint32_t radv_dgc_get_buffer_alignment(const struct radv_device *device);
uint32_t radv_get_indirect_main_cmdbuf_offset(const VkGeneratedCommandsInfoEXT *pGeneratedCommandsInfo);
uint32_t radv_get_indirect_ace_cmdbuf_offset(const VkGeneratedCommandsInfoEXT *pGeneratedCommandsInfo);
uint32_t radv_get_indirect_main_cmdbuf_size(const VkGeneratedCommandsInfoEXT *pGeneratedCommandsInfo);
uint32_t radv_get_indirect_ace_cmdbuf_size(const VkGeneratedCommandsInfoEXT *pGeneratedCommandsInfo);
uint32_t radv_get_indirect_main_trailer_offset(const VkGeneratedCommandsInfoEXT *pGeneratedCommandsInfo);
uint32_t radv_get_indirect_ace_trailer_offset(const VkGeneratedCommandsInfoEXT *pGeneratedCommandsInfo);
void radv_prepare_dgc(struct radv_cmd_buffer *cmd_buffer, const VkGeneratedCommandsInfoEXT *pGeneratedCommandsInfo,
struct radv_cmd_buffer *state_cmd_buffer, bool cond_render_enabled);
bool radv_use_dgc_predication(struct radv_cmd_buffer *cmd_buffer,
const VkGeneratedCommandsInfoEXT *pGeneratedCommandsInfo);
struct radv_shader *radv_dgc_get_shader(const VkGeneratedCommandsPipelineInfoEXT *pipeline_info,
const VkGeneratedCommandsShaderInfoEXT *eso_info, gl_shader_stage stage);
#endif /* RADV_DGC_H */