From 5ab20eb2d20d491e258047bd94d9d9d0ac5a5dbf Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 23 Feb 2018 17:22:36 -0500 Subject: Refactor IR type system, step 0 Pull BaseType, TextureFlavor and SamplerStateFlavor enums and helper functions into a shared file "type-system-shared.h". --- source/slang/type-system-shared.h | 77 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 source/slang/type-system-shared.h (limited to 'source/slang/type-system-shared.h') diff --git a/source/slang/type-system-shared.h b/source/slang/type-system-shared.h new file mode 100644 index 000000000..5316dfa6e --- /dev/null +++ b/source/slang/type-system-shared.h @@ -0,0 +1,77 @@ +#ifndef SLANG_TYPE_SYSTEM_SHARED_H +#define SLANG_TYPE_SYSTEM_SHARED_H + +#include "../../slang.h" + +namespace Slang +{ + enum class BaseType + { + Void = 0, + Bool, + Int, + UInt, + UInt64, + Half, + Float, + Double, + }; + + struct TextureFlavor + { + enum + { + // Mask for the overall "shape" of the texture + ShapeMask = SLANG_RESOURCE_BASE_SHAPE_MASK, + + // Flag for whether the shape has "array-ness" + ArrayFlag = SLANG_TEXTURE_ARRAY_FLAG, + + // Whether or not the texture stores multiple samples per pixel + MultisampleFlag = SLANG_TEXTURE_MULTISAMPLE_FLAG, + + // Whether or not this is a shadow texture + // + // TODO(tfoley): is this even meaningful/used? + // ShadowFlag = 0x80, + }; + + enum Shape : uint8_t + { + Shape1D = SLANG_TEXTURE_1D, + Shape2D = SLANG_TEXTURE_2D, + Shape3D = SLANG_TEXTURE_3D, + ShapeCube = SLANG_TEXTURE_CUBE, + ShapeBuffer = SLANG_TEXTURE_BUFFER, + + Shape1DArray = Shape1D | ArrayFlag, + Shape2DArray = Shape2D | ArrayFlag, + // No Shape3DArray + ShapeCubeArray = ShapeCube | ArrayFlag, + }; + + uint16_t flavor; + + Shape GetBaseShape() const { return Shape(flavor & ShapeMask); } + bool isArray() const { return (flavor & ArrayFlag) != 0; } + bool isMultisample() const { return (flavor & MultisampleFlag) != 0; } + // bool isShadow() const { return (flavor & ShadowFlag) != 0; } + + SlangResourceShape getShape() const { return flavor & 0xFF; } + SlangResourceAccess getAccess() const { return (flavor >> 8) & 0xFF; } + + TextureFlavor() = default; + TextureFlavor(uint32_t tag) { flavor = (uint16_t)tag; } + + static TextureFlavor create(SlangResourceShape shape, SlangResourceAccess access); + }; + + enum class SamplerStateFlavor : uint8_t + { + SamplerState, + SamplerComparisonState, + }; + +} + +#endif \ No newline at end of file -- cgit v1.2.3