diff --git a/src/dxvk/dxvk_graphics.cpp b/src/dxvk/dxvk_graphics.cpp index b87685146..14cf9a9d8 100644 --- a/src/dxvk/dxvk_graphics.cpp +++ b/src/dxvk/dxvk_graphics.cpp @@ -81,6 +81,25 @@ namespace dxvk { } + Rc DxvkGraphicsPipeline::getShader( + VkShaderStageFlagBits stage) const { + switch (stage) { + case VK_SHADER_STAGE_VERTEX_BIT: + return m_vs != nullptr ? m_vs->shader() : nullptr; + case VK_SHADER_STAGE_GEOMETRY_BIT: + return m_gs != nullptr ? m_gs->shader() : nullptr; + case VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT: + return m_tcs != nullptr ? m_tcs->shader() : nullptr; + case VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT: + return m_tes != nullptr ? m_tes->shader() : nullptr; + case VK_SHADER_STAGE_FRAGMENT_BIT: + return m_fs != nullptr ? m_fs->shader() : nullptr; + default: + return nullptr; + } + } + + VkPipeline DxvkGraphicsPipeline::getPipelineHandle( const DxvkGraphicsPipelineStateInfo& state, const DxvkRenderPass& renderPass) { diff --git a/src/dxvk/dxvk_graphics.h b/src/dxvk/dxvk_graphics.h index 756ed924f..3d5277f2e 100644 --- a/src/dxvk/dxvk_graphics.h +++ b/src/dxvk/dxvk_graphics.h @@ -168,6 +168,17 @@ namespace dxvk { return m_layout.ptr(); } + /** + * \brief Queries shader for a given stage + * + * In case no shader is specified for the + * given stage, \c nullptr will be returned. + * \param [in] stage The shader stage + * \returns Shader of the given stage + */ + Rc getShader( + VkShaderStageFlagBits stage) const; + /** * \brief Pipeline handle *