| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include <Atom/RHI.Reflect/ImageDescriptor.h>
- #include <AzCore/Serialization/SerializeContext.h>
- #include <AzCore/std/algorithm.h>
- #include <AzCore/Utils/TypeHash.h>
- namespace AZ::RHI
- {
- ImageBindFlags GetImageBindFlags(ScopeAttachmentUsage usage, ScopeAttachmentAccess access)
- {
- switch (usage)
- {
- case ScopeAttachmentUsage::RenderTarget:
- return ImageBindFlags::Color;
- case ScopeAttachmentUsage::DepthStencil:
- return ImageBindFlags::DepthStencil;
- case ScopeAttachmentUsage::Shader:
- switch (access)
- {
- case ScopeAttachmentAccess::ReadWrite:
- return ImageBindFlags::ShaderReadWrite;
- case ScopeAttachmentAccess::Read:
- return ImageBindFlags::ShaderRead;
- case ScopeAttachmentAccess::Write:
- return ImageBindFlags::ShaderWrite;
- }
- break;
- case ScopeAttachmentUsage::Copy:
- switch (access)
- {
- case ScopeAttachmentAccess::Read:
- return ImageBindFlags::CopyRead;
- case ScopeAttachmentAccess::Write:
- return ImageBindFlags::CopyWrite;
- }
- break;
- case ScopeAttachmentUsage::Resolve:
- return ImageBindFlags::CopyWrite;
- case ScopeAttachmentUsage::ShadingRate:
- return ImageBindFlags::ShadingRate;
- case ScopeAttachmentUsage::Predication:
- case ScopeAttachmentUsage::Indirect:
- case ScopeAttachmentUsage::SubpassInput:
- case ScopeAttachmentUsage::InputAssembly:
- case ScopeAttachmentUsage::Uninitialized:
- break;
- default:
- break;
- }
- return ImageBindFlags::None;
- }
- void ImageDescriptor::Reflect(AZ::ReflectContext* context)
- {
- if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
- {
- serializeContext->Class<ImageDescriptor>()
- ->Version(2)
- ->Field("BindFlags", &ImageDescriptor::m_bindFlags)
- ->Field("Dimension", &ImageDescriptor::m_dimension)
- ->Field("Size", &ImageDescriptor::m_size)
- ->Field("ArraySize", &ImageDescriptor::m_arraySize)
- ->Field("MipLevels", &ImageDescriptor::m_mipLevels)
- ->Field("Format", &ImageDescriptor::m_format)
- ->Field("MultisampleState", &ImageDescriptor::m_multisampleState)
- ->Field("SharedQueueMask", &ImageDescriptor::m_sharedQueueMask)
- ->Field("IsCubemap", &ImageDescriptor::m_isCubemap)
- ;
- }
- }
- HashValue64 ImageDescriptor::GetHash(HashValue64 seed /* = 0 */) const
- {
- return TypeHash64(*this, seed);
- }
- ImageDescriptor ImageDescriptor::Create1D(
- ImageBindFlags bindFlags,
- uint32_t width,
- Format format)
- {
- ImageDescriptor descriptor;
- descriptor.m_bindFlags = bindFlags;
- descriptor.m_dimension = ImageDimension::Image1D;
- descriptor.m_size.m_width = width;
- descriptor.m_format = format;
- return descriptor;
- }
- ImageDescriptor ImageDescriptor::Create1DArray(
- ImageBindFlags bindFlags,
- uint32_t width,
- uint16_t arraySize,
- Format format)
- {
- ImageDescriptor descriptor;
- descriptor.m_bindFlags = bindFlags;
- descriptor.m_dimension = ImageDimension::Image1D;
- descriptor.m_size.m_width = width;
- descriptor.m_arraySize = arraySize;
- descriptor.m_format = format;
- return descriptor;
- }
- ImageDescriptor ImageDescriptor::Create2D(
- ImageBindFlags bindFlags,
- uint32_t width,
- uint32_t height,
- Format format)
- {
- ImageDescriptor descriptor;
- descriptor.m_bindFlags = bindFlags;
- descriptor.m_size.m_width = width;
- descriptor.m_size.m_height = height;
- descriptor.m_format = format;
- return descriptor;
- }
- ImageDescriptor ImageDescriptor::Create2DArray(
- ImageBindFlags bindFlags,
- uint32_t width,
- uint32_t height,
- uint16_t arraySize,
- Format format)
- {
- ImageDescriptor descriptor;
- descriptor.m_bindFlags = bindFlags;
- descriptor.m_size.m_width = width;
- descriptor.m_size.m_height = height;
- descriptor.m_arraySize = arraySize;
- descriptor.m_format = format;
- return descriptor;
- }
- ImageDescriptor ImageDescriptor::CreateCubemap(
- ImageBindFlags bindFlags,
- uint32_t width,
- Format format)
- {
- ImageDescriptor descriptor;
- descriptor.m_bindFlags = bindFlags;
- descriptor.m_size.m_width = width;
- descriptor.m_size.m_height = width;
- descriptor.m_arraySize = NumCubeMapSlices;
- descriptor.m_format = format;
- descriptor.m_isCubemap = true;
- return descriptor;
- }
- ImageDescriptor ImageDescriptor::CreateCubemapArray(
- ImageBindFlags bindFlags,
- uint32_t width,
- uint16_t arraySize,
- Format format)
- {
- ImageDescriptor descriptor;
- descriptor.m_bindFlags = bindFlags;
- descriptor.m_size.m_width = width;
- descriptor.m_size.m_height = width;
- descriptor.m_arraySize = NumCubeMapSlices * arraySize;
- descriptor.m_format = format;
- descriptor.m_isCubemap = true;
- return descriptor;
- }
- ImageDescriptor ImageDescriptor::Create3D(
- ImageBindFlags bindFlags,
- uint32_t width,
- uint32_t height,
- uint32_t depth,
- Format format)
- {
- ImageDescriptor descriptor;
- descriptor.m_bindFlags = bindFlags;
- descriptor.m_dimension = ImageDimension::Image3D;
- descriptor.m_size.m_width = width;
- descriptor.m_size.m_height = height;
- descriptor.m_size.m_depth = depth;
- descriptor.m_format = format;
- return descriptor;
- }
- }
|