X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Fgraphics-api%2Fgraphics-types.h;h=2ce4b5ad8306d66bdb539c444d213f65d034881f;hb=refs%2Fchanges%2F76%2F270676%2F20;hp=5cf6a4ab8cad3d2869decc288fee99fd8efccb1f;hpb=2be81f20223b75ad2509c50b10973e6ff4d7d27a;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/graphics-api/graphics-types.h b/dali/graphics-api/graphics-types.h index 5cf6a4a..2ce4b5a 100644 --- a/dali/graphics-api/graphics-types.h +++ b/dali/graphics-api/graphics-types.h @@ -2,7 +2,7 @@ #define DALI_GRAPHICS_API_TYPES /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +24,8 @@ #include #include +#include + namespace Dali { namespace Graphics @@ -165,8 +167,25 @@ enum class BlendOp REVERSE_SUBTRACT = 2, MIN = 3, MAX = 4, + MULTIPLY = 5, + SCREEN = 6, + OVERLAY = 7, + DARKEN = 8, + LIGHTEN = 9, + COLOR_DODGE = 10, + COLOR_BURN = 11, + HARD_LIGHT = 12, + SOFT_LIGHT = 13, + DIFFERENCE = 14, + EXCLUSION = 15, + HUE = 16, + SATURATION = 17, + COLOR = 18, + LUMINOSITY = 19, }; +const BlendOp ADVANCED_BLEND_OPTIONS_START(BlendOp::MULTIPLY); + /** * @brief Compare operators */ @@ -774,6 +793,7 @@ enum class Format R64G64B64A64_UINT, R64G64B64A64_SINT, R64G64B64A64_SFLOAT, + R11G11B10_UFLOAT_PACK32, B10G11R11_UFLOAT_PACK32, E5B9G9R9_UFLOAT_PACK32, D16_UNORM, @@ -878,7 +898,7 @@ inline BufferUsageFlags operator|(BufferUsageFlags flags, BufferUsage usage) */ enum class BufferPropertiesFlagBit : uint32_t { - CPU_ALLOCATED = 1 << 0, ///< Buffer is allocated on the CPU side + CPU_ALLOCATED = 1 << 0, ///< Buffer is allocated on the CPU side TRANSIENT_MEMORY = 1 << 1, ///< Buffer memory will be short-lived }; @@ -925,6 +945,8 @@ struct TextureUpdateInfo Extent2D srcExtent2D{}; uint32_t srcOffset{}; uint32_t srcSize{}; + uint32_t srcStride{}; + Format srcFormat{}; ///< Should match dstTexture's format, otherwise conversion may occur }; /** @@ -1001,7 +1023,17 @@ struct ColorAttachment */ struct DepthStencilAttachment { - // TODO: + enum class Usage + { + WRITE, // If no texture, will create a RenderBuffer instead + NONE // If no attachment/RenderBuffer required + }; + Texture* depthTexture{nullptr}; + Texture* stencilTexture{nullptr}; + uint32_t depthLevel{0}; + uint32_t stencilLevel{0}; + Usage depthUsage{Usage::NONE}; + Usage stencilUsage{Usage::NONE}; }; /** @@ -1294,7 +1326,98 @@ enum class GraphicsStructureType : uint32_t SAMPLER_CREATE_INFO_STRUCT, SHADER_CREATE_INFO_STRUCT, TEXTURE_CREATE_INFO_STRUCT, - RENDER_TARGET_CREATE_INFO_STRUCT + RENDER_TARGET_CREATE_INFO_STRUCT, + SYNC_OBJECT_CREATE_INFO_STRUCT +}; + +/** + * @brief Enum describes load operation associated + * with particular framebuffer attachment + */ +enum class AttachmentLoadOp +{ + LOAD, ///< Load previous content + CLEAR, ///< Clear the attachment + DONT_CARE ///< Let driver decide +}; + +/** + * @brief Enum describes store operation associated + * with particular framebuffer attachment + */ +enum class AttachmentStoreOp +{ + STORE, ///< Store content (color attachemnts) + DONT_CARE ///< Let driver decide (depth/stencil attachemnt with no intention of reading) +}; + +/** + * @brief The structure describes the read/write + * modes of a single framebuffer attachment + * + * The attachment description specifies what is going to + * happen to the attachment at the beginning and end of the + * render pass. + * + * The stencil operation is separated as it may be set + * independent from the depth component (use loadOp, storeOp + * to set up the depth component and stencilLoadOp, stencilStoreOp + * for stencil component). + */ +struct AttachmentDescription +{ + /** + * @brief Sets load operation for the attachment + * + * @param value Load operation + * @return this structure + */ + auto& SetLoadOp(AttachmentLoadOp value) + { + loadOp = value; + return *this; + } + + /** + * @brief Sets store operation for the attachment + * + * @param value Store operation + * @return this structure + */ + auto& SetStoreOp(AttachmentStoreOp value) + { + storeOp = value; + return *this; + } + + /** + * @brief Sets load operation for the stencil part of attachment + * + * @param value load operation + * @return this structure + */ + auto& SetStencilLoadOp(AttachmentLoadOp value) + { + stencilLoadOp = value; + return *this; + } + + /** + * @brief Sets store operation for the stencil part of attachment + * + * @param value store operation + * @return this structure + */ + auto& SetStencilStoreOp(AttachmentStoreOp value) + { + stencilStoreOp = value; + return *this; + } + + AttachmentLoadOp loadOp{}; + AttachmentStoreOp storeOp{}; + AttachmentLoadOp stencilLoadOp{}; + AttachmentStoreOp stencilStoreOp{}; }; /** @@ -1392,6 +1515,34 @@ struct DefaultDeleter }; /** + * Surface type is just a void* to any native object. + */ +using Surface = void; + +/** + * @brief Enum describing preTransform of render target + */ +enum class RenderTargetTransformFlagBits +{ + TRANSFORM_IDENTITY_BIT = 0x00000001, + ROTATE_90_BIT = 0x00000002, + ROTATE_180_BIT = 0x00000004, + ROTATE_270_BIT = 0x00000008, + HORIZONTAL_MIRROR_BIT = 0x00000010, + HORIZONTAL_MIRROR_ROTATE_90_BIT = 0x00000020, + HORIZONTAL_MIRROR_ROTATE_180_BIT = 0x00000040, + HORIZONTAL_MIRROR_ROTATE_270_BIT = 0x00000080, +}; + +using RenderTargetTransformFlags = uint32_t; + +template +inline RenderTargetTransformFlags operator|(T flags, RenderTargetTransformFlagBits bit) +{ + return static_cast(flags) | static_cast(bit); +} + +/** * unique_ptr defined in the Graphics scope */ template>