HLSL: phase 3a: Add sub-vec4 rwtexture formats (qualifier.layoutFormat)

This PR sets the TQualifier layoutFormat according to the HLSL image type.
For instance:

  RWTexture1D <float2> g_tTex1df2;

becomes ElfRg32f.  Similar on Buffers, e.g, Buffer<float4> mybuffer;

The return type for image and buffer loads is now taken from the storage format.
Also, the qualifier for the return type is now (properly) a temp, not a global.
This commit is contained in:
steve-lunarg
2016-10-10 15:24:57 -06:00
parent f042e407a9
commit 4f2da27aec
22 changed files with 6033 additions and 192 deletions

View File

@@ -823,6 +823,53 @@ public:
default: return "none";
}
}
static int getLayoutComponentCount(TLayoutFormat f)
{
switch (f) {
case ElfRgba32f: return 4;
case ElfRgba16f: return 4;
case ElfRg32f: return 2;
case ElfRg16f: return 2;
case ElfR11fG11fB10f: return 3;
case ElfR32f: return 1;
case ElfR16f: return 1;
case ElfRgba16: return 4;
case ElfRgb10A2: return 4;
case ElfRgba8: return 4;
case ElfRg16: return 2;
case ElfRg8: return 2;
case ElfR16: return 1;
case ElfR8: return 1;
case ElfRgba16Snorm: return 4;
case ElfRgba8Snorm: return 4;
case ElfRg16Snorm: return 2;
case ElfRg8Snorm: return 2;
case ElfR16Snorm: return 1;
case ElfR8Snorm: return 1;
case ElfRgba32i: return 4;
case ElfRgba16i: return 4;
case ElfRgba8i: return 4;
case ElfRg32i: return 2;
case ElfRg16i: return 2;
case ElfRg8i: return 2;
case ElfR32i: return 1;
case ElfR16i: return 1;
case ElfR8i: return 1;
case ElfRgba32ui: return 4;
case ElfRgba16ui: return 4;
case ElfRgba8ui: return 4;
case ElfRg32ui: return 2;
case ElfRg16ui: return 2;
case ElfRgb10a2ui: return 4;
case ElfRg8ui: return 2;
case ElfR32ui: return 1;
case ElfR16ui: return 1;
case ElfR8ui: return 1;
default: return 4;
}
}
static const char* getLayoutDepthString(TLayoutDepth d)
{
switch (d) {