summaryrefslogtreecommitdiff
path: root/source/slang/type-defs.h
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2018-02-23 17:22:36 -0500
committerYong He <yonghe@outlook.com>2018-02-23 17:41:46 -0500
commit5ab20eb2d20d491e258047bd94d9d9d0ac5a5dbf (patch)
treebe054fb8e5767daa3cfe42c51e812f21b6fbdd72 /source/slang/type-defs.h
parent706675949e70b17860e9ca514c01461fdf9aa95d (diff)
Refactor IR type system, step 0
Pull BaseType, TextureFlavor and SamplerStateFlavor enums and helper functions into a shared file "type-system-shared.h".
Diffstat (limited to 'source/slang/type-defs.h')
-rw-r--r--source/slang/type-defs.h78
1 files changed, 16 insertions, 62 deletions
diff --git a/source/slang/type-defs.h b/source/slang/type-defs.h
index 70f062cdc..8b61953bc 100644
--- a/source/slang/type-defs.h
+++ b/source/slang/type-defs.h
@@ -109,56 +109,18 @@ END_SYNTAX_CLASS()
// Base type for things we think of as "resources"
ABSTRACT_SYNTAX_CLASS(ResourceTypeBase, DeclRefType)
-RAW(
- 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,
- };
+ FIELD(TextureFlavor, flavor)
+ RAW(
+ TextureFlavor::Shape GetBaseShape()
+ {
+ return flavor.GetBaseShape();
+ }
+ bool isMultisample() { return flavor.isMultisample(); }
+ bool isArray() { return flavor.isArray(); }
+ SlangResourceShape getShape() const { return flavor.getShape(); }
+ SlangResourceAccess getAccess() { return flavor.getAccess(); }
- 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,
- };
-
- 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; }
-
- // Bits representing the kind of resource we are looking at
- // (e.g., `Texture2DMS` vs. `TextureCubeArray`)
- typedef uint16_t Flavor;
-
- static Flavor makeFlavor(SlangResourceShape shape, SlangResourceAccess access)
- {
- return Flavor(shape | (access << 8));
- }
-)
- FIELD(Flavor, flavor)
+ )
END_SYNTAX_CLASS()
// Resources that contain "elements" that can be fetched
@@ -172,7 +134,7 @@ RAW(
TextureTypeBase()
{}
TextureTypeBase(
- Flavor flavor,
+ TextureFlavor flavor,
RefPtr<Type> elementType)
{
this->elementType = elementType;
@@ -186,7 +148,7 @@ RAW(
TextureType()
{}
TextureType(
- Flavor flavor,
+ TextureFlavor flavor,
RefPtr<Type> elementType)
: TextureTypeBase(flavor, elementType)
{}
@@ -200,7 +162,7 @@ RAW(
TextureSamplerType()
{}
TextureSamplerType(
- Flavor flavor,
+ TextureFlavor flavor,
RefPtr<Type> elementType)
: TextureTypeBase(flavor, elementType)
{}
@@ -213,7 +175,7 @@ RAW(
GLSLImageType()
{}
GLSLImageType(
- Flavor flavor,
+ TextureFlavor flavor,
RefPtr<Type> elementType)
: TextureTypeBase(flavor, elementType)
{}
@@ -221,16 +183,8 @@ RAW(
END_SYNTAX_CLASS()
SYNTAX_CLASS(SamplerStateType, DeclRefType)
-
// What flavor of sampler state is this
- RAW(enum class Flavor : uint8_t
- {
- SamplerState,
- SamplerComparisonState,
- };
-
- )
- FIELD(Flavor, flavor)
+ FIELD(SamplerStateFlavor, flavor)
END_SYNTAX_CLASS()
// Other cases of generic types known to the compiler