summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-09-26 09:44:08 -0700
committerGitHub <noreply@github.com>2024-09-26 09:44:08 -0700
commit5a0224a0773f6d7f5eae8515424af5fa8faa9c14 (patch)
treeac14b54ad253d4ac5413a3c86254929f332b9e1a /include
parent7398e1e09312ed4e19195e060de9a2c9a073fcc1 (diff)
Move texture format inference to frontend and add reflection api for it. (#5155)
Diffstat (limited to 'include')
-rw-r--r--include/slang-image-format-defs.h49
-rw-r--r--include/slang.h15
2 files changed, 64 insertions, 0 deletions
diff --git a/include/slang-image-format-defs.h b/include/slang-image-format-defs.h
new file mode 100644
index 000000000..410c73339
--- /dev/null
+++ b/include/slang-image-format-defs.h
@@ -0,0 +1,49 @@
+// slang-image-format-defs.h
+#ifndef SLANG_FORMAT
+#error Must define SLANG_FORMAT macro before including image-format-defs.h
+#endif
+
+SLANG_FORMAT(unknown, (NONE, 0, 0))
+SLANG_FORMAT(rgba32f, (FLOAT32, 4, sizeof(float) * 4))
+SLANG_FORMAT(rgba16f, (FLOAT16, 4, sizeof(uint16_t) * 4))
+SLANG_FORMAT(rg32f, (FLOAT32, 2, sizeof(float) * 2))
+SLANG_FORMAT(rg16f, (FLOAT16, 2, sizeof(uint16_t) * 2))
+SLANG_FORMAT(r11f_g11f_b10f, (NONE, 3, sizeof(uint32_t)))
+SLANG_FORMAT(r32f, (FLOAT32, 1, sizeof(float)))
+SLANG_FORMAT(r16f, (FLOAT16, 1, sizeof(uint16_t)))
+SLANG_FORMAT(rgba16, (UINT16, 4, sizeof(uint16_t) * 4))
+SLANG_FORMAT(rgb10_a2, (NONE, 4, sizeof(uint32_t)))
+SLANG_FORMAT(rgba8, (UINT8, 4, sizeof(uint32_t)))
+SLANG_FORMAT(rg16, (UINT16, 2, sizeof(uint16_t) * 2 ))
+SLANG_FORMAT(rg8, (UINT8, 2, sizeof(char) * 2))
+SLANG_FORMAT(r16, (UINT16, 1, sizeof(uint16_t)))
+SLANG_FORMAT(r8, (UINT8, 1, sizeof(uint8_t)))
+SLANG_FORMAT(rgba16_snorm, (UINT16, 4, sizeof(uint16_t) * 4))
+SLANG_FORMAT(rgba8_snorm, (UINT8, 4, sizeof(uint8_t) * 4))
+SLANG_FORMAT(rg16_snorm, (UINT16, 2, sizeof(uint16_t) * 2))
+SLANG_FORMAT(rg8_snorm, (UINT8, 2, sizeof(uint8_t) * 2))
+SLANG_FORMAT(r16_snorm, (UINT16, 1, sizeof(uint16_t)))
+SLANG_FORMAT(r8_snorm, (UINT8, 1, sizeof(uint8_t)))
+SLANG_FORMAT(rgba32i, (INT32, 4, sizeof(int32_t) * 4))
+SLANG_FORMAT(rgba16i, (INT16, 4, sizeof(int16_t) * 4))
+SLANG_FORMAT(rgba8i, (INT8, 4, sizeof(int8_t) * 4))
+SLANG_FORMAT(rg32i, (INT32, 2, sizeof(int32_t) * 2))
+SLANG_FORMAT(rg16i, (INT16, 2, sizeof(int16_t) * 2))
+SLANG_FORMAT(rg8i, (INT8, 2, sizeof(int8_t) * 2))
+SLANG_FORMAT(r32i, (INT32, 1, sizeof(int32_t)))
+SLANG_FORMAT(r16i, (INT16, 1, sizeof(int16_t)))
+SLANG_FORMAT(r8i, (INT8, 1, sizeof(int8_t)))
+SLANG_FORMAT(rgba32ui, (UINT32, 4, sizeof(uint32_t) * 4))
+SLANG_FORMAT(rgba16ui, (UINT16, 4, sizeof(uint16_t) * 4))
+SLANG_FORMAT(rgb10_a2ui, (NONE, 4, sizeof(uint32_t)))
+SLANG_FORMAT(rgba8ui, (UINT8, 4, sizeof(uint8_t) * 4))
+SLANG_FORMAT(rg32ui, (UINT32, 2, sizeof(uint32_t) * 2))
+SLANG_FORMAT(rg16ui, (UINT16, 2, sizeof(uint16_t) * 2))
+SLANG_FORMAT(rg8ui, (UINT8, 2, sizeof(uint8_t) * 2))
+SLANG_FORMAT(r32ui, (UINT32, 1, sizeof(uint32_t)))
+SLANG_FORMAT(r16ui, (UINT16, 1, sizeof(uint16_t)))
+SLANG_FORMAT(r8ui, (UINT8, 1, sizeof(uint8_t)))
+SLANG_FORMAT(r64ui, (UINT64, 1, sizeof(uint64_t)))
+SLANG_FORMAT(r64i, (INT64, 1, sizeof(int64_t)))
+
+#undef SLANG_FORMAT
diff --git a/include/slang.h b/include/slang.h
index 1c05b4c08..8e42632ff 100644
--- a/include/slang.h
+++ b/include/slang.h
@@ -2433,6 +2433,14 @@ extern "C"
SLANG_MODIFIER_INOUT
};
+ typedef SlangUInt32 SlangImageFormatIntegral;
+ enum SlangImageFormat : SlangImageFormatIntegral
+ {
+#define SLANG_FORMAT(NAME, DESC) SLANG_IMAGE_FORMAT_##NAME,
+#include "slang-image-format-defs.h"
+#undef SLANG_FORMAT
+ };
+
// User Attribute
SLANG_API char const* spReflectionUserAttribute_GetName(SlangReflectionUserAttribute* attrib);
SLANG_API unsigned int spReflectionUserAttribute_GetArgumentCount(SlangReflectionUserAttribute* attrib);
@@ -2526,6 +2534,7 @@ extern "C"
SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeBindingCount(SlangReflectionTypeLayout* typeLayout, SlangInt index);
SLANG_API SlangReflectionTypeLayout* spReflectionTypeLayout_getBindingRangeLeafTypeLayout(SlangReflectionTypeLayout* typeLayout, SlangInt index);
SLANG_API SlangReflectionVariable* spReflectionTypeLayout_getBindingRangeLeafVariable(SlangReflectionTypeLayout* typeLayout, SlangInt index);
+ SLANG_API SlangImageFormat spReflectionTypeLayout_getBindingRangeImageFormat(SlangReflectionTypeLayout* typeLayout, SlangInt index);
SLANG_API SlangInt spReflectionTypeLayout_getFieldBindingRangeOffset(SlangReflectionTypeLayout* typeLayout, SlangInt fieldIndex);
SLANG_API SlangInt spReflectionTypeLayout_getExplicitCounterBindingRangeOffset(SlangReflectionTypeLayout* inTypeLayout);
@@ -3299,6 +3308,12 @@ namespace slang
(SlangReflectionTypeLayout*)this, index);
}
+ SlangImageFormat getBindingRangeImageFormat(SlangInt index)
+ {
+ return spReflectionTypeLayout_getBindingRangeImageFormat(
+ (SlangReflectionTypeLayout*)this, index);
+ }
+
SlangInt getBindingRangeDescriptorSetIndex(SlangInt index)
{
return spReflectionTypeLayout_getBindingRangeDescriptorSetIndex(