mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
Vulkan: Compute shader support
This commit is contained in:
@ -63,6 +63,10 @@ VkShaderModule CompileAndCreateGeometryShader(const std::string& source_code,
|
||||
// Compile a fragment shader and create a shader module, discarding the intermediate SPIR-V.
|
||||
VkShaderModule CompileAndCreateFragmentShader(const std::string& source_code,
|
||||
bool prepend_header = true);
|
||||
|
||||
// Compile a compute shader and create a shader module, discarding the intermediate SPIR-V.
|
||||
VkShaderModule CompileAndCreateComputeShader(const std::string& source_code,
|
||||
bool prepend_header = true);
|
||||
}
|
||||
|
||||
// Utility shader vertex format
|
||||
@ -188,4 +192,41 @@ private:
|
||||
PipelineInfo m_pipeline_info = {};
|
||||
};
|
||||
|
||||
class ComputeShaderDispatcher
|
||||
{
|
||||
public:
|
||||
ComputeShaderDispatcher(VkCommandBuffer command_buffer, VkPipelineLayout pipeline_layout,
|
||||
VkShaderModule compute_shader);
|
||||
|
||||
u8* AllocateUniformBuffer(size_t size);
|
||||
void CommitUniformBuffer(size_t size);
|
||||
|
||||
void SetPushConstants(const void* data, size_t data_size);
|
||||
|
||||
void SetSampler(size_t index, VkImageView view, VkSampler sampler);
|
||||
|
||||
void SetTexelBuffer(size_t index, VkBufferView view);
|
||||
|
||||
void SetStorageImage(VkImageView view, VkImageLayout image_layout);
|
||||
|
||||
void Dispatch(u32 groups_x, u32 groups_y, u32 groups_z);
|
||||
|
||||
private:
|
||||
void BindDescriptors();
|
||||
bool BindPipeline();
|
||||
|
||||
VkCommandBuffer m_command_buffer = VK_NULL_HANDLE;
|
||||
|
||||
VkDescriptorBufferInfo m_uniform_buffer = {};
|
||||
u32 m_uniform_buffer_offset = 0;
|
||||
|
||||
std::array<VkDescriptorImageInfo, 4> m_samplers = {};
|
||||
|
||||
std::array<VkBufferView, 2> m_texel_buffers = {};
|
||||
|
||||
VkDescriptorImageInfo m_storage_image = {};
|
||||
|
||||
ComputePipelineInfo m_pipeline_info = {};
|
||||
};
|
||||
|
||||
} // namespace Vulkan
|
||||
|
Reference in New Issue
Block a user