add IsSupportMDI() & GetMaxMDICount functions.

This commit is contained in:
hyzboy 2021-12-15 17:35:13 +08:00
parent 4c4d81c116
commit 156f6e98a8
2 changed files with 16 additions and 2 deletions

View File

@ -48,6 +48,20 @@ public:
const uint32_t GetConstantSize ()const{return properties.limits.maxPushConstantsSize;}
// support != open, so please don't direct use GetFeatures().
// open any features in CreateDevice()&SetDeviceFeatures() functions.
const bool IsSupportMDI ()const
{
// I found a few device support MDI, but its MaxDrawIndirectCount is 1.
return (features.multiDrawIndirect&&properties.limits.maxDrawIndirectCount>1);
}
const uint32_t GetMaxMDICount ()const
{
return properties.limits.maxDrawIndirectCount;
}
public:
/**

View File

@ -170,7 +170,7 @@ void RenderCmdBuffer::DrawIndirect( VkBuffer buffer,
uint32_t drawCount,
uint32_t stride)
{
if(this->dev_attr->physical_device->GetFeatures().multiDrawIndirect)
if(this->dev_attr->physical_device->IsSupportMDI())
vkCmdDrawIndirect(cmd_buf,buffer,offset,drawCount,stride);
else
for(uint32_t i=0;i<drawCount;i++)
@ -182,7 +182,7 @@ void RenderCmdBuffer::DrawIndexedIndirect( VkBuffer buffer,
uint32_t drawCount,
uint32_t stride)
{
if(this->dev_attr->physical_device->GetFeatures().multiDrawIndirect)
if(this->dev_attr->physical_device->IsSupportMDI())
vkCmdDrawIndexedIndirect(cmd_buf,buffer,offset,drawCount,stride);
else
for(uint32_t i=0;i<drawCount;i++)