compute shaders

This commit is contained in:
2026-06-13 01:51:28 +03:00
parent 3b128315e7
commit b8aa36ccc0
28 changed files with 498 additions and 170 deletions

View File

@@ -202,6 +202,11 @@ void CVkImage::CreateImage( uint32_t nWidth, uint32_t nHeight, EImageFormat eFor
stAlloc.usage = VMA_MEMORY_USAGE_AUTO;
if (eUsage & VK_IMAGE_USAGE_SAMPLED_BIT)
m_eDescriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;
if (eUsage & VK_IMAGE_USAGE_STORAGE_BIT)
m_eDescriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE;
vmaCreateImage(s_vkAllocator, &stCreateInfo, &stAlloc, &m_image, &m_allocation, NULL);
}
@@ -475,7 +480,7 @@ public:
virtual IComputeShader *CreateComputeShader( const char *szName ) override;
virtual void DestroyShader( IBaseShader *pShader ) override;
virtual IMaterial *CreateMaterial( IShader *pShader ) override;
virtual IMaterial *CreateMaterial( IBaseShader *pShader ) override;
virtual void DestroyMaterial( IMaterial *pMaterial ) override;
virtual IRenderCommandList *CreateCommandList() override;
@@ -609,6 +614,7 @@ void CVkRenderContext::DestroyBuffer( IBuffer *pBuffer )
void CVkRenderContext::DestroyImage( IImage *pImage )
{
m_scheduledRemovalImages.AppendTail((CVkImage*)pImage);
}
@@ -617,7 +623,6 @@ IShader *CVkRenderContext::CreateShader( const char *szName )
CVkShader *pShader = new CVkShader();
VkGraphicsPipelineCreateInfo stPipelineCreateInfo = {};
ICompiledShaderManager *pCompiledShaderManager = (ICompiledShaderManager*)CreateInterface(COMPILED_SHADER_MANAGER_INTERFACE_VERSION, NULL);
pCompiledShaderManager->ReadFromFile(&pShader->m_shader, szName);
pShader->m_hDevice = s_vkDevice;
@@ -627,7 +632,6 @@ IShader *CVkRenderContext::CreateShader( const char *szName )
IRayTracingShader *CVkRenderContext::CreateRayShader( const char *szName )
{
CVkRayTracingShader *pShader = new CVkRayTracingShader();
VkGraphicsPipelineCreateInfo stPipelineCreateInfo = {};
ICompiledShaderManager *pCompiledShaderManager = (ICompiledShaderManager*)CreateInterface(COMPILED_SHADER_MANAGER_INTERFACE_VERSION, NULL);
pCompiledShaderManager->ReadFromFile(&pShader->m_shader, szName);
pShader->m_hDevice = s_vkDevice;
@@ -636,6 +640,11 @@ IRayTracingShader *CVkRenderContext::CreateRayShader( const char *szName )
IComputeShader *CVkRenderContext::CreateComputeShader( const char *szName )
{
CVkComputeShader *pShader = new CVkComputeShader;
ICompiledShaderManager *pCompiledShaderManager = (ICompiledShaderManager*)CreateInterface(COMPILED_SHADER_MANAGER_INTERFACE_VERSION, NULL);
pCompiledShaderManager->ReadFromFile(&pShader->m_shader, szName);
pShader->m_hDevice = s_vkDevice;
return pShader;
}
void CVkRenderContext::DestroyShader( IBaseShader *pShader )
@@ -643,7 +652,7 @@ void CVkRenderContext::DestroyShader( IBaseShader *pShader )
delete pShader;
}
IMaterial *CVkRenderContext::CreateMaterial( IShader *pShader )
IMaterial *CVkRenderContext::CreateMaterial( IBaseShader *pShader )
{
CVkMaterial *pMaterial = new CVkMaterial(pShader);
m_pMaterials.AppendTail(pMaterial);