Refactor enum flags with __underlying_type and new EnumHasAnyFlags/EnumHasAllFlags

Fixes #832
Closes #886
This commit is contained in:
Wojtek Figat
2023-01-15 12:44:39 +01:00
parent 810f7fb803
commit f127bbebe1
101 changed files with 424 additions and 414 deletions

View File

@@ -172,7 +172,7 @@ bool GPUBufferDX12::OnInit()
}
// Check if need to use a counter
if (_desc.Flags & GPUBufferFlags::Counter || _desc.Flags & GPUBufferFlags::Append)
if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::Counter) || EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::Append))
{
#if GPU_ENABLE_RESOURCE_NAMING
String name = String(GetName()) + TEXT(".Counter");
@@ -192,7 +192,7 @@ bool GPUBufferDX12::OnInit()
if (useSRV)
{
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc;
if (_desc.Flags & GPUBufferFlags::RawBuffer)
if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::RawBuffer))
srvDesc.Format = RenderToolsDX::ToDxgiFormat(_desc.Format);
else
srvDesc.Format = RenderToolsDX::ToDxgiFormat(PixelFormatExtensions::FindShaderResourceFormat(_desc.Format, false));
@@ -201,7 +201,7 @@ bool GPUBufferDX12::OnInit()
srvDesc.Buffer.FirstElement = 0;
srvDesc.Buffer.NumElements = numElements;
srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE;
if (_desc.Flags & GPUBufferFlags::Structured)
if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::Structured))
{
srvDesc.Buffer.StructureByteStride = _desc.Stride;
srvDesc.Format = DXGI_FORMAT_UNKNOWN;
@@ -210,7 +210,7 @@ bool GPUBufferDX12::OnInit()
{
srvDesc.Buffer.StructureByteStride = 0;
}
if (_desc.Flags & GPUBufferFlags::RawBuffer)
if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::RawBuffer))
srvDesc.Buffer.Flags |= D3D12_BUFFER_SRV_FLAG_RAW;
_view.SetSRV(srvDesc);
}
@@ -223,11 +223,11 @@ bool GPUBufferDX12::OnInit()
uavDesc.Buffer.CounterOffsetInBytes = 0;
uavDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE;
uavDesc.Buffer.NumElements = numElements;
if (_desc.Flags & GPUBufferFlags::Structured)
if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::Structured))
uavDesc.Buffer.StructureByteStride = _desc.Stride;
if (_desc.Flags & GPUBufferFlags::RawBuffer)
if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::RawBuffer))
uavDesc.Buffer.Flags |= D3D12_BUFFER_UAV_FLAG_RAW;
if (_desc.Flags & GPUBufferFlags::Structured)
if (EnumHasAnyFlags(_desc.Flags, GPUBufferFlags::Structured))
uavDesc.Format = DXGI_FORMAT_UNKNOWN;
else
uavDesc.Format = RenderToolsDX::ToDxgiFormat(PixelFormatExtensions::FindUnorderedAccessFormat(_desc.Format));

View File

@@ -1100,7 +1100,7 @@ void GPUContextDX12::DrawIndexedInstanced(uint32 indicesCount, uint32 instanceCo
void GPUContextDX12::DrawInstancedIndirect(GPUBuffer* bufferForArgs, uint32 offsetForArgs)
{
ASSERT(bufferForArgs && bufferForArgs->GetFlags() & GPUBufferFlags::Argument);
ASSERT(bufferForArgs && EnumHasAnyFlags(bufferForArgs->GetFlags(), GPUBufferFlags::Argument));
auto bufferForArgsDX12 = (GPUBufferDX12*)bufferForArgs;
auto signature = _device->DrawIndirectCommandSignature->GetSignature();
@@ -1113,7 +1113,7 @@ void GPUContextDX12::DrawInstancedIndirect(GPUBuffer* bufferForArgs, uint32 offs
void GPUContextDX12::DrawIndexedInstancedIndirect(GPUBuffer* bufferForArgs, uint32 offsetForArgs)
{
ASSERT(bufferForArgs && bufferForArgs->GetFlags() & GPUBufferFlags::Argument);
ASSERT(bufferForArgs && EnumHasAnyFlags(bufferForArgs->GetFlags(), GPUBufferFlags::Argument));
auto bufferForArgsDX12 = (GPUBufferDX12*)bufferForArgs;
auto signature = _device->DrawIndexedIndirectCommandSignature->GetSignature();

View File

@@ -691,7 +691,7 @@ void GPUTextureDX12::initHandles()
}
// Read-only depth-stencil
if (_desc.Flags & GPUTextureFlags::ReadOnlyDepthView)
if (EnumHasAnyFlags(_desc.Flags, GPUTextureFlags::ReadOnlyDepthView))
{
_handleReadOnlyDepth.Init(this, _device, this, format, msaa);
_handleReadOnlyDepth.ReadOnlyDepthView = true;

View File

@@ -197,7 +197,7 @@ public:
// [IShaderResourceDX12]
bool IsDepthStencilResource() const override
{
return (_desc.Flags & GPUTextureFlags::DepthStencil) != 0;
return (_desc.Flags & GPUTextureFlags::DepthStencil) != GPUTextureFlags::None;
}
D3D12_CPU_DESCRIPTOR_HANDLE SRV() const override
{