Commit 2da04538 by Olli Etuaho Committed by Commit Bot

Add sampler2DMSArray support to HLSL output

This is done with small adjustments to TextureFunctionHLSL. Most of the functionality was already in place before. This changes the categorization of sampler types in BasicTypes.h helper functions: 2D array samplers are no longer treated as 2D samplers, but the two categories are now entirely disjoint. This makes TextureFunctionHLSL a little bit simpler. BUG=angleproject:2775 TEST=angle_unittests, angle_end2end_tests Change-Id: I84d9b56c37b1aaa01ee5921b6f17f8a78698fce2 Reviewed-on: https://chromium-review.googlesource.com/1188562Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent e1777558
...@@ -158,11 +158,13 @@ inline bool IsIntegerSampler(TBasicType type) ...@@ -158,11 +158,13 @@ inline bool IsIntegerSampler(TBasicType type)
case EbtISamplerCube: case EbtISamplerCube:
case EbtISampler2DArray: case EbtISampler2DArray:
case EbtISampler2DMS: case EbtISampler2DMS:
case EbtISampler2DMSArray:
case EbtUSampler2D: case EbtUSampler2D:
case EbtUSampler3D: case EbtUSampler3D:
case EbtUSamplerCube: case EbtUSamplerCube:
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtUSampler2DMS: case EbtUSampler2DMS:
case EbtUSampler2DMSArray:
return true; return true;
case EbtSampler2D: case EbtSampler2D:
case EbtSampler3D: case EbtSampler3D:
...@@ -175,6 +177,7 @@ inline bool IsIntegerSampler(TBasicType type) ...@@ -175,6 +177,7 @@ inline bool IsIntegerSampler(TBasicType type)
case EbtSamplerCubeShadow: case EbtSamplerCubeShadow:
case EbtSampler2DArrayShadow: case EbtSampler2DArrayShadow:
case EbtSampler2DMS: case EbtSampler2DMS:
case EbtSampler2DMSArray:
return false; return false;
default: default:
assert(!IsSampler(type)); assert(!IsSampler(type));
...@@ -196,6 +199,19 @@ inline bool IsSampler2DMS(TBasicType type) ...@@ -196,6 +199,19 @@ inline bool IsSampler2DMS(TBasicType type)
} }
} }
inline bool IsSampler2DMSArray(TBasicType type)
{
switch (type)
{
case EbtSampler2DMSArray:
case EbtISampler2DMSArray:
case EbtUSampler2DMSArray:
return true;
default:
return false;
}
}
inline bool IsFloatImage(TBasicType type) inline bool IsFloatImage(TBasicType type)
{ {
switch (type) switch (type)
...@@ -246,6 +262,8 @@ inline bool IsUnsignedImage(TBasicType type) ...@@ -246,6 +262,8 @@ inline bool IsUnsignedImage(TBasicType type)
return false; return false;
} }
// Samplers are divided into 4 disjoint categories: 2D, cube, 3D, and array.
// Array samplers are not 2D samplers.
inline bool IsSampler2D(TBasicType type) inline bool IsSampler2D(TBasicType type)
{ {
switch (type) switch (type)
...@@ -253,18 +271,21 @@ inline bool IsSampler2D(TBasicType type) ...@@ -253,18 +271,21 @@ inline bool IsSampler2D(TBasicType type)
case EbtSampler2D: case EbtSampler2D:
case EbtISampler2D: case EbtISampler2D:
case EbtUSampler2D: case EbtUSampler2D:
case EbtSampler2DArray:
case EbtISampler2DArray:
case EbtUSampler2DArray:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSamplerExternal2DY2YEXT: case EbtSamplerExternal2DY2YEXT:
case EbtSampler2DShadow: case EbtSampler2DShadow:
case EbtSampler2DArrayShadow:
case EbtSampler2DMS: case EbtSampler2DMS:
case EbtISampler2DMS: case EbtISampler2DMS:
case EbtUSampler2DMS: case EbtUSampler2DMS:
return true; return true;
case EbtSampler2DArray:
case EbtISampler2DArray:
case EbtUSampler2DArray:
case EbtSampler2DMSArray:
case EbtISampler2DMSArray:
case EbtUSampler2DMSArray:
case EbtSampler2DArrayShadow:
case EbtSampler3D: case EbtSampler3D:
case EbtISampler3D: case EbtISampler3D:
case EbtUSampler3D: case EbtUSampler3D:
...@@ -296,14 +317,17 @@ inline bool IsSamplerCube(TBasicType type) ...@@ -296,14 +317,17 @@ inline bool IsSamplerCube(TBasicType type)
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtSampler2DMS: case EbtSampler2DMS:
case EbtSampler2DMSArray:
case EbtISampler2D: case EbtISampler2D:
case EbtISampler3D: case EbtISampler3D:
case EbtISampler2DArray: case EbtISampler2DArray:
case EbtISampler2DMS: case EbtISampler2DMS:
case EbtISampler2DMSArray:
case EbtUSampler2D: case EbtUSampler2D:
case EbtUSampler3D: case EbtUSampler3D:
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtUSampler2DMS: case EbtUSampler2DMS:
case EbtUSampler2DMSArray:
case EbtSampler2DShadow: case EbtSampler2DShadow:
case EbtSampler2DArrayShadow: case EbtSampler2DArrayShadow:
return false; return false;
...@@ -329,14 +353,17 @@ inline bool IsSampler3D(TBasicType type) ...@@ -329,14 +353,17 @@ inline bool IsSampler3D(TBasicType type)
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtSampler2DMS: case EbtSampler2DMS:
case EbtSampler2DMSArray:
case EbtISampler2D: case EbtISampler2D:
case EbtISamplerCube: case EbtISamplerCube:
case EbtISampler2DArray: case EbtISampler2DArray:
case EbtISampler2DMS: case EbtISampler2DMS:
case EbtISampler2DMSArray:
case EbtUSampler2D: case EbtUSampler2D:
case EbtUSamplerCube: case EbtUSamplerCube:
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtUSampler2DMS: case EbtUSampler2DMS:
case EbtUSampler2DMSArray:
case EbtSampler2DShadow: case EbtSampler2DShadow:
case EbtSamplerCubeShadow: case EbtSamplerCubeShadow:
case EbtSampler2DArrayShadow: case EbtSampler2DArrayShadow:
...@@ -355,6 +382,9 @@ inline bool IsSamplerArray(TBasicType type) ...@@ -355,6 +382,9 @@ inline bool IsSamplerArray(TBasicType type)
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtISampler2DArray: case EbtISampler2DArray:
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtSampler2DMSArray:
case EbtISampler2DMSArray:
case EbtUSampler2DMSArray:
case EbtSampler2DArrayShadow: case EbtSampler2DArrayShadow:
return true; return true;
case EbtSampler2D: case EbtSampler2D:
...@@ -395,11 +425,13 @@ inline bool IsShadowSampler(TBasicType type) ...@@ -395,11 +425,13 @@ inline bool IsShadowSampler(TBasicType type)
case EbtISamplerCube: case EbtISamplerCube:
case EbtISampler2DArray: case EbtISampler2DArray:
case EbtISampler2DMS: case EbtISampler2DMS:
case EbtISampler2DMSArray:
case EbtUSampler2D: case EbtUSampler2D:
case EbtUSampler3D: case EbtUSampler3D:
case EbtUSamplerCube: case EbtUSamplerCube:
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtUSampler2DMS: case EbtUSampler2DMS:
case EbtUSampler2DMSArray:
case EbtSampler2D: case EbtSampler2D:
case EbtSampler3D: case EbtSampler3D:
case EbtSamplerCube: case EbtSamplerCube:
...@@ -408,6 +440,7 @@ inline bool IsShadowSampler(TBasicType type) ...@@ -408,6 +440,7 @@ inline bool IsShadowSampler(TBasicType type)
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtSampler2DMS: case EbtSampler2DMS:
case EbtSampler2DMSArray:
return false; return false;
default: default:
assert(!IsSampler(type)); assert(!IsSampler(type));
......
...@@ -83,6 +83,8 @@ HLSLTextureGroup TextureGroup(const TBasicType type, TLayoutImageInternalFormat ...@@ -83,6 +83,8 @@ HLSLTextureGroup TextureGroup(const TBasicType type, TLayoutImageInternalFormat
return HLSL_TEXTURE_3D; return HLSL_TEXTURE_3D;
case EbtSampler2DMS: case EbtSampler2DMS:
return HLSL_TEXTURE_2D_MS; return HLSL_TEXTURE_2D_MS;
case EbtSampler2DMSArray:
return HLSL_TEXTURE_2D_MS_ARRAY;
case EbtISampler2D: case EbtISampler2D:
return HLSL_TEXTURE_2D_INT4; return HLSL_TEXTURE_2D_INT4;
case EbtISampler3D: case EbtISampler3D:
...@@ -93,6 +95,8 @@ HLSLTextureGroup TextureGroup(const TBasicType type, TLayoutImageInternalFormat ...@@ -93,6 +95,8 @@ HLSLTextureGroup TextureGroup(const TBasicType type, TLayoutImageInternalFormat
return HLSL_TEXTURE_2D_ARRAY_INT4; return HLSL_TEXTURE_2D_ARRAY_INT4;
case EbtISampler2DMS: case EbtISampler2DMS:
return HLSL_TEXTURE_2D_MS_INT4; return HLSL_TEXTURE_2D_MS_INT4;
case EbtISampler2DMSArray:
return HLSL_TEXTURE_2D_MS_ARRAY_INT4;
case EbtUSampler2D: case EbtUSampler2D:
return HLSL_TEXTURE_2D_UINT4; return HLSL_TEXTURE_2D_UINT4;
case EbtUSampler3D: case EbtUSampler3D:
...@@ -103,6 +107,8 @@ HLSLTextureGroup TextureGroup(const TBasicType type, TLayoutImageInternalFormat ...@@ -103,6 +107,8 @@ HLSLTextureGroup TextureGroup(const TBasicType type, TLayoutImageInternalFormat
return HLSL_TEXTURE_2D_ARRAY_UINT4; return HLSL_TEXTURE_2D_ARRAY_UINT4;
case EbtUSampler2DMS: case EbtUSampler2DMS:
return HLSL_TEXTURE_2D_MS_UINT4; return HLSL_TEXTURE_2D_MS_UINT4;
case EbtUSampler2DMSArray:
return HLSL_TEXTURE_2D_MS_ARRAY_UINT4;
case EbtSampler2DShadow: case EbtSampler2DShadow:
return HLSL_TEXTURE_2D_COMPARISON; return HLSL_TEXTURE_2D_COMPARISON;
case EbtSamplerCubeShadow: case EbtSamplerCubeShadow:
...@@ -304,6 +310,8 @@ const char *TextureString(const HLSLTextureGroup textureGroup) ...@@ -304,6 +310,8 @@ const char *TextureString(const HLSLTextureGroup textureGroup)
return "Texture3D<snorm float4>"; return "Texture3D<snorm float4>";
case HLSL_TEXTURE_2D_MS: case HLSL_TEXTURE_2D_MS:
return "Texture2DMS<float4>"; return "Texture2DMS<float4>";
case HLSL_TEXTURE_2D_MS_ARRAY:
return "Texture2DMSArray<float4>";
case HLSL_TEXTURE_2D_INT4: case HLSL_TEXTURE_2D_INT4:
return "Texture2D<int4>"; return "Texture2D<int4>";
case HLSL_TEXTURE_3D_INT4: case HLSL_TEXTURE_3D_INT4:
...@@ -312,6 +320,8 @@ const char *TextureString(const HLSLTextureGroup textureGroup) ...@@ -312,6 +320,8 @@ const char *TextureString(const HLSLTextureGroup textureGroup)
return "Texture2DArray<int4>"; return "Texture2DArray<int4>";
case HLSL_TEXTURE_2D_MS_INT4: case HLSL_TEXTURE_2D_MS_INT4:
return "Texture2DMS<int4>"; return "Texture2DMS<int4>";
case HLSL_TEXTURE_2D_MS_ARRAY_INT4:
return "Texture2DMSArray<int4>";
case HLSL_TEXTURE_2D_UINT4: case HLSL_TEXTURE_2D_UINT4:
return "Texture2D<uint4>"; return "Texture2D<uint4>";
case HLSL_TEXTURE_3D_UINT4: case HLSL_TEXTURE_3D_UINT4:
...@@ -320,6 +330,8 @@ const char *TextureString(const HLSLTextureGroup textureGroup) ...@@ -320,6 +330,8 @@ const char *TextureString(const HLSLTextureGroup textureGroup)
return "Texture2DArray<uint4>"; return "Texture2DArray<uint4>";
case HLSL_TEXTURE_2D_MS_UINT4: case HLSL_TEXTURE_2D_MS_UINT4:
return "Texture2DMS<uint4>"; return "Texture2DMS<uint4>";
case HLSL_TEXTURE_2D_MS_ARRAY_UINT4:
return "Texture2DMSArray<uint4>";
case HLSL_TEXTURE_2D_COMPARISON: case HLSL_TEXTURE_2D_COMPARISON:
return "Texture2D"; return "Texture2D";
case HLSL_TEXTURE_CUBE_COMPARISON: case HLSL_TEXTURE_CUBE_COMPARISON:
...@@ -368,6 +380,8 @@ const char *TextureGroupSuffix(const HLSLTextureGroup type) ...@@ -368,6 +380,8 @@ const char *TextureGroupSuffix(const HLSLTextureGroup type)
return "3D_snorm_float4_"; return "3D_snorm_float4_";
case HLSL_TEXTURE_2D_MS: case HLSL_TEXTURE_2D_MS:
return "2DMS"; return "2DMS";
case HLSL_TEXTURE_2D_MS_ARRAY:
return "2DMSArray";
case HLSL_TEXTURE_2D_INT4: case HLSL_TEXTURE_2D_INT4:
return "2D_int4_"; return "2D_int4_";
case HLSL_TEXTURE_3D_INT4: case HLSL_TEXTURE_3D_INT4:
...@@ -376,6 +390,8 @@ const char *TextureGroupSuffix(const HLSLTextureGroup type) ...@@ -376,6 +390,8 @@ const char *TextureGroupSuffix(const HLSLTextureGroup type)
return "2DArray_int4_"; return "2DArray_int4_";
case HLSL_TEXTURE_2D_MS_INT4: case HLSL_TEXTURE_2D_MS_INT4:
return "2DMS_int4_"; return "2DMS_int4_";
case HLSL_TEXTURE_2D_MS_ARRAY_INT4:
return "2DMSArray_int4_";
case HLSL_TEXTURE_2D_UINT4: case HLSL_TEXTURE_2D_UINT4:
return "2D_uint4_"; return "2D_uint4_";
case HLSL_TEXTURE_3D_UINT4: case HLSL_TEXTURE_3D_UINT4:
...@@ -384,6 +400,8 @@ const char *TextureGroupSuffix(const HLSLTextureGroup type) ...@@ -384,6 +400,8 @@ const char *TextureGroupSuffix(const HLSLTextureGroup type)
return "2DArray_uint4_"; return "2DArray_uint4_";
case HLSL_TEXTURE_2D_MS_UINT4: case HLSL_TEXTURE_2D_MS_UINT4:
return "2DMS_uint4_"; return "2DMS_uint4_";
case HLSL_TEXTURE_2D_MS_ARRAY_UINT4:
return "2DMSArray_uint4_";
case HLSL_TEXTURE_2D_COMPARISON: case HLSL_TEXTURE_2D_COMPARISON:
return "2D_comparison"; return "2D_comparison";
case HLSL_TEXTURE_CUBE_COMPARISON: case HLSL_TEXTURE_CUBE_COMPARISON:
......
...@@ -40,14 +40,17 @@ enum HLSLTextureGroup ...@@ -40,14 +40,17 @@ enum HLSLTextureGroup
HLSL_TEXTURE_2D_ARRAY_SNORM, HLSL_TEXTURE_2D_ARRAY_SNORM,
HLSL_TEXTURE_3D_SNORM, HLSL_TEXTURE_3D_SNORM,
HLSL_TEXTURE_2D_MS, HLSL_TEXTURE_2D_MS,
HLSL_TEXTURE_2D_MS_ARRAY,
HLSL_TEXTURE_2D_INT4, HLSL_TEXTURE_2D_INT4,
HLSL_TEXTURE_3D_INT4, HLSL_TEXTURE_3D_INT4,
HLSL_TEXTURE_2D_ARRAY_INT4, HLSL_TEXTURE_2D_ARRAY_INT4,
HLSL_TEXTURE_2D_MS_INT4, HLSL_TEXTURE_2D_MS_INT4,
HLSL_TEXTURE_2D_MS_ARRAY_INT4,
HLSL_TEXTURE_2D_UINT4, HLSL_TEXTURE_2D_UINT4,
HLSL_TEXTURE_3D_UINT4, HLSL_TEXTURE_3D_UINT4,
HLSL_TEXTURE_2D_ARRAY_UINT4, HLSL_TEXTURE_2D_ARRAY_UINT4,
HLSL_TEXTURE_2D_MS_UINT4, HLSL_TEXTURE_2D_MS_UINT4,
HLSL_TEXTURE_2D_MS_ARRAY_UINT4,
// Comparison samplers // Comparison samplers
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment