summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-10-29 14:49:26 +0800
committerGitHub <noreply@github.com>2024-10-29 14:49:26 +0800
commitf65d756bff8d4c5cbc15bd0322a2ae8e6b896a21 (patch)
treeea1d61342cd29368e19135000ec2948813096205 /include
parenta729c15e9dce9f5116a38afc66329ab2ca4cea54 (diff)
format
* format * Minor test fixes * enable checking cpp format in ci
Diffstat (limited to 'include')
-rw-r--r--include/slang-com-helper.h218
-rw-r--r--include/slang-com-ptr.h232
-rw-r--r--include/slang-deprecated.h2102
-rw-r--r--include/slang-gfx.h1056
-rw-r--r--include/slang-image-format-defs.h86
-rw-r--r--include/slang.h5616
6 files changed, 4912 insertions, 4398 deletions
diff --git a/include/slang-com-helper.h b/include/slang-com-helper.h
index fc8b7de58..557b278df 100644
--- a/include/slang-com-helper.h
+++ b/include/slang-com-helper.h
@@ -2,36 +2,90 @@
#define SLANG_COM_HELPER_H
/** \file slang-com-helper.h
-*/
+ */
#include "slang.h"
+
#include <atomic>
/* !!!!!!!!!!!!!!!!!!!!! Macros to help checking SlangResult !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
-/*! Set SLANG_HANDLE_RESULT_FAIL(x) to code to be executed whenever an error occurs, and is detected by one of the macros */
+/*! Set SLANG_HANDLE_RESULT_FAIL(x) to code to be executed whenever an error occurs, and is detected
+ * by one of the macros */
#ifndef SLANG_HANDLE_RESULT_FAIL
-# define SLANG_HANDLE_RESULT_FAIL(x)
+ #define SLANG_HANDLE_RESULT_FAIL(x)
#endif
-//! Helper macro, that makes it easy to add result checking to calls in functions/methods that themselves return Result.
-#define SLANG_RETURN_ON_FAIL(x) { SlangResult _res = (x); if (SLANG_FAILED(_res)) { SLANG_HANDLE_RESULT_FAIL(_res); return _res; } }
-//! Helper macro that can be used to test the return value from a call, and will return in a void method/function
-#define SLANG_RETURN_VOID_ON_FAIL(x) { SlangResult _res = (x); if (SLANG_FAILED(_res)) { SLANG_HANDLE_RESULT_FAIL(_res); return; } }
+//! Helper macro, that makes it easy to add result checking to calls in functions/methods that
+//! themselves return Result.
+#define SLANG_RETURN_ON_FAIL(x) \
+ { \
+ SlangResult _res = (x); \
+ if (SLANG_FAILED(_res)) \
+ { \
+ SLANG_HANDLE_RESULT_FAIL(_res); \
+ return _res; \
+ } \
+ }
+//! Helper macro that can be used to test the return value from a call, and will return in a void
+//! method/function
+#define SLANG_RETURN_VOID_ON_FAIL(x) \
+ { \
+ SlangResult _res = (x); \
+ if (SLANG_FAILED(_res)) \
+ { \
+ SLANG_HANDLE_RESULT_FAIL(_res); \
+ return; \
+ } \
+ }
//! Helper macro that will return false on failure.
-#define SLANG_RETURN_FALSE_ON_FAIL(x) { SlangResult _res = (x); if (SLANG_FAILED(_res)) { SLANG_HANDLE_RESULT_FAIL(_res); return false; } }
+#define SLANG_RETURN_FALSE_ON_FAIL(x) \
+ { \
+ SlangResult _res = (x); \
+ if (SLANG_FAILED(_res)) \
+ { \
+ SLANG_HANDLE_RESULT_FAIL(_res); \
+ return false; \
+ } \
+ }
//! Helper macro that will return nullptr on failure.
-#define SLANG_RETURN_NULL_ON_FAIL(x) { SlangResult _res = (x); if (SLANG_FAILED(_res)) { SLANG_HANDLE_RESULT_FAIL(_res); return nullptr; } }
-
-//! Helper macro that will assert if the return code from a call is failure, also returns the failure.
-#define SLANG_ASSERT_ON_FAIL(x) { SlangResult _res = (x); if (SLANG_FAILED(_res)) { assert(false); return _res; } }
-//! Helper macro that will assert if the result from a call is a failure, also returns.
-#define SLANG_ASSERT_VOID_ON_FAIL(x) { SlangResult _res = (x); if (SLANG_FAILED(_res)) { assert(false); return; } }
+#define SLANG_RETURN_NULL_ON_FAIL(x) \
+ { \
+ SlangResult _res = (x); \
+ if (SLANG_FAILED(_res)) \
+ { \
+ SLANG_HANDLE_RESULT_FAIL(_res); \
+ return nullptr; \
+ } \
+ }
+
+//! Helper macro that will assert if the return code from a call is failure, also returns the
+//! failure.
+#define SLANG_ASSERT_ON_FAIL(x) \
+ { \
+ SlangResult _res = (x); \
+ if (SLANG_FAILED(_res)) \
+ { \
+ assert(false); \
+ return _res; \
+ } \
+ }
+//! Helper macro that will assert if the result from a call is a failure, also returns.
+#define SLANG_ASSERT_VOID_ON_FAIL(x) \
+ { \
+ SlangResult _res = (x); \
+ if (SLANG_FAILED(_res)) \
+ { \
+ assert(false); \
+ return; \
+ } \
+ }
/* !!!!!!!!!!!!!!!!!!!!!!! C++ helpers !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
#if defined(__cplusplus)
-namespace Slang {
+namespace Slang
+{
// Alias SlangResult to Slang::Result
typedef SlangResult Result;
@@ -64,67 +118,79 @@ SLANG_FORCE_INLINE bool operator!=(const Slang::Guid& a, const Slang::Guid& b)
return !(a == b);
}
-/* !!!!!!!! Macros to simplify implementing COM interfaces !!!!!!!!!!!!!!!!!!!!!!!!!!!! */
-
-/* Assumes underlying implementation has a member m_refCount that is initialized to 0 and can have ++ and -- operate on it.
-For SLANG_IUNKNOWN_QUERY_INTERFACE to work - must have a method 'getInterface' that returns valid pointers for the Guid, or nullptr
-if not found. */
-
-#define SLANG_IUNKNOWN_QUERY_INTERFACE \
-SLANG_NO_THROW SlangResult SLANG_MCALL queryInterface(SlangUUID const& uuid, void** outObject) SLANG_OVERRIDE \
-{ \
- ISlangUnknown* intf = getInterface(uuid); \
- if (intf) \
- { \
- addRef(); \
- *outObject = intf; \
- return SLANG_OK;\
- } \
- return SLANG_E_NO_INTERFACE;\
-}
-
-#define SLANG_IUNKNOWN_ADD_REF \
-SLANG_NO_THROW uint32_t SLANG_MCALL addRef() \
-{ \
- return ++m_refCount; \
-}
-
-#define SLANG_IUNKNOWN_RELEASE \
-SLANG_NO_THROW uint32_t SLANG_MCALL release() \
-{ \
- --m_refCount; \
- if (m_refCount == 0) \
- { \
- delete this; \
- return 0; \
- } \
- return m_refCount; \
-}
-
-#define SLANG_IUNKNOWN_ALL \
- SLANG_IUNKNOWN_QUERY_INTERFACE \
- SLANG_IUNKNOWN_ADD_REF \
- SLANG_IUNKNOWN_RELEASE
-
-// ------------------------ RefObject IUnknown -----------------------------
-
-#define SLANG_REF_OBJECT_IUNKNOWN_QUERY_INTERFACE \
-SLANG_NO_THROW SlangResult SLANG_MCALL queryInterface(SlangUUID const& uuid, void** outObject) SLANG_OVERRIDE \
-{ \
- void* intf = getInterface(uuid); \
- if (intf) \
- { \
- addReference(); \
- *outObject = intf; \
- return SLANG_OK;\
- } \
- return SLANG_E_NO_INTERFACE;\
-}
-
-#define SLANG_REF_OBJECT_IUNKNOWN_ADD_REF SLANG_NO_THROW uint32_t SLANG_MCALL addRef() SLANG_OVERRIDE { return (uint32_t)addReference(); }
-#define SLANG_REF_OBJECT_IUNKNOWN_RELEASE SLANG_NO_THROW uint32_t SLANG_MCALL release() SLANG_OVERRIDE { return (uint32_t)releaseReference(); }
-
-# define SLANG_REF_OBJECT_IUNKNOWN_ALL \
+ /* !!!!!!!! Macros to simplify implementing COM interfaces !!!!!!!!!!!!!!!!!!!!!!!!!!!! */
+
+ /* Assumes underlying implementation has a member m_refCount that is initialized to 0 and can
+ have ++ and -- operate on it. For SLANG_IUNKNOWN_QUERY_INTERFACE to work - must have a method
+ 'getInterface' that returns valid pointers for the Guid, or nullptr if not found. */
+
+ #define SLANG_IUNKNOWN_QUERY_INTERFACE \
+ SLANG_NO_THROW SlangResult SLANG_MCALL queryInterface( \
+ SlangUUID const& uuid, \
+ void** outObject) SLANG_OVERRIDE \
+ { \
+ ISlangUnknown* intf = getInterface(uuid); \
+ if (intf) \
+ { \
+ addRef(); \
+ *outObject = intf; \
+ return SLANG_OK; \
+ } \
+ return SLANG_E_NO_INTERFACE; \
+ }
+
+ #define SLANG_IUNKNOWN_ADD_REF \
+ SLANG_NO_THROW uint32_t SLANG_MCALL addRef() \
+ { \
+ return ++m_refCount; \
+ }
+
+ #define SLANG_IUNKNOWN_RELEASE \
+ SLANG_NO_THROW uint32_t SLANG_MCALL release() \
+ { \
+ --m_refCount; \
+ if (m_refCount == 0) \
+ { \
+ delete this; \
+ return 0; \
+ } \
+ return m_refCount; \
+ }
+
+ #define SLANG_IUNKNOWN_ALL \
+ SLANG_IUNKNOWN_QUERY_INTERFACE \
+ SLANG_IUNKNOWN_ADD_REF \
+ SLANG_IUNKNOWN_RELEASE
+
+ // ------------------------ RefObject IUnknown -----------------------------
+
+ #define SLANG_REF_OBJECT_IUNKNOWN_QUERY_INTERFACE \
+ SLANG_NO_THROW SlangResult SLANG_MCALL queryInterface( \
+ SlangUUID const& uuid, \
+ void** outObject) SLANG_OVERRIDE \
+ { \
+ void* intf = getInterface(uuid); \
+ if (intf) \
+ { \
+ addReference(); \
+ *outObject = intf; \
+ return SLANG_OK; \
+ } \
+ return SLANG_E_NO_INTERFACE; \
+ }
+
+ #define SLANG_REF_OBJECT_IUNKNOWN_ADD_REF \
+ SLANG_NO_THROW uint32_t SLANG_MCALL addRef() SLANG_OVERRIDE \
+ { \
+ return (uint32_t)addReference(); \
+ }
+ #define SLANG_REF_OBJECT_IUNKNOWN_RELEASE \
+ SLANG_NO_THROW uint32_t SLANG_MCALL release() SLANG_OVERRIDE \
+ { \
+ return (uint32_t)releaseReference(); \
+ }
+
+ #define SLANG_REF_OBJECT_IUNKNOWN_ALL \
SLANG_REF_OBJECT_IUNKNOWN_QUERY_INTERFACE \
SLANG_REF_OBJECT_IUNKNOWN_ADD_REF \
SLANG_REF_OBJECT_IUNKNOWN_RELEASE
diff --git a/include/slang-com-ptr.h b/include/slang-com-ptr.h
index 00cc9dbb1..e9d211d92 100644
--- a/include/slang-com-ptr.h
+++ b/include/slang-com-ptr.h
@@ -6,20 +6,21 @@
#include <assert.h>
#include <cstddef>
-namespace Slang {
+namespace Slang
+{
/*! \brief ComPtr is a simple smart pointer that manages types which implement COM based interfaces.
-\details A class that implements a COM, must derive from the IUnknown interface or a type that matches
-it's layout exactly (such as ISlangUnknown). Trying to use this template with a class that doesn't follow
-these rules, will lead to undefined behavior.
-This is a 'strong' pointer type, and will AddRef when a non null pointer is set and Release when the pointer
-leaves scope.
-Using 'detach' allows a pointer to be removed from the management of the ComPtr.
-To set the smart pointer to null, there is the method setNull, or alternatively just assign SLANG_NULL/nullptr.
-
-One edge case using the template is that sometimes you want access as a pointer to a pointer. Sometimes this
-is to write into the smart pointer, other times to pass as an array. To handle these different behaviors
-there are the methods readRef and writeRef, which are used instead of the & (ref) operator. For example
+\details A class that implements a COM, must derive from the IUnknown interface or a type that
+matches it's layout exactly (such as ISlangUnknown). Trying to use this template with a class that
+doesn't follow these rules, will lead to undefined behavior. This is a 'strong' pointer type, and
+will AddRef when a non null pointer is set and Release when the pointer leaves scope. Using 'detach'
+allows a pointer to be removed from the management of the ComPtr. To set the smart pointer to null,
+there is the method setNull, or alternatively just assign SLANG_NULL/nullptr.
+
+One edge case using the template is that sometimes you want access as a pointer to a pointer.
+Sometimes this is to write into the smart pointer, other times to pass as an array. To handle these
+different behaviors there are the methods readRef and writeRef, which are used instead of the &
+(ref) operator. For example
\code
Void doSomething(ID3D12Resource** resources, IndexT numResources);
@@ -44,115 +45,164 @@ enum InitAttach
INIT_ATTACH
};
-template <class T>
+template<class T>
class ComPtr
{
public:
- typedef T Type;
- typedef ComPtr ThisType;
- typedef ISlangUnknown* Ptr;
-
- /// Constructors
- /// Default Ctor. Sets to nullptr
- SLANG_FORCE_INLINE ComPtr() :m_ptr(nullptr) {}
- SLANG_FORCE_INLINE ComPtr(std::nullptr_t) : m_ptr(nullptr) {}
- /// Sets, and ref counts.
- SLANG_FORCE_INLINE explicit ComPtr(T* ptr) :m_ptr(ptr) { if (ptr) ((Ptr)ptr)->addRef(); }
- /// The copy ctor
- SLANG_FORCE_INLINE ComPtr(const ThisType& rhs) : m_ptr(rhs.m_ptr) { if (m_ptr) ((Ptr)m_ptr)->addRef(); }
-
- /// Ctor without adding to ref count.
- SLANG_FORCE_INLINE explicit ComPtr(InitAttach, T* ptr) :m_ptr(ptr) { }
- /// Ctor without adding to ref count
- SLANG_FORCE_INLINE ComPtr(InitAttach, const ThisType& rhs) : m_ptr(rhs.m_ptr) { }
+ typedef T Type;
+ typedef ComPtr ThisType;
+ typedef ISlangUnknown* Ptr;
+
+ /// Constructors
+ /// Default Ctor. Sets to nullptr
+ SLANG_FORCE_INLINE ComPtr()
+ : m_ptr(nullptr)
+ {
+ }
+ SLANG_FORCE_INLINE ComPtr(std::nullptr_t)
+ : m_ptr(nullptr)
+ {
+ }
+ /// Sets, and ref counts.
+ SLANG_FORCE_INLINE explicit ComPtr(T* ptr)
+ : m_ptr(ptr)
+ {
+ if (ptr)
+ ((Ptr)ptr)->addRef();
+ }
+ /// The copy ctor
+ SLANG_FORCE_INLINE ComPtr(const ThisType& rhs)
+ : m_ptr(rhs.m_ptr)
+ {
+ if (m_ptr)
+ ((Ptr)m_ptr)->addRef();
+ }
+
+ /// Ctor without adding to ref count.
+ SLANG_FORCE_INLINE explicit ComPtr(InitAttach, T* ptr)
+ : m_ptr(ptr)
+ {
+ }
+ /// Ctor without adding to ref count
+ SLANG_FORCE_INLINE ComPtr(InitAttach, const ThisType& rhs)
+ : m_ptr(rhs.m_ptr)
+ {
+ }
#ifdef SLANG_HAS_MOVE_SEMANTICS
- /// Move Ctor
- SLANG_FORCE_INLINE ComPtr(ThisType&& rhs) : m_ptr(rhs.m_ptr) { rhs.m_ptr = nullptr; }
- /// Move assign
- SLANG_FORCE_INLINE ComPtr& operator=(ThisType&& rhs) { T* swap = m_ptr; m_ptr = rhs.m_ptr; rhs.m_ptr = swap; return *this; }
+ /// Move Ctor
+ SLANG_FORCE_INLINE ComPtr(ThisType&& rhs)
+ : m_ptr(rhs.m_ptr)
+ {
+ rhs.m_ptr = nullptr;
+ }
+ /// Move assign
+ SLANG_FORCE_INLINE ComPtr& operator=(ThisType&& rhs)
+ {
+ T* swap = m_ptr;
+ m_ptr = rhs.m_ptr;
+ rhs.m_ptr = swap;
+ return *this;
+ }
#endif
- /// Destructor releases the pointer, assuming it is set
- SLANG_FORCE_INLINE ~ComPtr() { if (m_ptr) ((Ptr)m_ptr)->release(); }
-
- // !!! Operators !!!
-
- /// Returns the dumb pointer
- SLANG_FORCE_INLINE operator T *() const { return m_ptr; }
-
- SLANG_FORCE_INLINE T& operator*() { return *m_ptr; }
- /// For making method invocations through the smart pointer work through the dumb pointer
- SLANG_FORCE_INLINE T* operator->() const { return m_ptr; }
-
- /// Assign
- SLANG_FORCE_INLINE const ThisType &operator=(const ThisType& rhs);
- /// Assign from dumb ptr
- SLANG_FORCE_INLINE T* operator=(T* in);
-
- /// Get the pointer and don't ref
- SLANG_FORCE_INLINE T* get() const { return m_ptr; }
- /// Release a contained nullptr pointer if set
- SLANG_FORCE_INLINE void setNull();
-
- /// Detach
- SLANG_FORCE_INLINE T* detach() { T* ptr = m_ptr; m_ptr = nullptr; return ptr; }
- /// Set to a pointer without changing the ref count
- SLANG_FORCE_INLINE void attach(T* in) { m_ptr = in; }
-
- /// Get ready for writing (nulls contents)
- SLANG_FORCE_INLINE T** writeRef() { setNull(); return &m_ptr; }
- /// Get for read access
- SLANG_FORCE_INLINE T*const* readRef() const { return &m_ptr; }
-
- /// Swap
- void swap(ThisType& rhs);
+ /// Destructor releases the pointer, assuming it is set
+ SLANG_FORCE_INLINE ~ComPtr()
+ {
+ if (m_ptr)
+ ((Ptr)m_ptr)->release();
+ }
+
+ // !!! Operators !!!
+
+ /// Returns the dumb pointer
+ SLANG_FORCE_INLINE operator T*() const { return m_ptr; }
+
+ SLANG_FORCE_INLINE T& operator*() { return *m_ptr; }
+ /// For making method invocations through the smart pointer work through the dumb pointer
+ SLANG_FORCE_INLINE T* operator->() const { return m_ptr; }
+
+ /// Assign
+ SLANG_FORCE_INLINE const ThisType& operator=(const ThisType& rhs);
+ /// Assign from dumb ptr
+ SLANG_FORCE_INLINE T* operator=(T* in);
+
+ /// Get the pointer and don't ref
+ SLANG_FORCE_INLINE T* get() const { return m_ptr; }
+ /// Release a contained nullptr pointer if set
+ SLANG_FORCE_INLINE void setNull();
+
+ /// Detach
+ SLANG_FORCE_INLINE T* detach()
+ {
+ T* ptr = m_ptr;
+ m_ptr = nullptr;
+ return ptr;
+ }
+ /// Set to a pointer without changing the ref count
+ SLANG_FORCE_INLINE void attach(T* in) { m_ptr = in; }
+
+ /// Get ready for writing (nulls contents)
+ SLANG_FORCE_INLINE T** writeRef()
+ {
+ setNull();
+ return &m_ptr;
+ }
+ /// Get for read access
+ SLANG_FORCE_INLINE T* const* readRef() const { return &m_ptr; }
+
+ /// Swap
+ void swap(ThisType& rhs);
protected:
- /// Gets the address of the dumb pointer.
+ /// Gets the address of the dumb pointer.
// Disabled: use writeRef and readRef to get a reference based on usage.
#ifndef SLANG_COM_PTR_ENABLE_REF_OPERATOR
- SLANG_FORCE_INLINE T** operator&() = delete;
+ SLANG_FORCE_INLINE T** operator&() = delete;
#endif
- T* m_ptr;
+ T* m_ptr;
};
//----------------------------------------------------------------------------
-template <typename T>
+template<typename T>
void ComPtr<T>::setNull()
{
- if (m_ptr)
- {
- ((Ptr)m_ptr)->release();
- m_ptr = nullptr;
- }
+ if (m_ptr)
+ {
+ ((Ptr)m_ptr)->release();
+ m_ptr = nullptr;
+ }
}
//----------------------------------------------------------------------------
-template <typename T>
+template<typename T>
const ComPtr<T>& ComPtr<T>::operator=(const ThisType& rhs)
{
- if (rhs.m_ptr) ((Ptr)rhs.m_ptr)->addRef();
- if (m_ptr) ((Ptr)m_ptr)->release();
- m_ptr = rhs.m_ptr;
- return *this;
+ if (rhs.m_ptr)
+ ((Ptr)rhs.m_ptr)->addRef();
+ if (m_ptr)
+ ((Ptr)m_ptr)->release();
+ m_ptr = rhs.m_ptr;
+ return *this;
}
//----------------------------------------------------------------------------
-template <typename T>
+template<typename T>
T* ComPtr<T>::operator=(T* ptr)
{
- if (ptr) ((Ptr)ptr)->addRef();
- if (m_ptr) ((Ptr)m_ptr)->release();
- m_ptr = ptr;
- return m_ptr;
+ if (ptr)
+ ((Ptr)ptr)->addRef();
+ if (m_ptr)
+ ((Ptr)m_ptr)->release();
+ m_ptr = ptr;
+ return m_ptr;
}
//----------------------------------------------------------------------------
-template <typename T>
+template<typename T>
void ComPtr<T>::swap(ThisType& rhs)
{
- T* tmp = m_ptr;
- m_ptr = rhs.m_ptr;
- rhs.m_ptr = tmp;
+ T* tmp = m_ptr;
+ m_ptr = rhs.m_ptr;
+ rhs.m_ptr = tmp;
}
} // namespace Slang
diff --git a/include/slang-deprecated.h b/include/slang-deprecated.h
index 2cf4608b3..1c1350f9f 100644
--- a/include/slang-deprecated.h
+++ b/include/slang-deprecated.h
@@ -23,91 +23,75 @@ extern "C"
/*!
@brief Clean up after an instance of the Slang library.
*/
- SLANG_API void spDestroySession(
- SlangSession* session);
+ SLANG_API void spDestroySession(SlangSession* session);
/** @see slang::IGlobalSession::setSharedLibraryLoader
- */
+ */
SLANG_API void spSessionSetSharedLibraryLoader(
- SlangSession* session,
- ISlangSharedLibraryLoader* loader);
+ SlangSession* session,
+ ISlangSharedLibraryLoader* loader);
/** @see slang::IGlobalSession::getSharedLibraryLoader
- */
- SLANG_API ISlangSharedLibraryLoader* spSessionGetSharedLibraryLoader(
- SlangSession* session);
+ */
+ SLANG_API ISlangSharedLibraryLoader* spSessionGetSharedLibraryLoader(SlangSession* session);
/** @see slang::IGlobalSession::checkCompileTargetSupport
- */
- SLANG_API SlangResult spSessionCheckCompileTargetSupport(
- SlangSession* session,
- SlangCompileTarget target);
+ */
+ SLANG_API SlangResult
+ spSessionCheckCompileTargetSupport(SlangSession* session, SlangCompileTarget target);
/** @see slang::IGlobalSession::checkPassThroughSupport
- */
- SLANG_API SlangResult spSessionCheckPassThroughSupport(
- SlangSession* session,
- SlangPassThrough passThrough
- );
+ */
+ SLANG_API SlangResult
+ spSessionCheckPassThroughSupport(SlangSession* session, SlangPassThrough passThrough);
/** @see slang::IGlobalSession::addBuiltins
- */
+ */
SLANG_API void spAddBuiltins(
- SlangSession* session,
- char const* sourcePath,
- char const* sourceString);
+ SlangSession* session,
+ char const* sourcePath,
+ char const* sourceString);
/* @see slang::IGlobalSession::createCompileRequest
- */
- SLANG_API SlangCompileRequest* spCreateCompileRequest(
- SlangSession* session);
+ */
+ SLANG_API SlangCompileRequest* spCreateCompileRequest(SlangSession* session);
/*!
@brief Destroy a compile request.
Note a request is a COM object and can be destroyed via 'Release'.
*/
- SLANG_API void spDestroyCompileRequest(
- SlangCompileRequest* request);
+ SLANG_API void spDestroyCompileRequest(SlangCompileRequest* request);
/*! @see slang::ICompileRequest::setFileSystem */
- SLANG_API void spSetFileSystem(
- SlangCompileRequest* request,
- ISlangFileSystem* fileSystem);
+ SLANG_API void spSetFileSystem(SlangCompileRequest* request, ISlangFileSystem* fileSystem);
/*! @see slang::ICompileRequest::setCompileFlags */
- SLANG_API void spSetCompileFlags(
- SlangCompileRequest* request,
- SlangCompileFlags flags);
+ SLANG_API void spSetCompileFlags(SlangCompileRequest* request, SlangCompileFlags flags);
/*! @see slang::ICompileRequest::getCompileFlags */
- SLANG_API SlangCompileFlags spGetCompileFlags(
- SlangCompileRequest* request);
+ SLANG_API SlangCompileFlags spGetCompileFlags(SlangCompileRequest* request);
/*! @see slang::ICompileRequest::setDumpIntermediates */
- SLANG_API void spSetDumpIntermediates(
- SlangCompileRequest* request,
- int enable);
+ SLANG_API void spSetDumpIntermediates(SlangCompileRequest* request, int enable);
/*! @see slang::ICompileRequest::setDumpIntermediatePrefix */
- SLANG_API void spSetDumpIntermediatePrefix(
- SlangCompileRequest* request,
- const char* prefix);
+ SLANG_API void spSetDumpIntermediatePrefix(SlangCompileRequest* request, const char* prefix);
/*! DEPRECATED: use `spSetTargetLineDirectiveMode` instead.
@see slang::ICompileRequest::setLineDirectiveMode */
SLANG_API void spSetLineDirectiveMode(
- SlangCompileRequest* request,
- SlangLineDirectiveMode mode);
-
+ SlangCompileRequest* request,
+ SlangLineDirectiveMode mode);
+
/*! @see slang::ICompileRequest::setTargetLineDirectiveMode */
SLANG_API void spSetTargetLineDirectiveMode(
- SlangCompileRequest* request,
+ SlangCompileRequest* request,
int targetIndex,
- SlangLineDirectiveMode mode);
+ SlangLineDirectiveMode mode);
/*! @see slang::ICompileRequest::setTargetLineDirectiveMode */
SLANG_API void spSetTargetForceGLSLScalarBufferLayout(
- SlangCompileRequest* request,
+ SlangCompileRequest* request,
int targetIndex,
bool forceScalarLayout);
@@ -118,296 +102,254 @@ extern "C"
bool val);
/*! @see slang::ICompileRequest::setIngoreCapabilityCheck */
- SLANG_API void spSetIgnoreCapabilityCheck(
- slang::ICompileRequest* request,
- bool val);
+ SLANG_API void spSetIgnoreCapabilityCheck(slang::ICompileRequest* request, bool val);
/*! @see slang::ICompileRequest::setCodeGenTarget */
- SLANG_API void spSetCodeGenTarget(
- SlangCompileRequest* request,
- SlangCompileTarget target);
+ SLANG_API void spSetCodeGenTarget(SlangCompileRequest* request, SlangCompileTarget target);
/*! @see slang::ICompileRequest::addCodeGenTarget */
- SLANG_API int spAddCodeGenTarget(
- SlangCompileRequest* request,
- SlangCompileTarget target);
+ SLANG_API int spAddCodeGenTarget(SlangCompileRequest* request, SlangCompileTarget target);
/*! @see slang::ICompileRequest::setTargetProfile */
SLANG_API void spSetTargetProfile(
- SlangCompileRequest* request,
- int targetIndex,
- SlangProfileID profile);
+ SlangCompileRequest* request,
+ int targetIndex,
+ SlangProfileID profile);
/*! @see slang::ICompileRequest::setTargetFlags */
SLANG_API void spSetTargetFlags(
- SlangCompileRequest* request,
- int targetIndex,
- SlangTargetFlags flags);
-
+ SlangCompileRequest* request,
+ int targetIndex,
+ SlangTargetFlags flags);
/*! @see slang::ICompileRequest::setTargetFloatingPointMode */
SLANG_API void spSetTargetFloatingPointMode(
- SlangCompileRequest* request,
- int targetIndex,
- SlangFloatingPointMode mode);
+ SlangCompileRequest* request,
+ int targetIndex,
+ SlangFloatingPointMode mode);
/*! @see slang::ICompileRequest::addTargetCapability */
SLANG_API void spAddTargetCapability(
slang::ICompileRequest* request,
- int targetIndex,
- SlangCapabilityID capability);
+ int targetIndex,
+ SlangCapabilityID capability);
/* DEPRECATED: use `spSetMatrixLayoutMode` instead. */
SLANG_API void spSetTargetMatrixLayoutMode(
- SlangCompileRequest* request,
- int targetIndex,
- SlangMatrixLayoutMode mode);
+ SlangCompileRequest* request,
+ int targetIndex,
+ SlangMatrixLayoutMode mode);
/*! @see slang::ICompileRequest::setMatrixLayoutMode */
- SLANG_API void spSetMatrixLayoutMode(
- SlangCompileRequest* request,
- SlangMatrixLayoutMode mode);
+ SLANG_API void spSetMatrixLayoutMode(SlangCompileRequest* request, SlangMatrixLayoutMode mode);
/*! @see slang::ICompileRequest::setDebugInfoLevel */
- SLANG_API void spSetDebugInfoLevel(
- SlangCompileRequest* request,
- SlangDebugInfoLevel level);
+ SLANG_API void spSetDebugInfoLevel(SlangCompileRequest* request, SlangDebugInfoLevel level);
/*! @see slang::ICompileRequest::setDebugInfoFormat */
- SLANG_API void spSetDebugInfoFormat(
- SlangCompileRequest* request,
- SlangDebugInfoFormat format);
+ SLANG_API void spSetDebugInfoFormat(SlangCompileRequest* request, SlangDebugInfoFormat format);
/*! @see slang::ICompileRequest::setOptimizationLevel */
SLANG_API void spSetOptimizationLevel(
- SlangCompileRequest* request,
- SlangOptimizationLevel level);
+ SlangCompileRequest* request,
+ SlangOptimizationLevel level);
-
/*! @see slang::ICompileRequest::setOutputContainerFormat */
SLANG_API void spSetOutputContainerFormat(
- SlangCompileRequest* request,
- SlangContainerFormat format);
+ SlangCompileRequest* request,
+ SlangContainerFormat format);
/*! @see slang::ICompileRequest::setPassThrough */
- SLANG_API void spSetPassThrough(
- SlangCompileRequest* request,
- SlangPassThrough passThrough);
+ SLANG_API void spSetPassThrough(SlangCompileRequest* request, SlangPassThrough passThrough);
- /*! @see slang::ICompileRequest::setDiagnosticCallback */
+ /*! @see slang::ICompileRequest::setDiagnosticCallback */
SLANG_API void spSetDiagnosticCallback(
- SlangCompileRequest* request,
+ SlangCompileRequest* request,
SlangDiagnosticCallback callback,
- void const* userData);
+ void const* userData);
/*! @see slang::ICompileRequest::setWriter */
SLANG_API void spSetWriter(
- SlangCompileRequest* request,
- SlangWriterChannel channel,
- ISlangWriter* writer);
+ SlangCompileRequest* request,
+ SlangWriterChannel channel,
+ ISlangWriter* writer);
/*! @see slang::ICompileRequest::getWriter */
- SLANG_API ISlangWriter* spGetWriter(
- SlangCompileRequest* request,
- SlangWriterChannel channel);
+ SLANG_API ISlangWriter* spGetWriter(SlangCompileRequest* request, SlangWriterChannel channel);
/*! @see slang::ICompileRequest::addSearchPath */
- SLANG_API void spAddSearchPath(
- SlangCompileRequest* request,
- const char* searchDir);
+ SLANG_API void spAddSearchPath(SlangCompileRequest* request, const char* searchDir);
- /*! @see slang::ICompileRequest::addPreprocessorDefine */
+ /*! @see slang::ICompileRequest::addPreprocessorDefine */
SLANG_API void spAddPreprocessorDefine(
- SlangCompileRequest* request,
- const char* key,
- const char* value);
+ SlangCompileRequest* request,
+ const char* key,
+ const char* value);
/*! @see slang::ICompileRequest::processCommandLineArguments */
SLANG_API SlangResult spProcessCommandLineArguments(
- SlangCompileRequest* request,
- char const* const* args,
- int argCount);
+ SlangCompileRequest* request,
+ char const* const* args,
+ int argCount);
/*! @see slang::ICompileRequest::addTranslationUnit */
SLANG_API int spAddTranslationUnit(
- SlangCompileRequest* request,
- SlangSourceLanguage language,
- char const* name);
+ SlangCompileRequest* request,
+ SlangSourceLanguage language,
+ char const* name);
+
-
/*! @see slang::ICompileRequest::setDefaultModuleName */
SLANG_API void spSetDefaultModuleName(
- SlangCompileRequest* request,
+ SlangCompileRequest* request,
const char* defaultModuleName);
/*! @see slang::ICompileRequest::addPreprocessorDefine */
SLANG_API void spTranslationUnit_addPreprocessorDefine(
- SlangCompileRequest* request,
- int translationUnitIndex,
- const char* key,
- const char* value);
+ SlangCompileRequest* request,
+ int translationUnitIndex,
+ const char* key,
+ const char* value);
/*! @see slang::ICompileRequest::addTranslationUnitSourceFile */
SLANG_API void spAddTranslationUnitSourceFile(
- SlangCompileRequest* request,
- int translationUnitIndex,
- char const* path);
+ SlangCompileRequest* request,
+ int translationUnitIndex,
+ char const* path);
/*! @see slang::ICompileRequest::addTranslationUnitSourceString */
SLANG_API void spAddTranslationUnitSourceString(
- SlangCompileRequest* request,
- int translationUnitIndex,
- char const* path,
- char const* source);
+ SlangCompileRequest* request,
+ int translationUnitIndex,
+ char const* path,
+ char const* source);
/*! @see slang::ICompileRequest::addLibraryReference */
SLANG_API SlangResult spAddLibraryReference(
- SlangCompileRequest* request,
+ SlangCompileRequest* request,
const char* basePath,
const void* libData,
size_t libDataSize);
/*! @see slang::ICompileRequest::addTranslationUnitSourceStringSpan */
SLANG_API void spAddTranslationUnitSourceStringSpan(
- SlangCompileRequest* request,
- int translationUnitIndex,
- char const* path,
- char const* sourceBegin,
- char const* sourceEnd);
+ SlangCompileRequest* request,
+ int translationUnitIndex,
+ char const* path,
+ char const* sourceBegin,
+ char const* sourceEnd);
/*! @see slang::ICompileRequest::addTranslationUnitSourceBlob */
SLANG_API void spAddTranslationUnitSourceBlob(
- SlangCompileRequest* request,
- int translationUnitIndex,
- char const* path,
- ISlangBlob* sourceBlob);
+ SlangCompileRequest* request,
+ int translationUnitIndex,
+ char const* path,
+ ISlangBlob* sourceBlob);
/*! @see slang::IGlobalSession::findProfile */
- SLANG_API SlangProfileID spFindProfile(
- SlangSession* session,
- char const* name);
+ SLANG_API SlangProfileID spFindProfile(SlangSession* session, char const* name);
/*! @see slang::IGlobalSession::findCapability */
- SLANG_API SlangCapabilityID spFindCapability(
- SlangSession* session,
- char const* name);
+ SLANG_API SlangCapabilityID spFindCapability(SlangSession* session, char const* name);
/*! @see slang::ICompileRequest::addEntryPoint */
SLANG_API int spAddEntryPoint(
- SlangCompileRequest* request,
- int translationUnitIndex,
- char const* name,
- SlangStage stage);
+ SlangCompileRequest* request,
+ int translationUnitIndex,
+ char const* name,
+ SlangStage stage);
/*! @see slang::ICompileRequest::addEntryPointEx */
SLANG_API int spAddEntryPointEx(
- SlangCompileRequest* request,
- int translationUnitIndex,
- char const* name,
- SlangStage stage,
- int genericArgCount,
- char const** genericArgs);
+ SlangCompileRequest* request,
+ int translationUnitIndex,
+ char const* name,
+ SlangStage stage,
+ int genericArgCount,
+ char const** genericArgs);
/*! @see slang::ICompileRequest::setGlobalGenericArgs */
SLANG_API SlangResult spSetGlobalGenericArgs(
- SlangCompileRequest* request,
- int genericArgCount,
- char const** genericArgs);
+ SlangCompileRequest* request,
+ int genericArgCount,
+ char const** genericArgs);
/*! @see slang::ICompileRequest::setTypeNameForGlobalExistentialTypeParam */
SLANG_API SlangResult spSetTypeNameForGlobalExistentialTypeParam(
- SlangCompileRequest* request,
- int slotIndex,
- char const* typeName);
+ SlangCompileRequest* request,
+ int slotIndex,
+ char const* typeName);
/*! @see slang::ICompileRequest::setTypeNameForEntryPointExistentialTypeParam */
SLANG_API SlangResult spSetTypeNameForEntryPointExistentialTypeParam(
- SlangCompileRequest* request,
- int entryPointIndex,
- int slotIndex,
- char const* typeName);
+ SlangCompileRequest* request,
+ int entryPointIndex,
+ int slotIndex,
+ char const* typeName);
/*! @see slang::ICompileRequest::compile */
- SLANG_API SlangResult spCompile(
- SlangCompileRequest* request);
+ SLANG_API SlangResult spCompile(SlangCompileRequest* request);
/*! @see slang::ICompileRequest::getDiagnosticOutput */
- SLANG_API char const* spGetDiagnosticOutput(
- SlangCompileRequest* request);
+ SLANG_API char const* spGetDiagnosticOutput(SlangCompileRequest* request);
/*! @see slang::ICompileRequest::getDiagnosticOutputBlob */
- SLANG_API SlangResult spGetDiagnosticOutputBlob(
- SlangCompileRequest* request,
- ISlangBlob** outBlob);
+ SLANG_API SlangResult
+ spGetDiagnosticOutputBlob(SlangCompileRequest* request, ISlangBlob** outBlob);
/*! @see slang::ICompileRequest::getDependencyFileCount */
- SLANG_API int
- spGetDependencyFileCount(
- SlangCompileRequest* request);
+ SLANG_API int spGetDependencyFileCount(SlangCompileRequest* request);
/*! @see slang::ICompileRequest::getDependencyFilePath */
- SLANG_API char const*
- spGetDependencyFilePath(
- SlangCompileRequest* request,
- int index);
+ SLANG_API char const* spGetDependencyFilePath(SlangCompileRequest* request, int index);
/*! @see slang::ICompileRequest::getTranslationUnitCount */
- SLANG_API int
- spGetTranslationUnitCount(
- SlangCompileRequest* request);
+ SLANG_API int spGetTranslationUnitCount(SlangCompileRequest* request);
/*! @see slang::ICompileRequest::getEntryPointSource */
- SLANG_API char const* spGetEntryPointSource(
- SlangCompileRequest* request,
- int entryPointIndex);
+ SLANG_API char const* spGetEntryPointSource(SlangCompileRequest* request, int entryPointIndex);
/*! @see slang::ICompileRequest::getEntryPointCode */
SLANG_API void const* spGetEntryPointCode(
- SlangCompileRequest* request,
- int entryPointIndex,
- size_t* outSize);
+ SlangCompileRequest* request,
+ int entryPointIndex,
+ size_t* outSize);
/*! @see slang::ICompileRequest::getEntryPointCodeBlob */
SLANG_API SlangResult spGetEntryPointCodeBlob(
- SlangCompileRequest* request,
- int entryPointIndex,
- int targetIndex,
- ISlangBlob** outBlob);
+ SlangCompileRequest* request,
+ int entryPointIndex,
+ int targetIndex,
+ ISlangBlob** outBlob);
/*! @see slang::ICompileRequest::getEntryPointHostCallable */
SLANG_API SlangResult spGetEntryPointHostCallable(
- SlangCompileRequest* request,
- int entryPointIndex,
- int targetIndex,
- ISlangSharedLibrary** outSharedLibrary);
+ SlangCompileRequest* request,
+ int entryPointIndex,
+ int targetIndex,
+ ISlangSharedLibrary** outSharedLibrary);
/*! @see slang::ICompileRequest::getTargetCodeBlob */
- SLANG_API SlangResult spGetTargetCodeBlob(
- SlangCompileRequest* request,
- int targetIndex,
- ISlangBlob** outBlob);
+ SLANG_API SlangResult
+ spGetTargetCodeBlob(SlangCompileRequest* request, int targetIndex, ISlangBlob** outBlob);
/*! @see slang::ICompileRequest::getTargetHostCallable */
SLANG_API SlangResult spGetTargetHostCallable(
- SlangCompileRequest* request,
- int targetIndex,
- ISlangSharedLibrary** outSharedLibrary);
+ SlangCompileRequest* request,
+ int targetIndex,
+ ISlangSharedLibrary** outSharedLibrary);
/*! @see slang::ICompileRequest::getCompileRequestCode */
- SLANG_API void const* spGetCompileRequestCode(
- SlangCompileRequest* request,
- size_t* outSize);
+ SLANG_API void const* spGetCompileRequestCode(SlangCompileRequest* request, size_t* outSize);
/*! @see slang::ICompileRequest::getContainerCode */
- SLANG_API SlangResult spGetContainerCode(
- SlangCompileRequest* request,
- ISlangBlob** outBlob);
+ SLANG_API SlangResult spGetContainerCode(SlangCompileRequest* request, ISlangBlob** outBlob);
/*! @see slang::ICompileRequest::loadRepro */
SLANG_API SlangResult spLoadRepro(
@@ -417,14 +359,10 @@ extern "C"
size_t size);
/*! @see slang::ICompileRequest::saveRepro */
- SLANG_API SlangResult spSaveRepro(
- SlangCompileRequest* request,
- ISlangBlob** outBlob
- );
+ SLANG_API SlangResult spSaveRepro(SlangCompileRequest* request, ISlangBlob** outBlob);
/*! @see slang::ICompileRequest::enableReproCapture */
- SLANG_API SlangResult spEnableReproCapture(
- SlangCompileRequest* request);
+ SLANG_API SlangResult spEnableReproCapture(SlangCompileRequest* request);
/*! @see slang::ICompileRequest::getCompileTimeProfile */
SLANG_API SlangResult spGetCompileTimeProfile(
@@ -435,8 +373,8 @@ extern "C"
/** Extract contents of a repro.
- Writes the contained files and manifest with their 'unique' names into fileSystem. For more details read the
- docs/repro.md documentation.
+ Writes the contained files and manifest with their 'unique' names into fileSystem. For more
+ details read the docs/repro.md documentation.
@param session The slang session
@param reproData Holds the repro data
@@ -452,13 +390,14 @@ extern "C"
/* Turns a repro into a file system.
- Makes the contents of the repro available as a file system - that is able to access the files with the same
- paths as were used on the original repro file system.
+ Makes the contents of the repro available as a file system - that is able to access the files
+ with the same paths as were used on the original repro file system.
@param session The slang session
@param reproData The repro data
@param reproDataSize The size of the repro data
- @param replaceFileSystem Will attempt to load by unique names from this file system before using contents of the repro. Optional.
+ @param replaceFileSystem Will attempt to load by unique names from this file system before
+ using contents of the repro. Optional.
@param outFileSystem The file system that can be used to access contents
@returns A `SlangResult` to indicate success or failure.
*/
@@ -483,43 +422,63 @@ extern "C"
// get reflection data from a compilation request
- SLANG_API SlangReflection* spGetReflection(
- SlangCompileRequest* request);
+ SLANG_API SlangReflection* spGetReflection(SlangCompileRequest* request);
// User Attribute
SLANG_API char const* spReflectionUserAttribute_GetName(SlangReflectionUserAttribute* attrib);
- SLANG_API unsigned int spReflectionUserAttribute_GetArgumentCount(SlangReflectionUserAttribute* attrib);
- SLANG_API SlangReflectionType* spReflectionUserAttribute_GetArgumentType(SlangReflectionUserAttribute* attrib, unsigned int index);
- SLANG_API SlangResult spReflectionUserAttribute_GetArgumentValueInt(SlangReflectionUserAttribute* attrib, unsigned int index, int * rs);
- SLANG_API SlangResult spReflectionUserAttribute_GetArgumentValueFloat(SlangReflectionUserAttribute* attrib, unsigned int index, float * rs);
+ SLANG_API unsigned int spReflectionUserAttribute_GetArgumentCount(
+ SlangReflectionUserAttribute* attrib);
+ SLANG_API SlangReflectionType* spReflectionUserAttribute_GetArgumentType(
+ SlangReflectionUserAttribute* attrib,
+ unsigned int index);
+ SLANG_API SlangResult spReflectionUserAttribute_GetArgumentValueInt(
+ SlangReflectionUserAttribute* attrib,
+ unsigned int index,
+ int* rs);
+ SLANG_API SlangResult spReflectionUserAttribute_GetArgumentValueFloat(
+ SlangReflectionUserAttribute* attrib,
+ unsigned int index,
+ float* rs);
/** Returns the string-typed value of a user attribute argument
- The string returned is not null-terminated. The length of the string is returned via `outSize`.
- If index of out of range, or if the specified argument is not a string, the function will return nullptr.
+ The string returned is not null-terminated. The length of the string is returned via
+ `outSize`. If index of out of range, or if the specified argument is not a string, the
+ function will return nullptr.
*/
- SLANG_API const char* spReflectionUserAttribute_GetArgumentValueString(SlangReflectionUserAttribute* attrib, unsigned int index, size_t * outSize);
+ SLANG_API const char* spReflectionUserAttribute_GetArgumentValueString(
+ SlangReflectionUserAttribute* attrib,
+ unsigned int index,
+ size_t* outSize);
// Type Reflection
SLANG_API SlangTypeKind spReflectionType_GetKind(SlangReflectionType* type);
SLANG_API unsigned int spReflectionType_GetUserAttributeCount(SlangReflectionType* type);
- SLANG_API SlangReflectionUserAttribute* spReflectionType_GetUserAttribute(SlangReflectionType* type, unsigned int index);
- SLANG_API SlangReflectionUserAttribute* spReflectionType_FindUserAttributeByName(SlangReflectionType* type, char const* name);
- SLANG_API SlangReflectionType* spReflectionType_applySpecializations(SlangReflectionType* type, SlangReflectionGeneric* generic);
+ SLANG_API SlangReflectionUserAttribute* spReflectionType_GetUserAttribute(
+ SlangReflectionType* type,
+ unsigned int index);
+ SLANG_API SlangReflectionUserAttribute* spReflectionType_FindUserAttributeByName(
+ SlangReflectionType* type,
+ char const* name);
+ SLANG_API SlangReflectionType* spReflectionType_applySpecializations(
+ SlangReflectionType* type,
+ SlangReflectionGeneric* generic);
SLANG_API unsigned int spReflectionType_GetFieldCount(SlangReflectionType* type);
- SLANG_API SlangReflectionVariable* spReflectionType_GetFieldByIndex(SlangReflectionType* type, unsigned index);
+ SLANG_API SlangReflectionVariable* spReflectionType_GetFieldByIndex(
+ SlangReflectionType* type,
+ unsigned index);
- /** Returns the number of elements in the given type.
+ /** Returns the number of elements in the given type.
- This operation is valid for vector and array types. For other types it returns zero.
+ This operation is valid for vector and array types. For other types it returns zero.
- When invoked on an unbounded-size array it will return `SLANG_UNBOUNDED_SIZE`,
- which is defined to be `~size_t(0)`.
+ When invoked on an unbounded-size array it will return `SLANG_UNBOUNDED_SIZE`,
+ which is defined to be `~size_t(0)`.
- If the size of a type cannot be statically computed, perhaps because it depends on
- a generic parameter that has not been bound to a specific value, this function returns zero.
- */
+ If the size of a type cannot be statically computed, perhaps because it depends on
+ a generic parameter that has not been bound to a specific value, this function returns zero.
+ */
SLANG_API size_t spReflectionType_GetElementCount(SlangReflectionType* type);
SLANG_API SlangReflectionType* spReflectionType_GetElementType(SlangReflectionType* type);
@@ -530,73 +489,146 @@ extern "C"
SLANG_API SlangResourceShape spReflectionType_GetResourceShape(SlangReflectionType* type);
SLANG_API SlangResourceAccess spReflectionType_GetResourceAccess(SlangReflectionType* type);
- SLANG_API SlangReflectionType* spReflectionType_GetResourceResultType(SlangReflectionType* type);
+ SLANG_API SlangReflectionType* spReflectionType_GetResourceResultType(
+ SlangReflectionType* type);
SLANG_API char const* spReflectionType_GetName(SlangReflectionType* type);
- SLANG_API SlangResult spReflectionType_GetFullName(SlangReflectionType* type, ISlangBlob** outNameBlob);
- SLANG_API SlangReflectionGeneric* spReflectionType_GetGenericContainer(SlangReflectionType* type);
+ SLANG_API SlangResult
+ spReflectionType_GetFullName(SlangReflectionType* type, ISlangBlob** outNameBlob);
+ SLANG_API SlangReflectionGeneric* spReflectionType_GetGenericContainer(
+ SlangReflectionType* type);
// Type Layout Reflection
SLANG_API SlangReflectionType* spReflectionTypeLayout_GetType(SlangReflectionTypeLayout* type);
SLANG_API SlangTypeKind spReflectionTypeLayout_getKind(SlangReflectionTypeLayout* type);
- SLANG_API size_t spReflectionTypeLayout_GetSize(SlangReflectionTypeLayout* type, SlangParameterCategory category);
- SLANG_API size_t spReflectionTypeLayout_GetStride(SlangReflectionTypeLayout* type, SlangParameterCategory category);
- SLANG_API int32_t spReflectionTypeLayout_getAlignment(SlangReflectionTypeLayout* type, SlangParameterCategory category);
+ SLANG_API size_t spReflectionTypeLayout_GetSize(
+ SlangReflectionTypeLayout* type,
+ SlangParameterCategory category);
+ SLANG_API size_t spReflectionTypeLayout_GetStride(
+ SlangReflectionTypeLayout* type,
+ SlangParameterCategory category);
+ SLANG_API int32_t spReflectionTypeLayout_getAlignment(
+ SlangReflectionTypeLayout* type,
+ SlangParameterCategory category);
SLANG_API uint32_t spReflectionTypeLayout_GetFieldCount(SlangReflectionTypeLayout* type);
- SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_GetFieldByIndex(SlangReflectionTypeLayout* type, unsigned index);
-
- SLANG_API SlangInt spReflectionTypeLayout_findFieldIndexByName(SlangReflectionTypeLayout* typeLayout, const char* nameBegin, const char* nameEnd);
-
- SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_GetExplicitCounter(SlangReflectionTypeLayout* typeLayout);
-
- SLANG_API size_t spReflectionTypeLayout_GetElementStride(SlangReflectionTypeLayout* type, SlangParameterCategory category);
- SLANG_API SlangReflectionTypeLayout* spReflectionTypeLayout_GetElementTypeLayout(SlangReflectionTypeLayout* type);
- SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_GetElementVarLayout(SlangReflectionTypeLayout* type);
- SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_getContainerVarLayout(SlangReflectionTypeLayout* type);
-
- SLANG_API SlangParameterCategory spReflectionTypeLayout_GetParameterCategory(SlangReflectionTypeLayout* type);
+ SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_GetFieldByIndex(
+ SlangReflectionTypeLayout* type,
+ unsigned index);
+
+ SLANG_API SlangInt spReflectionTypeLayout_findFieldIndexByName(
+ SlangReflectionTypeLayout* typeLayout,
+ const char* nameBegin,
+ const char* nameEnd);
+
+ SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_GetExplicitCounter(
+ SlangReflectionTypeLayout* typeLayout);
+
+ SLANG_API size_t spReflectionTypeLayout_GetElementStride(
+ SlangReflectionTypeLayout* type,
+ SlangParameterCategory category);
+ SLANG_API SlangReflectionTypeLayout* spReflectionTypeLayout_GetElementTypeLayout(
+ SlangReflectionTypeLayout* type);
+ SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_GetElementVarLayout(
+ SlangReflectionTypeLayout* type);
+ SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_getContainerVarLayout(
+ SlangReflectionTypeLayout* type);
+
+ SLANG_API SlangParameterCategory
+ spReflectionTypeLayout_GetParameterCategory(SlangReflectionTypeLayout* type);
SLANG_API unsigned spReflectionTypeLayout_GetCategoryCount(SlangReflectionTypeLayout* type);
- SLANG_API SlangParameterCategory spReflectionTypeLayout_GetCategoryByIndex(SlangReflectionTypeLayout* type, unsigned index);
+ SLANG_API SlangParameterCategory
+ spReflectionTypeLayout_GetCategoryByIndex(SlangReflectionTypeLayout* type, unsigned index);
- SLANG_API SlangMatrixLayoutMode spReflectionTypeLayout_GetMatrixLayoutMode(SlangReflectionTypeLayout* type);
+ SLANG_API SlangMatrixLayoutMode
+ spReflectionTypeLayout_GetMatrixLayoutMode(SlangReflectionTypeLayout* type);
SLANG_API int spReflectionTypeLayout_getGenericParamIndex(SlangReflectionTypeLayout* type);
- SLANG_API SlangReflectionTypeLayout* spReflectionTypeLayout_getPendingDataTypeLayout(SlangReflectionTypeLayout* type);
+ SLANG_API SlangReflectionTypeLayout* spReflectionTypeLayout_getPendingDataTypeLayout(
+ SlangReflectionTypeLayout* type);
- SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_getSpecializedTypePendingDataVarLayout(SlangReflectionTypeLayout* type);
+ SLANG_API SlangReflectionVariableLayout*
+ spReflectionTypeLayout_getSpecializedTypePendingDataVarLayout(SlangReflectionTypeLayout* type);
SLANG_API SlangInt spReflectionType_getSpecializedTypeArgCount(SlangReflectionType* type);
- SLANG_API SlangReflectionType* spReflectionType_getSpecializedTypeArgType(SlangReflectionType* type, SlangInt index);
-
- SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeCount(SlangReflectionTypeLayout* typeLayout);
- SLANG_API SlangBindingType spReflectionTypeLayout_getBindingRangeType(SlangReflectionTypeLayout* typeLayout, SlangInt index);
- SLANG_API SlangInt spReflectionTypeLayout_isBindingRangeSpecializable(SlangReflectionTypeLayout* typeLayout, SlangInt index);
- 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);
-
- SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeDescriptorSetIndex(SlangReflectionTypeLayout* typeLayout, SlangInt index);
- SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeFirstDescriptorRangeIndex(SlangReflectionTypeLayout* typeLayout, SlangInt index);
- SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeDescriptorRangeCount(SlangReflectionTypeLayout* typeLayout, SlangInt index);
-
- SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetCount(SlangReflectionTypeLayout* typeLayout);
- SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetSpaceOffset(SlangReflectionTypeLayout* typeLayout, SlangInt setIndex);
- SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetDescriptorRangeCount(SlangReflectionTypeLayout* typeLayout, SlangInt setIndex);
- SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetDescriptorRangeIndexOffset(SlangReflectionTypeLayout* typeLayout, SlangInt setIndex, SlangInt rangeIndex);
- SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetDescriptorRangeDescriptorCount(SlangReflectionTypeLayout* typeLayout, SlangInt setIndex, SlangInt rangeIndex);
- SLANG_API SlangBindingType spReflectionTypeLayout_getDescriptorSetDescriptorRangeType(SlangReflectionTypeLayout* typeLayout, SlangInt setIndex, SlangInt rangeIndex);
- SLANG_API SlangParameterCategory spReflectionTypeLayout_getDescriptorSetDescriptorRangeCategory(SlangReflectionTypeLayout* typeLayout, SlangInt setIndex, SlangInt rangeIndex);
-
- SLANG_API SlangInt spReflectionTypeLayout_getSubObjectRangeCount(SlangReflectionTypeLayout* typeLayout);
- SLANG_API SlangInt spReflectionTypeLayout_getSubObjectRangeBindingRangeIndex(SlangReflectionTypeLayout* typeLayout, SlangInt subObjectRangeIndex);
- SLANG_API SlangInt spReflectionTypeLayout_getSubObjectRangeSpaceOffset(SlangReflectionTypeLayout* typeLayout, SlangInt subObjectRangeIndex);
- SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_getSubObjectRangeOffset(SlangReflectionTypeLayout* typeLayout, SlangInt subObjectRangeIndex);
+ SLANG_API SlangReflectionType* spReflectionType_getSpecializedTypeArgType(
+ SlangReflectionType* type,
+ SlangInt index);
+
+ SLANG_API SlangInt
+ spReflectionTypeLayout_getBindingRangeCount(SlangReflectionTypeLayout* typeLayout);
+ SLANG_API SlangBindingType spReflectionTypeLayout_getBindingRangeType(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt index);
+ SLANG_API SlangInt spReflectionTypeLayout_isBindingRangeSpecializable(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt index);
+ 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);
+
+ SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeDescriptorSetIndex(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt index);
+ SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeFirstDescriptorRangeIndex(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt index);
+ SLANG_API SlangInt spReflectionTypeLayout_getBindingRangeDescriptorRangeCount(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt index);
+
+ SLANG_API SlangInt
+ spReflectionTypeLayout_getDescriptorSetCount(SlangReflectionTypeLayout* typeLayout);
+ SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetSpaceOffset(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt setIndex);
+ SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetDescriptorRangeCount(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt setIndex);
+ SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetDescriptorRangeIndexOffset(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt setIndex,
+ SlangInt rangeIndex);
+ SLANG_API SlangInt spReflectionTypeLayout_getDescriptorSetDescriptorRangeDescriptorCount(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt setIndex,
+ SlangInt rangeIndex);
+ SLANG_API SlangBindingType spReflectionTypeLayout_getDescriptorSetDescriptorRangeType(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt setIndex,
+ SlangInt rangeIndex);
+ SLANG_API SlangParameterCategory spReflectionTypeLayout_getDescriptorSetDescriptorRangeCategory(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt setIndex,
+ SlangInt rangeIndex);
+
+ SLANG_API SlangInt
+ spReflectionTypeLayout_getSubObjectRangeCount(SlangReflectionTypeLayout* typeLayout);
+ SLANG_API SlangInt spReflectionTypeLayout_getSubObjectRangeBindingRangeIndex(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt subObjectRangeIndex);
+ SLANG_API SlangInt spReflectionTypeLayout_getSubObjectRangeSpaceOffset(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt subObjectRangeIndex);
+ SLANG_API SlangReflectionVariableLayout* spReflectionTypeLayout_getSubObjectRangeOffset(
+ SlangReflectionTypeLayout* typeLayout,
+ SlangInt subObjectRangeIndex);
#if 0
SLANG_API SlangInt spReflectionTypeLayout_getSubObjectRangeCount(SlangReflectionTypeLayout* typeLayout);
@@ -615,49 +647,88 @@ extern "C"
SLANG_API char const* spReflectionVariable_GetName(SlangReflectionVariable* var);
SLANG_API SlangReflectionType* spReflectionVariable_GetType(SlangReflectionVariable* var);
- SLANG_API SlangReflectionModifier* spReflectionVariable_FindModifier(SlangReflectionVariable* var, SlangModifierID modifierID);
+ SLANG_API SlangReflectionModifier* spReflectionVariable_FindModifier(
+ SlangReflectionVariable* var,
+ SlangModifierID modifierID);
SLANG_API unsigned int spReflectionVariable_GetUserAttributeCount(SlangReflectionVariable* var);
- SLANG_API SlangReflectionUserAttribute* spReflectionVariable_GetUserAttribute(SlangReflectionVariable* var, unsigned int index);
- SLANG_API SlangReflectionUserAttribute* spReflectionVariable_FindUserAttributeByName(SlangReflectionVariable* var, SlangSession * globalSession, char const* name);
+ SLANG_API SlangReflectionUserAttribute* spReflectionVariable_GetUserAttribute(
+ SlangReflectionVariable* var,
+ unsigned int index);
+ SLANG_API SlangReflectionUserAttribute* spReflectionVariable_FindUserAttributeByName(
+ SlangReflectionVariable* var,
+ SlangSession* globalSession,
+ char const* name);
SLANG_API bool spReflectionVariable_HasDefaultValue(SlangReflectionVariable* inVar);
- SLANG_API SlangReflectionGeneric* spReflectionVariable_GetGenericContainer(SlangReflectionVariable* var);
- SLANG_API SlangReflectionVariable* spReflectionVariable_applySpecializations(SlangReflectionVariable* var, SlangReflectionGeneric* generic);
+ SLANG_API SlangReflectionGeneric* spReflectionVariable_GetGenericContainer(
+ SlangReflectionVariable* var);
+ SLANG_API SlangReflectionVariable* spReflectionVariable_applySpecializations(
+ SlangReflectionVariable* var,
+ SlangReflectionGeneric* generic);
// Variable Layout Reflection
- SLANG_API SlangReflectionVariable* spReflectionVariableLayout_GetVariable(SlangReflectionVariableLayout* var);
+ SLANG_API SlangReflectionVariable* spReflectionVariableLayout_GetVariable(
+ SlangReflectionVariableLayout* var);
- SLANG_API SlangReflectionTypeLayout* spReflectionVariableLayout_GetTypeLayout(SlangReflectionVariableLayout* var);
+ SLANG_API SlangReflectionTypeLayout* spReflectionVariableLayout_GetTypeLayout(
+ SlangReflectionVariableLayout* var);
- SLANG_API size_t spReflectionVariableLayout_GetOffset(SlangReflectionVariableLayout* var, SlangParameterCategory category);
- SLANG_API size_t spReflectionVariableLayout_GetSpace(SlangReflectionVariableLayout* var, SlangParameterCategory category);
+ SLANG_API size_t spReflectionVariableLayout_GetOffset(
+ SlangReflectionVariableLayout* var,
+ SlangParameterCategory category);
+ SLANG_API size_t spReflectionVariableLayout_GetSpace(
+ SlangReflectionVariableLayout* var,
+ SlangParameterCategory category);
- SLANG_API char const* spReflectionVariableLayout_GetSemanticName(SlangReflectionVariableLayout* var);
- SLANG_API size_t spReflectionVariableLayout_GetSemanticIndex(SlangReflectionVariableLayout* var);
+ SLANG_API char const* spReflectionVariableLayout_GetSemanticName(
+ SlangReflectionVariableLayout* var);
+ SLANG_API size_t
+ spReflectionVariableLayout_GetSemanticIndex(SlangReflectionVariableLayout* var);
// Function Reflection
SLANG_API SlangReflectionDecl* spReflectionFunction_asDecl(SlangReflectionFunction* func);
SLANG_API char const* spReflectionFunction_GetName(SlangReflectionFunction* func);
- SLANG_API SlangReflectionModifier* spReflectionFunction_FindModifier(SlangReflectionFunction* var, SlangModifierID modifierID);
- SLANG_API unsigned int spReflectionFunction_GetUserAttributeCount(SlangReflectionFunction* func);
- SLANG_API SlangReflectionUserAttribute* spReflectionFunction_GetUserAttribute(SlangReflectionFunction* func, unsigned int index);
- SLANG_API SlangReflectionUserAttribute* spReflectionFunction_FindUserAttributeByName(SlangReflectionFunction* func, SlangSession* globalSession, char const* name);
+ SLANG_API SlangReflectionModifier* spReflectionFunction_FindModifier(
+ SlangReflectionFunction* var,
+ SlangModifierID modifierID);
+ SLANG_API unsigned int spReflectionFunction_GetUserAttributeCount(
+ SlangReflectionFunction* func);
+ SLANG_API SlangReflectionUserAttribute* spReflectionFunction_GetUserAttribute(
+ SlangReflectionFunction* func,
+ unsigned int index);
+ SLANG_API SlangReflectionUserAttribute* spReflectionFunction_FindUserAttributeByName(
+ SlangReflectionFunction* func,
+ SlangSession* globalSession,
+ char const* name);
SLANG_API unsigned int spReflectionFunction_GetParameterCount(SlangReflectionFunction* func);
- SLANG_API SlangReflectionVariable* spReflectionFunction_GetParameter(SlangReflectionFunction* func, unsigned index);
- SLANG_API SlangReflectionType* spReflectionFunction_GetResultType(SlangReflectionFunction* func);
- SLANG_API SlangReflectionGeneric* spReflectionFunction_GetGenericContainer(SlangReflectionFunction* func);
- SLANG_API SlangReflectionFunction* spReflectionFunction_applySpecializations(SlangReflectionFunction* func, SlangReflectionGeneric* generic);
- SLANG_API SlangReflectionFunction* spReflectionFunction_specializeWithArgTypes(SlangReflectionFunction* func, SlangInt argTypeCount, SlangReflectionType* const* argTypes);
+ SLANG_API SlangReflectionVariable* spReflectionFunction_GetParameter(
+ SlangReflectionFunction* func,
+ unsigned index);
+ SLANG_API SlangReflectionType* spReflectionFunction_GetResultType(
+ SlangReflectionFunction* func);
+ SLANG_API SlangReflectionGeneric* spReflectionFunction_GetGenericContainer(
+ SlangReflectionFunction* func);
+ SLANG_API SlangReflectionFunction* spReflectionFunction_applySpecializations(
+ SlangReflectionFunction* func,
+ SlangReflectionGeneric* generic);
+ SLANG_API SlangReflectionFunction* spReflectionFunction_specializeWithArgTypes(
+ SlangReflectionFunction* func,
+ SlangInt argTypeCount,
+ SlangReflectionType* const* argTypes);
SLANG_API bool spReflectionFunction_isOverloaded(SlangReflectionFunction* func);
SLANG_API unsigned int spReflectionFunction_getOverloadCount(SlangReflectionFunction* func);
- SLANG_API SlangReflectionFunction* spReflectionFunction_getOverload(SlangReflectionFunction* func, unsigned int index);
+ SLANG_API SlangReflectionFunction* spReflectionFunction_getOverload(
+ SlangReflectionFunction* func,
+ unsigned int index);
// Abstract Decl Reflection
SLANG_API unsigned int spReflectionDecl_getChildrenCount(SlangReflectionDecl* parentDecl);
- SLANG_API SlangReflectionDecl* spReflectionDecl_getChild(SlangReflectionDecl* parentDecl, unsigned int index);
+ SLANG_API SlangReflectionDecl* spReflectionDecl_getChild(
+ SlangReflectionDecl* parentDecl,
+ unsigned int index);
SLANG_API char const* spReflectionDecl_getName(SlangReflectionDecl* decl);
SLANG_API SlangDeclKind spReflectionDecl_getKind(SlangReflectionDecl* decl);
SLANG_API SlangReflectionFunction* spReflectionDecl_castToFunction(SlangReflectionDecl* decl);
@@ -670,18 +741,37 @@ extern "C"
SLANG_API SlangReflectionDecl* spReflectionGeneric_asDecl(SlangReflectionGeneric* generic);
SLANG_API char const* spReflectionGeneric_GetName(SlangReflectionGeneric* generic);
- SLANG_API unsigned int spReflectionGeneric_GetTypeParameterCount(SlangReflectionGeneric* generic);
- SLANG_API SlangReflectionVariable* spReflectionGeneric_GetTypeParameter(SlangReflectionGeneric* generic, unsigned index);
- SLANG_API unsigned int spReflectionGeneric_GetValueParameterCount(SlangReflectionGeneric* generic);
- SLANG_API SlangReflectionVariable* spReflectionGeneric_GetValueParameter(SlangReflectionGeneric* generic, unsigned index);
- SLANG_API unsigned int spReflectionGeneric_GetTypeParameterConstraintCount(SlangReflectionGeneric* generic, SlangReflectionVariable* typeParam);
- SLANG_API SlangReflectionType* spReflectionGeneric_GetTypeParameterConstraintType(SlangReflectionGeneric* generic, SlangReflectionVariable* typeParam, unsigned index);
+ SLANG_API unsigned int spReflectionGeneric_GetTypeParameterCount(
+ SlangReflectionGeneric* generic);
+ SLANG_API SlangReflectionVariable* spReflectionGeneric_GetTypeParameter(
+ SlangReflectionGeneric* generic,
+ unsigned index);
+ SLANG_API unsigned int spReflectionGeneric_GetValueParameterCount(
+ SlangReflectionGeneric* generic);
+ SLANG_API SlangReflectionVariable* spReflectionGeneric_GetValueParameter(
+ SlangReflectionGeneric* generic,
+ unsigned index);
+ SLANG_API unsigned int spReflectionGeneric_GetTypeParameterConstraintCount(
+ SlangReflectionGeneric* generic,
+ SlangReflectionVariable* typeParam);
+ SLANG_API SlangReflectionType* spReflectionGeneric_GetTypeParameterConstraintType(
+ SlangReflectionGeneric* generic,
+ SlangReflectionVariable* typeParam,
+ unsigned index);
SLANG_API SlangDeclKind spReflectionGeneric_GetInnerKind(SlangReflectionGeneric* generic);
- SLANG_API SlangReflectionDecl* spReflectionGeneric_GetInnerDecl(SlangReflectionGeneric* generic);
- SLANG_API SlangReflectionGeneric* spReflectionGeneric_GetOuterGenericContainer(SlangReflectionGeneric* generic);
- SLANG_API SlangReflectionType* spReflectionGeneric_GetConcreteType(SlangReflectionGeneric* generic, SlangReflectionVariable* typeParam);
- SLANG_API int64_t spReflectionGeneric_GetConcreteIntVal(SlangReflectionGeneric* generic, SlangReflectionVariable* valueParam);
- SLANG_API SlangReflectionGeneric* spReflectionGeneric_applySpecializations(SlangReflectionGeneric* currGeneric, SlangReflectionGeneric* generic);
+ SLANG_API SlangReflectionDecl* spReflectionGeneric_GetInnerDecl(
+ SlangReflectionGeneric* generic);
+ SLANG_API SlangReflectionGeneric* spReflectionGeneric_GetOuterGenericContainer(
+ SlangReflectionGeneric* generic);
+ SLANG_API SlangReflectionType* spReflectionGeneric_GetConcreteType(
+ SlangReflectionGeneric* generic,
+ SlangReflectionVariable* typeParam);
+ SLANG_API int64_t spReflectionGeneric_GetConcreteIntVal(
+ SlangReflectionGeneric* generic,
+ SlangReflectionVariable* valueParam);
+ SLANG_API SlangReflectionGeneric* spReflectionGeneric_applySpecializations(
+ SlangReflectionGeneric* currGeneric,
+ SlangReflectionGeneric* generic);
/** Get the stage that a variable belongs to (if any).
@@ -691,11 +781,11 @@ extern "C"
point *or* at the global scope of a stage-specific GLSL code file (e.g.,
an `in` parameter in a GLSL `.vs` file belongs to the vertex stage).
*/
- SLANG_API SlangStage spReflectionVariableLayout_getStage(
- SlangReflectionVariableLayout* var);
+ SLANG_API SlangStage spReflectionVariableLayout_getStage(SlangReflectionVariableLayout* var);
- SLANG_API SlangReflectionVariableLayout* spReflectionVariableLayout_getPendingDataLayout(SlangReflectionVariableLayout* var);
+ SLANG_API SlangReflectionVariableLayout* spReflectionVariableLayout_getPendingDataLayout(
+ SlangReflectionVariableLayout* var);
// Shader Parameter Reflection
@@ -707,14 +797,13 @@ extern "C"
SlangInt entryPointIndex,
SlangInt targetIndex,
SlangParameterCategory category, // is this a `t` register? `s` register?
- SlangUInt spaceIndex, // `space` for D3D12, `set` for Vulkan
- SlangUInt registerIndex, // `register` for D3D12, `binding` for Vulkan
+ SlangUInt spaceIndex, // `space` for D3D12, `set` for Vulkan
+ SlangUInt registerIndex, // `register` for D3D12, `binding` for Vulkan
bool& outUsed);
// Entry Point Reflection
- SLANG_API char const* spReflectionEntryPoint_getName(
- SlangReflectionEntryPoint* entryPoint);
+ SLANG_API char const* spReflectionEntryPoint_getName(SlangReflectionEntryPoint* entryPoint);
SLANG_API char const* spReflectionEntryPoint_getNameOverride(
SlangReflectionEntryPoint* entryPoint);
@@ -726,15 +815,15 @@ extern "C"
SlangReflectionEntryPoint* entryPoint);
SLANG_API SlangReflectionVariableLayout* spReflectionEntryPoint_getParameterByIndex(
- SlangReflectionEntryPoint* entryPoint,
- unsigned index);
+ SlangReflectionEntryPoint* entryPoint,
+ unsigned index);
SLANG_API SlangStage spReflectionEntryPoint_getStage(SlangReflectionEntryPoint* entryPoint);
SLANG_API void spReflectionEntryPoint_getComputeThreadGroupSize(
- SlangReflectionEntryPoint* entryPoint,
- SlangUInt axisCount,
- SlangUInt* outSizeAlongAxis);
+ SlangReflectionEntryPoint* entryPoint,
+ SlangUInt axisCount,
+ SlangUInt* outSizeAlongAxis);
SLANG_API void spReflectionEntryPoint_getComputeWaveSize(
SlangReflectionEntryPoint* entryPoint,
@@ -753,80 +842,106 @@ extern "C"
SlangReflectionEntryPoint* entryPoint);
// SlangReflectionTypeParameter
- SLANG_API char const* spReflectionTypeParameter_GetName(SlangReflectionTypeParameter* typeParam);
+ SLANG_API char const* spReflectionTypeParameter_GetName(
+ SlangReflectionTypeParameter* typeParam);
SLANG_API unsigned spReflectionTypeParameter_GetIndex(SlangReflectionTypeParameter* typeParam);
- SLANG_API unsigned spReflectionTypeParameter_GetConstraintCount(SlangReflectionTypeParameter* typeParam);
- SLANG_API SlangReflectionType* spReflectionTypeParameter_GetConstraintByIndex(SlangReflectionTypeParameter* typeParam, unsigned int index);
+ SLANG_API unsigned spReflectionTypeParameter_GetConstraintCount(
+ SlangReflectionTypeParameter* typeParam);
+ SLANG_API SlangReflectionType* spReflectionTypeParameter_GetConstraintByIndex(
+ SlangReflectionTypeParameter* typeParam,
+ unsigned int index);
// Shader Reflection
SLANG_API unsigned spReflection_GetParameterCount(SlangReflection* reflection);
- SLANG_API SlangReflectionParameter* spReflection_GetParameterByIndex(SlangReflection* reflection, unsigned index);
+ SLANG_API SlangReflectionParameter* spReflection_GetParameterByIndex(
+ SlangReflection* reflection,
+ unsigned index);
SLANG_API unsigned int spReflection_GetTypeParameterCount(SlangReflection* reflection);
- SLANG_API SlangReflectionTypeParameter* spReflection_GetTypeParameterByIndex(SlangReflection* reflection, unsigned int index);
- SLANG_API SlangReflectionTypeParameter* spReflection_FindTypeParameter(SlangReflection* reflection, char const* name);
-
- SLANG_API SlangReflectionType* spReflection_FindTypeByName(SlangReflection* reflection, char const* name);
- SLANG_API SlangReflectionTypeLayout* spReflection_GetTypeLayout(SlangReflection* reflection, SlangReflectionType* reflectionType, SlangLayoutRules rules);
-
- SLANG_API SlangReflectionFunction* spReflection_FindFunctionByName(SlangReflection* reflection, char const* name);
- SLANG_API SlangReflectionFunction* spReflection_FindFunctionByNameInType(SlangReflection* reflection, SlangReflectionType* reflType, char const* name);
- SLANG_API SlangReflectionVariable* spReflection_FindVarByNameInType(SlangReflection* reflection, SlangReflectionType* reflType, char const* name);
+ SLANG_API SlangReflectionTypeParameter* spReflection_GetTypeParameterByIndex(
+ SlangReflection* reflection,
+ unsigned int index);
+ SLANG_API SlangReflectionTypeParameter* spReflection_FindTypeParameter(
+ SlangReflection* reflection,
+ char const* name);
+
+ SLANG_API SlangReflectionType* spReflection_FindTypeByName(
+ SlangReflection* reflection,
+ char const* name);
+ SLANG_API SlangReflectionTypeLayout* spReflection_GetTypeLayout(
+ SlangReflection* reflection,
+ SlangReflectionType* reflectionType,
+ SlangLayoutRules rules);
+
+ SLANG_API SlangReflectionFunction* spReflection_FindFunctionByName(
+ SlangReflection* reflection,
+ char const* name);
+ SLANG_API SlangReflectionFunction* spReflection_FindFunctionByNameInType(
+ SlangReflection* reflection,
+ SlangReflectionType* reflType,
+ char const* name);
+ SLANG_API SlangReflectionVariable* spReflection_FindVarByNameInType(
+ SlangReflection* reflection,
+ SlangReflectionType* reflType,
+ char const* name);
SLANG_API SlangUInt spReflection_getEntryPointCount(SlangReflection* reflection);
- SLANG_API SlangReflectionEntryPoint* spReflection_getEntryPointByIndex(SlangReflection* reflection, SlangUInt index);
- SLANG_API SlangReflectionEntryPoint* spReflection_findEntryPointByName(SlangReflection* reflection, char const* name);
+ SLANG_API SlangReflectionEntryPoint* spReflection_getEntryPointByIndex(
+ SlangReflection* reflection,
+ SlangUInt index);
+ SLANG_API SlangReflectionEntryPoint* spReflection_findEntryPointByName(
+ SlangReflection* reflection,
+ char const* name);
SLANG_API SlangUInt spReflection_getGlobalConstantBufferBinding(SlangReflection* reflection);
SLANG_API size_t spReflection_getGlobalConstantBufferSize(SlangReflection* reflection);
SLANG_API SlangReflectionType* spReflection_specializeType(
- SlangReflection* reflection,
- SlangReflectionType* type,
- SlangInt specializationArgCount,
+ SlangReflection* reflection,
+ SlangReflectionType* type,
+ SlangInt specializationArgCount,
SlangReflectionType* const* specializationArgs,
- ISlangBlob** outDiagnostics);
-
+ ISlangBlob** outDiagnostics);
+
SLANG_API SlangReflectionGeneric* spReflection_specializeGeneric(
- SlangReflection* inProgramLayout,
- SlangReflectionGeneric* generic,
- SlangInt argCount,
- SlangReflectionGenericArgType const* argTypes,
- SlangReflectionGenericArg const* args,
- ISlangBlob** outDiagnostics);
-
+ SlangReflection* inProgramLayout,
+ SlangReflectionGeneric* generic,
+ SlangInt argCount,
+ SlangReflectionGenericArgType const* argTypes,
+ SlangReflectionGenericArg const* args,
+ ISlangBlob** outDiagnostics);
+
SLANG_API bool spReflection_isSubType(
- SlangReflection * reflection,
+ SlangReflection* reflection,
SlangReflectionType* subType,
SlangReflectionType* superType);
- /// Get the number of hashed strings
- SLANG_API SlangUInt spReflection_getHashedStringCount(
- SlangReflection* reflection);
+ /// Get the number of hashed strings
+ SLANG_API SlangUInt spReflection_getHashedStringCount(SlangReflection* reflection);
- /// Get a hashed string. The number of chars is written in outCount.
- /// The count does *NOT* including terminating 0. The returned string will be 0 terminated.
+ /// Get a hashed string. The number of chars is written in outCount.
+ /// The count does *NOT* including terminating 0. The returned string will be 0 terminated.
SLANG_API const char* spReflection_getHashedString(
- SlangReflection* reflection,
+ SlangReflection* reflection,
SlangUInt index,
size_t* outCount);
- /// Compute a string hash.
- /// Count should *NOT* include terminating zero.
+ /// Compute a string hash.
+ /// Count should *NOT* include terminating zero.
SLANG_API SlangUInt32 spComputeStringHash(const char* chars, size_t count);
- /// Get a type layout representing reflection information for the global-scope prameters.
+ /// Get a type layout representing reflection information for the global-scope prameters.
SLANG_API SlangReflectionTypeLayout* spReflection_getGlobalParamsTypeLayout(
SlangReflection* reflection);
- /// Get a variable layout representing reflection information for the global-scope prameters.
+ /// Get a variable layout representing reflection information for the global-scope prameters.
SLANG_API SlangReflectionVariableLayout* spReflection_getGlobalParamsVarLayout(
SlangReflection* reflection);
SLANG_API char const* spGetTranslationUnitSource(
- SlangCompileRequest* request,
- int translationUnitIndex);
+ SlangCompileRequest* request,
+ int translationUnitIndex);
#ifdef __cplusplus
}
#endif
@@ -836,678 +951,643 @@ SLANG_API slang::ISession* spReflection_GetSession(SlangReflection* reflection);
namespace slang
{
- struct IComponentType;
- struct IModule;
-}
+struct IComponentType;
+struct IModule;
+} // namespace slang
extern "C"
{
/** @see slang::ICompileRequest::getProgram
- */
- SLANG_API SlangResult spCompileRequest_getProgram(
- SlangCompileRequest* request,
- slang::IComponentType** outProgram);
+ */
+ SLANG_API SlangResult
+ spCompileRequest_getProgram(SlangCompileRequest* request, slang::IComponentType** outProgram);
/** @see slang::ICompileRequest::getProgramWithEntryPoints
- */
+ */
SLANG_API SlangResult spCompileRequest_getProgramWithEntryPoints(
- SlangCompileRequest* request,
+ SlangCompileRequest* request,
slang::IComponentType** outProgram);
/** @see slang::ICompileRequest::getEntryPoint
- */
+ */
SLANG_API SlangResult spCompileRequest_getEntryPoint(
- SlangCompileRequest* request,
- SlangInt entryPointIndex,
+ SlangCompileRequest* request,
+ SlangInt entryPointIndex,
slang::IComponentType** outEntryPoint);
/** @see slang::ICompileRequest::getModule
- */
+ */
SLANG_API SlangResult spCompileRequest_getModule(
- SlangCompileRequest* request,
- SlangInt translationUnitIndex,
- slang::IModule** outModule);
+ SlangCompileRequest* request,
+ SlangInt translationUnitIndex,
+ slang::IModule** outModule);
/** @see slang::ICompileRequest::getSession
- */
- SLANG_API SlangResult spCompileRequest_getSession(
- SlangCompileRequest* request,
- slang::ISession** outSession);
+ */
+ SLANG_API SlangResult
+ spCompileRequest_getSession(SlangCompileRequest* request, slang::ISession** outSession);
}
namespace slang
{
+/*!
+@brief A request for one or more compilation actions to be performed.
+*/
+struct ICompileRequest : public ISlangUnknown
+{
+ SLANG_COM_INTERFACE(
+ 0x96d33993,
+ 0x317c,
+ 0x4db5,
+ {0xaf, 0xd8, 0x66, 0x6e, 0xe7, 0x72, 0x48, 0xe2})
+
+ /** Set the filesystem hook to use for a compile request
+
+ The provided `fileSystem` will be used to load any files that
+ need to be loaded during processing of the compile `request`.
+ This includes:
+
+ - Source files loaded via `spAddTranslationUnitSourceFile`
+ - Files referenced via `#include`
+ - Files loaded to resolve `#import` operations
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setFileSystem(ISlangFileSystem* fileSystem) = 0;
+
+ /*!
+ @brief Set flags to be used for compilation.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setCompileFlags(SlangCompileFlags flags) = 0;
+
+ /*!
+ @brief Returns the compilation flags previously set with `setCompileFlags`
+ */
+ virtual SLANG_NO_THROW SlangCompileFlags SLANG_MCALL getCompileFlags() = 0;
+
/*!
- @brief A request for one or more compilation actions to be performed.
+ @brief Set whether to dump intermediate results (for debugging) or not.
*/
- struct ICompileRequest : public ISlangUnknown
- {
- SLANG_COM_INTERFACE( 0x96d33993, 0x317c, 0x4db5, { 0xaf, 0xd8, 0x66, 0x6e, 0xe7, 0x72, 0x48, 0xe2 } )
-
- /** Set the filesystem hook to use for a compile request
-
- The provided `fileSystem` will be used to load any files that
- need to be loaded during processing of the compile `request`.
- This includes:
-
- - Source files loaded via `spAddTranslationUnitSourceFile`
- - Files referenced via `#include`
- - Files loaded to resolve `#import` operations
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setFileSystem(
- ISlangFileSystem* fileSystem) = 0;
-
- /*!
- @brief Set flags to be used for compilation.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setCompileFlags(
- SlangCompileFlags flags) = 0;
-
- /*!
- @brief Returns the compilation flags previously set with `setCompileFlags`
- */
- virtual SLANG_NO_THROW SlangCompileFlags SLANG_MCALL getCompileFlags() = 0;
-
- /*!
- @brief Set whether to dump intermediate results (for debugging) or not.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setDumpIntermediates(
- int enable) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setDumpIntermediatePrefix(
- const char* prefix) = 0;
-
- /*!
- @brief Set whether (and how) `#line` directives should be output.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setLineDirectiveMode(
- SlangLineDirectiveMode mode) = 0;
-
- /*!
- @brief Sets the target for code generation.
- @param target The code generation target. Possible values are:
- - SLANG_GLSL. Generates GLSL code.
- - SLANG_HLSL. Generates HLSL code.
- - SLANG_SPIRV. Generates SPIR-V code.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setCodeGenTarget(
- SlangCompileTarget target) = 0;
-
- /*!
- @brief Add a code-generation target to be used.
- */
- virtual SLANG_NO_THROW int SLANG_MCALL addCodeGenTarget(
- SlangCompileTarget target) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetProfile(
- int targetIndex,
- SlangProfileID profile) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetFlags(
- int targetIndex,
- SlangTargetFlags flags) = 0;
-
- /*!
- @brief Set the floating point mode (e.g., precise or fast) to use a target.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetFloatingPointMode(
- int targetIndex,
- SlangFloatingPointMode mode) = 0;
-
- /* DEPRECATED: use `spSetMatrixLayoutMode` instead. */
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetMatrixLayoutMode(
- int targetIndex,
- SlangMatrixLayoutMode mode) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setMatrixLayoutMode(
- SlangMatrixLayoutMode mode) = 0;
-
- /*!
- @brief Set the level of debug information to produce.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setDebugInfoLevel(
- SlangDebugInfoLevel level) = 0;
-
- /*!
- @brief Set the level of optimization to perform.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setOptimizationLevel(
- SlangOptimizationLevel level) = 0;
-
-
-
- /*!
- @brief Set the container format to be used for binary output.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setOutputContainerFormat(
- SlangContainerFormat format) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setPassThrough(
- SlangPassThrough passThrough) = 0;
-
-
- virtual SLANG_NO_THROW void SLANG_MCALL setDiagnosticCallback(
- SlangDiagnosticCallback callback,
- void const* userData) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setWriter(
- SlangWriterChannel channel,
- ISlangWriter* writer) = 0;
-
- virtual SLANG_NO_THROW ISlangWriter* SLANG_MCALL getWriter(
- SlangWriterChannel channel) = 0;
-
- /*!
- @brief Add a path to use when searching for referenced files.
- This will be used for both `#include` directives and also for explicit `__import` declarations.
- @param ctx The compilation context.
- @param searchDir The additional search directory.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL addSearchPath(
- const char* searchDir) = 0;
-
- /*!
- @brief Add a macro definition to be used during preprocessing.
- @param key The name of the macro to define.
- @param value The value of the macro to define.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL addPreprocessorDefine(
- const char* key,
- const char* value) = 0;
-
- /*!
- @brief Set options using arguments as if specified via command line.
- @return Returns SlangResult. On success SLANG_SUCCEEDED(result) is true.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL processCommandLineArguments(
- char const* const* args,
- int argCount) = 0;
-
- /** Add a distinct translation unit to the compilation request
-
- `name` is optional.
- Returns the zero-based index of the translation unit created.
- */
- virtual SLANG_NO_THROW int SLANG_MCALL addTranslationUnit(
- SlangSourceLanguage language,
- char const* name) = 0;
-
-
- /** Set a default module name. Translation units will default to this module name if one is not
- passed. If not set each translation unit will get a unique name.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setDefaultModuleName(
- const char* defaultModuleName) = 0;
-
- /** Add a preprocessor definition that is scoped to a single translation unit.
-
- @param translationUnitIndex The index of the translation unit to get the definition.
- @param key The name of the macro to define.
- @param value The value of the macro to define.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitPreprocessorDefine(
- int translationUnitIndex,
- const char* key,
- const char* value) = 0;
-
-
- /** Add a source file to the given translation unit.
-
- If a user-defined file system has been specified via
- `spSetFileSystem`, then it will be used to load the
- file at `path`. Otherwise, Slang will use the OS
- file system.
-
- This function does *not* search for a file using
- the registered search paths (`spAddSearchPath`),
- and instead using the given `path` as-is.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitSourceFile(
- int translationUnitIndex,
- char const* path) = 0;
-
- /** Add a source string to the given translation unit.
-
- @param translationUnitIndex The index of the translation unit to add source to.
- @param path The file-system path that should be assumed for the source code.
- @param source A null-terminated UTF-8 encoded string of source code.
-
- The implementation will make a copy of the source code data.
- An application may free the buffer immediately after this call returns.
-
- The `path` will be used in any diagnostic output, as well
- as to determine the base path when resolving relative
- `#include`s.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitSourceString(
- int translationUnitIndex,
- char const* path,
- char const* source) = 0;
-
-
- /** Add a slang library - such that its contents can be referenced during linking.
- This is equivalent to the -r command line option.
-
- @param basePath The base path used to lookup referenced modules.
- @param libData The library data
- @param libDataSize The size of the library data
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL addLibraryReference(
- const char* basePath,
- const void* libData,
- size_t libDataSize) = 0;
-
- /** Add a source string to the given translation unit.
-
- @param translationUnitIndex The index of the translation unit to add source to.
- @param path The file-system path that should be assumed for the source code.
- @param sourceBegin A pointer to a buffer of UTF-8 encoded source code.
- @param sourceEnd A pointer to to the end of the buffer specified in `sourceBegin`
-
- The implementation will make a copy of the source code data.
- An application may free the buffer immediately after this call returns.
-
- The `path` will be used in any diagnostic output, as well
- as to determine the base path when resolving relative
- `#include`s.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitSourceStringSpan(
- int translationUnitIndex,
- char const* path,
- char const* sourceBegin,
- char const* sourceEnd) = 0;
-
- /** Add a blob of source code to the given translation unit.
-
- @param translationUnitIndex The index of the translation unit to add source to.
- @param path The file-system path that should be assumed for the source code.
- @param sourceBlob A blob containing UTF-8 encoded source code.
- @param sourceEnd A pointer to to the end of the buffer specified in `sourceBegin`
-
- The compile request will retain a reference to the blob.
-
- The `path` will be used in any diagnostic output, as well
- as to determine the base path when resolving relative
- `#include`s.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitSourceBlob(
- int translationUnitIndex,
- char const* path,
- ISlangBlob* sourceBlob) = 0;
-
- /** Add an entry point in a particular translation unit
- */
- virtual SLANG_NO_THROW int SLANG_MCALL addEntryPoint(
- int translationUnitIndex,
- char const* name,
- SlangStage stage) = 0;
-
- /** Add an entry point in a particular translation unit,
- with additional arguments that specify the concrete
- type names for entry-point generic type parameters.
- */
- virtual SLANG_NO_THROW int SLANG_MCALL addEntryPointEx(
- int translationUnitIndex,
- char const* name,
- SlangStage stage,
- int genericArgCount,
- char const** genericArgs) = 0;
-
- /** Specify the arguments to use for global generic parameters.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL setGlobalGenericArgs(
- int genericArgCount,
- char const** genericArgs) = 0;
-
- /** Specify the concrete type to be used for a global "existential slot."
-
- Every shader parameter (or leaf field of a `struct`-type shader parameter)
- that has an interface or array-of-interface type introduces an existential
- slot. The number of slots consumed by a shader parameter, and the starting
- slot of each parameter can be queried via the reflection API using
- `SLANG_PARAMETER_CATEGORY_EXISTENTIAL_TYPE_PARAM`.
-
- In order to generate specialized code, a concrete type needs to be specified
- for each existential slot. This function specifies the name of the type
- (or in general a type *expression*) to use for a specific slot at the
- global scope.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL setTypeNameForGlobalExistentialTypeParam(
- int slotIndex,
- char const* typeName) = 0;
-
- /** Specify the concrete type to be used for an entry-point "existential slot."
-
- Every shader parameter (or leaf field of a `struct`-type shader parameter)
- that has an interface or array-of-interface type introduces an existential
- slot. The number of slots consumed by a shader parameter, and the starting
- slot of each parameter can be queried via the reflection API using
- `SLANG_PARAMETER_CATEGORY_EXISTENTIAL_TYPE_PARAM`.
-
- In order to generate specialized code, a concrete type needs to be specified
- for each existential slot. This function specifies the name of the type
- (or in general a type *expression*) to use for a specific slot at the
- entry-point scope.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL setTypeNameForEntryPointExistentialTypeParam(
- int entryPointIndex,
- int slotIndex,
- char const* typeName) = 0;
-
- /** Enable or disable an experimental, best-effort GLSL frontend
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setAllowGLSLInput(
- bool value) = 0;
-
- /** Execute the compilation request.
-
- @returns SlangResult, SLANG_OK on success. Use SLANG_SUCCEEDED() and SLANG_FAILED() to test SlangResult.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL compile() = 0;
-
-
- /** Get any diagnostic messages reported by the compiler.
-
- @returns A null-terminated UTF-8 encoded string of diagnostic messages.
-
- The returned pointer is only guaranteed to be valid
- until `request` is destroyed. Applications that wish to
- hold on to the diagnostic output for longer should use
- `getDiagnosticOutputBlob`.
- */
- virtual SLANG_NO_THROW char const* SLANG_MCALL getDiagnosticOutput() = 0;
-
- /** Get diagnostic messages reported by the compiler.
-
- @param outBlob A pointer to receive a blob holding a nul-terminated UTF-8 encoded string of diagnostic messages.
- @returns A `SlangResult` indicating success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getDiagnosticOutputBlob(
- ISlangBlob** outBlob) = 0;
-
-
- /** Get the number of files that this compilation depended on.
-
- This includes both the explicit source files, as well as any
- additional files that were transitively referenced (e.g., via
- a `#include` directive).
- */
- virtual SLANG_NO_THROW int SLANG_MCALL getDependencyFileCount() = 0;
-
- /** Get the path to a file this compilation depended on.
- */
- virtual SLANG_NO_THROW char const* SLANG_MCALL getDependencyFilePath(
- int index) = 0;
-
- /** Get the number of translation units associated with the compilation request
- */
- virtual SLANG_NO_THROW int SLANG_MCALL getTranslationUnitCount() = 0;
-
- /** Get the output source code associated with a specific entry point.
-
- The lifetime of the output pointer is the same as `request`.
- */
- virtual SLANG_NO_THROW char const* SLANG_MCALL getEntryPointSource(
- int entryPointIndex) = 0;
-
- /** Get the output bytecode associated with a specific entry point.
-
- The lifetime of the output pointer is the same as `request`.
- */
- virtual SLANG_NO_THROW void const* SLANG_MCALL getEntryPointCode(
- int entryPointIndex,
- size_t* outSize) = 0;
-
- /** Get the output code associated with a specific entry point.
-
- @param entryPointIndex The index of the entry point to get code for.
- @param targetIndex The index of the target to get code for (default: zero).
- @param outBlob A pointer that will receive the blob of code
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointCodeBlob(
- int entryPointIndex,
- int targetIndex,
- ISlangBlob** outBlob) = 0;
-
- /** Get entry point 'callable' functions accessible through the ISlangSharedLibrary interface.
-
- That the functions remain in scope as long as the ISlangSharedLibrary interface is in scope.
-
- NOTE! Requires a compilation target of SLANG_HOST_CALLABLE.
-
- @param entryPointIndex The index of the entry point to get code for.
- @param targetIndex The index of the target to get code for (default: zero).
- @param outSharedLibrary A pointer to a ISharedLibrary interface which functions can be queried on.
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointHostCallable(
- int entryPointIndex,
- int targetIndex,
- ISlangSharedLibrary** outSharedLibrary) = 0;
-
- /** Get the output code associated with a specific target.
-
- @param targetIndex The index of the target to get code for (default: zero).
- @param outBlob A pointer that will receive the blob of code
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTargetCodeBlob(
- int targetIndex,
- ISlangBlob** outBlob) = 0;
-
- /** Get 'callable' functions for a target accessible through the ISlangSharedLibrary interface.
-
- That the functions remain in scope as long as the ISlangSharedLibrary interface is in scope.
-
- NOTE! Requires a compilation target of SLANG_HOST_CALLABLE.
-
- @param targetIndex The index of the target to get code for (default: zero).
- @param outSharedLibrary A pointer to a ISharedLibrary interface which functions can be queried on.
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTargetHostCallable(
- int targetIndex,
- ISlangSharedLibrary** outSharedLibrary) = 0;
-
- /** Get the output bytecode associated with an entire compile request.
-
- The lifetime of the output pointer is the same as `request` and the last spCompile.
-
- @param outSize The size of the containers contents in bytes. Will be zero if there is no code available.
- @returns Pointer to start of the contained data, or nullptr if there is no code available.
- */
- virtual SLANG_NO_THROW void const* SLANG_MCALL getCompileRequestCode(
- size_t* outSize) = 0;
-
- /** Get the compilation result as a file system.
- The result is not written to the actual OS file system, but is made avaiable as an
- in memory representation.
- */
- virtual SLANG_NO_THROW ISlangMutableFileSystem* SLANG_MCALL getCompileRequestResultAsFileSystem() = 0;
-
- /** Return the container code as a blob. The container blob is created as part of a compilation (with spCompile),
- and a container is produced with a suitable ContainerFormat.
-
- @param outSize The blob containing the container data.
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getContainerCode(
- ISlangBlob** outBlob) = 0;
-
- /** Load repro from memory specified.
-
- Should only be performed on a newly created request.
-
- NOTE! When using the fileSystem, files will be loaded via their `unique names` as if they are part of the flat file system. This
- mechanism is described more fully in docs/repro.md.
-
- @param fileSystem An (optional) filesystem. Pass nullptr to just use contents of repro held in data.
- @param data The data to load from.
- @param size The size of the data to load from.
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL loadRepro(
- ISlangFileSystem* fileSystem,
- const void* data,
- size_t size) = 0;
-
- /** Save repro state. Should *typically* be performed after spCompile, so that everything
- that is needed for a compilation is available.
-
- @param outBlob Blob that will hold the serialized state
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL saveRepro(
- ISlangBlob** outBlob) = 0;
-
- /** Enable repro capture.
-
- Should be set after any ISlangFileSystem has been set, but before any compilation. It ensures that everything
- that the ISlangFileSystem accesses will be correctly recorded.
- Note that if a ISlangFileSystem/ISlangFileSystemExt isn't explicitly set (ie the default is used), then the
- request will automatically be set up to record everything appropriate.
-
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL enableReproCapture() = 0;
-
- /** Get the (linked) program for a compile request.
-
- The linked program will include all of the global-scope modules for the
- translation units in the program, plus any modules that they `import`
- (transitively), specialized to any global specialization arguments that
- were provided via the API.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getProgram(
- slang::IComponentType** outProgram) = 0;
-
- /** Get the (partially linked) component type for an entry point.
-
- The returned component type will include the entry point at the
- given index, and will be specialized using any specialization arguments
- that were provided for it via the API.
-
- The returned component will *not* include the modules representing
- the global scope and its dependencies/specialization, so a client
- program will typically want to compose this component type with
- the one returned by `spCompileRequest_getProgram` to get a complete
- and usable component type from which kernel code can be requested.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPoint(
- SlangInt entryPointIndex,
- slang::IComponentType** outEntryPoint) = 0;
-
- /** Get the (un-linked) module for a translation unit.
-
- The returned module will not be linked against any dependencies,
- nor against any entry points (even entry points declared inside
- the module). Similarly, the module will not be specialized
- to the arguments that might have been provided via the API.
-
- This function provides an atomic unit of loaded code that
- is suitable for looking up types and entry points in the
- given module, and for linking together to produce a composite
- program that matches the needs of an application.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getModule(
- SlangInt translationUnitIndex,
- slang::IModule** outModule) = 0;
-
- /** Get the `ISession` handle behind the `SlangCompileRequest`.
- TODO(JS): Arguably this should just return the session pointer.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getSession(
- slang::ISession** outSession) = 0;
-
- /** get reflection data from a compilation request */
- virtual SLANG_NO_THROW SlangReflection* SLANG_MCALL getReflection() = 0;
-
- /** Make output specially handled for command line output */
- virtual SLANG_NO_THROW void SLANG_MCALL setCommandLineCompilerMode() = 0;
-
- /** Add a defined capability that should be assumed available on the target */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL addTargetCapability(
- SlangInt targetIndex,
- SlangCapabilityID capability) = 0;
-
- /** Get the (linked) program for a compile request, including all entry points.
-
- The resulting program will include all of the global-scope modules for the
- translation units in the program, plus any modules that they `import`
- (transitively), specialized to any global specialization arguments that
- were provided via the API, as well as all entry points specified for compilation,
- specialized to their entry-point specialization arguments.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getProgramWithEntryPoints(
- slang::IComponentType** outProgram) = 0;
-
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL isParameterLocationUsed(
- SlangInt entryPointIndex,
- SlangInt targetIndex,
- SlangParameterCategory category,
- SlangUInt spaceIndex,
- SlangUInt registerIndex,
- bool& outUsed) = 0;
-
- /** Set the line directive mode for a target.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetLineDirectiveMode(
- SlangInt targetIndex,
- SlangLineDirectiveMode mode) = 0;
-
- /** Set whether to use scalar buffer layouts for GLSL/Vulkan targets.
- If true, the generated GLSL/Vulkan code will use `scalar` layout for storage buffers.
- If false, the resulting code will std430 for storage buffers.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetForceGLSLScalarBufferLayout(int targetIndex, bool forceScalarLayout) = 0;
-
- /** Overrides the severity of a specific diagnostic message.
-
- @param messageID Numeric identifier of the message to override,
- as defined in the 1st parameter of the DIAGNOSTIC macro.
- @param overrideSeverity New severity of the message. If the message is originally Error or Fatal,
- the new severity cannot be lower than that.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL overrideDiagnosticSeverity(
- SlangInt messageID,
- SlangSeverity overrideSeverity) = 0;
-
- /** Returns the currently active flags of the request's diagnostic sink. */
- virtual SLANG_NO_THROW SlangDiagnosticFlags SLANG_MCALL getDiagnosticFlags() = 0;
-
- /** Sets the flags of the request's diagnostic sink.
- The previously specified flags are discarded. */
- virtual SLANG_NO_THROW void SLANG_MCALL setDiagnosticFlags(SlangDiagnosticFlags flags) = 0;
-
- /** Set the debug format to be used for debugging information */
- virtual SLANG_NO_THROW void SLANG_MCALL setDebugInfoFormat(SlangDebugInfoFormat debugFormat) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setEnableEffectAnnotations(bool value) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setReportDownstreamTime(bool value) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setReportPerfBenchmark(bool value) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setSkipSPIRVValidation(bool value) = 0;
-
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetUseMinimumSlangOptimization(int targetIndex, bool value) = 0;
+ virtual SLANG_NO_THROW void SLANG_MCALL setDumpIntermediates(int enable) = 0;
- virtual SLANG_NO_THROW void SLANG_MCALL setIgnoreCapabilityCheck(bool value) = 0;
+ virtual SLANG_NO_THROW void SLANG_MCALL setDumpIntermediatePrefix(const char* prefix) = 0;
- // return a copy of internal profiling results, and if `shouldClear` is true, clear the internal profiling results before returning.
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getCompileTimeProfile(ISlangProfiler** compileTimeProfile, bool shouldClear) = 0;
+ /*!
+ @brief Set whether (and how) `#line` directives should be output.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setLineDirectiveMode(SlangLineDirectiveMode mode) = 0;
+
+ /*!
+ @brief Sets the target for code generation.
+ @param target The code generation target. Possible values are:
+ - SLANG_GLSL. Generates GLSL code.
+ - SLANG_HLSL. Generates HLSL code.
+ - SLANG_SPIRV. Generates SPIR-V code.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setCodeGenTarget(SlangCompileTarget target) = 0;
+
+ /*!
+ @brief Add a code-generation target to be used.
+ */
+ virtual SLANG_NO_THROW int SLANG_MCALL addCodeGenTarget(SlangCompileTarget target) = 0;
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetGenerateWholeProgram(
- int targetIndex,
- bool value) = 0;
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetProfile(int targetIndex, SlangProfileID profile) = 0;
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetForceDXLayout(int targetIndex, bool value) = 0;
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetFlags(int targetIndex, SlangTargetFlags flags) = 0;
- virtual SLANG_NO_THROW void SLANG_MCALL setTargetEmbedDownstreamIR(int targetIndex, bool value) = 0;
- };
+ /*!
+ @brief Set the floating point mode (e.g., precise or fast) to use a target.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetFloatingPointMode(int targetIndex, SlangFloatingPointMode mode) = 0;
+
+ /* DEPRECATED: use `spSetMatrixLayoutMode` instead. */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetMatrixLayoutMode(int targetIndex, SlangMatrixLayoutMode mode) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL setMatrixLayoutMode(SlangMatrixLayoutMode mode) = 0;
+
+ /*!
+ @brief Set the level of debug information to produce.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setDebugInfoLevel(SlangDebugInfoLevel level) = 0;
+
+ /*!
+ @brief Set the level of optimization to perform.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setOptimizationLevel(SlangOptimizationLevel level) = 0;
+
+
+ /*!
+ @brief Set the container format to be used for binary output.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setOutputContainerFormat(SlangContainerFormat format) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL setPassThrough(SlangPassThrough passThrough) = 0;
+
+
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setDiagnosticCallback(SlangDiagnosticCallback callback, void const* userData) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setWriter(SlangWriterChannel channel, ISlangWriter* writer) = 0;
+
+ virtual SLANG_NO_THROW ISlangWriter* SLANG_MCALL getWriter(SlangWriterChannel channel) = 0;
+
+ /*!
+ @brief Add a path to use when searching for referenced files.
+ This will be used for both `#include` directives and also for explicit `__import` declarations.
+ @param ctx The compilation context.
+ @param searchDir The additional search directory.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL addSearchPath(const char* searchDir) = 0;
+
+ /*!
+ @brief Add a macro definition to be used during preprocessing.
+ @param key The name of the macro to define.
+ @param value The value of the macro to define.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ addPreprocessorDefine(const char* key, const char* value) = 0;
+
+ /*!
+ @brief Set options using arguments as if specified via command line.
+ @return Returns SlangResult. On success SLANG_SUCCEEDED(result) is true.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ processCommandLineArguments(char const* const* args, int argCount) = 0;
+
+ /** Add a distinct translation unit to the compilation request
+
+ `name` is optional.
+ Returns the zero-based index of the translation unit created.
+ */
+ virtual SLANG_NO_THROW int SLANG_MCALL
+ addTranslationUnit(SlangSourceLanguage language, char const* name) = 0;
+
+
+ /** Set a default module name. Translation units will default to this module name if one is not
+ passed. If not set each translation unit will get a unique name.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setDefaultModuleName(const char* defaultModuleName) = 0;
+
+ /** Add a preprocessor definition that is scoped to a single translation unit.
+
+ @param translationUnitIndex The index of the translation unit to get the definition.
+ @param key The name of the macro to define.
+ @param value The value of the macro to define.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitPreprocessorDefine(
+ int translationUnitIndex,
+ const char* key,
+ const char* value) = 0;
+
+
+ /** Add a source file to the given translation unit.
+
+ If a user-defined file system has been specified via
+ `spSetFileSystem`, then it will be used to load the
+ file at `path`. Otherwise, Slang will use the OS
+ file system.
+
+ This function does *not* search for a file using
+ the registered search paths (`spAddSearchPath`),
+ and instead using the given `path` as-is.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ addTranslationUnitSourceFile(int translationUnitIndex, char const* path) = 0;
+
+ /** Add a source string to the given translation unit.
+
+ @param translationUnitIndex The index of the translation unit to add source to.
+ @param path The file-system path that should be assumed for the source code.
+ @param source A null-terminated UTF-8 encoded string of source code.
+
+ The implementation will make a copy of the source code data.
+ An application may free the buffer immediately after this call returns.
+
+ The `path` will be used in any diagnostic output, as well
+ as to determine the base path when resolving relative
+ `#include`s.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitSourceString(
+ int translationUnitIndex,
+ char const* path,
+ char const* source) = 0;
+
+
+ /** Add a slang library - such that its contents can be referenced during linking.
+ This is equivalent to the -r command line option.
+
+ @param basePath The base path used to lookup referenced modules.
+ @param libData The library data
+ @param libDataSize The size of the library data
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ addLibraryReference(const char* basePath, const void* libData, size_t libDataSize) = 0;
+
+ /** Add a source string to the given translation unit.
+
+ @param translationUnitIndex The index of the translation unit to add source to.
+ @param path The file-system path that should be assumed for the source code.
+ @param sourceBegin A pointer to a buffer of UTF-8 encoded source code.
+ @param sourceEnd A pointer to to the end of the buffer specified in `sourceBegin`
+
+ The implementation will make a copy of the source code data.
+ An application may free the buffer immediately after this call returns.
+
+ The `path` will be used in any diagnostic output, as well
+ as to determine the base path when resolving relative
+ `#include`s.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitSourceStringSpan(
+ int translationUnitIndex,
+ char const* path,
+ char const* sourceBegin,
+ char const* sourceEnd) = 0;
+
+ /** Add a blob of source code to the given translation unit.
+
+ @param translationUnitIndex The index of the translation unit to add source to.
+ @param path The file-system path that should be assumed for the source code.
+ @param sourceBlob A blob containing UTF-8 encoded source code.
+ @param sourceEnd A pointer to to the end of the buffer specified in `sourceBegin`
+
+ The compile request will retain a reference to the blob.
+
+ The `path` will be used in any diagnostic output, as well
+ as to determine the base path when resolving relative
+ `#include`s.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL addTranslationUnitSourceBlob(
+ int translationUnitIndex,
+ char const* path,
+ ISlangBlob* sourceBlob) = 0;
+
+ /** Add an entry point in a particular translation unit
+ */
+ virtual SLANG_NO_THROW int SLANG_MCALL
+ addEntryPoint(int translationUnitIndex, char const* name, SlangStage stage) = 0;
+
+ /** Add an entry point in a particular translation unit,
+ with additional arguments that specify the concrete
+ type names for entry-point generic type parameters.
+ */
+ virtual SLANG_NO_THROW int SLANG_MCALL addEntryPointEx(
+ int translationUnitIndex,
+ char const* name,
+ SlangStage stage,
+ int genericArgCount,
+ char const** genericArgs) = 0;
+
+ /** Specify the arguments to use for global generic parameters.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ setGlobalGenericArgs(int genericArgCount, char const** genericArgs) = 0;
+
+ /** Specify the concrete type to be used for a global "existential slot."
+
+ Every shader parameter (or leaf field of a `struct`-type shader parameter)
+ that has an interface or array-of-interface type introduces an existential
+ slot. The number of slots consumed by a shader parameter, and the starting
+ slot of each parameter can be queried via the reflection API using
+ `SLANG_PARAMETER_CATEGORY_EXISTENTIAL_TYPE_PARAM`.
+
+ In order to generate specialized code, a concrete type needs to be specified
+ for each existential slot. This function specifies the name of the type
+ (or in general a type *expression*) to use for a specific slot at the
+ global scope.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ setTypeNameForGlobalExistentialTypeParam(int slotIndex, char const* typeName) = 0;
+
+ /** Specify the concrete type to be used for an entry-point "existential slot."
+
+ Every shader parameter (or leaf field of a `struct`-type shader parameter)
+ that has an interface or array-of-interface type introduces an existential
+ slot. The number of slots consumed by a shader parameter, and the starting
+ slot of each parameter can be queried via the reflection API using
+ `SLANG_PARAMETER_CATEGORY_EXISTENTIAL_TYPE_PARAM`.
+
+ In order to generate specialized code, a concrete type needs to be specified
+ for each existential slot. This function specifies the name of the type
+ (or in general a type *expression*) to use for a specific slot at the
+ entry-point scope.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL setTypeNameForEntryPointExistentialTypeParam(
+ int entryPointIndex,
+ int slotIndex,
+ char const* typeName) = 0;
+
+ /** Enable or disable an experimental, best-effort GLSL frontend
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setAllowGLSLInput(bool value) = 0;
+
+ /** Execute the compilation request.
+
+ @returns SlangResult, SLANG_OK on success. Use SLANG_SUCCEEDED() and SLANG_FAILED() to test
+ SlangResult.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL compile() = 0;
+
+
+ /** Get any diagnostic messages reported by the compiler.
+
+ @returns A null-terminated UTF-8 encoded string of diagnostic messages.
+
+ The returned pointer is only guaranteed to be valid
+ until `request` is destroyed. Applications that wish to
+ hold on to the diagnostic output for longer should use
+ `getDiagnosticOutputBlob`.
+ */
+ virtual SLANG_NO_THROW char const* SLANG_MCALL getDiagnosticOutput() = 0;
+
+ /** Get diagnostic messages reported by the compiler.
+
+ @param outBlob A pointer to receive a blob holding a nul-terminated UTF-8 encoded string of
+ diagnostic messages.
+ @returns A `SlangResult` indicating success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getDiagnosticOutputBlob(ISlangBlob** outBlob) = 0;
+
+
+ /** Get the number of files that this compilation depended on.
+
+ This includes both the explicit source files, as well as any
+ additional files that were transitively referenced (e.g., via
+ a `#include` directive).
+ */
+ virtual SLANG_NO_THROW int SLANG_MCALL getDependencyFileCount() = 0;
+
+ /** Get the path to a file this compilation depended on.
+ */
+ virtual SLANG_NO_THROW char const* SLANG_MCALL getDependencyFilePath(int index) = 0;
+
+ /** Get the number of translation units associated with the compilation request
+ */
+ virtual SLANG_NO_THROW int SLANG_MCALL getTranslationUnitCount() = 0;
+
+ /** Get the output source code associated with a specific entry point.
+
+ The lifetime of the output pointer is the same as `request`.
+ */
+ virtual SLANG_NO_THROW char const* SLANG_MCALL getEntryPointSource(int entryPointIndex) = 0;
+
+ /** Get the output bytecode associated with a specific entry point.
+
+ The lifetime of the output pointer is the same as `request`.
+ */
+ virtual SLANG_NO_THROW void const* SLANG_MCALL
+ getEntryPointCode(int entryPointIndex, size_t* outSize) = 0;
+
+ /** Get the output code associated with a specific entry point.
+
+ @param entryPointIndex The index of the entry point to get code for.
+ @param targetIndex The index of the target to get code for (default: zero).
+ @param outBlob A pointer that will receive the blob of code
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getEntryPointCodeBlob(int entryPointIndex, int targetIndex, ISlangBlob** outBlob) = 0;
+
+ /** Get entry point 'callable' functions accessible through the ISlangSharedLibrary interface.
+
+ That the functions remain in scope as long as the ISlangSharedLibrary interface is in scope.
+
+ NOTE! Requires a compilation target of SLANG_HOST_CALLABLE.
+
+ @param entryPointIndex The index of the entry point to get code for.
+ @param targetIndex The index of the target to get code for (default: zero).
+ @param outSharedLibrary A pointer to a ISharedLibrary interface which functions can be queried
+ on.
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointHostCallable(
+ int entryPointIndex,
+ int targetIndex,
+ ISlangSharedLibrary** outSharedLibrary) = 0;
+
+ /** Get the output code associated with a specific target.
+
+ @param targetIndex The index of the target to get code for (default: zero).
+ @param outBlob A pointer that will receive the blob of code
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getTargetCodeBlob(int targetIndex, ISlangBlob** outBlob) = 0;
+
+ /** Get 'callable' functions for a target accessible through the ISlangSharedLibrary interface.
+
+ That the functions remain in scope as long as the ISlangSharedLibrary interface is in scope.
+
+ NOTE! Requires a compilation target of SLANG_HOST_CALLABLE.
+
+ @param targetIndex The index of the target to get code for (default: zero).
+ @param outSharedLibrary A pointer to a ISharedLibrary interface which functions can be queried
+ on.
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getTargetHostCallable(int targetIndex, ISlangSharedLibrary** outSharedLibrary) = 0;
+
+ /** Get the output bytecode associated with an entire compile request.
+
+ The lifetime of the output pointer is the same as `request` and the last spCompile.
+
+ @param outSize The size of the containers contents in bytes. Will be zero if there is
+ no code available.
+ @returns Pointer to start of the contained data, or nullptr if there is no code
+ available.
+ */
+ virtual SLANG_NO_THROW void const* SLANG_MCALL getCompileRequestCode(size_t* outSize) = 0;
+
+ /** Get the compilation result as a file system.
+ The result is not written to the actual OS file system, but is made avaiable as an
+ in memory representation.
+ */
+ virtual SLANG_NO_THROW ISlangMutableFileSystem* SLANG_MCALL
+ getCompileRequestResultAsFileSystem() = 0;
+
+ /** Return the container code as a blob. The container blob is created as part of a compilation
+ (with spCompile), and a container is produced with a suitable ContainerFormat.
+
+ @param outSize The blob containing the container data.
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getContainerCode(ISlangBlob** outBlob) = 0;
+
+ /** Load repro from memory specified.
+
+ Should only be performed on a newly created request.
+
+ NOTE! When using the fileSystem, files will be loaded via their `unique names` as if they are
+ part of the flat file system. This mechanism is described more fully in docs/repro.md.
+
+ @param fileSystem An (optional) filesystem. Pass nullptr to just use contents of repro
+ held in data.
+ @param data The data to load from.
+ @param size The size of the data to load from.
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ loadRepro(ISlangFileSystem* fileSystem, const void* data, size_t size) = 0;
+
+ /** Save repro state. Should *typically* be performed after spCompile, so that everything
+ that is needed for a compilation is available.
+
+ @param outBlob Blob that will hold the serialized state
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL saveRepro(ISlangBlob** outBlob) = 0;
+
+ /** Enable repro capture.
+
+ Should be set after any ISlangFileSystem has been set, but before any compilation. It ensures
+ that everything that the ISlangFileSystem accesses will be correctly recorded. Note that if a
+ ISlangFileSystem/ISlangFileSystemExt isn't explicitly set (ie the default is used), then the
+ request will automatically be set up to record everything appropriate.
+
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL enableReproCapture() = 0;
+
+ /** Get the (linked) program for a compile request.
+
+ The linked program will include all of the global-scope modules for the
+ translation units in the program, plus any modules that they `import`
+ (transitively), specialized to any global specialization arguments that
+ were provided via the API.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getProgram(slang::IComponentType** outProgram) = 0;
+
+ /** Get the (partially linked) component type for an entry point.
+
+ The returned component type will include the entry point at the
+ given index, and will be specialized using any specialization arguments
+ that were provided for it via the API.
+
+ The returned component will *not* include the modules representing
+ the global scope and its dependencies/specialization, so a client
+ program will typically want to compose this component type with
+ the one returned by `spCompileRequest_getProgram` to get a complete
+ and usable component type from which kernel code can be requested.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getEntryPoint(SlangInt entryPointIndex, slang::IComponentType** outEntryPoint) = 0;
+
+ /** Get the (un-linked) module for a translation unit.
+
+ The returned module will not be linked against any dependencies,
+ nor against any entry points (even entry points declared inside
+ the module). Similarly, the module will not be specialized
+ to the arguments that might have been provided via the API.
+
+ This function provides an atomic unit of loaded code that
+ is suitable for looking up types and entry points in the
+ given module, and for linking together to produce a composite
+ program that matches the needs of an application.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getModule(SlangInt translationUnitIndex, slang::IModule** outModule) = 0;
+
+ /** Get the `ISession` handle behind the `SlangCompileRequest`.
+ TODO(JS): Arguably this should just return the session pointer.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getSession(slang::ISession** outSession) = 0;
+
+ /** get reflection data from a compilation request */
+ virtual SLANG_NO_THROW SlangReflection* SLANG_MCALL getReflection() = 0;
+
+ /** Make output specially handled for command line output */
+ virtual SLANG_NO_THROW void SLANG_MCALL setCommandLineCompilerMode() = 0;
+
+ /** Add a defined capability that should be assumed available on the target */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ addTargetCapability(SlangInt targetIndex, SlangCapabilityID capability) = 0;
+
+ /** Get the (linked) program for a compile request, including all entry points.
+
+ The resulting program will include all of the global-scope modules for the
+ translation units in the program, plus any modules that they `import`
+ (transitively), specialized to any global specialization arguments that
+ were provided via the API, as well as all entry points specified for compilation,
+ specialized to their entry-point specialization arguments.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getProgramWithEntryPoints(slang::IComponentType** outProgram) = 0;
+
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL isParameterLocationUsed(
+ SlangInt entryPointIndex,
+ SlangInt targetIndex,
+ SlangParameterCategory category,
+ SlangUInt spaceIndex,
+ SlangUInt registerIndex,
+ bool& outUsed) = 0;
+
+ /** Set the line directive mode for a target.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetLineDirectiveMode(SlangInt targetIndex, SlangLineDirectiveMode mode) = 0;
+
+ /** Set whether to use scalar buffer layouts for GLSL/Vulkan targets.
+ If true, the generated GLSL/Vulkan code will use `scalar` layout for storage buffers.
+ If false, the resulting code will std430 for storage buffers.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetForceGLSLScalarBufferLayout(int targetIndex, bool forceScalarLayout) = 0;
+
+ /** Overrides the severity of a specific diagnostic message.
+
+ @param messageID Numeric identifier of the message to override,
+ as defined in the 1st parameter of the DIAGNOSTIC macro.
+ @param overrideSeverity New severity of the message. If the message is originally Error or
+ Fatal, the new severity cannot be lower than that.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ overrideDiagnosticSeverity(SlangInt messageID, SlangSeverity overrideSeverity) = 0;
+
+ /** Returns the currently active flags of the request's diagnostic sink. */
+ virtual SLANG_NO_THROW SlangDiagnosticFlags SLANG_MCALL getDiagnosticFlags() = 0;
+
+ /** Sets the flags of the request's diagnostic sink.
+ The previously specified flags are discarded. */
+ virtual SLANG_NO_THROW void SLANG_MCALL setDiagnosticFlags(SlangDiagnosticFlags flags) = 0;
+
+ /** Set the debug format to be used for debugging information */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setDebugInfoFormat(SlangDebugInfoFormat debugFormat) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL setEnableEffectAnnotations(bool value) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL setReportDownstreamTime(bool value) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL setReportPerfBenchmark(bool value) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL setSkipSPIRVValidation(bool value) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetUseMinimumSlangOptimization(int targetIndex, bool value) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL setIgnoreCapabilityCheck(bool value) = 0;
+
+ // return a copy of internal profiling results, and if `shouldClear` is true, clear the internal
+ // profiling results before returning.
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getCompileTimeProfile(ISlangProfiler** compileTimeProfile, bool shouldClear) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetGenerateWholeProgram(int targetIndex, bool value) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL setTargetForceDXLayout(int targetIndex, bool value) = 0;
+
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setTargetEmbedDownstreamIR(int targetIndex, bool value) = 0;
+};
#define SLANG_UUID_ICompileRequest ICompileRequest::getTypeGuid()
-}
+} // namespace slang
#endif
diff --git a/include/slang-gfx.h b/include/slang-gfx.h
index 7756d76da..6f46fed33 100644
--- a/include/slang-gfx.h
+++ b/include/slang-gfx.h
@@ -1,30 +1,30 @@
// render.h
#pragma once
-#include <float.h>
-#include <assert.h>
-
-#include "slang.h"
#include "slang-com-ptr.h"
+#include "slang.h"
+
+#include <assert.h>
+#include <float.h>
#if defined(SLANG_GFX_DYNAMIC)
-# if defined(_MSC_VER)
-# ifdef SLANG_GFX_DYNAMIC_EXPORT
-# define SLANG_GFX_API SLANG_DLL_EXPORT
-# else
-# define SLANG_GFX_API __declspec(dllimport)
-# endif
-# else
-// TODO: need to consider compiler capabilities
-//# ifdef SLANG_DYNAMIC_EXPORT
-# define SLANG_GFX_API SLANG_DLL_EXPORT
-//# endif
-# endif
+ #if defined(_MSC_VER)
+ #ifdef SLANG_GFX_DYNAMIC_EXPORT
+ #define SLANG_GFX_API SLANG_DLL_EXPORT
+ #else
+ #define SLANG_GFX_API __declspec(dllimport)
+ #endif
+ #else
+ // TODO: need to consider compiler capabilities
+ // # ifdef SLANG_DYNAMIC_EXPORT
+ #define SLANG_GFX_API SLANG_DLL_EXPORT
+ // # endif
+ #endif
#endif
#ifndef SLANG_GFX_API
-# define SLANG_GFX_API
+ #define SLANG_GFX_API
#endif
// Needed for building on cygwin with gcc
@@ -34,10 +34,13 @@
// GLOBAL TODO: doc comments
// GLOBAL TODO: Rationalize integer types (not a smush of uint/int/Uint/Int/etc)
// - need typedefs in gfx namespace for Count, Index, Size, Offset (ex. DeviceAddress)
-// - Index and Count are for arrays, and indexing into array - like things(XY coordinates of pixels, etc.)
-// - Count is also for anything where we need to measure how many of something there are. This includes things like extents.
+// - Index and Count are for arrays, and indexing into array - like things(XY coordinates of
+// pixels, etc.)
+// - Count is also for anything where we need to measure how many of something there are.
+// This includes things like extents.
// - Offset and Size are almost always for bytes and things measured in bytes.
-namespace gfx {
+namespace gfx
+{
using Slang::ComPtr;
@@ -56,7 +59,10 @@ const uint64_t kTimeoutInfinite = 0xFFFFFFFFFFFFFFFF;
enum class StructType
{
- D3D12DeviceExtendedDesc, D3D12ExperimentalFeaturesDesc, SlangSessionExtendedDesc, RayTracingValidationDesc
+ D3D12DeviceExtendedDesc,
+ D3D12ExperimentalFeaturesDesc,
+ SlangSessionExtendedDesc,
+ RayTracingValidationDesc
};
// TODO: Rename to Stage
@@ -136,23 +142,24 @@ class ITransientResourceHeap;
enum class ShaderModuleSourceType
{
- SlangSource, // a slang source string in memory.
- SlangModuleBinary, // a slang module binary code in memory.
- SlangSourceFile, // a slang source from file.
+ SlangSource, // a slang source string in memory.
+ SlangModuleBinary, // a slang module binary code in memory.
+ SlangSourceFile, // a slang source from file.
SlangModuleBinaryFile, // a slang module binary code from file.
};
-class IShaderProgram: public ISlangUnknown
+class IShaderProgram : public ISlangUnknown
{
public:
// Defines how linking should be performed for a shader program.
enum class LinkingStyle
{
- // Compose all entry-points in a single program, then compile all entry-points together with the same
- // set of root shader arguments.
+ // Compose all entry-points in a single program, then compile all entry-points together with
+ // the same set of root shader arguments.
SingleProgram,
- // Link and compile each entry-point individually, potentially with different specializations.
+ // Link and compile each entry-point individually, potentially with different
+ // specializations.
SeparateEntryPointCompilation
};
@@ -163,7 +170,7 @@ public:
LinkingStyle linkingStyle = LinkingStyle::SingleProgram;
// The global scope or a Slang composite component that represents the entire program.
- slang::IComponentType* slangGlobalScope;
+ slang::IComponentType* slangGlobalScope;
// Number of separate entry point components in the `slangEntryPoints` array to link in.
// If set to 0, then `slangGlobalScope` must contain Slang EntryPoint components.
@@ -191,9 +198,12 @@ public:
virtual SLANG_NO_THROW slang::TypeReflection* SLANG_MCALL findTypeByName(const char* name) = 0;
};
-#define SLANG_UUID_IShaderProgram \
- { \
- 0x9d32d0ad, 0x915c, 0x4ffd, { 0x91, 0xe2, 0x50, 0x85, 0x54, 0xa0, 0x4a, 0x76 } \
+#define SLANG_UUID_IShaderProgram \
+ { \
+ 0x9d32d0ad, 0x915c, 0x4ffd, \
+ { \
+ 0x91, 0xe2, 0x50, 0x85, 0x54, 0xa0, 0x4a, 0x76 \
+ } \
}
// TODO: Confirm with Yong that we really want this naming convention
@@ -311,12 +321,14 @@ public:
// TODO: This should be generated from above
// TODO: enum class should be explicitly uint32_t or whatever's appropriate
/// Different formats of things like pixels or elements of vertices
-/// NOTE! Any change to this type (adding, removing, changing order) - must also be reflected in changes GFX_FORMAT
+/// NOTE! Any change to this type (adding, removing, changing order) - must also be reflected in
+/// changes GFX_FORMAT
enum class Format
{
// D3D formats omitted: 19-22, 44-47, 65-66, 68-70, 73, 76, 79, 82, 88-89, 92-94, 97, 100-114
- // These formats are omitted due to lack of a corresponding Vulkan format. D24_UNORM_S8_UINT (DXGI_FORMAT 45)
- // has a matching Vulkan format but is also omitted as it is only supported by Nvidia.
+ // These formats are omitted due to lack of a corresponding Vulkan format. D24_UNORM_S8_UINT
+ // (DXGI_FORMAT 45) has a matching Vulkan format but is also omitted as it is only supported by
+ // Nvidia.
Unknown,
R32G32B32A32_TYPELESS,
@@ -420,7 +432,7 @@ enum class Format
BC7_UNORM_SRGB,
R64_UINT,
-
+
R64_SINT,
_Count,
@@ -433,27 +445,32 @@ enum class Format
// TODO: Width/Height/Depth/whatever should not be used. We should use extentX, extentY, etc.
struct FormatInfo
{
- GfxCount channelCount; ///< The amount of channels in the format. Only set if the channelType is set
- uint8_t channelType; ///< One of SlangScalarType None if type isn't made up of elements of type. TODO: Change to uint32_t?
+ GfxCount
+ channelCount; ///< The amount of channels in the format. Only set if the channelType is set
+ uint8_t channelType; ///< One of SlangScalarType None if type isn't made up of elements of type.
+ ///< TODO: Change to uint32_t?
- Size blockSizeInBytes; ///< The size of a block in bytes.
- GfxCount pixelsPerBlock; ///< The number of pixels contained in a block.
- GfxCount blockWidth; ///< The width of a block in pixels.
- GfxCount blockHeight; ///< The height of a block in pixels.
+ Size blockSizeInBytes; ///< The size of a block in bytes.
+ GfxCount pixelsPerBlock; ///< The number of pixels contained in a block.
+ GfxCount blockWidth; ///< The width of a block in pixels.
+ GfxCount blockHeight; ///< The height of a block in pixels.
};
enum class InputSlotClass
{
- PerVertex, PerInstance
+ PerVertex,
+ PerInstance
};
struct InputElementDesc
{
- char const* semanticName; ///< The name of the corresponding parameter in shader code.
- GfxIndex semanticIndex; ///< The index of the corresponding parameter in shader code. Only needed if multiple parameters share a semantic name.
- Format format; ///< The format of the data being fetched for this element.
- Offset offset; ///< The offset in bytes of this element from the start of the corresponding chunk of vertex stream data.
- GfxIndex bufferSlotIndex; ///< The index of the vertex stream to fetch this element's data from.
+ char const* semanticName; ///< The name of the corresponding parameter in shader code.
+ GfxIndex semanticIndex; ///< The index of the corresponding parameter in shader code. Only
+ ///< needed if multiple parameters share a semantic name.
+ Format format; ///< The format of the data being fetched for this element.
+ Offset offset; ///< The offset in bytes of this element from the start of the corresponding
+ ///< chunk of vertex stream data.
+ GfxIndex bufferSlotIndex; ///< The index of the vertex stream to fetch this element's data from.
};
struct VertexStreamDesc
@@ -465,12 +482,19 @@ struct VertexStreamDesc
enum class PrimitiveType
{
- Point, Line, Triangle, Patch
+ Point,
+ Line,
+ Triangle,
+ Patch
};
enum class PrimitiveTopology
{
- TriangleList, TriangleStrip, PointList, LineList, LineStrip
+ TriangleList,
+ TriangleStrip,
+ PointList,
+ LineList,
+ LineStrip
};
enum class ResourceState
@@ -504,18 +528,24 @@ struct ResourceStateSet
{
public:
void add(ResourceState state) { m_bitFields |= (1LL << (uint32_t)state); }
- template <typename... TResourceState> void add(ResourceState s, TResourceState... states)
+ template<typename... TResourceState>
+ void add(ResourceState s, TResourceState... states)
{
add(s);
add(states...);
}
- bool contains(ResourceState state) const { return (m_bitFields & (1LL << (uint32_t)state)) != 0; }
+ bool contains(ResourceState state) const
+ {
+ return (m_bitFields & (1LL << (uint32_t)state)) != 0;
+ }
ResourceStateSet()
: m_bitFields(0)
- {}
+ {
+ }
ResourceStateSet(const ResourceStateSet& other) = default;
ResourceStateSet(ResourceState state) { add(state); }
- template <typename... TResourceState> ResourceStateSet(TResourceState... states)
+ template<typename... TResourceState>
+ ResourceStateSet(TResourceState... states)
{
add(states...);
}
@@ -544,14 +574,14 @@ enum class MemoryType
enum class InteropHandleAPI
{
Unknown,
- D3D12, // A D3D12 object pointer.
- Vulkan, // A general Vulkan object handle.
- CUDA, // A general CUDA object handle.
- Win32, // A general Win32 HANDLE.
- FileDescriptor, // A file descriptor.
- DeviceAddress, // A device address.
+ D3D12, // A D3D12 object pointer.
+ Vulkan, // A general Vulkan object handle.
+ CUDA, // A general CUDA object handle.
+ Win32, // A general Win32 HANDLE.
+ FileDescriptor, // A file descriptor.
+ DeviceAddress, // A device address.
D3D12CpuDescriptorHandle, // A D3D12_CPU_DESCRIPTOR_HANDLE value.
- Metal, // A general Metal object handle.
+ Metal, // A general Metal object handle.
};
struct InteropHandle
@@ -572,28 +602,32 @@ public:
GfxCount vertexStreamCount = 0;
};
};
-#define SLANG_UUID_IInputLayout \
- { \
- 0x45223711, 0xa84b, 0x455c, { 0xbe, 0xfa, 0x49, 0x37, 0x42, 0x1e, 0x8e, 0x2e } \
+#define SLANG_UUID_IInputLayout \
+ { \
+ 0x45223711, 0xa84b, 0x455c, \
+ { \
+ 0xbe, 0xfa, 0x49, 0x37, 0x42, 0x1e, 0x8e, 0x2e \
+ } \
}
-class IResource: public ISlangUnknown
+class IResource : public ISlangUnknown
{
public:
- /// The type of resource.
- /// NOTE! The order needs to be such that all texture types are at or after Texture1D (otherwise isTexture won't work correctly)
+ /// The type of resource.
+ /// NOTE! The order needs to be such that all texture types are at or after Texture1D (otherwise
+ /// isTexture won't work correctly)
enum class Type
{
- Unknown, ///< Unknown
- Buffer, ///< A buffer (like a constant/index/vertex buffer)
- Texture1D, ///< A 1d texture
- Texture2D, ///< A 2d texture
- Texture3D, ///< A 3d texture
- TextureCube, ///< A cubemap consists of 6 Texture2D like faces
+ Unknown, ///< Unknown
+ Buffer, ///< A buffer (like a constant/index/vertex buffer)
+ Texture1D, ///< A 1d texture
+ Texture2D, ///< A 2d texture
+ Texture3D, ///< A 3d texture
+ TextureCube, ///< A cubemap consists of 6 Texture2D like faces
_Count,
};
- /// Base class for Descs
+ /// Base class for Descs
struct DescBase
{
Type type = Type::Unknown;
@@ -610,11 +644,13 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL setDebugName(const char* name) = 0;
virtual SLANG_NO_THROW const char* SLANG_MCALL getDebugName() = 0;
-
};
-#define SLANG_UUID_IResource \
- { \
- 0xa0e39f34, 0x8398, 0x4522, { 0x95, 0xc2, 0xeb, 0xc0, 0xf9, 0x84, 0xef, 0x3f } \
+#define SLANG_UUID_IResource \
+ { \
+ 0xa0e39f34, 0x8398, 0x4522, \
+ { \
+ 0x95, 0xc2, 0xeb, 0xc0, 0xf9, 0x84, 0xef, 0x3f \
+ } \
}
struct MemoryRange
@@ -624,13 +660,13 @@ struct MemoryRange
uint64_t size;
};
-class IBufferResource: public IResource
+class IBufferResource : public IResource
{
public:
- struct Desc: public DescBase
+ struct Desc : public DescBase
{
- Size sizeInBytes = 0; ///< Total size in bytes
- Size elementSize = 0; ///< Get the element stride. If > 0, this is a structured buffer
+ Size sizeInBytes = 0; ///< Total size in bytes
+ Size elementSize = 0; ///< Get the element stride. If > 0, this is a structured buffer
Format format = Format::Unknown;
};
@@ -639,9 +675,12 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL map(MemoryRange* rangeToRead, void** outPointer) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL unmap(MemoryRange* writtenRange) = 0;
};
-#define SLANG_UUID_IBufferResource \
- { \
- 0x1b274efe, 0x5e37, 0x492b, { 0x82, 0x6e, 0x7e, 0xe7, 0xe8, 0xf5, 0xa4, 0x9b } \
+#define SLANG_UUID_IBufferResource \
+ { \
+ 0x1b274efe, 0x5e37, 0x492b, \
+ { \
+ 0x82, 0x6e, 0x7e, 0xe7, 0xe8, 0xf5, 0xa4, 0x9b \
+ } \
}
struct DepthStencilClearValue
@@ -662,8 +701,8 @@ struct ClearValue
struct BufferRange
{
- Offset offset; ///< Offset in bytes.
- Size size; ///< Size in bytes.
+ Offset offset; ///< Offset in bytes.
+ Size size; ///< Size in bytes.
};
enum class TextureAspect : uint32_t
@@ -686,10 +725,10 @@ struct SubresourceRange
GfxIndex mipLevel;
GfxCount mipLevelCount;
GfxIndex baseArrayLayer; // For Texture3D, this is WSlice.
- GfxCount layerCount; // For cube maps, this is a multiple of 6.
+ GfxCount layerCount; // For cube maps, this is a multiple of 6.
};
-class ITextureResource: public IResource
+class ITextureResource : public IResource
{
public:
static const GfxCount kRemainingTextureSize = 0xffffffff;
@@ -699,97 +738,103 @@ public:
GfxIndex y = 0;
GfxIndex z = 0;
Offset3D() = default;
- Offset3D(GfxIndex _x, GfxIndex _y, GfxIndex _z) :x(_x), y(_y), z(_z) {}
+ Offset3D(GfxIndex _x, GfxIndex _y, GfxIndex _z)
+ : x(_x), y(_y), z(_z)
+ {
+ }
};
struct SampleDesc
{
- GfxCount numSamples = 1; ///< Number of samples per pixel
- int quality = 0; ///< The quality measure for the samples
+ GfxCount numSamples = 1; ///< Number of samples per pixel
+ int quality = 0; ///< The quality measure for the samples
};
struct Extents
{
- GfxCount width = 0; ///< Width in pixels
- GfxCount height = 0; ///< Height in pixels (if 2d or 3d)
- GfxCount depth = 0; ///< Depth (if 3d)
+ GfxCount width = 0; ///< Width in pixels
+ GfxCount height = 0; ///< Height in pixels (if 2d or 3d)
+ GfxCount depth = 0; ///< Depth (if 3d)
};
- struct Desc: public DescBase
+ struct Desc : public DescBase
{
Extents size;
- GfxCount arraySize = 0; ///< Array size
+ GfxCount arraySize = 0; ///< Array size
- GfxCount numMipLevels = 0; ///< Number of mip levels - if 0 will create all mip levels
- Format format; ///< The resources format
- SampleDesc sampleDesc; ///< How the resource is sampled
+ GfxCount numMipLevels = 0; ///< Number of mip levels - if 0 will create all mip levels
+ Format format; ///< The resources format
+ SampleDesc sampleDesc; ///< How the resource is sampled
ClearValue* optimalClearValue = nullptr;
};
- /// Data for a single subresource of a texture.
- ///
- /// Each subresource is a tensor with `1 <= rank <= 3`,
- /// where the rank is deterined by the base shape of the
- /// texture (Buffer, 1D, 2D, 3D, or Cube). For the common
- /// case of a 2D texture, `rank == 2` and each subresource
- /// is a 2D image.
- ///
- /// Subresource tensors must be stored in a row-major layout,
- /// so that the X axis strides over texels, the Y axis strides
- /// over 1D rows of texels, and the Z axis strides over 2D
- /// "layers" of texels.
- ///
- /// For a texture with multiple mip levels or array elements,
- /// each mip level and array element is stores as a distinct
- /// subresource. When indexing into an array of subresources,
- /// the index of a subresoruce for mip level `m` and array
- /// index `a` is `m + a*mipLevelCount`.
- ///
+ /// Data for a single subresource of a texture.
+ ///
+ /// Each subresource is a tensor with `1 <= rank <= 3`,
+ /// where the rank is deterined by the base shape of the
+ /// texture (Buffer, 1D, 2D, 3D, or Cube). For the common
+ /// case of a 2D texture, `rank == 2` and each subresource
+ /// is a 2D image.
+ ///
+ /// Subresource tensors must be stored in a row-major layout,
+ /// so that the X axis strides over texels, the Y axis strides
+ /// over 1D rows of texels, and the Z axis strides over 2D
+ /// "layers" of texels.
+ ///
+ /// For a texture with multiple mip levels or array elements,
+ /// each mip level and array element is stores as a distinct
+ /// subresource. When indexing into an array of subresources,
+ /// the index of a subresoruce for mip level `m` and array
+ /// index `a` is `m + a*mipLevelCount`.
+ ///
struct SubresourceData
{
- /// Pointer to texel data for the subresource tensor.
+ /// Pointer to texel data for the subresource tensor.
void const* data;
- /// Stride in bytes between rows of the subresource tensor.
- ///
- /// This is the number of bytes to add to a pointer to a texel
- /// at (X,Y,Z) to get to a texel at (X,Y+1,Z).
- ///
- /// Devices may not support all possible values for `strideY`.
- /// In particular, they may only support strictly positive strides.
- ///
+ /// Stride in bytes between rows of the subresource tensor.
+ ///
+ /// This is the number of bytes to add to a pointer to a texel
+ /// at (X,Y,Z) to get to a texel at (X,Y+1,Z).
+ ///
+ /// Devices may not support all possible values for `strideY`.
+ /// In particular, they may only support strictly positive strides.
+ ///
gfx::Size strideY;
- /// Stride in bytes between layers of the subresource tensor.
- ///
- /// This is the number of bytes to add to a pointer to a texel
- /// at (X,Y,Z) to get to a texel at (X,Y,Z+1).
- ///
- /// Devices may not support all possible values for `strideZ`.
- /// In particular, they may only support strictly positive strides.
- ///
+ /// Stride in bytes between layers of the subresource tensor.
+ ///
+ /// This is the number of bytes to add to a pointer to a texel
+ /// at (X,Y,Z) to get to a texel at (X,Y,Z+1).
+ ///
+ /// Devices may not support all possible values for `strideZ`.
+ /// In particular, they may only support strictly positive strides.
+ ///
gfx::Size strideZ;
};
virtual SLANG_NO_THROW Desc* SLANG_MCALL getDesc() = 0;
};
-#define SLANG_UUID_ITextureResource \
- { \
- 0xcf88a31c, 0x6187, 0x46c5, { 0xa4, 0xb7, 0xeb, 0x58, 0xc7, 0x33, 0x40, 0x17 } \
+#define SLANG_UUID_ITextureResource \
+ { \
+ 0xcf88a31c, 0x6187, 0x46c5, \
+ { \
+ 0xa4, 0xb7, 0xeb, 0x58, 0xc7, 0x33, 0x40, 0x17 \
+ } \
}
enum class ComparisonFunc : uint8_t
{
- Never = 0x0,
- Less = 0x1,
- Equal = 0x2,
- LessEqual = 0x3,
- Greater = 0x4,
- NotEqual = 0x5,
- GreaterEqual = 0x6,
- Always = 0x7,
+ Never = 0x0,
+ Less = 0x1,
+ Equal = 0x2,
+ LessEqual = 0x3,
+ Greater = 0x4,
+ NotEqual = 0x5,
+ GreaterEqual = 0x6,
+ Always = 0x7,
};
enum class TextureFilteringMode
@@ -820,19 +865,19 @@ class ISamplerState : public ISlangUnknown
public:
struct Desc
{
- TextureFilteringMode minFilter = TextureFilteringMode::Linear;
- TextureFilteringMode magFilter = TextureFilteringMode::Linear;
- TextureFilteringMode mipFilter = TextureFilteringMode::Linear;
- TextureReductionOp reductionOp = TextureReductionOp::Average;
- TextureAddressingMode addressU = TextureAddressingMode::Wrap;
- TextureAddressingMode addressV = TextureAddressingMode::Wrap;
- TextureAddressingMode addressW = TextureAddressingMode::Wrap;
- float mipLODBias = 0.0f;
- uint32_t maxAnisotropy = 1;
- ComparisonFunc comparisonFunc = ComparisonFunc::Never;
- float borderColor[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
- float minLOD = -FLT_MAX;
- float maxLOD = FLT_MAX;
+ TextureFilteringMode minFilter = TextureFilteringMode::Linear;
+ TextureFilteringMode magFilter = TextureFilteringMode::Linear;
+ TextureFilteringMode mipFilter = TextureFilteringMode::Linear;
+ TextureReductionOp reductionOp = TextureReductionOp::Average;
+ TextureAddressingMode addressU = TextureAddressingMode::Wrap;
+ TextureAddressingMode addressV = TextureAddressingMode::Wrap;
+ TextureAddressingMode addressW = TextureAddressingMode::Wrap;
+ float mipLODBias = 0.0f;
+ uint32_t maxAnisotropy = 1;
+ ComparisonFunc comparisonFunc = ComparisonFunc::Never;
+ float borderColor[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ float minLOD = -FLT_MAX;
+ float maxLOD = FLT_MAX;
};
/// Returns a native API handle representing this sampler state object.
@@ -840,9 +885,12 @@ public:
/// When using Vulkan, this will be a VkSampler.
virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outNativeHandle) = 0;
};
-#define SLANG_UUID_ISamplerState \
- { \
- 0x8b8055df, 0x9377, 0x401d, { 0x91, 0xff, 0x3f, 0xa3, 0xbf, 0x66, 0x64, 0xf4 } \
+#define SLANG_UUID_ISamplerState \
+ { \
+ 0x8b8055df, 0x9377, 0x401d, \
+ { \
+ 0x91, 0xff, 0x3f, 0xa3, 0xbf, 0x66, 0x64, 0xf4 \
+ } \
}
class IResourceView : public ISlangUnknown
@@ -869,12 +917,13 @@ public:
struct Desc
{
- Type type;
- Format format;
+ Type type;
+ Format format;
// Required fields for `RenderTarget` and `DepthStencil` views.
RenderTargetDesc renderTarget;
- // Specifies the range of a texture resource for a ShaderRsource/UnorderedAccess/RenderTarget/DepthStencil view.
+ // Specifies the range of a texture resource for a
+ // ShaderRsource/UnorderedAccess/RenderTarget/DepthStencil view.
SubresourceRange subresourceRange;
// Specifies the range of a buffer resource for a ShaderResource/UnorderedAccess view.
BufferRange bufferRange;
@@ -882,15 +931,18 @@ public:
virtual SLANG_NO_THROW Desc* SLANG_MCALL getViewDesc() = 0;
/// Returns a native API handle representing this resource view object.
- /// When using D3D12, this will be a D3D12_CPU_DESCRIPTOR_HANDLE or a buffer device address depending
- /// on the type of the resource view.
- /// When using Vulkan, this will be a VkImageView, VkBufferView, VkAccelerationStructure or a VkBuffer
- /// depending on the type of the resource view.
+ /// When using D3D12, this will be a D3D12_CPU_DESCRIPTOR_HANDLE or a buffer device address
+ /// depending on the type of the resource view. When using Vulkan, this will be a VkImageView,
+ /// VkBufferView, VkAccelerationStructure or a VkBuffer depending on the type of the resource
+ /// view.
virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outNativeHandle) = 0;
};
-#define SLANG_UUID_IResourceView \
- { \
- 0x7b6c4926, 0x884, 0x408c, { 0xad, 0x8a, 0x50, 0x3a, 0x8e, 0x23, 0x98, 0xa4 } \
+#define SLANG_UUID_IResourceView \
+ { \
+ 0x7b6c4926, 0x884, 0x408c, \
+ { \
+ 0xad, 0x8a, 0x50, 0x3a, 0x8e, 0x23, 0x98, 0xa4 \
+ } \
}
class IAccelerationStructure : public IResourceView
@@ -920,7 +972,8 @@ public:
enum class GeometryType
{
- Triangles, ProcedurePrimitives
+ Triangles,
+ ProcedurePrimitives
};
struct GeometryFlags
@@ -1049,9 +1102,12 @@ public:
virtual SLANG_NO_THROW DeviceAddress SLANG_MCALL getDeviceAddress() = 0;
};
-#define SLANG_UUID_IAccelerationStructure \
- { \
- 0xa5cdda3c, 0x1d4e, 0x4df7, { 0x8e, 0xf2, 0xb7, 0x3f, 0xce, 0x4, 0xde, 0x3b } \
+#define SLANG_UUID_IAccelerationStructure \
+ { \
+ 0xa5cdda3c, 0x1d4e, 0x4df7, \
+ { \
+ 0x8e, 0xf2, 0xb7, 0x3f, 0xce, 0x4, 0xde, 0x3b \
+ } \
}
class IFence : public ISlangUnknown
@@ -1072,9 +1128,12 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL getSharedHandle(InteropHandle* outHandle) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outNativeHandle) = 0;
};
-#define SLANG_UUID_IFence \
- { \
- 0x7fe1c283, 0xd3f4, 0x48ed, { 0xaa, 0xf3, 0x1, 0x51, 0x96, 0x4e, 0x7c, 0xb5 } \
+#define SLANG_UUID_IFence \
+ { \
+ 0x7fe1c283, 0xd3f4, 0x48ed, \
+ { \
+ 0xaa, 0xf3, 0x1, 0x51, 0x96, 0x4e, 0x7c, 0xb5 \
+ } \
}
struct ShaderOffset
@@ -1088,14 +1147,11 @@ struct ShaderOffset
}
bool operator==(const ShaderOffset& other) const
{
- return uniformOffset == other.uniformOffset
- && bindingRangeIndex == other.bindingRangeIndex
- && bindingArrayIndex == other.bindingArrayIndex;
- }
- bool operator!=(const ShaderOffset& other) const
- {
- return !this->operator==(other);
+ return uniformOffset == other.uniformOffset &&
+ bindingRangeIndex == other.bindingRangeIndex &&
+ bindingArrayIndex == other.bindingArrayIndex;
}
+ bool operator!=(const ShaderOffset& other) const { return !this->operator==(other); }
bool operator<(const ShaderOffset& other) const
{
if (bindingRangeIndex < other.bindingRangeIndex)
@@ -1115,7 +1171,9 @@ struct ShaderOffset
enum class ShaderObjectContainerType
{
- None, Array, StructuredBuffer
+ None,
+ Array,
+ StructuredBuffer
};
class IShaderObject : public ISlangUnknown
@@ -1125,38 +1183,40 @@ public:
virtual SLANG_NO_THROW ShaderObjectContainerType SLANG_MCALL getContainerType() = 0;
virtual SLANG_NO_THROW GfxCount SLANG_MCALL getEntryPointCount() = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- getEntryPoint(GfxIndex index, IShaderObject** entryPoint) = 0;
+ getEntryPoint(GfxIndex index, IShaderObject** entryPoint) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- setData(ShaderOffset const& offset, void const* data, Size size) = 0;
+ setData(ShaderOffset const& offset, void const* data, Size size) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- getObject(ShaderOffset const& offset, IShaderObject** object) = 0;
+ getObject(ShaderOffset const& offset, IShaderObject** object) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- setObject(ShaderOffset const& offset, IShaderObject* object) = 0;
+ setObject(ShaderOffset const& offset, IShaderObject* object) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- setResource(ShaderOffset const& offset, IResourceView* resourceView) = 0;
+ setResource(ShaderOffset const& offset, IResourceView* resourceView) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- setSampler(ShaderOffset const& offset, ISamplerState* sampler) = 0;
+ setSampler(ShaderOffset const& offset, ISamplerState* sampler) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL setCombinedTextureSampler(
- ShaderOffset const& offset, IResourceView* textureView, ISamplerState* sampler) = 0;
+ ShaderOffset const& offset,
+ IResourceView* textureView,
+ ISamplerState* sampler) = 0;
- /// Manually overrides the specialization argument for the sub-object binding at `offset`.
- /// Specialization arguments are passed to the shader compiler to specialize the type
- /// of interface-typed shader parameters.
+ /// Manually overrides the specialization argument for the sub-object binding at `offset`.
+ /// Specialization arguments are passed to the shader compiler to specialize the type
+ /// of interface-typed shader parameters.
virtual SLANG_NO_THROW Result SLANG_MCALL setSpecializationArgs(
ShaderOffset const& offset,
const slang::SpecializationArg* args,
GfxCount count) = 0;
- virtual SLANG_NO_THROW Result SLANG_MCALL getCurrentVersion(
- ITransientResourceHeap* transientHeap,
- IShaderObject** outObject) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getCurrentVersion(ITransientResourceHeap* transientHeap, IShaderObject** outObject) = 0;
virtual SLANG_NO_THROW const void* SLANG_MCALL getRawData() = 0;
virtual SLANG_NO_THROW Size SLANG_MCALL getSize() = 0;
- /// Use the provided constant buffer instead of the internally created one.
- virtual SLANG_NO_THROW Result SLANG_MCALL setConstantBufferOverride(IBufferResource* constantBuffer) = 0;
+ /// Use the provided constant buffer instead of the internally created one.
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ setConstantBufferOverride(IBufferResource* constantBuffer) = 0;
inline ComPtr<IShaderObject> getObject(ShaderOffset const& offset)
@@ -1172,9 +1232,12 @@ public:
return entryPoint;
}
};
-#define SLANG_UUID_IShaderObject \
- { \
- 0xc1fa997e, 0x5ca2, 0x45ae, { 0x9b, 0xcb, 0xc4, 0x35, 0x9e, 0x85, 0x5, 0x85 } \
+#define SLANG_UUID_IShaderObject \
+ { \
+ 0xc1fa997e, 0x5ca2, 0x45ae, \
+ { \
+ 0x9b, 0xcb, 0xc4, 0x35, 0x9e, 0x85, 0x5, 0x85 \
+ } \
}
enum class StencilOp : uint8_t
@@ -1210,23 +1273,23 @@ enum class FrontFaceMode : uint8_t
struct DepthStencilOpDesc
{
- StencilOp stencilFailOp = StencilOp::Keep;
- StencilOp stencilDepthFailOp = StencilOp::Keep;
- StencilOp stencilPassOp = StencilOp::Keep;
- ComparisonFunc stencilFunc = ComparisonFunc::Always;
+ StencilOp stencilFailOp = StencilOp::Keep;
+ StencilOp stencilDepthFailOp = StencilOp::Keep;
+ StencilOp stencilPassOp = StencilOp::Keep;
+ ComparisonFunc stencilFunc = ComparisonFunc::Always;
};
struct DepthStencilDesc
{
- bool depthTestEnable = false;
- bool depthWriteEnable = true;
- ComparisonFunc depthFunc = ComparisonFunc::Less;
+ bool depthTestEnable = false;
+ bool depthWriteEnable = true;
+ ComparisonFunc depthFunc = ComparisonFunc::Less;
- bool stencilEnable = false;
- uint32_t stencilReadMask = 0xFFFFFFFF;
- uint32_t stencilWriteMask = 0xFFFFFFFF;
- DepthStencilOpDesc frontFace;
- DepthStencilOpDesc backFace;
+ bool stencilEnable = false;
+ uint32_t stencilReadMask = 0xFFFFFFFF;
+ uint32_t stencilWriteMask = 0xFFFFFFFF;
+ DepthStencilOpDesc frontFace;
+ DepthStencilOpDesc backFace;
uint32_t stencilRef = 0; // TODO: this should be removed
};
@@ -1284,24 +1347,24 @@ enum class BlendFactor
namespace RenderTargetWriteMask
{
- typedef uint8_t Type;
- enum
- {
- EnableNone = 0,
- EnableRed = 0x01,
- EnableGreen = 0x02,
- EnableBlue = 0x04,
- EnableAlpha = 0x08,
- EnableAll = 0x0F,
- };
+typedef uint8_t Type;
+enum
+{
+ EnableNone = 0,
+ EnableRed = 0x01,
+ EnableGreen = 0x02,
+ EnableBlue = 0x04,
+ EnableAlpha = 0x08,
+ EnableAll = 0x0F,
};
+}; // namespace RenderTargetWriteMask
typedef RenderTargetWriteMask::Type RenderTargetWriteMaskT;
struct AspectBlendDesc
{
- BlendFactor srcFactor = BlendFactor::One;
- BlendFactor dstFactor = BlendFactor::Zero;
- BlendOp op = BlendOp::Add;
+ BlendFactor srcFactor = BlendFactor::One;
+ BlendFactor dstFactor = BlendFactor::Zero;
+ BlendOp op = BlendOp::Add;
};
struct TargetBlendDesc
@@ -1309,16 +1372,16 @@ struct TargetBlendDesc
AspectBlendDesc color;
AspectBlendDesc alpha;
bool enableBlend = false;
- LogicOp logicOp = LogicOp::NoOp;
- RenderTargetWriteMaskT writeMask = RenderTargetWriteMask::EnableAll;
+ LogicOp logicOp = LogicOp::NoOp;
+ RenderTargetWriteMaskT writeMask = RenderTargetWriteMask::EnableAll;
};
struct BlendDesc
{
- TargetBlendDesc targets[kMaxRenderTargetCount];
- GfxCount targetCount = 0;
+ TargetBlendDesc targets[kMaxRenderTargetCount];
+ GfxCount targetCount = 0;
- bool alphaToCoverageEnable = false;
+ bool alphaToCoverageEnable = false;
};
class IFramebufferLayout : public ISlangUnknown
@@ -1336,26 +1399,29 @@ public:
TargetLayout* depthStencil = nullptr;
};
};
-#define SLANG_UUID_IFramebufferLayout \
- { \
- 0xa838785, 0xc13a, 0x4832, { 0xad, 0x88, 0x64, 0x6, 0xb5, 0x4b, 0x5e, 0xba } \
+#define SLANG_UUID_IFramebufferLayout \
+ { \
+ 0xa838785, 0xc13a, 0x4832, \
+ { \
+ 0xad, 0x88, 0x64, 0x6, 0xb5, 0x4b, 0x5e, 0xba \
+ } \
}
struct GraphicsPipelineStateDesc
{
- IShaderProgram* program = nullptr;
+ IShaderProgram* program = nullptr;
- IInputLayout* inputLayout = nullptr;
+ IInputLayout* inputLayout = nullptr;
IFramebufferLayout* framebufferLayout = nullptr;
- PrimitiveType primitiveType = PrimitiveType::Triangle;
- DepthStencilDesc depthStencil;
- RasterizerDesc rasterizer;
- BlendDesc blend;
+ PrimitiveType primitiveType = PrimitiveType::Triangle;
+ DepthStencilDesc depthStencil;
+ RasterizerDesc rasterizer;
+ BlendDesc blend;
};
struct ComputePipelineStateDesc
{
- IShaderProgram* program = nullptr;
+ IShaderProgram* program = nullptr;
void* d3d12RootSignatureOverride = nullptr;
};
@@ -1394,8 +1460,8 @@ public:
// Specifies the bytes to overwrite into a record in the shader table.
struct ShaderRecordOverwrite
{
- Offset offset; // Offset within the shader record.
- Size size; // Number of bytes to overwrite.
+ Offset offset; // Offset within the shader record.
+ Size size; // Number of bytes to overwrite.
uint8_t data[8]; // Content to overwrite.
};
@@ -1420,9 +1486,12 @@ public:
IShaderProgram* program;
};
};
-#define SLANG_UUID_IShaderTable \
- { \
- 0xa721522c, 0xdf31, 0x4c2f, { 0xa5, 0xe7, 0x3b, 0xe0, 0x12, 0x4b, 0x31, 0x78 } \
+#define SLANG_UUID_IShaderTable \
+ { \
+ 0xa721522c, 0xdf31, 0x4c2f, \
+ { \
+ 0xa5, 0xe7, 0x3b, 0xe0, 0x12, 0x4b, 0x31, 0x78 \
+ } \
}
class IPipelineState : public ISlangUnknown
@@ -1430,9 +1499,12 @@ class IPipelineState : public ISlangUnknown
public:
virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outHandle) = 0;
};
-#define SLANG_UUID_IPipelineState \
- { \
- 0xca7e57d, 0x8a90, 0x44f3, { 0xbd, 0xb1, 0xfe, 0x9b, 0x35, 0x3f, 0x5a, 0x72 } \
+#define SLANG_UUID_IPipelineState \
+ { \
+ 0xca7e57d, 0x8a90, 0x44f3, \
+ { \
+ 0xbd, 0xb1, 0xfe, 0x9b, 0x35, 0x3f, 0x5a, 0x72 \
+ } \
}
@@ -1450,8 +1522,8 @@ struct Viewport
float originY = 0.0f;
float extentX = 0.0f;
float extentY = 0.0f;
- float minZ = 0.0f;
- float maxZ = 1.0f;
+ float minZ = 0.0f;
+ float maxZ = 1.0f;
};
class IFramebuffer : public ISlangUnknown
@@ -1465,9 +1537,12 @@ public:
IFramebufferLayout* layout;
};
};
-#define SLANG_UUID_IFrameBuffer \
- { \
- 0xf0c0d9a, 0x4ef3, 0x4e18, { 0x9b, 0xa9, 0x34, 0x60, 0xea, 0x69, 0x87, 0x95 } \
+#define SLANG_UUID_IFrameBuffer \
+ { \
+ 0xf0c0d9a, 0x4ef3, 0x4e18, \
+ { \
+ 0x9b, 0xa9, 0x34, 0x60, 0xea, 0x69, 0x87, 0x95 \
+ } \
}
struct WindowHandle
@@ -1509,7 +1584,8 @@ struct FaceMask
{
enum Enum
{
- Front = 1, Back = 2
+ Front = 1,
+ Back = 2
};
};
@@ -1518,11 +1594,14 @@ class IRenderPassLayout : public ISlangUnknown
public:
enum class TargetLoadOp
{
- Load, Clear, DontCare
+ Load,
+ Clear,
+ DontCare
};
enum class TargetStoreOp
{
- Store, DontCare
+ Store,
+ DontCare
};
struct TargetAccessDesc
{
@@ -1541,9 +1620,12 @@ public:
TargetAccessDesc* depthStencilAccess = nullptr;
};
};
-#define SLANG_UUID_IRenderPassLayout \
- { \
- 0xdaab0b1a, 0xf45d, 0x4ae9, { 0xbf, 0x2c, 0xe0, 0xbb, 0x76, 0x7d, 0xfa, 0xd1 } \
+#define SLANG_UUID_IRenderPassLayout \
+ { \
+ 0xdaab0b1a, 0xf45d, 0x4ae9, \
+ { \
+ 0xbf, 0x2c, 0xe0, 0xbb, 0x76, 0x7d, 0xfa, 0xd1 \
+ } \
}
enum class QueryType
@@ -1562,20 +1644,33 @@ public:
QueryType type;
GfxCount count;
};
+
public:
- virtual SLANG_NO_THROW Result SLANG_MCALL getResult(GfxIndex queryIndex, GfxCount count, uint64_t* data) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getResult(GfxIndex queryIndex, GfxCount count, uint64_t* data) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL reset() = 0;
};
-#define SLANG_UUID_IQueryPool \
- { 0xc2cc3784, 0x12da, 0x480a, { 0xa8, 0x74, 0x8b, 0x31, 0x96, 0x1c, 0xa4, 0x36 } }
+#define SLANG_UUID_IQueryPool \
+ { \
+ 0xc2cc3784, 0x12da, 0x480a, \
+ { \
+ 0xa8, 0x74, 0x8b, 0x31, 0x96, 0x1c, 0xa4, 0x36 \
+ } \
+ }
class ICommandEncoder : public ISlangUnknown
{
- SLANG_COM_INTERFACE( 0x77ea6383, 0xbe3d, 0x40aa, { 0x8b, 0x45, 0xfd, 0xf0, 0xd7, 0x5b, 0xfa, 0x34 });
+ SLANG_COM_INTERFACE(
+ 0x77ea6383,
+ 0xbe3d,
+ 0x40aa,
+ {0x8b, 0x45, 0xfd, 0xf0, 0xd7, 0x5b, 0xfa, 0x34});
+
public:
virtual SLANG_NO_THROW void SLANG_MCALL endEncoding() = 0;
- virtual SLANG_NO_THROW void SLANG_MCALL writeTimestamp(IQueryPool* queryPool, GfxIndex queryIndex) = 0;
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ writeTimestamp(IQueryPool* queryPool, GfxIndex queryIndex) = 0;
};
struct IndirectDispatchArguments
@@ -1622,7 +1717,11 @@ struct ClearResourceViewFlags
class IResourceCommandEncoder : public ICommandEncoder
{
// {F99A00E9-ED50-4088-8A0E-3B26755031EA}
- SLANG_COM_INTERFACE(0xf99a00e9, 0xed50, 0x4088, { 0x8a, 0xe, 0x3b, 0x26, 0x75, 0x50, 0x31, 0xea });
+ SLANG_COM_INTERFACE(
+ 0xf99a00e9,
+ 0xed50,
+ 0x4088,
+ {0x8a, 0xe, 0x3b, 0x26, 0x75, 0x50, 0x31, 0xea});
public:
virtual SLANG_NO_THROW void SLANG_MCALL copyBuffer(
@@ -1665,18 +1764,26 @@ public:
ITextureResource::SubresourceData* subResourceData,
GfxCount subResourceDataCount) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL
- uploadBufferData(IBufferResource* dst, Offset offset, Size size, void* data) = 0;
+ uploadBufferData(IBufferResource* dst, Offset offset, Size size, void* data) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL textureBarrier(
- GfxCount count, ITextureResource* const* textures, ResourceState src, ResourceState dst) = 0;
+ GfxCount count,
+ ITextureResource* const* textures,
+ ResourceState src,
+ ResourceState dst) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL textureSubresourceBarrier(
ITextureResource* texture,
SubresourceRange subresourceRange,
ResourceState src,
ResourceState dst) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL bufferBarrier(
- GfxCount count, IBufferResource* const* buffers, ResourceState src, ResourceState dst) = 0;
+ GfxCount count,
+ IBufferResource* const* buffers,
+ ResourceState src,
+ ResourceState dst) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL clearResourceView(
- IResourceView* view, ClearValue* clearValue, ClearResourceViewFlags::Enum flags) = 0;
+ IResourceView* view,
+ ClearValue* clearValue,
+ ClearResourceViewFlags::Enum flags) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL resolveResource(
ITextureResource* source,
ResourceState sourceState,
@@ -1690,7 +1797,8 @@ public:
GfxCount count,
IBufferResource* buffer,
Offset offset) = 0;
- virtual SLANG_NO_THROW void SLANG_MCALL beginDebugEvent(const char* name, float rgbColor[3]) = 0;
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ beginDebugEvent(const char* name, float rgbColor[3]) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL endDebugEvent() = 0;
inline void textureBarrier(ITextureResource* texture, ResourceState src, ResourceState dst)
{
@@ -1705,7 +1813,11 @@ public:
class IRenderCommandEncoder : public IResourceCommandEncoder
{
// {7A8D56D0-53E6-4AD6-85F7-D14DC110FDCE}
- SLANG_COM_INTERFACE(0x7a8d56d0, 0x53e6, 0x4ad6, { 0x85, 0xf7, 0xd1, 0x4d, 0xc1, 0x10, 0xfd, 0xce })
+ SLANG_COM_INTERFACE(
+ 0x7a8d56d0,
+ 0x53e6,
+ 0x4ad6,
+ {0x85, 0xf7, 0xd1, 0x4d, 0xc1, 0x10, 0xfd, 0xce})
public:
// Sets the current pipeline state. This method returns a transient shader object for
// writing shader parameters. This shader object will not retain any resources or
@@ -1713,7 +1825,7 @@ public:
// resources or shader objects that is set into `outRootShaderObject` stays alive during
// the execution of the command buffer.
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipeline(IPipelineState* state, IShaderObject** outRootShaderObject) = 0;
+ bindPipeline(IPipelineState* state, IShaderObject** outRootShaderObject) = 0;
inline IShaderObject* bindPipeline(IPipelineState* state)
{
IShaderObject* rootObject = nullptr;
@@ -1723,12 +1835,12 @@ public:
// Sets the current pipeline state along with a pre-created mutable root shader object.
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipelineWithRootObject(IPipelineState* state, IShaderObject* rootObject) = 0;
+ bindPipelineWithRootObject(IPipelineState* state, IShaderObject* rootObject) = 0;
- virtual SLANG_NO_THROW void
- SLANG_MCALL setViewports(GfxCount count, const Viewport* viewports) = 0;
- virtual SLANG_NO_THROW void
- SLANG_MCALL setScissorRects(GfxCount count, const ScissorRect* scissors) = 0;
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setViewports(GfxCount count, const Viewport* viewports) = 0;
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setScissorRects(GfxCount count, const ScissorRect* scissors) = 0;
/// Sets the viewport, and sets the scissor rect to match the viewport.
inline void setViewportAndScissor(Viewport const& viewport)
@@ -1746,18 +1858,17 @@ public:
GfxCount slotCount,
IBufferResource* const* buffers,
const Offset* offsets) = 0;
- inline void setVertexBuffer(
- GfxIndex slot, IBufferResource* buffer, Offset offset = 0)
+ inline void setVertexBuffer(GfxIndex slot, IBufferResource* buffer, Offset offset = 0)
{
setVertexBuffers(slot, 1, &buffer, &offset);
}
virtual SLANG_NO_THROW void SLANG_MCALL
- setIndexBuffer(IBufferResource* buffer, Format indexFormat, Offset offset = 0) = 0;
+ setIndexBuffer(IBufferResource* buffer, Format indexFormat, Offset offset = 0) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- draw(GfxCount vertexCount, GfxIndex startVertex = 0) = 0;
+ draw(GfxCount vertexCount, GfxIndex startVertex = 0) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- drawIndexed(GfxCount indexCount, GfxIndex startIndex = 0, GfxIndex baseVertex = 0) = 0;
+ drawIndexed(GfxCount indexCount, GfxIndex startIndex = 0, GfxIndex baseVertex = 0) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL drawIndirect(
GfxCount maxDrawCount,
IBufferResource* argBuffer,
@@ -1772,7 +1883,9 @@ public:
Offset countOffset = 0) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL setStencilReference(uint32_t referenceValue) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL setSamplePositions(
- GfxCount samplesPerPixel, GfxCount pixelCount, const SamplePosition* samplePositions) = 0;
+ GfxCount samplesPerPixel,
+ GfxCount pixelCount,
+ const SamplePosition* samplePositions) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL drawInstanced(
GfxCount vertexCount,
GfxCount instanceCount,
@@ -1784,14 +1897,17 @@ public:
GfxIndex startIndexLocation,
GfxIndex baseVertexLocation,
GfxIndex startInstanceLocation) = 0;
- virtual SLANG_NO_THROW Result SLANG_MCALL
- drawMeshTasks(int x, int y, int z) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL drawMeshTasks(int x, int y, int z) = 0;
};
class IComputeCommandEncoder : public IResourceCommandEncoder
{
// {88AA9322-82F7-4FE6-A68A-29C7FE798737}
- SLANG_COM_INTERFACE(0x88aa9322, 0x82f7, 0x4fe6, { 0xa6, 0x8a, 0x29, 0xc7, 0xfe, 0x79, 0x87, 0x37 })
+ SLANG_COM_INTERFACE(
+ 0x88aa9322,
+ 0x82f7,
+ 0x4fe6,
+ {0xa6, 0x8a, 0x29, 0xc7, 0xfe, 0x79, 0x87, 0x37})
public:
// Sets the current pipeline state. This method returns a transient shader object for
@@ -1800,7 +1916,7 @@ public:
// resources or shader objects that is set into `outRooShaderObject` stays alive during
// the execution of the command buffer.
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipeline(IPipelineState* state, IShaderObject** outRootShaderObject) = 0;
+ bindPipeline(IPipelineState* state, IShaderObject** outRootShaderObject) = 0;
inline IShaderObject* bindPipeline(IPipelineState* state)
{
IShaderObject* rootObject = nullptr;
@@ -1809,14 +1925,16 @@ public:
}
// Sets the current pipeline state along with a pre-created mutable root shader object.
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipelineWithRootObject(IPipelineState* state, IShaderObject* rootObject) = 0;
+ bindPipelineWithRootObject(IPipelineState* state, IShaderObject* rootObject) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL dispatchCompute(int x, int y, int z) = 0;
- virtual SLANG_NO_THROW Result SLANG_MCALL dispatchComputeIndirect(IBufferResource* cmdBuffer, Offset offset) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ dispatchComputeIndirect(IBufferResource* cmdBuffer, Offset offset) = 0;
};
enum class AccelerationStructureCopyMode
{
- Clone, Compact
+ Clone,
+ Compact
};
struct AccelerationStructureQueryDesc
@@ -1830,7 +1948,11 @@ struct AccelerationStructureQueryDesc
class IRayTracingCommandEncoder : public IResourceCommandEncoder
{
- SLANG_COM_INTERFACE(0x9a672b87, 0x5035, 0x45e3, { 0x96, 0x7c, 0x1f, 0x85, 0xcd, 0xb3, 0x63, 0x4f })
+ SLANG_COM_INTERFACE(
+ 0x9a672b87,
+ 0x5035,
+ 0x45e3,
+ {0x96, 0x7c, 0x1f, 0x85, 0xcd, 0xb3, 0x63, 0x4f})
public:
virtual SLANG_NO_THROW void SLANG_MCALL buildAccelerationStructure(
const IAccelerationStructure::BuildDesc& desc,
@@ -1846,18 +1968,19 @@ public:
GfxCount queryCount,
AccelerationStructureQueryDesc* queryDescs) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL
- serializeAccelerationStructure(DeviceAddress dest, IAccelerationStructure* source) = 0;
+ serializeAccelerationStructure(DeviceAddress dest, IAccelerationStructure* source) = 0;
virtual SLANG_NO_THROW void SLANG_MCALL
- deserializeAccelerationStructure(IAccelerationStructure* dest, DeviceAddress source) = 0;
+ deserializeAccelerationStructure(IAccelerationStructure* dest, DeviceAddress source) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipeline(IPipelineState* state, IShaderObject** outRootObject) = 0;
+ bindPipeline(IPipelineState* state, IShaderObject** outRootObject) = 0;
// Sets the current pipeline state along with a pre-created mutable root shader object.
virtual SLANG_NO_THROW Result SLANG_MCALL
- bindPipelineWithRootObject(IPipelineState* state, IShaderObject* rootObject) = 0;
+ bindPipelineWithRootObject(IPipelineState* state, IShaderObject* rootObject) = 0;
/// Issues a dispatch command to start ray tracing workload with a ray tracing pipeline.
- /// `rayGenShaderIndex` specifies the index into the shader table that identifies the ray generation shader.
+ /// `rayGenShaderIndex` specifies the index into the shader table that identifies the ray
+ /// generation shader.
virtual SLANG_NO_THROW Result SLANG_MCALL dispatchRays(
GfxIndex rayGenShaderIndex,
IShaderTable* shaderTable,
@@ -1878,8 +2001,9 @@ public:
IRenderPassLayout* renderPass,
IFramebuffer* framebuffer,
IRenderCommandEncoder** outEncoder) = 0;
- inline IRenderCommandEncoder*
- encodeRenderCommands(IRenderPassLayout* renderPass, IFramebuffer* framebuffer)
+ inline IRenderCommandEncoder* encodeRenderCommands(
+ IRenderPassLayout* renderPass,
+ IFramebuffer* framebuffer)
{
IRenderCommandEncoder* result;
encodeRenderCommands(renderPass, framebuffer, &result);
@@ -1887,7 +2011,7 @@ public:
}
virtual SLANG_NO_THROW void SLANG_MCALL
- encodeComputeCommands(IComputeCommandEncoder** outEncoder) = 0;
+ encodeComputeCommands(IComputeCommandEncoder** outEncoder) = 0;
inline IComputeCommandEncoder* encodeComputeCommands()
{
IComputeCommandEncoder* result;
@@ -1896,7 +2020,7 @@ public:
}
virtual SLANG_NO_THROW void SLANG_MCALL
- encodeResourceCommands(IResourceCommandEncoder** outEncoder) = 0;
+ encodeResourceCommands(IResourceCommandEncoder** outEncoder) = 0;
inline IResourceCommandEncoder* encodeResourceCommands()
{
IResourceCommandEncoder* result;
@@ -1905,7 +2029,7 @@ public:
}
virtual SLANG_NO_THROW void SLANG_MCALL
- encodeRayTracingCommands(IRayTracingCommandEncoder** outEncoder) = 0;
+ encodeRayTracingCommands(IRayTracingCommandEncoder** outEncoder) = 0;
inline IRayTracingCommandEncoder* encodeRayTracingCommands()
{
IRayTracingCommandEncoder* result;
@@ -1917,9 +2041,12 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL getNativeHandle(InteropHandle* outHandle) = 0;
};
-#define SLANG_UUID_ICommandBuffer \
- { \
- 0x5d56063f, 0x91d4, 0x4723, { 0xa7, 0xa7, 0x7a, 0x15, 0xaf, 0x93, 0xeb, 0x48 } \
+#define SLANG_UUID_ICommandBuffer \
+ { \
+ 0x5d56063f, 0x91d4, 0x4723, \
+ { \
+ 0xa7, 0xa7, 0x7a, 0x15, 0xaf, 0x93, 0xeb, 0x48 \
+ } \
}
class ICommandBufferD3D12 : public ICommandBuffer
@@ -1928,9 +2055,12 @@ public:
virtual SLANG_NO_THROW void SLANG_MCALL invalidateDescriptorHeapBinding() = 0;
virtual SLANG_NO_THROW void SLANG_MCALL ensureInternalDescriptorHeapsBound() = 0;
};
-#define SLANG_UUID_ICommandBufferD3D12 \
- { \
- 0xd56b7616, 0x6c14, 0x4841, { 0x9d, 0x9c, 0x7b, 0x7f, 0xdb, 0x9f, 0xd9, 0xb8 } \
+#define SLANG_UUID_ICommandBufferD3D12 \
+ { \
+ 0xd56b7616, 0x6c14, 0x4841, \
+ { \
+ 0x9d, 0x9c, 0x7b, 0x7f, 0xdb, 0x9f, 0xd9, 0xb8 \
+ } \
}
class ICommandQueue : public ISlangUnknown
@@ -1956,7 +2086,9 @@ public:
IFence* fenceToSignal,
uint64_t newFenceValue) = 0;
inline void executeCommandBuffer(
- ICommandBuffer* commandBuffer, IFence* fenceToSignal = nullptr, uint64_t newFenceValue = 0)
+ ICommandBuffer* commandBuffer,
+ IFence* fenceToSignal = nullptr,
+ uint64_t newFenceValue = 0)
{
executeCommandBuffers(1, &commandBuffer, fenceToSignal, newFenceValue);
}
@@ -1967,11 +2099,14 @@ public:
/// Queues a device side wait for the given fences.
virtual SLANG_NO_THROW Result SLANG_MCALL
- waitForFenceValuesOnDevice(GfxCount fenceCount, IFence** fences, uint64_t* waitValues) = 0;
+ waitForFenceValuesOnDevice(GfxCount fenceCount, IFence** fences, uint64_t* waitValues) = 0;
};
-#define SLANG_UUID_ICommandQueue \
- { \
- 0x14e2bed0, 0xad0, 0x4dc8, { 0xb3, 0x41, 0x6, 0x3f, 0xe7, 0x2d, 0xbf, 0xe } \
+#define SLANG_UUID_ICommandQueue \
+ { \
+ 0x14e2bed0, 0xad0, 0x4dc8, \
+ { \
+ 0xb3, 0x41, 0x6, 0x3f, 0xe7, 0x2d, 0xbf, 0xe \
+ } \
}
class ITransientResourceHeap : public ISlangUnknown
@@ -2002,8 +2137,8 @@ public:
// In most situations this method should be called at the beginning of each frame.
virtual SLANG_NO_THROW Result SLANG_MCALL synchronizeAndReset() = 0;
- // Must be called when the application has done using this heap to issue commands. In most situations
- // this method should be called at the end of each frame.
+ // Must be called when the application has done using this heap to issue commands. In most
+ // situations this method should be called at the end of each frame.
virtual SLANG_NO_THROW Result SLANG_MCALL finish() = 0;
// Command buffers are one-time use. Once it is submitted to the queue via
@@ -2012,7 +2147,7 @@ public:
// that only one command buffer maybe recorded at a time. User must finish recording a command
// buffer before creating another command buffer.
virtual SLANG_NO_THROW Result SLANG_MCALL
- createCommandBuffer(ICommandBuffer** outCommandBuffer) = 0;
+ createCommandBuffer(ICommandBuffer** outCommandBuffer) = 0;
inline ComPtr<ICommandBuffer> createCommandBuffer()
{
ComPtr<ICommandBuffer> result;
@@ -2020,9 +2155,12 @@ public:
return result;
}
};
-#define SLANG_UUID_ITransientResourceHeap \
- { \
- 0xcd48bd29, 0xee72, 0x41b8, { 0xbc, 0xff, 0xa, 0x2b, 0x3a, 0xaa, 0x6d, 0xeb } \
+#define SLANG_UUID_ITransientResourceHeap \
+ { \
+ 0xcd48bd29, 0xee72, 0x41b8, \
+ { \
+ 0xbc, 0xff, 0xa, 0x2b, 0x3a, 0xaa, 0x6d, 0xeb \
+ } \
}
class ITransientResourceHeapD3D12 : public ISlangUnknown
@@ -2030,7 +2168,8 @@ class ITransientResourceHeapD3D12 : public ISlangUnknown
public:
enum class DescriptorType
{
- ResourceView, Sampler
+ ResourceView,
+ Sampler
};
virtual SLANG_NO_THROW Result SLANG_MCALL allocateTransientDescriptorTable(
DescriptorType type,
@@ -2038,9 +2177,12 @@ public:
Offset& outDescriptorOffset,
void** outD3DDescriptorHeapHandle) = 0;
};
-#define SLANG_UUID_ITransientResourceHeapD3D12 \
- { \
- 0x9bc6a8bc, 0x5f7a, 0x454a, { 0x93, 0xef, 0x3b, 0x10, 0x5b, 0xb7, 0x63, 0x7e } \
+#define SLANG_UUID_ITransientResourceHeapD3D12 \
+ { \
+ 0x9bc6a8bc, 0x5f7a, 0x454a, \
+ { \
+ 0x93, 0xef, 0x3b, 0x10, 0x5b, 0xb7, 0x63, 0x7e \
+ } \
}
class ISwapchain : public ISlangUnknown
@@ -2058,7 +2200,7 @@ public:
/// Returns the back buffer image at `index`.
virtual SLANG_NO_THROW Result SLANG_MCALL
- getImage(GfxIndex index, ITextureResource** outResource) = 0;
+ getImage(GfxIndex index, ITextureResource** outResource) = 0;
/// Present the next image in the swapchain.
virtual SLANG_NO_THROW Result SLANG_MCALL present() = 0;
@@ -2077,9 +2219,12 @@ public:
// Toggle full screen mode.
virtual SLANG_NO_THROW Result SLANG_MCALL setFullScreenMode(bool mode) = 0;
};
-#define SLANG_UUID_ISwapchain \
- { \
- 0xbe91ba6c, 0x784, 0x4308, { 0xa1, 0x0, 0x19, 0xc3, 0x66, 0x83, 0x44, 0xb2 } \
+#define SLANG_UUID_ISwapchain \
+ { \
+ 0xbe91ba6c, 0x784, 0x4308, \
+ { \
+ 0xa1, 0x0, 0x19, 0xc3, 0x66, 0x83, 0x44, 0xb2 \
+ } \
}
struct AdapterLUID
@@ -2093,10 +2238,7 @@ struct AdapterLUID
return false;
return true;
}
- bool operator!=(const AdapterLUID& other) const
- {
- return !this->operator==(other);
- }
+ bool operator!=(const AdapterLUID& other) const { return !this->operator==(other); }
};
struct AdapterInfo
@@ -2107,7 +2249,8 @@ struct AdapterInfo
// Unique identifier for the vendor (only available for D3D and Vulkan).
uint32_t vendorID;
- // Unique identifier for the physical device among devices from the vendor (only available for D3D and Vulkan)
+ // Unique identifier for the physical device among devices from the vendor (only available for
+ // D3D and Vulkan)
uint32_t deviceID;
// Logically unique identifier of the adapter.
@@ -2117,7 +2260,10 @@ struct AdapterInfo
class AdapterList
{
public:
- AdapterList(ISlangBlob* blob) : m_blob(blob) {}
+ AdapterList(ISlangBlob* blob)
+ : m_blob(blob)
+ {
+ }
const AdapterInfo* getAdapters() const
{
@@ -2199,17 +2345,21 @@ struct DeviceInfo
enum class DebugMessageType
{
- Info, Warning, Error
+ Info,
+ Warning,
+ Error
};
enum class DebugMessageSource
{
- Layer, Driver, Slang
+ Layer,
+ Driver,
+ Slang
};
class IDebugCallback
{
public:
virtual SLANG_NO_THROW void SLANG_MCALL
- handleMessage(DebugMessageType type, DebugMessageSource source, const char* message) = 0;
+ handleMessage(DebugMessageType type, DebugMessageSource source, const char* message) = 0;
};
class IDevice : public ISlangUnknown
@@ -2217,21 +2367,23 @@ class IDevice : public ISlangUnknown
public:
struct SlangDesc
{
- slang::IGlobalSession* slangGlobalSession = nullptr; // (optional) A slang global session object. If null will create automatically.
+ slang::IGlobalSession* slangGlobalSession =
+ nullptr; // (optional) A slang global session object. If null will create automatically.
SlangMatrixLayoutMode defaultMatrixLayoutMode = SLANG_MATRIX_LAYOUT_ROW_MAJOR;
char const* const* searchPaths = nullptr;
- GfxCount searchPathCount = 0;
+ GfxCount searchPathCount = 0;
slang::PreprocessorMacroDesc const* preprocessorMacros = nullptr;
- GfxCount preprocessorMacroCount = 0;
+ GfxCount preprocessorMacroCount = 0;
- const char* targetProfile = nullptr; // (optional) Target shader profile. If null this will be set to platform dependent default.
+ const char* targetProfile = nullptr; // (optional) Target shader profile. If null this will
+ // be set to platform dependent default.
SlangFloatingPointMode floatingPointMode = SLANG_FLOATING_POINT_MODE_DEFAULT;
SlangOptimizationLevel optimizationLevel = SLANG_OPTIMIZATION_LEVEL_DEFAULT;
SlangTargetFlags targetFlags = kDefaultTargetFlags;
- SlangLineDirectiveMode lineDirectiveMode = SLANG_LINE_DIRECTIVE_MODE_DEFAULT;\
+ SlangLineDirectiveMode lineDirectiveMode = SLANG_LINE_DIRECTIVE_MODE_DEFAULT;
};
struct ShaderCacheDesc
@@ -2251,9 +2403,10 @@ public:
{
// The underlying API/Platform of the device.
DeviceType deviceType = DeviceType::Default;
- // The device's handles (if they exist) and their associated API. For D3D12, this contains a single InteropHandle
- // for the ID3D12Device. For Vulkan, the first InteropHandle is the VkInstance, the second is the VkPhysicalDevice,
- // and the third is the VkDevice. For CUDA, this only contains a single value for the CUDADevice.
+ // The device's handles (if they exist) and their associated API. For D3D12, this contains a
+ // single InteropHandle for the ID3D12Device. For Vulkan, the first InteropHandle is the
+ // VkInstance, the second is the VkPhysicalDevice, and the third is the VkDevice. For CUDA,
+ // this only contains a single value for the CUDADevice.
InteropHandles existingDeviceHandles;
// LUID of the adapter to use. Use getGfxAdapters() to get a list of available adapters.
const AdapterLUID* adapterLUID = nullptr;
@@ -2274,16 +2427,20 @@ public:
void** extendedDescs = nullptr;
};
- virtual SLANG_NO_THROW Result SLANG_MCALL getNativeDeviceHandles(InteropHandles* outHandles) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getNativeDeviceHandles(InteropHandles* outHandles) = 0;
virtual SLANG_NO_THROW bool SLANG_MCALL hasFeature(const char* feature) = 0;
- /// Returns a list of features supported by the renderer.
- virtual SLANG_NO_THROW Result SLANG_MCALL getFeatures(const char** outFeatures, Size bufferSize, GfxCount* outFeatureCount) = 0;
+ /// Returns a list of features supported by the renderer.
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getFeatures(const char** outFeatures, Size bufferSize, GfxCount* outFeatureCount) = 0;
- virtual SLANG_NO_THROW Result SLANG_MCALL getFormatSupportedResourceStates(Format format, ResourceStateSet* outStates) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getFormatSupportedResourceStates(Format format, ResourceStateSet* outStates) = 0;
- virtual SLANG_NO_THROW Result SLANG_MCALL getSlangSession(slang::ISession** outSlangSession) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ getSlangSession(slang::ISession** outSlangSession) = 0;
inline ComPtr<slang::ISession> getSlangSession()
{
@@ -2303,26 +2460,27 @@ public:
return result;
}
- /// Create a texture resource.
- ///
- /// If `initData` is non-null, then it must point to an array of
- /// `ITextureResource::SubresourceData` with one element for each
- /// subresource of the texture being created.
- ///
- /// The number of subresources in a texture is:
- ///
- /// effectiveElementCount * mipLevelCount
- ///
- /// where the effective element count is computed as:
- ///
- /// effectiveElementCount = (isArray ? arrayElementCount : 1) * (isCube ? 6 : 1);
- ///
+ /// Create a texture resource.
+ ///
+ /// If `initData` is non-null, then it must point to an array of
+ /// `ITextureResource::SubresourceData` with one element for each
+ /// subresource of the texture being created.
+ ///
+ /// The number of subresources in a texture is:
+ ///
+ /// effectiveElementCount * mipLevelCount
+ ///
+ /// where the effective element count is computed as:
+ ///
+ /// effectiveElementCount = (isArray ? arrayElementCount : 1) * (isCube ? 6 : 1);
+ ///
virtual SLANG_NO_THROW Result SLANG_MCALL createTextureResource(
const ITextureResource::Desc& desc,
const ITextureResource::SubresourceData* initData,
ITextureResource** outResource) = 0;
- /// Create a texture resource. initData holds the initialize data to set the contents of the texture when constructed.
+ /// Create a texture resource. initData holds the initialize data to set the contents of the
+ /// texture when constructed.
inline SLANG_NO_THROW ComPtr<ITextureResource> createTextureResource(
const ITextureResource::Desc& desc,
const ITextureResource::SubresourceData* initData = nullptr)
@@ -2343,7 +2501,7 @@ public:
const Size size,
ITextureResource** outResource) = 0;
- /// Create a buffer resource
+ /// Create a buffer resource
virtual SLANG_NO_THROW Result SLANG_MCALL createBufferResource(
const IBufferResource::Desc& desc,
const void* initData,
@@ -2369,7 +2527,7 @@ public:
IBufferResource** outResource) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) = 0;
+ createSamplerState(ISamplerState::Desc const& desc, ISamplerState** outSampler) = 0;
inline ComPtr<ISamplerState> createSamplerState(ISamplerState::Desc const& desc)
{
@@ -2379,9 +2537,13 @@ public:
}
virtual SLANG_NO_THROW Result SLANG_MCALL createTextureView(
- ITextureResource* texture, IResourceView::Desc const& desc, IResourceView** outView) = 0;
+ ITextureResource* texture,
+ IResourceView::Desc const& desc,
+ IResourceView** outView) = 0;
- inline ComPtr<IResourceView> createTextureView(ITextureResource* texture, IResourceView::Desc const& desc)
+ inline ComPtr<IResourceView> createTextureView(
+ ITextureResource* texture,
+ IResourceView::Desc const& desc)
{
ComPtr<IResourceView> view;
SLANG_RETURN_NULL_ON_FAIL(createTextureView(texture, desc, view.writeRef()));
@@ -2395,15 +2557,18 @@ public:
IResourceView** outView) = 0;
inline ComPtr<IResourceView> createBufferView(
- IBufferResource* buffer, IBufferResource* counterBuffer, IResourceView::Desc const& desc)
+ IBufferResource* buffer,
+ IBufferResource* counterBuffer,
+ IResourceView::Desc const& desc)
{
ComPtr<IResourceView> view;
SLANG_RETURN_NULL_ON_FAIL(createBufferView(buffer, counterBuffer, desc, view.writeRef()));
return view;
}
- virtual SLANG_NO_THROW Result SLANG_MCALL
- createFramebufferLayout(IFramebufferLayout::Desc const& desc, IFramebufferLayout** outFrameBuffer) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL createFramebufferLayout(
+ IFramebufferLayout::Desc const& desc,
+ IFramebufferLayout** outFrameBuffer) = 0;
inline ComPtr<IFramebufferLayout> createFramebufferLayout(IFramebufferLayout::Desc const& desc)
{
ComPtr<IFramebufferLayout> fb;
@@ -2412,7 +2577,7 @@ public:
}
virtual SLANG_NO_THROW Result SLANG_MCALL
- createFramebuffer(IFramebuffer::Desc const& desc, IFramebuffer** outFrameBuffer) = 0;
+ createFramebuffer(IFramebuffer::Desc const& desc, IFramebuffer** outFrameBuffer) = 0;
inline ComPtr<IFramebuffer> createFramebuffer(IFramebuffer::Desc const& desc)
{
ComPtr<IFramebuffer> fb;
@@ -2431,7 +2596,9 @@ public:
}
virtual SLANG_NO_THROW Result SLANG_MCALL createSwapchain(
- ISwapchain::Desc const& desc, WindowHandle window, ISwapchain** outSwapchain) = 0;
+ ISwapchain::Desc const& desc,
+ WindowHandle window,
+ ISwapchain** outSwapchain) = 0;
inline ComPtr<ISwapchain> createSwapchain(ISwapchain::Desc const& desc, WindowHandle window)
{
ComPtr<ISwapchain> swapchain;
@@ -2439,8 +2606,8 @@ public:
return swapchain;
}
- virtual SLANG_NO_THROW Result SLANG_MCALL createInputLayout(
- IInputLayout::Desc const& desc, IInputLayout** outLayout) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ createInputLayout(IInputLayout::Desc const& desc, IInputLayout** outLayout) = 0;
inline ComPtr<IInputLayout> createInputLayout(IInputLayout::Desc const& desc)
{
@@ -2449,9 +2616,13 @@ public:
return layout;
}
- inline Result createInputLayout(Size vertexSize, InputElementDesc const* inputElements, GfxCount inputElementCount, IInputLayout** outLayout)
+ inline Result createInputLayout(
+ Size vertexSize,
+ InputElementDesc const* inputElements,
+ GfxCount inputElementCount,
+ IInputLayout** outLayout)
{
- VertexStreamDesc streamDesc = { vertexSize, InputSlotClass::PerVertex, 0 };
+ VertexStreamDesc streamDesc = {vertexSize, InputSlotClass::PerVertex, 0};
IInputLayout::Desc inputLayoutDesc = {};
inputLayoutDesc.inputElementCount = inputElementCount;
@@ -2461,15 +2632,19 @@ public:
return createInputLayout(inputLayoutDesc, outLayout);
}
- inline ComPtr<IInputLayout> createInputLayout(Size vertexSize, InputElementDesc const* inputElements, GfxCount inputElementCount)
+ inline ComPtr<IInputLayout> createInputLayout(
+ Size vertexSize,
+ InputElementDesc const* inputElements,
+ GfxCount inputElementCount)
{
ComPtr<IInputLayout> layout;
- SLANG_RETURN_NULL_ON_FAIL(createInputLayout(vertexSize, inputElements, inputElementCount, layout.writeRef()));
+ SLANG_RETURN_NULL_ON_FAIL(
+ createInputLayout(vertexSize, inputElements, inputElementCount, layout.writeRef()));
return layout;
}
virtual SLANG_NO_THROW Result SLANG_MCALL
- createCommandQueue(const ICommandQueue::Desc& desc, ICommandQueue** outQueue) = 0;
+ createCommandQueue(const ICommandQueue::Desc& desc, ICommandQueue** outQueue) = 0;
inline ComPtr<ICommandQueue> createCommandQueue(const ICommandQueue::Desc& desc)
{
ComPtr<ICommandQueue> queue;
@@ -2485,7 +2660,8 @@ public:
inline ComPtr<IShaderObject> createShaderObject(slang::TypeReflection* type)
{
ComPtr<IShaderObject> object;
- SLANG_RETURN_NULL_ON_FAIL(createShaderObject(type, ShaderObjectContainerType::None, object.writeRef()));
+ SLANG_RETURN_NULL_ON_FAIL(
+ createShaderObject(type, ShaderObjectContainerType::None, object.writeRef()));
return object;
}
@@ -2495,17 +2671,18 @@ public:
IShaderObject** outObject) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL createShaderObjectFromTypeLayout(
- slang::TypeLayoutReflection* typeLayout, IShaderObject** outObject) = 0;
+ slang::TypeLayoutReflection* typeLayout,
+ IShaderObject** outObject) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL createMutableShaderObjectFromTypeLayout(
- slang::TypeLayoutReflection* typeLayout, IShaderObject** outObject) = 0;
-
- virtual SLANG_NO_THROW Result SLANG_MCALL createMutableRootShaderObject(
- IShaderProgram* program,
+ slang::TypeLayoutReflection* typeLayout,
IShaderObject** outObject) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createShaderTable(const IShaderTable::Desc& desc, IShaderTable** outTable) = 0;
+ createMutableRootShaderObject(IShaderProgram* program, IShaderObject** outObject) = 0;
+
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ createShaderTable(const IShaderTable::Desc& desc, IShaderTable** outTable) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL createProgram(
const IShaderProgram::Desc& desc,
@@ -2525,23 +2702,20 @@ public:
ISlangBlob** outDiagnosticBlob = nullptr) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL createGraphicsPipelineState(
- const GraphicsPipelineStateDesc& desc,
- IPipelineState** outState) = 0;
+ const GraphicsPipelineStateDesc& desc,
+ IPipelineState** outState) = 0;
- inline ComPtr<IPipelineState> createGraphicsPipelineState(
- const GraphicsPipelineStateDesc& desc)
+ inline ComPtr<IPipelineState> createGraphicsPipelineState(const GraphicsPipelineStateDesc& desc)
{
ComPtr<IPipelineState> state;
SLANG_RETURN_NULL_ON_FAIL(createGraphicsPipelineState(desc, state.writeRef()));
return state;
}
- virtual SLANG_NO_THROW Result SLANG_MCALL createComputePipelineState(
- const ComputePipelineStateDesc& desc,
- IPipelineState** outState) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ createComputePipelineState(const ComputePipelineStateDesc& desc, IPipelineState** outState) = 0;
- inline ComPtr<IPipelineState> createComputePipelineState(
- const ComputePipelineStateDesc& desc)
+ inline ComPtr<IPipelineState> createComputePipelineState(const ComputePipelineStateDesc& desc)
{
ComPtr<IPipelineState> state;
SLANG_RETURN_NULL_ON_FAIL(createComputePipelineState(desc, state.writeRef()));
@@ -2549,9 +2723,10 @@ public:
}
virtual SLANG_NO_THROW Result SLANG_MCALL createRayTracingPipelineState(
- const RayTracingPipelineStateDesc& desc, IPipelineState** outState) = 0;
+ const RayTracingPipelineStateDesc& desc,
+ IPipelineState** outState) = 0;
- /// Read back texture resource and stores the result in `outBlob`.
+ /// Read back texture resource and stores the result in `outBlob`.
virtual SLANG_NO_THROW SlangResult SLANG_MCALL readTextureResource(
ITextureResource* resource,
ResourceState state,
@@ -2559,17 +2734,14 @@ public:
Size* outRowPitch,
Size* outPixelSize) = 0;
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL readBufferResource(
- IBufferResource* buffer,
- Offset offset,
- Size size,
- ISlangBlob** outBlob) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ readBufferResource(IBufferResource* buffer, Offset offset, Size size, ISlangBlob** outBlob) = 0;
- /// Get the type of this renderer
+ /// Get the type of this renderer
virtual SLANG_NO_THROW const DeviceInfo& SLANG_MCALL getDeviceInfo() const = 0;
- virtual SLANG_NO_THROW Result SLANG_MCALL createQueryPool(
- const IQueryPool::Desc& desc, IQueryPool** outPool) = 0;
+ virtual SLANG_NO_THROW Result SLANG_MCALL
+ createQueryPool(const IQueryPool::Desc& desc, IQueryPool** outPool) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL getAccelerationStructurePrebuildInfo(
@@ -2581,7 +2753,7 @@ public:
IAccelerationStructure** outView) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- createFence(const IFence::Desc& desc, IFence** outFence) = 0;
+ createFence(const IFence::Desc& desc, IFence** outFence) = 0;
/// Wait on the host for the fences to signals.
/// `timeout` is in nanoseconds, can be set to `kTimeoutInfinite`.
@@ -2593,7 +2765,9 @@ public:
uint64_t timeout) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL getTextureAllocationInfo(
- const ITextureResource::Desc& desc, Size* outSize, Size* outAlignment) = 0;
+ const ITextureResource::Desc& desc,
+ Size* outSize,
+ Size* outAlignment) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL getTextureRowAlignment(Size* outAlignment) = 0;
@@ -2610,9 +2784,12 @@ public:
IShaderObject** outObject) = 0;
};
-#define SLANG_UUID_IDevice \
- { \
- 0x715bdf26, 0x5135, 0x11eb, { 0xAE, 0x93, 0x02, 0x42, 0xAC, 0x13, 0x00, 0x02 } \
+#define SLANG_UUID_IDevice \
+ { \
+ 0x715bdf26, 0x5135, 0x11eb, \
+ { \
+ 0xAE, 0x93, 0x02, 0x42, 0xAC, 0x13, 0x00, 0x02 \
+ } \
}
struct ShaderCacheStats
@@ -2634,9 +2811,12 @@ public:
virtual SLANG_NO_THROW Result SLANG_MCALL resetShaderCacheStats() = 0;
};
-#define SLANG_UUID_IShaderCache \
- { \
- 0x8eccc8ec, 0x5c04, 0x4a51, { 0x99, 0x75, 0x13, 0xf8, 0xfe, 0xa1, 0x59, 0xf3 } \
+#define SLANG_UUID_IShaderCache \
+ { \
+ 0x8eccc8ec, 0x5c04, 0x4a51, \
+ { \
+ 0x99, 0x75, 0x13, 0xf8, 0xfe, 0xa1, 0x59, 0xf3 \
+ } \
}
class IPipelineCreationAPIDispatcher : public ISlangUnknown
@@ -2658,18 +2838,24 @@ public:
void* pipelineDesc,
void** outPipelineState) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- beforeCreateRayTracingState(IDevice* device, slang::IComponentType* program) = 0;
+ beforeCreateRayTracingState(IDevice* device, slang::IComponentType* program) = 0;
virtual SLANG_NO_THROW Result SLANG_MCALL
- afterCreateRayTracingState(IDevice* device, slang::IComponentType* program) = 0;
+ afterCreateRayTracingState(IDevice* device, slang::IComponentType* program) = 0;
};
-#define SLANG_UUID_IPipelineCreationAPIDispatcher \
- { \
- 0xc3d5f782, 0xeae1, 0x4da6, { 0xab, 0x40, 0x75, 0x32, 0x31, 0x2, 0xb7, 0xdc } \
+#define SLANG_UUID_IPipelineCreationAPIDispatcher \
+ { \
+ 0xc3d5f782, 0xeae1, 0x4da6, \
+ { \
+ 0xab, 0x40, 0x75, 0x32, 0x31, 0x2, 0xb7, 0xdc \
+ } \
}
-#define SLANG_UUID_IVulkanPipelineCreationAPIDispatcher \
- { \
- 0x4fcf1274, 0x8752, 0x4743, { 0xb3, 0x51, 0x47, 0xcb, 0x83, 0x71, 0xef, 0x99 } \
+#define SLANG_UUID_IVulkanPipelineCreationAPIDispatcher \
+ { \
+ 0x4fcf1274, 0x8752, 0x4743, \
+ { \
+ 0xb3, 0x51, 0x47, 0xcb, 0x83, 0x71, 0xef, 0x99 \
+ } \
}
// Global public functions
@@ -2686,11 +2872,12 @@ extern "C"
SLANG_GFX_API SlangResult SLANG_MCALL gfxGetFormatInfo(Format format, FormatInfo* outInfo);
/// Gets a list of available adapters for a given device type
- SLANG_GFX_API SlangResult SLANG_MCALL gfxGetAdapters(DeviceType type, ISlangBlob** outAdaptersBlob);
+ SLANG_GFX_API SlangResult SLANG_MCALL
+ gfxGetAdapters(DeviceType type, ISlangBlob** outAdaptersBlob);
/// Given a type returns a function that can construct it, or nullptr if there isn't one
SLANG_GFX_API SlangResult SLANG_MCALL
- gfxCreateDevice(const IDevice::Desc* desc, IDevice** outDevice);
+ gfxCreateDevice(const IDevice::Desc* desc, IDevice** outDevice);
/// Reports current set of live objects in gfx.
/// Currently this only calls D3D's ReportLiveObjects.
@@ -2699,10 +2886,10 @@ extern "C"
/// Sets a callback for receiving debug messages.
/// The layer does not hold a strong reference to the callback object.
/// The user is responsible for holding the callback object alive.
- SLANG_GFX_API SlangResult SLANG_MCALL
- gfxSetDebugCallback(IDebugCallback* callback);
+ SLANG_GFX_API SlangResult SLANG_MCALL gfxSetDebugCallback(IDebugCallback* callback);
- /// Enables debug layer. The debug layer will check all `gfx` calls and verify that uses are valid.
+ /// Enables debug layer. The debug layer will check all `gfx` calls and verify that uses are
+ /// valid.
SLANG_GFX_API void SLANG_MCALL gfxEnableDebugLayer();
SLANG_GFX_API const char* SLANG_MCALL gfxGetDeviceTypeName(DeviceType type);
@@ -2741,11 +2928,12 @@ struct SlangSessionExtendedDesc
slang::CompilerOptionEntry* compilerOptionEntries = nullptr;
};
-/// Whether to enable ray tracing validation (currently only Vulkan - D3D requires app layer to use NVAPI)
+/// Whether to enable ray tracing validation (currently only Vulkan - D3D requires app layer to use
+/// NVAPI)
struct RayTracingValidationDesc
{
StructType structType = StructType::RayTracingValidationDesc;
bool enableRaytracingValidation = false;
};
-}
+} // namespace gfx
diff --git a/include/slang-image-format-defs.h b/include/slang-image-format-defs.h
index 410c73339..0f7c7cec3 100644
--- a/include/slang-image-format-defs.h
+++ b/include/slang-image-format-defs.h
@@ -1,49 +1,49 @@
// slang-image-format-defs.h
#ifndef SLANG_FORMAT
-#error Must define SLANG_FORMAT macro before including image-format-defs.h
+ #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)))
+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 c466cd3b6..c40ef1c7b 100644
--- a/include/slang.h
+++ b/include/slang.h
@@ -17,55 +17,55 @@ used later in the file.
Most applications should not need to touch this section.
*/
#ifndef SLANG_COMPILER
-# define SLANG_COMPILER
+ #define SLANG_COMPILER
-/*
-Compiler defines, see http://sourceforge.net/p/predef/wiki/Compilers/
-NOTE that SLANG_VC holds the compiler version - not just 1 or 0
-*/
-# if defined(_MSC_VER)
-# if _MSC_VER >= 1900
-# define SLANG_VC 14
-# elif _MSC_VER >= 1800
-# define SLANG_VC 12
-# elif _MSC_VER >= 1700
-# define SLANG_VC 11
-# elif _MSC_VER >= 1600
-# define SLANG_VC 10
-# elif _MSC_VER >= 1500
-# define SLANG_VC 9
-# else
-# error "unknown version of Visual C++ compiler"
-# endif
-# elif defined(__clang__)
-# define SLANG_CLANG 1
-# elif defined(__SNC__)
-# define SLANG_SNC 1
-# elif defined(__ghs__)
-# define SLANG_GHS 1
-# elif defined(__GNUC__) /* note: __clang__, __SNC__, or __ghs__ imply __GNUC__ */
-# define SLANG_GCC 1
-# else
-# error "unknown compiler"
-# endif
-/*
-Any compilers not detected by the above logic are now now explicitly zeroed out.
-*/
-# ifndef SLANG_VC
-# define SLANG_VC 0
-# endif
-# ifndef SLANG_CLANG
-# define SLANG_CLANG 0
-# endif
-# ifndef SLANG_SNC
-# define SLANG_SNC 0
-# endif
-# ifndef SLANG_GHS
-# define SLANG_GHS 0
-# endif
-# ifndef SLANG_GCC
-# define SLANG_GCC 0
-# endif
+ /*
+ Compiler defines, see http://sourceforge.net/p/predef/wiki/Compilers/
+ NOTE that SLANG_VC holds the compiler version - not just 1 or 0
+ */
+ #if defined(_MSC_VER)
+ #if _MSC_VER >= 1900
+ #define SLANG_VC 14
+ #elif _MSC_VER >= 1800
+ #define SLANG_VC 12
+ #elif _MSC_VER >= 1700
+ #define SLANG_VC 11
+ #elif _MSC_VER >= 1600
+ #define SLANG_VC 10
+ #elif _MSC_VER >= 1500
+ #define SLANG_VC 9
+ #else
+ #error "unknown version of Visual C++ compiler"
+ #endif
+ #elif defined(__clang__)
+ #define SLANG_CLANG 1
+ #elif defined(__SNC__)
+ #define SLANG_SNC 1
+ #elif defined(__ghs__)
+ #define SLANG_GHS 1
+ #elif defined(__GNUC__) /* note: __clang__, __SNC__, or __ghs__ imply __GNUC__ */
+ #define SLANG_GCC 1
+ #else
+ #error "unknown compiler"
+ #endif
+ /*
+ Any compilers not detected by the above logic are now now explicitly zeroed out.
+ */
+ #ifndef SLANG_VC
+ #define SLANG_VC 0
+ #endif
+ #ifndef SLANG_CLANG
+ #define SLANG_CLANG 0
+ #endif
+ #ifndef SLANG_SNC
+ #define SLANG_SNC 0
+ #endif
+ #ifndef SLANG_GHS
+ #define SLANG_GHS 0
+ #endif
+ #ifndef SLANG_GCC
+ #define SLANG_GCC 0
+ #endif
#endif /* SLANG_COMPILER */
/*
@@ -78,86 +78,86 @@ used later in the file.
Most applications should not need to touch this section.
*/
#ifndef SLANG_PLATFORM
-# define SLANG_PLATFORM
-/**
-Operating system defines, see http://sourceforge.net/p/predef/wiki/OperatingSystems/
-*/
-# if defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_PARTITION_APP
-# define SLANG_WINRT 1 /* Windows Runtime, either on Windows RT or Windows 8 */
-# elif defined(XBOXONE)
-# define SLANG_XBOXONE 1
-# elif defined(_WIN64) /* note: XBOXONE implies _WIN64 */
-# define SLANG_WIN64 1
-# elif defined(_M_PPC)
-# define SLANG_X360 1
-# elif defined(_WIN32) /* note: _M_PPC implies _WIN32 */
-# define SLANG_WIN32 1
-# elif defined(__ANDROID__)
-# define SLANG_ANDROID 1
-# elif defined(__linux__) || defined(__CYGWIN__) /* note: __ANDROID__ implies __linux__ */
-# define SLANG_LINUX 1
-# elif defined(__APPLE__)
-# include "TargetConditionals.h"
-# if TARGET_OS_MAC
-# define SLANG_OSX 1
-# else
-# define SLANG_IOS 1
-# endif
-# elif defined(__CELLOS_LV2__)
-# define SLANG_PS3 1
-# elif defined(__ORBIS__)
-# define SLANG_PS4 1
-# elif defined(__SNC__) && defined(__arm__)
-# define SLANG_PSP2 1
-# elif defined(__ghs__)
-# define SLANG_WIIU 1
-# elif defined(__EMSCRIPTEN__)
-# define SLANG_WASM 1
-# else
-# error "unknown target platform"
-# endif
-/*
-Any platforms not detected by the above logic are now now explicitly zeroed out.
-*/
-# ifndef SLANG_WINRT
-# define SLANG_WINRT 0
-# endif
-# ifndef SLANG_XBOXONE
-# define SLANG_XBOXONE 0
-# endif
-# ifndef SLANG_WIN64
-# define SLANG_WIN64 0
-# endif
-# ifndef SLANG_X360
-# define SLANG_X360 0
-# endif
-# ifndef SLANG_WIN32
-# define SLANG_WIN32 0
-# endif
-# ifndef SLANG_ANDROID
-# define SLANG_ANDROID 0
-# endif
-# ifndef SLANG_LINUX
-# define SLANG_LINUX 0
-# endif
-# ifndef SLANG_IOS
-# define SLANG_IOS 0
-# endif
-# ifndef SLANG_OSX
-# define SLANG_OSX 0
-# endif
-# ifndef SLANG_PS3
-# define SLANG_PS3 0
-# endif
-# ifndef SLANG_PS4
-# define SLANG_PS4 0
-# endif
-# ifndef SLANG_PSP2
-# define SLANG_PSP2 0
-# endif
-# ifndef SLANG_WIIU
-# define SLANG_WIIU 0
-# endif
+ #define SLANG_PLATFORM
+ /**
+ Operating system defines, see http://sourceforge.net/p/predef/wiki/OperatingSystems/
+ */
+ #if defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_PARTITION_APP
+ #define SLANG_WINRT 1 /* Windows Runtime, either on Windows RT or Windows 8 */
+ #elif defined(XBOXONE)
+ #define SLANG_XBOXONE 1
+ #elif defined(_WIN64) /* note: XBOXONE implies _WIN64 */
+ #define SLANG_WIN64 1
+ #elif defined(_M_PPC)
+ #define SLANG_X360 1
+ #elif defined(_WIN32) /* note: _M_PPC implies _WIN32 */
+ #define SLANG_WIN32 1
+ #elif defined(__ANDROID__)
+ #define SLANG_ANDROID 1
+ #elif defined(__linux__) || defined(__CYGWIN__) /* note: __ANDROID__ implies __linux__ */
+ #define SLANG_LINUX 1
+ #elif defined(__APPLE__)
+ #include "TargetConditionals.h"
+ #if TARGET_OS_MAC
+ #define SLANG_OSX 1
+ #else
+ #define SLANG_IOS 1
+ #endif
+ #elif defined(__CELLOS_LV2__)
+ #define SLANG_PS3 1
+ #elif defined(__ORBIS__)
+ #define SLANG_PS4 1
+ #elif defined(__SNC__) && defined(__arm__)
+ #define SLANG_PSP2 1
+ #elif defined(__ghs__)
+ #define SLANG_WIIU 1
+ #elif defined(__EMSCRIPTEN__)
+ #define SLANG_WASM 1
+ #else
+ #error "unknown target platform"
+ #endif
+ /*
+ Any platforms not detected by the above logic are now now explicitly zeroed out.
+ */
+ #ifndef SLANG_WINRT
+ #define SLANG_WINRT 0
+ #endif
+ #ifndef SLANG_XBOXONE
+ #define SLANG_XBOXONE 0
+ #endif
+ #ifndef SLANG_WIN64
+ #define SLANG_WIN64 0
+ #endif
+ #ifndef SLANG_X360
+ #define SLANG_X360 0
+ #endif
+ #ifndef SLANG_WIN32
+ #define SLANG_WIN32 0
+ #endif
+ #ifndef SLANG_ANDROID
+ #define SLANG_ANDROID 0
+ #endif
+ #ifndef SLANG_LINUX
+ #define SLANG_LINUX 0
+ #endif
+ #ifndef SLANG_IOS
+ #define SLANG_IOS 0
+ #endif
+ #ifndef SLANG_OSX
+ #define SLANG_OSX 0
+ #endif
+ #ifndef SLANG_PS3
+ #define SLANG_PS3 0
+ #endif
+ #ifndef SLANG_PS4
+ #define SLANG_PS4 0
+ #endif
+ #ifndef SLANG_PSP2
+ #define SLANG_PSP2 0
+ #endif
+ #ifndef SLANG_WIIU
+ #define SLANG_WIIU 0
+ #endif
#endif /* SLANG_PLATFORM */
/* Shorthands for "families" of compilers/platforms */
@@ -165,57 +165,58 @@ Any platforms not detected by the above logic are now now explicitly zeroed out.
#define SLANG_WINDOWS_FAMILY (SLANG_WINRT || SLANG_WIN32 || SLANG_WIN64)
#define SLANG_MICROSOFT_FAMILY (SLANG_XBOXONE || SLANG_X360 || SLANG_WINDOWS_FAMILY)
#define SLANG_LINUX_FAMILY (SLANG_LINUX || SLANG_ANDROID)
-#define SLANG_APPLE_FAMILY (SLANG_IOS || SLANG_OSX) /* equivalent to #if __APPLE__ */
-#define SLANG_UNIX_FAMILY (SLANG_LINUX_FAMILY || SLANG_APPLE_FAMILY) /* shortcut for unix/posix platforms */
+#define SLANG_APPLE_FAMILY (SLANG_IOS || SLANG_OSX) /* equivalent to #if __APPLE__ */
+#define SLANG_UNIX_FAMILY \
+ (SLANG_LINUX_FAMILY || SLANG_APPLE_FAMILY) /* shortcut for unix/posix platforms */
/* Macros concerning DirectX */
#if !defined(SLANG_CONFIG_DX_ON_VK) || !SLANG_CONFIG_DX_ON_VK
-# define SLANG_ENABLE_DXVK 0
-# define SLANG_ENABLE_VKD3D 0
+ #define SLANG_ENABLE_DXVK 0
+ #define SLANG_ENABLE_VKD3D 0
#else
-# define SLANG_ENABLE_DXVK 1
-# define SLANG_ENABLE_VKD3D 1
+ #define SLANG_ENABLE_DXVK 1
+ #define SLANG_ENABLE_VKD3D 1
#endif
#if SLANG_WINDOWS_FAMILY
-# define SLANG_ENABLE_DIRECTX 1
-# define SLANG_ENABLE_DXGI_DEBUG 1
-# define SLANG_ENABLE_DXBC_SUPPORT 1
-# define SLANG_ENABLE_PIX 1
+ #define SLANG_ENABLE_DIRECTX 1
+ #define SLANG_ENABLE_DXGI_DEBUG 1
+ #define SLANG_ENABLE_DXBC_SUPPORT 1
+ #define SLANG_ENABLE_PIX 1
#elif SLANG_LINUX_FAMILY
-# define SLANG_ENABLE_DIRECTX (SLANG_ENABLE_DXVK || SLANG_ENABLE_VKD3D)
-# define SLANG_ENABLE_DXGI_DEBUG 0
-# define SLANG_ENABLE_DXBC_SUPPORT 0
-# define SLANG_ENABLE_PIX 0
+ #define SLANG_ENABLE_DIRECTX (SLANG_ENABLE_DXVK || SLANG_ENABLE_VKD3D)
+ #define SLANG_ENABLE_DXGI_DEBUG 0
+ #define SLANG_ENABLE_DXBC_SUPPORT 0
+ #define SLANG_ENABLE_PIX 0
#else
-# define SLANG_ENABLE_DIRECTX 0
-# define SLANG_ENABLE_DXGI_DEBUG 0
-# define SLANG_ENABLE_DXBC_SUPPORT 0
-# define SLANG_ENABLE_PIX 0
+ #define SLANG_ENABLE_DIRECTX 0
+ #define SLANG_ENABLE_DXGI_DEBUG 0
+ #define SLANG_ENABLE_DXBC_SUPPORT 0
+ #define SLANG_ENABLE_PIX 0
#endif
/* Macro for declaring if a method is no throw. Should be set before the return parameter. */
#ifndef SLANG_NO_THROW
-# if SLANG_WINDOWS_FAMILY && !defined(SLANG_DISABLE_EXCEPTIONS)
-# define SLANG_NO_THROW __declspec(nothrow)
-# endif
+ #if SLANG_WINDOWS_FAMILY && !defined(SLANG_DISABLE_EXCEPTIONS)
+ #define SLANG_NO_THROW __declspec(nothrow)
+ #endif
#endif
#ifndef SLANG_NO_THROW
-# define SLANG_NO_THROW
+ #define SLANG_NO_THROW
#endif
/* The `SLANG_STDCALL` and `SLANG_MCALL` defines are used to set the calling
convention for interface methods.
*/
#ifndef SLANG_STDCALL
-# if SLANG_MICROSOFT_FAMILY
-# define SLANG_STDCALL __stdcall
-# else
-# define SLANG_STDCALL
-# endif
+ #if SLANG_MICROSOFT_FAMILY
+ #define SLANG_STDCALL __stdcall
+ #else
+ #define SLANG_STDCALL
+ #endif
#endif
#ifndef SLANG_MCALL
-# define SLANG_MCALL SLANG_STDCALL
+ #define SLANG_MCALL SLANG_STDCALL
#endif
@@ -224,94 +225,94 @@ convention for interface methods.
#endif
#if defined(_MSC_VER)
-# define SLANG_DLL_EXPORT __declspec(dllexport)
+ #define SLANG_DLL_EXPORT __declspec(dllexport)
#else
-# if 0 && __GNUC__ >= 4
+ #if 0 && __GNUC__ >= 4
// Didn't work on latest gcc on linux.. so disable for now
// https://gcc.gnu.org/wiki/Visibility
-# define SLANG_DLL_EXPORT __attribute__ ((dllexport))
-# else
-# define SLANG_DLL_EXPORT __attribute__((__visibility__("default")))
-# endif
+ #define SLANG_DLL_EXPORT __attribute__((dllexport))
+ #else
+ #define SLANG_DLL_EXPORT __attribute__((__visibility__("default")))
+ #endif
#endif
#if defined(SLANG_DYNAMIC)
-# if defined(_MSC_VER)
-# ifdef SLANG_DYNAMIC_EXPORT
-# define SLANG_API SLANG_DLL_EXPORT
-# else
-# define SLANG_API __declspec(dllimport)
-# endif
-# else
+ #if defined(_MSC_VER)
+ #ifdef SLANG_DYNAMIC_EXPORT
+ #define SLANG_API SLANG_DLL_EXPORT
+ #else
+ #define SLANG_API __declspec(dllimport)
+ #endif
+ #else
// TODO: need to consider compiler capabilities
-//# ifdef SLANG_DYNAMIC_EXPORT
-# define SLANG_API SLANG_DLL_EXPORT
-//# endif
-# endif
+ // # ifdef SLANG_DYNAMIC_EXPORT
+ #define SLANG_API SLANG_DLL_EXPORT
+ // # endif
+ #endif
#endif
#ifndef SLANG_API
-# define SLANG_API
+ #define SLANG_API
#endif
// GCC Specific
#if SLANG_GCC_FAMILY
-# define SLANG_NO_INLINE __attribute__((noinline))
-# define SLANG_FORCE_INLINE inline __attribute__((always_inline))
-# define SLANG_BREAKPOINT(id) __builtin_trap();
-# define SLANG_ALIGN_OF(T) __alignof__(T)
+ #define SLANG_NO_INLINE __attribute__((noinline))
+ #define SLANG_FORCE_INLINE inline __attribute__((always_inline))
+ #define SLANG_BREAKPOINT(id) __builtin_trap();
+ #define SLANG_ALIGN_OF(T) __alignof__(T)
#endif // SLANG_GCC_FAMILY
#if SLANG_GCC_FAMILY || defined(__clang__)
-// Use the builtin directly so we don't need to have an include of stddef.h
-# define SLANG_OFFSET_OF(T, ELEMENT) __builtin_offsetof(T, ELEMENT)
+ // Use the builtin directly so we don't need to have an include of stddef.h
+ #define SLANG_OFFSET_OF(T, ELEMENT) __builtin_offsetof(T, ELEMENT)
#endif
#ifndef SLANG_OFFSET_OF
-# define SLANG_OFFSET_OF(T, ELEMENT) (size_t(&((T*)1)->ELEMENT) - 1)
+ #define SLANG_OFFSET_OF(T, ELEMENT) (size_t(&((T*)1)->ELEMENT) - 1)
#endif
// Microsoft VC specific
#if SLANG_MICROSOFT_FAMILY
-# define SLANG_NO_INLINE __declspec(noinline)
-# define SLANG_FORCE_INLINE __forceinline
-# define SLANG_BREAKPOINT(id) __debugbreak();
-# define SLANG_ALIGN_OF(T) __alignof(T)
+ #define SLANG_NO_INLINE __declspec(noinline)
+ #define SLANG_FORCE_INLINE __forceinline
+ #define SLANG_BREAKPOINT(id) __debugbreak();
+ #define SLANG_ALIGN_OF(T) __alignof(T)
-# define SLANG_INT64(x) (x##i64)
-# define SLANG_UINT64(x) (x##ui64)
+ #define SLANG_INT64(x) (x##i64)
+ #define SLANG_UINT64(x) (x##ui64)
#endif // SLANG_MICROSOFT_FAMILY
#ifndef SLANG_FORCE_INLINE
-# define SLANG_FORCE_INLINE inline
+ #define SLANG_FORCE_INLINE inline
#endif
#ifndef SLANG_NO_INLINE
-# define SLANG_NO_INLINE
+ #define SLANG_NO_INLINE
#endif
#ifndef SLANG_COMPILE_TIME_ASSERT
-# define SLANG_COMPILE_TIME_ASSERT(x) static_assert(x)
+ #define SLANG_COMPILE_TIME_ASSERT(x) static_assert(x)
#endif
#ifndef SLANG_BREAKPOINT
-// Make it crash with a write to 0!
-# define SLANG_BREAKPOINT(id) (*((int*)0) = int(id));
+ // Make it crash with a write to 0!
+ #define SLANG_BREAKPOINT(id) (*((int*)0) = int(id));
#endif
// Use for getting the amount of members of a standard C array.
// Use 0[x] here to catch the case where x has an overloaded subscript operator
-#define SLANG_COUNT_OF(x) (SlangSSizeT(sizeof(x)/sizeof(0[x])))
+#define SLANG_COUNT_OF(x) (SlangSSizeT(sizeof(x) / sizeof(0 [x])))
/// SLANG_INLINE exists to have a way to inline consistent with SLANG_ALWAYS_INLINE
#define SLANG_INLINE inline
// If explicilty disabled and not set, set to not available
#if !defined(SLANG_HAS_EXCEPTIONS) && defined(SLANG_DISABLE_EXCEPTIONS)
-# define SLANG_HAS_EXCEPTIONS 0
+ #define SLANG_HAS_EXCEPTIONS 0
#endif
// If not set, the default is exceptions are available
#ifndef SLANG_HAS_EXCEPTIONS
-# define SLANG_HAS_EXCEPTIONS 1
+ #define SLANG_HAS_EXCEPTIONS 1
#endif
// Other defines
@@ -322,129 +323,130 @@ convention for interface methods.
#define SLANG_CONCAT(X, Y) SLANG_CONCAT_HELPER(X, Y)
#ifndef SLANG_UNUSED
-# define SLANG_UNUSED(v) (void)v;
+ #define SLANG_UNUSED(v) (void)v;
#endif
#if defined(__llvm__)
-# define SLANG_MAYBE_UNUSED [[maybe_unused]]
+ #define SLANG_MAYBE_UNUSED [[maybe_unused]]
#else
-# define SLANG_MAYBE_UNUSED
+ #define SLANG_MAYBE_UNUSED
#endif
// Used for doing constant literals
#ifndef SLANG_INT64
-# define SLANG_INT64(x) (x##ll)
+ #define SLANG_INT64(x) (x##ll)
#endif
#ifndef SLANG_UINT64
-# define SLANG_UINT64(x) (x##ull)
+ #define SLANG_UINT64(x) (x##ull)
#endif
#ifdef __cplusplus
-# define SLANG_EXTERN_C extern "C"
+ #define SLANG_EXTERN_C extern "C"
#else
-# define SLANG_EXTERN_C
+ #define SLANG_EXTERN_C
#endif
#ifdef __cplusplus
-// C++ specific macros
-// Clang
-#if SLANG_CLANG
-# if (__clang_major__*10 + __clang_minor__) >= 33
-# define SLANG_HAS_MOVE_SEMANTICS 1
-# define SLANG_HAS_ENUM_CLASS 1
-# define SLANG_OVERRIDE override
-# endif
-
-// Gcc
-#elif SLANG_GCC_FAMILY
-// Check for C++11
-# if (__cplusplus >= 201103L)
-# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
-# define SLANG_HAS_MOVE_SEMANTICS 1
-# endif
-# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
-# define SLANG_HAS_ENUM_CLASS 1
-# endif
-# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407
-# define SLANG_OVERRIDE override
-# endif
-# endif
-# endif // SLANG_GCC_FAMILY
-
-// Visual Studio
-
-# if SLANG_VC
-// C4481: nonstandard extension used: override specifier 'override'
-# if _MSC_VER < 1700
-# pragma warning(disable : 4481)
-# endif
-# define SLANG_OVERRIDE override
-# if _MSC_VER >= 1600
-# define SLANG_HAS_MOVE_SEMANTICS 1
-# endif
-# if _MSC_VER >= 1700
-# define SLANG_HAS_ENUM_CLASS 1
-# endif
-# endif // SLANG_VC
-
-// Set non set
-# ifndef SLANG_OVERRIDE
-# define SLANG_OVERRIDE
-# endif
-# ifndef SLANG_HAS_ENUM_CLASS
-# define SLANG_HAS_ENUM_CLASS 0
-# endif
-# ifndef SLANG_HAS_MOVE_SEMANTICS
-# define SLANG_HAS_MOVE_SEMANTICS 0
-# endif
+ // C++ specific macros
+ // Clang
+ #if SLANG_CLANG
+ #if (__clang_major__ * 10 + __clang_minor__) >= 33
+ #define SLANG_HAS_MOVE_SEMANTICS 1
+ #define SLANG_HAS_ENUM_CLASS 1
+ #define SLANG_OVERRIDE override
+ #endif
+
+ // Gcc
+ #elif SLANG_GCC_FAMILY
+ // Check for C++11
+ #if (__cplusplus >= 201103L)
+ #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405
+ #define SLANG_HAS_MOVE_SEMANTICS 1
+ #endif
+ #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406
+ #define SLANG_HAS_ENUM_CLASS 1
+ #endif
+ #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407
+ #define SLANG_OVERRIDE override
+ #endif
+ #endif
+ #endif // SLANG_GCC_FAMILY
+
+ // Visual Studio
+
+ #if SLANG_VC
+ // C4481: nonstandard extension used: override specifier 'override'
+ #if _MSC_VER < 1700
+ #pragma warning(disable : 4481)
+ #endif
+ #define SLANG_OVERRIDE override
+ #if _MSC_VER >= 1600
+ #define SLANG_HAS_MOVE_SEMANTICS 1
+ #endif
+ #if _MSC_VER >= 1700
+ #define SLANG_HAS_ENUM_CLASS 1
+ #endif
+ #endif // SLANG_VC
+
+ // Set non set
+ #ifndef SLANG_OVERRIDE
+ #define SLANG_OVERRIDE
+ #endif
+ #ifndef SLANG_HAS_ENUM_CLASS
+ #define SLANG_HAS_ENUM_CLASS 0
+ #endif
+ #ifndef SLANG_HAS_MOVE_SEMANTICS
+ #define SLANG_HAS_MOVE_SEMANTICS 0
+ #endif
#endif // __cplusplus
/* Macros for detecting processor */
#if defined(_M_ARM) || defined(__ARM_EABI__)
-// This is special case for nVidia tegra
-# define SLANG_PROCESSOR_ARM 1
+ // This is special case for nVidia tegra
+ #define SLANG_PROCESSOR_ARM 1
#elif defined(__i386__) || defined(_M_IX86)
-# define SLANG_PROCESSOR_X86 1
+ #define SLANG_PROCESSOR_X86 1
#elif defined(_M_AMD64) || defined(_M_X64) || defined(__amd64) || defined(__x86_64)
-# define SLANG_PROCESSOR_X86_64 1
+ #define SLANG_PROCESSOR_X86_64 1
#elif defined(_PPC_) || defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC)
-# if defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__64BIT__) || defined(_LP64) || defined(__LP64__)
-# define SLANG_PROCESSOR_POWER_PC_64 1
-# else
-# define SLANG_PROCESSOR_POWER_PC 1
-# endif
+ #if defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || \
+ defined(__64BIT__) || defined(_LP64) || defined(__LP64__)
+ #define SLANG_PROCESSOR_POWER_PC_64 1
+ #else
+ #define SLANG_PROCESSOR_POWER_PC 1
+ #endif
#elif defined(__arm__)
-# define SLANG_PROCESSOR_ARM 1
+ #define SLANG_PROCESSOR_ARM 1
#elif defined(_M_ARM64) || defined(__aarch64__)
-# define SLANG_PROCESSOR_ARM_64 1
+ #define SLANG_PROCESSOR_ARM_64 1
#elif defined(__EMSCRIPTEN__)
-# define SLANG_PROCESSOR_WASM 1
+ #define SLANG_PROCESSOR_WASM 1
#endif
#ifndef SLANG_PROCESSOR_ARM
-# define SLANG_PROCESSOR_ARM 0
+ #define SLANG_PROCESSOR_ARM 0
#endif
#ifndef SLANG_PROCESSOR_ARM_64
-# define SLANG_PROCESSOR_ARM_64 0
+ #define SLANG_PROCESSOR_ARM_64 0
#endif
#ifndef SLANG_PROCESSOR_X86
-# define SLANG_PROCESSOR_X86 0
+ #define SLANG_PROCESSOR_X86 0
#endif
#ifndef SLANG_PROCESSOR_X86_64
-# define SLANG_PROCESSOR_X86_64 0
+ #define SLANG_PROCESSOR_X86_64 0
#endif
#ifndef SLANG_PROCESSOR_POWER_PC
-# define SLANG_PROCESSOR_POWER_PC 0
+ #define SLANG_PROCESSOR_POWER_PC 0
#endif
#ifndef SLANG_PROCESSOR_POWER_PC_64
-# define SLANG_PROCESSOR_POWER_PC_64 0
+ #define SLANG_PROCESSOR_POWER_PC_64 0
#endif
// Processor families
@@ -454,48 +456,49 @@ convention for interface methods.
#define SLANG_PROCESSOR_FAMILY_POWER_PC (SLANG_PROCESSOR_POWER_PC_64 | SLANG_PROCESSOR_POWER_PC)
// Pointer size
-#define SLANG_PTR_IS_64 (SLANG_PROCESSOR_ARM_64 | SLANG_PROCESSOR_X86_64 | SLANG_PROCESSOR_POWER_PC_64)
+#define SLANG_PTR_IS_64 \
+ (SLANG_PROCESSOR_ARM_64 | SLANG_PROCESSOR_X86_64 | SLANG_PROCESSOR_POWER_PC_64)
#define SLANG_PTR_IS_32 (SLANG_PTR_IS_64 ^ 1)
// Processor features
#if SLANG_PROCESSOR_FAMILY_X86
-# define SLANG_LITTLE_ENDIAN 1
-# define SLANG_UNALIGNED_ACCESS 1
+ #define SLANG_LITTLE_ENDIAN 1
+ #define SLANG_UNALIGNED_ACCESS 1
#elif SLANG_PROCESSOR_FAMILY_ARM
-# if defined(__ARMEB__)
-# define SLANG_BIG_ENDIAN 1
-# else
-# define SLANG_LITTLE_ENDIAN 1
-# endif
+ #if defined(__ARMEB__)
+ #define SLANG_BIG_ENDIAN 1
+ #else
+ #define SLANG_LITTLE_ENDIAN 1
+ #endif
#elif SLANG_PROCESSOR_FAMILY_POWER_PC
-# define SLANG_BIG_ENDIAN 1
+ #define SLANG_BIG_ENDIAN 1
#elif SLANG_WASM
-# define SLANG_LITTLE_ENDIAN 1
+ #define SLANG_LITTLE_ENDIAN 1
#endif
#ifndef SLANG_LITTLE_ENDIAN
-# define SLANG_LITTLE_ENDIAN 0
+ #define SLANG_LITTLE_ENDIAN 0
#endif
#ifndef SLANG_BIG_ENDIAN
-# define SLANG_BIG_ENDIAN 0
+ #define SLANG_BIG_ENDIAN 0
#endif
#ifndef SLANG_UNALIGNED_ACCESS
-# define SLANG_UNALIGNED_ACCESS 0
+ #define SLANG_UNALIGNED_ACCESS 0
#endif
// One endianess must be set
#if ((SLANG_BIG_ENDIAN | SLANG_LITTLE_ENDIAN) == 0)
-# error "Couldn't determine endianess"
+ #error "Couldn't determine endianess"
#endif
-#ifndef SLANG_NO_INTTYPES
-#include <inttypes.h>
+#ifndef SLANG_NO_INTTYPES
+ #include <inttypes.h>
#endif // ! SLANG_NO_INTTYPES
-#ifndef SLANG_NO_STDDEF
-#include <stddef.h>
+#ifndef SLANG_NO_STDDEF
+ #include <stddef.h>
#endif // ! SLANG_NO_STDDEF
#ifdef __cplusplus
@@ -510,32 +513,33 @@ extern "C"
@file slang.h
*/
- typedef uint32_t SlangUInt32;
- typedef int32_t SlangInt32;
+ typedef uint32_t SlangUInt32;
+ typedef int32_t SlangInt32;
// Use SLANG_PTR_ macros to determine SlangInt/SlangUInt types.
- // This is used over say using size_t/ptrdiff_t/intptr_t/uintptr_t, because on some targets, these types are distinct from
- // their uint_t/int_t equivalents and so produce ambiguity with function overloading.
+ // This is used over say using size_t/ptrdiff_t/intptr_t/uintptr_t, because on some targets,
+ // these types are distinct from their uint_t/int_t equivalents and so produce ambiguity with
+ // function overloading.
//
- // SlangSizeT is helpful as on some compilers size_t is distinct from a regular integer type and so overloading doesn't work.
- // Casting to SlangSizeT works around this.
+ // SlangSizeT is helpful as on some compilers size_t is distinct from a regular integer type and
+ // so overloading doesn't work. Casting to SlangSizeT works around this.
#if SLANG_PTR_IS_64
- typedef int64_t SlangInt;
- typedef uint64_t SlangUInt;
+ typedef int64_t SlangInt;
+ typedef uint64_t SlangUInt;
- typedef int64_t SlangSSizeT;
- typedef uint64_t SlangSizeT;
+ typedef int64_t SlangSSizeT;
+ typedef uint64_t SlangSizeT;
#else
- typedef int32_t SlangInt;
- typedef uint32_t SlangUInt;
+typedef int32_t SlangInt;
+typedef uint32_t SlangUInt;
- typedef int32_t SlangSSizeT;
- typedef uint32_t SlangSizeT;
+typedef int32_t SlangSSizeT;
+typedef uint32_t SlangSizeT;
#endif
typedef bool SlangBool;
-
+
/*!
@brief Severity of a diagnostic generated by the compiler.
Values come from the enum below, with higher values representing more severe
@@ -549,8 +553,9 @@ extern "C"
SLANG_SEVERITY_NOTE, /**< An informative message. */
SLANG_SEVERITY_WARNING, /**< A warning, which indicates a possible proble. */
SLANG_SEVERITY_ERROR, /**< An error, indicating that compilation failed. */
- SLANG_SEVERITY_FATAL, /**< An unrecoverable error, which forced compilation to abort. */
- SLANG_SEVERITY_INTERNAL, /**< An internal error, indicating a logic error in the compiler. */
+ SLANG_SEVERITY_FATAL, /**< An unrecoverable error, which forced compilation to abort. */
+ SLANG_SEVERITY_INTERNAL, /**< An internal error, indicating a logic error in the compiler.
+ */
};
typedef int SlangDiagnosticFlags;
@@ -572,11 +577,11 @@ extern "C"
/* NOTE! To keep binary compatibility care is needed with this enum!
- * To add value, only add at the bottom (before COUNT_OF)
+ * To add value, only add at the bottom (before COUNT_OF)
* To remove a value, add _DEPRECATED as a suffix, but leave in the list
-
- This will make the enum values stable, and compatible with libraries that might not use the latest
- enum values.
+
+ This will make the enum values stable, and compatible with libraries that might not use the
+ latest enum values.
*/
typedef int SlangCompileTargetIntegral;
enum SlangCompileTarget : SlangCompileTargetIntegral
@@ -584,8 +589,8 @@ extern "C"
SLANG_TARGET_UNKNOWN,
SLANG_TARGET_NONE,
SLANG_GLSL,
- SLANG_GLSL_VULKAN_DEPRECATED, //< deprecated and removed: just use `SLANG_GLSL`.
- SLANG_GLSL_VULKAN_ONE_DESC_DEPRECATED, //< deprecated and removed.
+ SLANG_GLSL_VULKAN_DEPRECATED, //< deprecated and removed: just use `SLANG_GLSL`.
+ SLANG_GLSL_VULKAN_ONE_DESC_DEPRECATED, //< deprecated and removed.
SLANG_HLSL,
SLANG_SPIRV,
SLANG_SPIRV_ASM,
@@ -593,25 +598,27 @@ extern "C"
SLANG_DXBC_ASM,
SLANG_DXIL,
SLANG_DXIL_ASM,
- SLANG_C_SOURCE, ///< The C language
- SLANG_CPP_SOURCE, ///< C++ code for shader kernels.
- SLANG_HOST_EXECUTABLE, ///< Standalone binary executable (for hosting CPU/OS)
- SLANG_SHADER_SHARED_LIBRARY, ///< A shared library/Dll for shader kernels (for hosting CPU/OS)
- SLANG_SHADER_HOST_CALLABLE, ///< A CPU target that makes the compiled shader code available to be run immediately
- SLANG_CUDA_SOURCE, ///< Cuda source
- SLANG_PTX, ///< PTX
- SLANG_CUDA_OBJECT_CODE, ///< Object code that contains CUDA functions.
- SLANG_OBJECT_CODE, ///< Object code that can be used for later linking
- SLANG_HOST_CPP_SOURCE, ///< C++ code for host library or executable.
- SLANG_HOST_HOST_CALLABLE, ///< Host callable host code (ie non kernel/shader)
- SLANG_CPP_PYTORCH_BINDING, ///< C++ PyTorch binding code.
- SLANG_METAL, ///< Metal shading language
- SLANG_METAL_LIB, ///< Metal library
- SLANG_METAL_LIB_ASM, ///< Metal library assembly
- SLANG_HOST_SHARED_LIBRARY, ///< A shared library/Dll for host code (for hosting CPU/OS)
- SLANG_WGSL, ///< WebGPU shading language
- SLANG_WGSL_SPIRV_ASM, ///< SPIR-V assembly via WebGPU shading language
- SLANG_WGSL_SPIRV, ///< SPIR-V via WebGPU shading language
+ SLANG_C_SOURCE, ///< The C language
+ SLANG_CPP_SOURCE, ///< C++ code for shader kernels.
+ SLANG_HOST_EXECUTABLE, ///< Standalone binary executable (for hosting CPU/OS)
+ SLANG_SHADER_SHARED_LIBRARY, ///< A shared library/Dll for shader kernels (for hosting
+ ///< CPU/OS)
+ SLANG_SHADER_HOST_CALLABLE, ///< A CPU target that makes the compiled shader code available
+ ///< to be run immediately
+ SLANG_CUDA_SOURCE, ///< Cuda source
+ SLANG_PTX, ///< PTX
+ SLANG_CUDA_OBJECT_CODE, ///< Object code that contains CUDA functions.
+ SLANG_OBJECT_CODE, ///< Object code that can be used for later linking
+ SLANG_HOST_CPP_SOURCE, ///< C++ code for host library or executable.
+ SLANG_HOST_HOST_CALLABLE, ///< Host callable host code (ie non kernel/shader)
+ SLANG_CPP_PYTORCH_BINDING, ///< C++ PyTorch binding code.
+ SLANG_METAL, ///< Metal shading language
+ SLANG_METAL_LIB, ///< Metal library
+ SLANG_METAL_LIB_ASM, ///< Metal library assembly
+ SLANG_HOST_SHARED_LIBRARY, ///< A shared library/Dll for host code (for hosting CPU/OS)
+ SLANG_WGSL, ///< WebGPU shading language
+ SLANG_WGSL_SPIRV_ASM, ///< SPIR-V assembly via WebGPU shading language
+ SLANG_WGSL_SPIRV, ///< SPIR-V via WebGPU shading language
SLANG_TARGET_COUNT_OF,
};
@@ -637,15 +644,16 @@ extern "C"
SLANG_PASS_THROUGH_DXC,
SLANG_PASS_THROUGH_GLSLANG,
SLANG_PASS_THROUGH_SPIRV_DIS,
- SLANG_PASS_THROUGH_CLANG, ///< Clang C/C++ compiler
- SLANG_PASS_THROUGH_VISUAL_STUDIO, ///< Visual studio C/C++ compiler
- SLANG_PASS_THROUGH_GCC, ///< GCC C/C++ compiler
- SLANG_PASS_THROUGH_GENERIC_C_CPP, ///< Generic C or C++ compiler, which is decided by the source type
- SLANG_PASS_THROUGH_NVRTC, ///< NVRTC Cuda compiler
- SLANG_PASS_THROUGH_LLVM, ///< LLVM 'compiler' - includes LLVM and Clang
- SLANG_PASS_THROUGH_SPIRV_OPT, ///< SPIRV-opt
- SLANG_PASS_THROUGH_METAL, ///< Metal compiler
- SLANG_PASS_THROUGH_TINT, ///< Tint WGSL compiler
+ SLANG_PASS_THROUGH_CLANG, ///< Clang C/C++ compiler
+ SLANG_PASS_THROUGH_VISUAL_STUDIO, ///< Visual studio C/C++ compiler
+ SLANG_PASS_THROUGH_GCC, ///< GCC C/C++ compiler
+ SLANG_PASS_THROUGH_GENERIC_C_CPP, ///< Generic C or C++ compiler, which is decided by the
+ ///< source type
+ SLANG_PASS_THROUGH_NVRTC, ///< NVRTC Cuda compiler
+ SLANG_PASS_THROUGH_LLVM, ///< LLVM 'compiler' - includes LLVM and Clang
+ SLANG_PASS_THROUGH_SPIRV_OPT, ///< SPIRV-opt
+ SLANG_PASS_THROUGH_METAL, ///< Metal compiler
+ SLANG_PASS_THROUGH_TINT, ///< Tint WGSL compiler
SLANG_PASS_THROUGH_COUNT_OF,
};
@@ -655,7 +663,7 @@ extern "C"
{
SLANG_ARCHIVE_TYPE_UNDEFINED,
SLANG_ARCHIVE_TYPE_ZIP,
- SLANG_ARCHIVE_TYPE_RIFF, ///< Riff container with no compression
+ SLANG_ARCHIVE_TYPE_RIFF, ///< Riff container with no compression
SLANG_ARCHIVE_TYPE_RIFF_DEFLATE,
SLANG_ARCHIVE_TYPE_RIFF_LZ4,
SLANG_ARCHIVE_TYPE_COUNT_OF,
@@ -668,10 +676,10 @@ extern "C"
enum
{
/* Do as little mangling of names as possible, to try to preserve original names */
- SLANG_COMPILE_FLAG_NO_MANGLING = 1 << 3,
+ SLANG_COMPILE_FLAG_NO_MANGLING = 1 << 3,
/* Skip code generation step, just check the code and generate layout */
- SLANG_COMPILE_FLAG_NO_CODEGEN = 1 << 4,
+ SLANG_COMPILE_FLAG_NO_CODEGEN = 1 << 4,
/* Obfuscate shader names on release products */
SLANG_COMPILE_FLAG_OBFUSCATE = 1 << 5,
@@ -679,14 +687,14 @@ extern "C"
/* Deprecated flags: kept around to allow existing applications to
compile. Note that the relevant features will still be left in
their default state. */
- SLANG_COMPILE_FLAG_NO_CHECKING = 0,
- SLANG_COMPILE_FLAG_SPLIT_MIXED_TYPES = 0,
+ SLANG_COMPILE_FLAG_NO_CHECKING = 0,
+ SLANG_COMPILE_FLAG_SPLIT_MIXED_TYPES = 0,
};
/*!
@brief Flags to control code generation behavior of a compilation target */
typedef unsigned int SlangTargetFlags;
- enum
+ enum
{
/* When compiling for a D3D Shader Model 5.1 or higher target, allocate
distinct register spaces for parameter blocks.
@@ -707,7 +715,8 @@ extern "C"
/* When set, will generate SPIRV directly rather than via glslang. */
SLANG_TARGET_FLAG_GENERATE_SPIRV_DIRECTLY = 1 << 10,
};
- constexpr static SlangTargetFlags kDefaultTargetFlags = SLANG_TARGET_FLAG_GENERATE_SPIRV_DIRECTLY;
+ constexpr static SlangTargetFlags kDefaultTargetFlags =
+ SLANG_TARGET_FLAG_GENERATE_SPIRV_DIRECTLY;
/*!
@brief Options to control floating-point precision guarantees for a target.
@@ -726,11 +735,14 @@ extern "C"
typedef unsigned int SlangLineDirectiveModeIntegral;
enum SlangLineDirectiveMode : SlangLineDirectiveModeIntegral
{
- SLANG_LINE_DIRECTIVE_MODE_DEFAULT = 0, /**< Default behavior: pick behavior base on target. */
- SLANG_LINE_DIRECTIVE_MODE_NONE, /**< Don't emit line directives at all. */
- SLANG_LINE_DIRECTIVE_MODE_STANDARD, /**< Emit standard C-style `#line` directives. */
- SLANG_LINE_DIRECTIVE_MODE_GLSL, /**< Emit GLSL-style directives with file *number* instead of name */
- SLANG_LINE_DIRECTIVE_MODE_SOURCE_MAP, /**< Use a source map to track line mappings (ie no #line will appear in emitting source) */
+ SLANG_LINE_DIRECTIVE_MODE_DEFAULT =
+ 0, /**< Default behavior: pick behavior base on target. */
+ SLANG_LINE_DIRECTIVE_MODE_NONE, /**< Don't emit line directives at all. */
+ SLANG_LINE_DIRECTIVE_MODE_STANDARD, /**< Emit standard C-style `#line` directives. */
+ SLANG_LINE_DIRECTIVE_MODE_GLSL, /**< Emit GLSL-style directives with file *number* instead
+ of name */
+ SLANG_LINE_DIRECTIVE_MODE_SOURCE_MAP, /**< Use a source map to track line mappings (ie no
+ #line will appear in emitting source) */
};
typedef int SlangSourceLanguageIntegral;
@@ -796,24 +808,28 @@ extern "C"
typedef SlangUInt32 SlangDebugInfoLevelIntegral;
enum SlangDebugInfoLevel : SlangDebugInfoLevelIntegral
{
- SLANG_DEBUG_INFO_LEVEL_NONE = 0, /**< Don't emit debug information at all. */
- SLANG_DEBUG_INFO_LEVEL_MINIMAL, /**< Emit as little debug information as possible, while still supporting stack trackes. */
- SLANG_DEBUG_INFO_LEVEL_STANDARD, /**< Emit whatever is the standard level of debug information for each target. */
- SLANG_DEBUG_INFO_LEVEL_MAXIMAL, /**< Emit as much debug infromation as possible for each target. */
-
+ SLANG_DEBUG_INFO_LEVEL_NONE = 0, /**< Don't emit debug information at all. */
+ SLANG_DEBUG_INFO_LEVEL_MINIMAL, /**< Emit as little debug information as possible, while
+ still supporting stack trackes. */
+ SLANG_DEBUG_INFO_LEVEL_STANDARD, /**< Emit whatever is the standard level of debug
+ information for each target. */
+ SLANG_DEBUG_INFO_LEVEL_MAXIMAL, /**< Emit as much debug infromation as possible for each
+ target. */
};
/* Describes the debugging information format produced during a compilation. */
typedef SlangUInt32 SlangDebugInfoFormatIntegral;
enum SlangDebugInfoFormat : SlangDebugInfoFormatIntegral
{
- SLANG_DEBUG_INFO_FORMAT_DEFAULT, ///< Use the default debugging format for the target
- SLANG_DEBUG_INFO_FORMAT_C7, ///< CodeView C7 format (typically means debugging infomation is embedded in the binary)
- SLANG_DEBUG_INFO_FORMAT_PDB, ///< Program database
-
- SLANG_DEBUG_INFO_FORMAT_STABS, ///< Stabs
- SLANG_DEBUG_INFO_FORMAT_COFF, ///< COFF debug info
- SLANG_DEBUG_INFO_FORMAT_DWARF, ///< DWARF debug info (we may want to support specifying the version)
+ SLANG_DEBUG_INFO_FORMAT_DEFAULT, ///< Use the default debugging format for the target
+ SLANG_DEBUG_INFO_FORMAT_C7, ///< CodeView C7 format (typically means debugging infomation is
+ ///< embedded in the binary)
+ SLANG_DEBUG_INFO_FORMAT_PDB, ///< Program database
+
+ SLANG_DEBUG_INFO_FORMAT_STABS, ///< Stabs
+ SLANG_DEBUG_INFO_FORMAT_COFF, ///< COFF debug info
+ SLANG_DEBUG_INFO_FORMAT_DWARF, ///< DWARF debug info (we may want to support specifying the
+ ///< version)
SLANG_DEBUG_INFO_FORMAT_COUNT_OF,
};
@@ -821,192 +837,197 @@ extern "C"
typedef SlangUInt32 SlangOptimizationLevelIntegral;
enum SlangOptimizationLevel : SlangOptimizationLevelIntegral
{
- SLANG_OPTIMIZATION_LEVEL_NONE = 0, /**< Don't optimize at all. */
- SLANG_OPTIMIZATION_LEVEL_DEFAULT, /**< Default optimization level: balance code quality and compilation time. */
- SLANG_OPTIMIZATION_LEVEL_HIGH, /**< Optimize aggressively. */
- SLANG_OPTIMIZATION_LEVEL_MAXIMAL, /**< Include optimizations that may take a very long time, or may involve severe space-vs-speed tradeoffs */
+ SLANG_OPTIMIZATION_LEVEL_NONE = 0, /**< Don't optimize at all. */
+ SLANG_OPTIMIZATION_LEVEL_DEFAULT, /**< Default optimization level: balance code quality and
+ compilation time. */
+ SLANG_OPTIMIZATION_LEVEL_HIGH, /**< Optimize aggressively. */
+ SLANG_OPTIMIZATION_LEVEL_MAXIMAL, /**< Include optimizations that may take a very long time,
+ or may involve severe space-vs-speed tradeoffs */
};
// All compiler option names supported by Slang.
namespace slang
{
- enum class CompilerOptionName
- {
- MacroDefine, // stringValue0: macro name; stringValue1: macro value
- DepFile,
- EntryPointName,
- Specialize,
- Help,
- HelpStyle,
- Include, // stringValue: additional include path.
- Language,
- MatrixLayoutColumn, // bool
- MatrixLayoutRow, // bool
- ZeroInitialize, // bool
- IgnoreCapabilities, // bool
- RestrictiveCapabilityCheck, // bool
- ModuleName, // stringValue0: module name.
- Output,
- Profile, // intValue0: profile
- Stage, // intValue0: stage
- Target, // intValue0: CodeGenTarget
- Version,
- WarningsAsErrors, // stringValue0: "all" or comma separated list of warning codes or names.
- DisableWarnings, // stringValue0: comma separated list of warning codes or names.
- EnableWarning, // stringValue0: warning code or name.
- DisableWarning, // stringValue0: warning code or name.
- DumpWarningDiagnostics,
- InputFilesRemain,
- EmitIr, // bool
- ReportDownstreamTime, // bool
- ReportPerfBenchmark, // bool
- ReportCheckpointIntermediates, // bool
- SkipSPIRVValidation, // bool
- SourceEmbedStyle,
- SourceEmbedName,
- SourceEmbedLanguage,
- DisableShortCircuit, // bool
- MinimumSlangOptimization, // bool
- DisableNonEssentialValidations, // bool
- DisableSourceMap, // bool
- UnscopedEnum, // bool
- PreserveParameters, // bool: preserve all resource parameters in the output code.
-
- // Target
-
- Capability, // intValue0: CapabilityName
- DefaultImageFormatUnknown, // bool
- DisableDynamicDispatch, // bool
- DisableSpecialization, // bool
- FloatingPointMode, // intValue0: FloatingPointMode
- DebugInformation, // intValue0: DebugInfoLevel
- LineDirectiveMode,
- Optimization, // intValue0: OptimizationLevel
- Obfuscate, // bool
-
- VulkanBindShift, // intValue0 (higher 8 bits): kind; intValue0(lower bits): set; intValue1: shift
- VulkanBindGlobals, // intValue0: index; intValue1: set
- VulkanInvertY, // bool
- VulkanUseDxPositionW, // bool
- VulkanUseEntryPointName, // bool
- VulkanUseGLLayout, // bool
- VulkanEmitReflection, // bool
-
- GLSLForceScalarLayout, // bool
- EnableEffectAnnotations, // bool
-
- EmitSpirvViaGLSL, // bool
- EmitSpirvDirectly, // bool
- SPIRVCoreGrammarJSON, // stringValue0: json path
- IncompleteLibrary, // bool, when set, will not issue an error when the linked program has unresolved extern function symbols.
-
- // Downstream
-
- CompilerPath,
- DefaultDownstreamCompiler,
- DownstreamArgs, // stringValue0: downstream compiler name. stringValue1: argument list, one per line.
- PassThrough,
-
- // Repro
-
- DumpRepro,
- DumpReproOnError,
- ExtractRepro,
- LoadRepro,
- LoadReproDirectory,
- ReproFallbackDirectory,
-
- // Debugging
-
- DumpAst,
- DumpIntermediatePrefix,
- DumpIntermediates, // bool
- DumpIr, // bool
- DumpIrIds,
- PreprocessorOutput,
- OutputIncludes,
- ReproFileSystem,
- SerialIr, // bool
- SkipCodeGen, // bool
- ValidateIr, // bool
- VerbosePaths,
- VerifyDebugSerialIr,
- NoCodeGen, // Not used.
-
- // Experimental
-
- FileSystem,
- Heterogeneous,
- NoMangle,
- NoHLSLBinding,
- NoHLSLPackConstantBufferElements,
- ValidateUniformity,
- AllowGLSL,
- EnableExperimentalPasses,
-
- // Internal
-
- ArchiveType,
- CompileCoreModule,
- Doc,
- IrCompression,
- LoadCoreModule,
- ReferenceModule,
- SaveCoreModule,
- SaveCoreModuleBinSource,
- TrackLiveness,
- LoopInversion, // bool, enable loop inversion optimization
-
- // Deprecated
- ParameterBlocksUseRegisterSpaces,
-
- CountOfParsableOptions,
-
- // Used in parsed options only.
- DebugInformationFormat, // intValue0: DebugInfoFormat
- VulkanBindShiftAll, // intValue0: kind; intValue1: shift
- GenerateWholeProgram, // bool
- UseUpToDateBinaryModule, // bool, when set, will only load
- // precompiled modules if it is up-to-date with its source.
- EmbedDownstreamIR, // bool
- ForceDXLayout, // bool
- CountOf,
- };
+ enum class CompilerOptionName
+ {
+ MacroDefine, // stringValue0: macro name; stringValue1: macro value
+ DepFile,
+ EntryPointName,
+ Specialize,
+ Help,
+ HelpStyle,
+ Include, // stringValue: additional include path.
+ Language,
+ MatrixLayoutColumn, // bool
+ MatrixLayoutRow, // bool
+ ZeroInitialize, // bool
+ IgnoreCapabilities, // bool
+ RestrictiveCapabilityCheck, // bool
+ ModuleName, // stringValue0: module name.
+ Output,
+ Profile, // intValue0: profile
+ Stage, // intValue0: stage
+ Target, // intValue0: CodeGenTarget
+ Version,
+ WarningsAsErrors, // stringValue0: "all" or comma separated list of warning codes or names.
+ DisableWarnings, // stringValue0: comma separated list of warning codes or names.
+ EnableWarning, // stringValue0: warning code or name.
+ DisableWarning, // stringValue0: warning code or name.
+ DumpWarningDiagnostics,
+ InputFilesRemain,
+ EmitIr, // bool
+ ReportDownstreamTime, // bool
+ ReportPerfBenchmark, // bool
+ ReportCheckpointIntermediates, // bool
+ SkipSPIRVValidation, // bool
+ SourceEmbedStyle,
+ SourceEmbedName,
+ SourceEmbedLanguage,
+ DisableShortCircuit, // bool
+ MinimumSlangOptimization, // bool
+ DisableNonEssentialValidations, // bool
+ DisableSourceMap, // bool
+ UnscopedEnum, // bool
+ PreserveParameters, // bool: preserve all resource parameters in the output code.
+
+ // Target
+
+ Capability, // intValue0: CapabilityName
+ DefaultImageFormatUnknown, // bool
+ DisableDynamicDispatch, // bool
+ DisableSpecialization, // bool
+ FloatingPointMode, // intValue0: FloatingPointMode
+ DebugInformation, // intValue0: DebugInfoLevel
+ LineDirectiveMode,
+ Optimization, // intValue0: OptimizationLevel
+ Obfuscate, // bool
+
+ VulkanBindShift, // intValue0 (higher 8 bits): kind; intValue0(lower bits): set; intValue1:
+ // shift
+ VulkanBindGlobals, // intValue0: index; intValue1: set
+ VulkanInvertY, // bool
+ VulkanUseDxPositionW, // bool
+ VulkanUseEntryPointName, // bool
+ VulkanUseGLLayout, // bool
+ VulkanEmitReflection, // bool
+
+ GLSLForceScalarLayout, // bool
+ EnableEffectAnnotations, // bool
+
+ EmitSpirvViaGLSL, // bool
+ EmitSpirvDirectly, // bool
+ SPIRVCoreGrammarJSON, // stringValue0: json path
+ IncompleteLibrary, // bool, when set, will not issue an error when the linked program has
+ // unresolved extern function symbols.
+
+ // Downstream
+
+ CompilerPath,
+ DefaultDownstreamCompiler,
+ DownstreamArgs, // stringValue0: downstream compiler name. stringValue1: argument list, one
+ // per line.
+ PassThrough,
+
+ // Repro
+
+ DumpRepro,
+ DumpReproOnError,
+ ExtractRepro,
+ LoadRepro,
+ LoadReproDirectory,
+ ReproFallbackDirectory,
+
+ // Debugging
+
+ DumpAst,
+ DumpIntermediatePrefix,
+ DumpIntermediates, // bool
+ DumpIr, // bool
+ DumpIrIds,
+ PreprocessorOutput,
+ OutputIncludes,
+ ReproFileSystem,
+ SerialIr, // bool
+ SkipCodeGen, // bool
+ ValidateIr, // bool
+ VerbosePaths,
+ VerifyDebugSerialIr,
+ NoCodeGen, // Not used.
+
+ // Experimental
+
+ FileSystem,
+ Heterogeneous,
+ NoMangle,
+ NoHLSLBinding,
+ NoHLSLPackConstantBufferElements,
+ ValidateUniformity,
+ AllowGLSL,
+ EnableExperimentalPasses,
+
+ // Internal
+
+ ArchiveType,
+ CompileCoreModule,
+ Doc,
+ IrCompression,
+ LoadCoreModule,
+ ReferenceModule,
+ SaveCoreModule,
+ SaveCoreModuleBinSource,
+ TrackLiveness,
+ LoopInversion, // bool, enable loop inversion optimization
+
+ // Deprecated
+ ParameterBlocksUseRegisterSpaces,
+
+ CountOfParsableOptions,
+
+ // Used in parsed options only.
+ DebugInformationFormat, // intValue0: DebugInfoFormat
+ VulkanBindShiftAll, // intValue0: kind; intValue1: shift
+ GenerateWholeProgram, // bool
+ UseUpToDateBinaryModule, // bool, when set, will only load
+ // precompiled modules if it is up-to-date with its source.
+ EmbedDownstreamIR, // bool
+ ForceDXLayout, // bool
+ CountOf,
+ };
- enum class CompilerOptionValueKind
- {
- Int,
- String
- };
+ enum class CompilerOptionValueKind
+ {
+ Int,
+ String
+ };
- struct CompilerOptionValue
- {
- CompilerOptionValueKind kind = CompilerOptionValueKind::Int;
- int32_t intValue0 = 0;
- int32_t intValue1 = 0;
- const char* stringValue0 = nullptr;
- const char* stringValue1 = nullptr;
- };
+ struct CompilerOptionValue
+ {
+ CompilerOptionValueKind kind = CompilerOptionValueKind::Int;
+ int32_t intValue0 = 0;
+ int32_t intValue1 = 0;
+ const char* stringValue0 = nullptr;
+ const char* stringValue1 = nullptr;
+ };
- struct CompilerOptionEntry
- {
- CompilerOptionName name;
- CompilerOptionValue value;
- };
- }
+ struct CompilerOptionEntry
+ {
+ CompilerOptionName name;
+ CompilerOptionValue value;
+ };
+ } // namespace slang
/** A result code for a Slang API operation.
- This type is generally compatible with the Windows API `HRESULT` type. In particular, negative values indicate
- failure results, while zero or positive results indicate success.
+ This type is generally compatible with the Windows API `HRESULT` type. In particular, negative
+ values indicate failure results, while zero or positive results indicate success.
- In general, Slang APIs always return a zero result on success, unless documented otherwise. Strictly speaking
- a negative value indicates an error, a positive (or 0) value indicates success. This can be tested for with the macros
- SLANG_SUCCEEDED(x) or SLANG_FAILED(x).
+ In general, Slang APIs always return a zero result on success, unless documented otherwise.
+ Strictly speaking a negative value indicates an error, a positive (or 0) value indicates
+ success. This can be tested for with the macros SLANG_SUCCEEDED(x) or SLANG_FAILED(x).
- It can represent if the call was successful or not. It can also specify in an extensible manner what facility
- produced the result (as the integral 'facility') as well as what caused it (as an integral 'code').
- Under the covers SlangResult is represented as a int32_t.
+ It can represent if the call was successful or not. It can also specify in an extensible manner
+ what facility produced the result (as the integral 'facility') as well as what caused it (as an
+ integral 'code'). Under the covers SlangResult is represented as a int32_t.
SlangResult is designed to be compatible with COM HRESULT.
@@ -1016,8 +1037,9 @@ extern "C"
---------|----------|-----
31 | 30-16 | 15-0
- Severity - 1 fail, 0 is success - as SlangResult is signed 32 bits, means negative number indicates failure.
- Facility is where the error originated from. Code is the code specific to the facility.
+ Severity - 1 fail, 0 is success - as SlangResult is signed 32 bits, means negative number
+ indicates failure. Facility is where the error originated from. Code is the code specific to the
+ facility.
Result codes have the following styles,
1) SLANG_name
@@ -1029,41 +1051,48 @@ extern "C"
Style 1 is reserved for SLANG_OK and SLANG_FAIL as they are so commonly used.
- It is acceptable to expand 'f' to a longer name to differentiate a name or drop if unique without it.
- ie for a facility 'DRIVER' it might make sense to have an error of the form SLANG_E_DRIVER_OUT_OF_MEMORY
+ It is acceptable to expand 'f' to a longer name to differentiate a name or drop if unique
+ without it. ie for a facility 'DRIVER' it might make sense to have an error of the form
+ SLANG_E_DRIVER_OUT_OF_MEMORY
*/
typedef int32_t SlangResult;
- //! Use to test if a result was failure. Never use result != SLANG_OK to test for failure, as there may be successful codes != SLANG_OK.
+ //! Use to test if a result was failure. Never use result != SLANG_OK to test for failure, as
+ //! there may be successful codes != SLANG_OK.
#define SLANG_FAILED(status) ((status) < 0)
- //! Use to test if a result succeeded. Never use result == SLANG_OK to test for success, as will detect other successful codes as a failure.
+ //! Use to test if a result succeeded. Never use result == SLANG_OK to test for success, as will
+ //! detect other successful codes as a failure.
#define SLANG_SUCCEEDED(status) ((status) >= 0)
//! Get the facility the result is associated with
-#define SLANG_GET_RESULT_FACILITY(r) ((int32_t)(((r) >> 16) & 0x7fff))
+#define SLANG_GET_RESULT_FACILITY(r) ((int32_t)(((r) >> 16) & 0x7fff))
//! Get the result code for the facility
-#define SLANG_GET_RESULT_CODE(r) ((int32_t)((r) & 0xffff))
+#define SLANG_GET_RESULT_CODE(r) ((int32_t)((r) & 0xffff))
-#define SLANG_MAKE_ERROR(fac, code) ((((int32_t)(fac)) << 16) | ((int32_t)(code)) | int32_t(0x80000000))
-#define SLANG_MAKE_SUCCESS(fac, code) ((((int32_t)(fac)) << 16) | ((int32_t)(code)))
+#define SLANG_MAKE_ERROR(fac, code) \
+ ((((int32_t)(fac)) << 16) | ((int32_t)(code)) | int32_t(0x80000000))
+#define SLANG_MAKE_SUCCESS(fac, code) ((((int32_t)(fac)) << 16) | ((int32_t)(code)))
/*************************** Facilities ************************************/
//! Facilities compatible with windows COM - only use if known code is compatible
-#define SLANG_FACILITY_WIN_GENERAL 0
-#define SLANG_FACILITY_WIN_INTERFACE 4
-#define SLANG_FACILITY_WIN_API 7
-
- //! Base facility -> so as to not clash with HRESULT values (values in 0x200 range do not appear used)
-#define SLANG_FACILITY_BASE 0x200
-
- /*! Facilities numbers must be unique across a project to make the resulting result a unique number.
- It can be useful to have a consistent short name for a facility, as used in the name prefix */
-#define SLANG_FACILITY_CORE SLANG_FACILITY_BASE
- /* Facility for codes, that are not uniquely defined/protected. Can be used to pass back a specific error without requiring system wide facility uniqueness. Codes
- should never be part of a public API. */
-#define SLANG_FACILITY_INTERNAL SLANG_FACILITY_BASE + 1
+#define SLANG_FACILITY_WIN_GENERAL 0
+#define SLANG_FACILITY_WIN_INTERFACE 4
+#define SLANG_FACILITY_WIN_API 7
+
+ //! Base facility -> so as to not clash with HRESULT values (values in 0x200 range do not appear
+ //! used)
+#define SLANG_FACILITY_BASE 0x200
+
+ /*! Facilities numbers must be unique across a project to make the resulting result a unique
+ number. It can be useful to have a consistent short name for a facility, as used in the name
+ prefix */
+#define SLANG_FACILITY_CORE SLANG_FACILITY_BASE
+ /* Facility for codes, that are not uniquely defined/protected. Can be used to pass back a
+ specific error without requiring system wide facility uniqueness. Codes should never be part of
+ a public API. */
+#define SLANG_FACILITY_INTERNAL SLANG_FACILITY_BASE + 1
/// Base for external facilities. Facilities should be unique across modules.
#define SLANG_FACILITY_EXTERNAL_BASE 0x210
@@ -1071,48 +1100,52 @@ extern "C"
/* ************************ Win COM compatible Results ******************************/
// https://msdn.microsoft.com/en-us/library/windows/desktop/aa378137(v=vs.85).aspx
- //! SLANG_OK indicates success, and is equivalent to SLANG_MAKE_SUCCESS(SLANG_FACILITY_WIN_GENERAL, 0)
-#define SLANG_OK 0
- //! SLANG_FAIL is the generic failure code - meaning a serious error occurred and the call couldn't complete
-#define SLANG_FAIL SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_GENERAL, 0x4005)
+ //! SLANG_OK indicates success, and is equivalent to
+ //! SLANG_MAKE_SUCCESS(SLANG_FACILITY_WIN_GENERAL, 0)
+#define SLANG_OK 0
+ //! SLANG_FAIL is the generic failure code - meaning a serious error occurred and the call
+ //! couldn't complete
+#define SLANG_FAIL SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_GENERAL, 0x4005)
-#define SLANG_MAKE_WIN_GENERAL_ERROR(code) SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_GENERAL, code)
+#define SLANG_MAKE_WIN_GENERAL_ERROR(code) SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_GENERAL, code)
//! Functionality is not implemented
-#define SLANG_E_NOT_IMPLEMENTED SLANG_MAKE_WIN_GENERAL_ERROR(0x4001)
+#define SLANG_E_NOT_IMPLEMENTED SLANG_MAKE_WIN_GENERAL_ERROR(0x4001)
//! Interface not be found
-#define SLANG_E_NO_INTERFACE SLANG_MAKE_WIN_GENERAL_ERROR(0x4002)
+#define SLANG_E_NO_INTERFACE SLANG_MAKE_WIN_GENERAL_ERROR(0x4002)
//! Operation was aborted (did not correctly complete)
-#define SLANG_E_ABORT SLANG_MAKE_WIN_GENERAL_ERROR(0x4004)
+#define SLANG_E_ABORT SLANG_MAKE_WIN_GENERAL_ERROR(0x4004)
//! Indicates that a handle passed in as parameter to a method is invalid.
-#define SLANG_E_INVALID_HANDLE SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_API, 6)
+#define SLANG_E_INVALID_HANDLE SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_API, 6)
//! Indicates that an argument passed in as parameter to a method is invalid.
-#define SLANG_E_INVALID_ARG SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_API, 0x57)
+#define SLANG_E_INVALID_ARG SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_API, 0x57)
//! Operation could not complete - ran out of memory
-#define SLANG_E_OUT_OF_MEMORY SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_API, 0xe)
+#define SLANG_E_OUT_OF_MEMORY SLANG_MAKE_ERROR(SLANG_FACILITY_WIN_API, 0xe)
/* *************************** other Results **************************************/
-#define SLANG_MAKE_CORE_ERROR(code) SLANG_MAKE_ERROR(SLANG_FACILITY_CORE, code)
+#define SLANG_MAKE_CORE_ERROR(code) SLANG_MAKE_ERROR(SLANG_FACILITY_CORE, code)
// Supplied buffer is too small to be able to complete
-#define SLANG_E_BUFFER_TOO_SMALL SLANG_MAKE_CORE_ERROR(1)
+#define SLANG_E_BUFFER_TOO_SMALL SLANG_MAKE_CORE_ERROR(1)
//! Used to identify a Result that has yet to be initialized.
- //! It defaults to failure such that if used incorrectly will fail, as similar in concept to using an uninitialized variable.
-#define SLANG_E_UNINITIALIZED SLANG_MAKE_CORE_ERROR(2)
- //! Returned from an async method meaning the output is invalid (thus an error), but a result for the request is pending, and will be returned on a subsequent call with the async handle.
-#define SLANG_E_PENDING SLANG_MAKE_CORE_ERROR(3)
+ //! It defaults to failure such that if used incorrectly will fail, as similar in concept to
+ //! using an uninitialized variable.
+#define SLANG_E_UNINITIALIZED SLANG_MAKE_CORE_ERROR(2)
+ //! Returned from an async method meaning the output is invalid (thus an error), but a result
+ //! for the request is pending, and will be returned on a subsequent call with the async handle.
+#define SLANG_E_PENDING SLANG_MAKE_CORE_ERROR(3)
//! Indicates a file/resource could not be opened
-#define SLANG_E_CANNOT_OPEN SLANG_MAKE_CORE_ERROR(4)
+#define SLANG_E_CANNOT_OPEN SLANG_MAKE_CORE_ERROR(4)
//! Indicates a file/resource could not be found
-#define SLANG_E_NOT_FOUND SLANG_MAKE_CORE_ERROR(5)
+#define SLANG_E_NOT_FOUND SLANG_MAKE_CORE_ERROR(5)
//! An unhandled internal failure (typically from unhandled exception)
-#define SLANG_E_INTERNAL_FAIL SLANG_MAKE_CORE_ERROR(6)
- //! Could not complete because some underlying feature (hardware or software) was not available
-#define SLANG_E_NOT_AVAILABLE SLANG_MAKE_CORE_ERROR(7)
- //! Could not complete because the operation times out.
-#define SLANG_E_TIME_OUT SLANG_MAKE_CORE_ERROR(8)
+#define SLANG_E_INTERNAL_FAIL SLANG_MAKE_CORE_ERROR(6)
+ //! Could not complete because some underlying feature (hardware or software) was not available
+#define SLANG_E_NOT_AVAILABLE SLANG_MAKE_CORE_ERROR(7)
+ //! Could not complete because the operation times out.
+#define SLANG_E_TIME_OUT SLANG_MAKE_CORE_ERROR(8)
/** A "Universally Unique Identifier" (UUID)
@@ -1128,40 +1161,47 @@ extern "C"
uint32_t data1;
uint16_t data2;
uint16_t data3;
- uint8_t data4[8];
+ uint8_t data4[8];
};
// Place at the start of an interface with the guid.
-// Guid should be specified as SLANG_COM_INTERFACE(0x00000000, 0x0000, 0x0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 })
-// NOTE: it's the typical guid struct definition, without the surrounding {}
-// It is not necessary to use the multiple parameters (we can wrap in parens), but this is simple.
+// Guid should be specified as SLANG_COM_INTERFACE(0x00000000, 0x0000, 0x0000, { 0xC0, 0x00, 0x00,
+// 0x00, 0x00, 0x00, 0x00, 0x46 }) NOTE: it's the typical guid struct definition, without the
+// surrounding {} It is not necessary to use the multiple parameters (we can wrap in parens), but
+// this is simple.
#define SLANG_COM_INTERFACE(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
- public: \
- SLANG_FORCE_INLINE constexpr static SlangUUID getTypeGuid() \
- { \
- return { a, b, c, d0, d1, d2, d3, d4, d5, d6, d7 }; \
+public: \
+ SLANG_FORCE_INLINE constexpr static SlangUUID getTypeGuid() \
+ { \
+ return {a, b, c, d0, d1, d2, d3, d4, d5, d6, d7}; \
}
-// Sometimes it's useful to associate a guid with a class to identify it. This macro can used for this,
-// and the guid extracted via the getTypeGuid() function defined in the type
+// Sometimes it's useful to associate a guid with a class to identify it. This macro can used for
+// this, and the guid extracted via the getTypeGuid() function defined in the type
#define SLANG_CLASS_GUID(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) \
- SLANG_FORCE_INLINE constexpr static SlangUUID getTypeGuid() \
- { \
- return { a, b, c, d0, d1, d2, d3, d4, d5, d6, d7 }; \
+ SLANG_FORCE_INLINE constexpr static SlangUUID getTypeGuid() \
+ { \
+ return {a, b, c, d0, d1, d2, d3, d4, d5, d6, d7}; \
}
// Helper to fill in pairs of GUIDs and return pointers. This ensures that the
// type of the GUID passed matches the pointer type, and that it is derived
// from ISlangUnknown,
-// TODO(c++20): would is_derived_from be more appropriate here for private inheritance of ISlangUnknown?
+// TODO(c++20): would is_derived_from be more appropriate here for private inheritance of
+// ISlangUnknown?
//
// with : void createFoo(SlangUUID, void**);
// Slang::ComPtr<Bar> myBar;
// call with: createFoo(SLANG_IID_PPV_ARGS(myBar.writeRef()))
// to call : createFoo(Bar::getTypeGuid(), (void**)(myBar.writeRef()))
-#define SLANG_IID_PPV_ARGS(ppType) \
- std::decay_t<decltype(**(ppType))>::getTypeGuid(), \
- ((void)[]{static_assert(std::is_base_of_v<ISlangUnknown, std::decay_t<decltype(**(ppType))>>);}, reinterpret_cast<void**>(ppType))
+#define SLANG_IID_PPV_ARGS(ppType) \
+ std::decay_t<decltype(**(ppType))>::getTypeGuid(), \
+ ( \
+ (void)[] { \
+ static_assert( \
+ std::is_base_of_v<ISlangUnknown, std::decay_t<decltype(**(ppType))>>); \
+ }, \
+ reinterpret_cast<void**>(ppType))
/** Base interface for components exchanged through the API.
@@ -1172,9 +1212,14 @@ extern "C"
*/
struct ISlangUnknown
{
- SLANG_COM_INTERFACE(0x00000000, 0x0000, 0x0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 })
+ SLANG_COM_INTERFACE(
+ 0x00000000,
+ 0x0000,
+ 0x0000,
+ {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46})
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL queryInterface(SlangUUID const& uuid, void** outObject) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ queryInterface(SlangUUID const& uuid, void** outObject) = 0;
virtual SLANG_NO_THROW uint32_t SLANG_MCALL addRef() = 0;
virtual SLANG_NO_THROW uint32_t SLANG_MCALL release() = 0;
@@ -1182,33 +1227,44 @@ extern "C"
Inline methods are provided to allow the above operations to be called
using their traditional COM names/signatures:
*/
- SlangResult QueryInterface(struct _GUID const& uuid, void** outObject) { return queryInterface(*(SlangUUID const*)&uuid, outObject); }
+ SlangResult QueryInterface(struct _GUID const& uuid, void** outObject)
+ {
+ return queryInterface(*(SlangUUID const*)&uuid, outObject);
+ }
uint32_t AddRef() { return addRef(); }
uint32_t Release() { return release(); }
};
- #define SLANG_UUID_ISlangUnknown ISlangUnknown::getTypeGuid()
+#define SLANG_UUID_ISlangUnknown ISlangUnknown::getTypeGuid()
/* An interface to provide a mechanism to cast, that doesn't require ref counting
and doesn't have to return a pointer to a ISlangUnknown derived class */
class ISlangCastable : public ISlangUnknown
{
- SLANG_COM_INTERFACE(0x87ede0e1, 0x4852, 0x44b0, { 0x8b, 0xf2, 0xcb, 0x31, 0x87, 0x4d, 0xe2, 0x39 });
-
- /// Can be used to cast to interfaces without reference counting.
- /// Also provides access to internal implementations, when they provide a guid
- /// Can simulate a 'generated' interface as long as kept in scope by cast from.
+ SLANG_COM_INTERFACE(
+ 0x87ede0e1,
+ 0x4852,
+ 0x44b0,
+ {0x8b, 0xf2, 0xcb, 0x31, 0x87, 0x4d, 0xe2, 0x39});
+
+ /// Can be used to cast to interfaces without reference counting.
+ /// Also provides access to internal implementations, when they provide a guid
+ /// Can simulate a 'generated' interface as long as kept in scope by cast from.
virtual SLANG_NO_THROW void* SLANG_MCALL castAs(const SlangUUID& guid) = 0;
};
class ISlangClonable : public ISlangCastable
{
- SLANG_COM_INTERFACE(0x1ec36168, 0xe9f4, 0x430d, { 0xbb, 0x17, 0x4, 0x8a, 0x80, 0x46, 0xb3, 0x1f });
-
- /// Note the use of guid is for the desired interface/object.
- /// The object is returned *not* ref counted. Any type that can implements the interface,
- /// derives from ICastable, and so (not withstanding some other issue) will always return
- /// an ICastable interface which other interfaces/types are accessible from via castAs
+ SLANG_COM_INTERFACE(
+ 0x1ec36168,
+ 0xe9f4,
+ 0x430d,
+ {0xbb, 0x17, 0x4, 0x8a, 0x80, 0x46, 0xb3, 0x1f});
+
+ /// Note the use of guid is for the desired interface/object.
+ /// The object is returned *not* ref counted. Any type that can implements the interface,
+ /// derives from ICastable, and so (not withstanding some other issue) will always return
+ /// an ICastable interface which other interfaces/types are accessible from via castAs
SLANG_NO_THROW virtual void* SLANG_MCALL clone(const SlangUUID& guid) = 0;
};
@@ -1218,18 +1274,27 @@ extern "C"
*/
struct ISlangBlob : public ISlangUnknown
{
- SLANG_COM_INTERFACE(0x8BA5FB08, 0x5195, 0x40e2, { 0xAC, 0x58, 0x0D, 0x98, 0x9C, 0x3A, 0x01, 0x02 })
+ SLANG_COM_INTERFACE(
+ 0x8BA5FB08,
+ 0x5195,
+ 0x40e2,
+ {0xAC, 0x58, 0x0D, 0x98, 0x9C, 0x3A, 0x01, 0x02})
virtual SLANG_NO_THROW void const* SLANG_MCALL getBufferPointer() = 0;
virtual SLANG_NO_THROW size_t SLANG_MCALL getBufferSize() = 0;
};
- #define SLANG_UUID_ISlangBlob ISlangBlob::getTypeGuid()
+#define SLANG_UUID_ISlangBlob ISlangBlob::getTypeGuid()
- /* Can be requested from ISlangCastable cast to indicate the contained chars are null terminated.
- */
+ /* Can be requested from ISlangCastable cast to indicate the contained chars are null
+ * terminated.
+ */
struct SlangTerminatedChars
{
- SLANG_CLASS_GUID(0xbe0db1a8, 0x3594, 0x4603, { 0xa7, 0x8b, 0xc4, 0x86, 0x84, 0x30, 0xdf, 0xbb });
+ SLANG_CLASS_GUID(
+ 0xbe0db1a8,
+ 0x3594,
+ 0x4603,
+ {0xa7, 0x8b, 0xc4, 0x86, 0x84, 0x30, 0xdf, 0xbb});
operator const char*() const { return chars; }
char chars[1];
};
@@ -1240,14 +1305,18 @@ extern "C"
from disk, allowing applications to hook and/or override filesystem access from
the compiler.
- It is the responsibility of
- the caller of any method that returns a ISlangBlob to release the blob when it is no
+ It is the responsibility of
+ the caller of any method that returns a ISlangBlob to release the blob when it is no
longer used (using 'release').
*/
struct ISlangFileSystem : public ISlangCastable
{
- SLANG_COM_INTERFACE(0x003A09FC, 0x3A4D, 0x4BA0, { 0xAD, 0x60, 0x1F, 0xD8, 0x63, 0xA9, 0x15, 0xAB })
+ SLANG_COM_INTERFACE(
+ 0x003A09FC,
+ 0x3A4D,
+ 0x4BA0,
+ {0xAD, 0x60, 0x1F, 0xD8, 0x63, 0xA9, 0x15, 0xAB})
/** Load a file from `path` and return a blob of its contents
@param path The path to load from, as a null-terminated UTF-8 string.
@@ -1255,45 +1324,55 @@ extern "C"
@returns A `SlangResult` to indicate success or failure in loading the file.
NOTE! This is a *binary* load - the blob should contain the exact same bytes
- as are found in the backing file.
+ as are found in the backing file.
If load is successful, the implementation should create a blob to hold
the file's content, store it to `outBlob`, and return 0.
If the load fails, the implementation should return a failure status
(any negative value will do).
*/
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL loadFile(
- char const* path,
- ISlangBlob** outBlob) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ loadFile(char const* path, ISlangBlob** outBlob) = 0;
};
- #define SLANG_UUID_ISlangFileSystem ISlangFileSystem::getTypeGuid()
+#define SLANG_UUID_ISlangFileSystem ISlangFileSystem::getTypeGuid()
- typedef void(*SlangFuncPtr)(void);
+ typedef void (*SlangFuncPtr)(void);
- /**
+ /**
(DEPRECATED) ISlangSharedLibrary
*/
- struct ISlangSharedLibrary_Dep1: public ISlangUnknown
+ struct ISlangSharedLibrary_Dep1 : public ISlangUnknown
{
- SLANG_COM_INTERFACE( 0x9c9d5bc5, 0xeb61, 0x496f,{ 0x80, 0xd7, 0xd1, 0x47, 0xc4, 0xa2, 0x37, 0x30 })
+ SLANG_COM_INTERFACE(
+ 0x9c9d5bc5,
+ 0xeb61,
+ 0x496f,
+ {0x80, 0xd7, 0xd1, 0x47, 0xc4, 0xa2, 0x37, 0x30})
virtual SLANG_NO_THROW void* SLANG_MCALL findSymbolAddressByName(char const* name) = 0;
};
- #define SLANG_UUID_ISlangSharedLibrary_Dep1 ISlangSharedLibrary_Dep1::getTypeGuid()
+#define SLANG_UUID_ISlangSharedLibrary_Dep1 ISlangSharedLibrary_Dep1::getTypeGuid()
/** An interface that can be used to encapsulate access to a shared library. An implementation
does not have to implement the library as a shared library
*/
struct ISlangSharedLibrary : public ISlangCastable
{
- SLANG_COM_INTERFACE(0x70dbc7c4, 0xdc3b, 0x4a07, { 0xae, 0x7e, 0x75, 0x2a, 0xf6, 0xa8, 0x15, 0x55 })
+ SLANG_COM_INTERFACE(
+ 0x70dbc7c4,
+ 0xdc3b,
+ 0x4a07,
+ {0xae, 0x7e, 0x75, 0x2a, 0xf6, 0xa8, 0x15, 0x55})
/** Get a function by name. If the library is unloaded will only return nullptr.
@param name The name of the function
@return The function pointer related to the name or nullptr if not found
*/
- SLANG_FORCE_INLINE SlangFuncPtr findFuncByName(char const* name) { return (SlangFuncPtr)findSymbolAddressByName(name); }
+ SLANG_FORCE_INLINE SlangFuncPtr findFuncByName(char const* name)
+ {
+ return (SlangFuncPtr)findSymbolAddressByName(name);
+ }
/** Get a symbol by name. If the library is unloaded will only return nullptr.
@param name The name of the symbol
@@ -1301,166 +1380,183 @@ extern "C"
*/
virtual SLANG_NO_THROW void* SLANG_MCALL findSymbolAddressByName(char const* name) = 0;
};
- #define SLANG_UUID_ISlangSharedLibrary ISlangSharedLibrary::getTypeGuid()
+#define SLANG_UUID_ISlangSharedLibrary ISlangSharedLibrary::getTypeGuid()
- struct ISlangSharedLibraryLoader: public ISlangUnknown
+ struct ISlangSharedLibraryLoader : public ISlangUnknown
{
- SLANG_COM_INTERFACE(0x6264ab2b, 0xa3e8, 0x4a06, { 0x97, 0xf1, 0x49, 0xbc, 0x2d, 0x2a, 0xb1, 0x4d })
-
- /** Load a shared library. In typical usage the library name should *not* contain any platform
- specific elements. For example on windows a dll name should *not* be passed with a '.dll' extension,
- and similarly on linux a shared library should *not* be passed with the 'lib' prefix and '.so' extension
- @path path The unadorned filename and/or path for the shared library
- @ param sharedLibraryOut Holds the shared library if successfully loaded */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL loadSharedLibrary(
- const char* path,
- ISlangSharedLibrary** sharedLibraryOut) = 0;
+ SLANG_COM_INTERFACE(
+ 0x6264ab2b,
+ 0xa3e8,
+ 0x4a06,
+ {0x97, 0xf1, 0x49, 0xbc, 0x2d, 0x2a, 0xb1, 0x4d})
+
+ /** Load a shared library. In typical usage the library name should *not* contain any
+ platform specific elements. For example on windows a dll name should *not* be passed with a
+ '.dll' extension, and similarly on linux a shared library should *not* be passed with the
+ 'lib' prefix and '.so' extension
+ @path path The unadorned filename and/or path for the shared library
+ @ param sharedLibraryOut Holds the shared library if successfully loaded */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ loadSharedLibrary(const char* path, ISlangSharedLibrary** sharedLibraryOut) = 0;
};
- #define SLANG_UUID_ISlangSharedLibraryLoader ISlangSharedLibraryLoader::getTypeGuid()
-
+#define SLANG_UUID_ISlangSharedLibraryLoader ISlangSharedLibraryLoader::getTypeGuid()
+
/* Type that identifies how a path should be interpreted */
typedef unsigned int SlangPathTypeIntegral;
enum SlangPathType : SlangPathTypeIntegral
{
- SLANG_PATH_TYPE_DIRECTORY, /**< Path specified specifies a directory. */
- SLANG_PATH_TYPE_FILE, /**< Path specified is to a file. */
+ SLANG_PATH_TYPE_DIRECTORY, /**< Path specified specifies a directory. */
+ SLANG_PATH_TYPE_FILE, /**< Path specified is to a file. */
};
/* Callback to enumerate the contents of of a directory in a ISlangFileSystemExt.
- The name is the name of a file system object (directory/file) in the specified path (ie it is without a path) */
- typedef void (*FileSystemContentsCallBack)(SlangPathType pathType, const char* name, void* userData);
+ The name is the name of a file system object (directory/file) in the specified path (ie it is
+ without a path) */
+ typedef void (
+ *FileSystemContentsCallBack)(SlangPathType pathType, const char* name, void* userData);
/* Determines how paths map to files on the OS file system */
enum class OSPathKind : uint8_t
{
- None, ///< Paths do not map to the file system
- Direct, ///< Paths map directly to the file system
- OperatingSystem, ///< Only paths gained via PathKind::OperatingSystem map to the operating system file system
+ None, ///< Paths do not map to the file system
+ Direct, ///< Paths map directly to the file system
+ OperatingSystem, ///< Only paths gained via PathKind::OperatingSystem map to the operating
+ ///< system file system
};
/* Used to determine what kind of path is required from an input path */
enum class PathKind
{
- /// Given a path, returns a simplified version of that path.
- /// This typically means removing '..' and/or '.' from the path.
- /// A simplified path must point to the same object as the original.
- Simplified,
-
- /// Given a path, returns a 'canonical path' to the item.
- /// This may be the operating system 'canonical path' that is the unique path to the item.
- ///
- /// If the item exists the returned canonical path should always be usable to access the item.
- ///
- /// If the item the path specifies doesn't exist, the canonical path may not be returnable
- /// or be a path simplification.
- /// Not all file systems support canonical paths.
+ /// Given a path, returns a simplified version of that path.
+ /// This typically means removing '..' and/or '.' from the path.
+ /// A simplified path must point to the same object as the original.
+ Simplified,
+
+ /// Given a path, returns a 'canonical path' to the item.
+ /// This may be the operating system 'canonical path' that is the unique path to the item.
+ ///
+ /// If the item exists the returned canonical path should always be usable to access the
+ /// item.
+ ///
+ /// If the item the path specifies doesn't exist, the canonical path may not be returnable
+ /// or be a path simplification.
+ /// Not all file systems support canonical paths.
Canonical,
- /// Given a path returns a path such that it is suitable to be displayed to the user.
- ///
- /// For example if the file system is a zip file - it might include the path to the zip
- /// container as well as the path to the specific file.
- ///
- /// NOTE! The display path won't necessarily work on the file system to access the item
+ /// Given a path returns a path such that it is suitable to be displayed to the user.
+ ///
+ /// For example if the file system is a zip file - it might include the path to the zip
+ /// container as well as the path to the specific file.
+ ///
+ /// NOTE! The display path won't necessarily work on the file system to access the item
Display,
- /// Get the path to the item on the *operating system* file system, if available.
+ /// Get the path to the item on the *operating system* file system, if available.
OperatingSystem,
CountOf,
};
/** An extended file system abstraction.
-
- Implementing and using this interface over ISlangFileSystem gives much more control over how paths
- are managed, as well as how it is determined if two files 'are the same'.
+
+ Implementing and using this interface over ISlangFileSystem gives much more control over how
+ paths are managed, as well as how it is determined if two files 'are the same'.
All paths as input char*, or output as ISlangBlobs are always encoded as UTF-8 strings.
Blobs that contain strings are always zero terminated.
*/
struct ISlangFileSystemExt : public ISlangFileSystem
{
- SLANG_COM_INTERFACE(0x5fb632d2, 0x979d, 0x4481, { 0x9f, 0xee, 0x66, 0x3c, 0x3f, 0x14, 0x49, 0xe1 })
+ SLANG_COM_INTERFACE(
+ 0x5fb632d2,
+ 0x979d,
+ 0x4481,
+ {0x9f, 0xee, 0x66, 0x3c, 0x3f, 0x14, 0x49, 0xe1})
/** Get a uniqueIdentity which uniquely identifies an object of the file system.
-
- Given a path, returns a 'uniqueIdentity' which ideally is the same value for the same object on the file system.
-
- The uniqueIdentity is used to compare if two paths are the same - which amongst other things allows Slang to
- cache source contents internally. It is also used for #pragma once functionality.
-
- A *requirement* is for any implementation is that two paths can only return the same uniqueIdentity if the
- contents of the two files are *identical*. If an implementation breaks this constraint it can produce incorrect compilation.
- If an implementation cannot *strictly* identify *the same* files, this will only have an effect on #pragma once behavior.
-
- The string for the uniqueIdentity is held zero terminated in the ISlangBlob of outUniqueIdentity.
-
- Note that there are many ways a uniqueIdentity may be generated for a file. For example it could be the
- 'canonical path' - assuming it is available and unambiguous for a file system. Another possible mechanism
- could be to store the filename combined with the file date time to uniquely identify it.
-
+
+ Given a path, returns a 'uniqueIdentity' which ideally is the same value for the same object
+ on the file system.
+
+ The uniqueIdentity is used to compare if two paths are the same - which amongst other things
+ allows Slang to cache source contents internally. It is also used for #pragma once
+ functionality.
+
+ A *requirement* is for any implementation is that two paths can only return the same
+ uniqueIdentity if the contents of the two files are *identical*. If an implementation breaks
+ this constraint it can produce incorrect compilation. If an implementation cannot *strictly*
+ identify *the same* files, this will only have an effect on #pragma once behavior.
+
+ The string for the uniqueIdentity is held zero terminated in the ISlangBlob of
+ outUniqueIdentity.
+
+ Note that there are many ways a uniqueIdentity may be generated for a file. For example it
+ could be the 'canonical path' - assuming it is available and unambiguous for a file system.
+ Another possible mechanism could be to store the filename combined with the file date time
+ to uniquely identify it.
+
The client must ensure the blob be released when no longer used, otherwise memory will leak.
- NOTE! Ideally this method would be called 'getPathUniqueIdentity' but for historical reasons and
- backward compatibility it's name remains with 'File' even though an implementation should be made to work
- with directories too.
+ NOTE! Ideally this method would be called 'getPathUniqueIdentity' but for historical reasons
+ and backward compatibility it's name remains with 'File' even though an implementation
+ should be made to work with directories too.
@param path
@param outUniqueIdentity
@returns A `SlangResult` to indicate success or failure getting the uniqueIdentity.
*/
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getFileUniqueIdentity(
- const char* path,
- ISlangBlob** outUniqueIdentity) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getFileUniqueIdentity(const char* path, ISlangBlob** outUniqueIdentity) = 0;
/** Calculate a path combining the 'fromPath' with 'path'
The client must ensure the blob be released when no longer used, otherwise memory will leak.
@param fromPathType How to interpret the from path - as a file or a directory.
- @param fromPath The from path.
+ @param fromPath The from path.
@param path Path to be determined relative to the fromPath
- @param pathOut Holds the string which is the relative path. The string is held in the blob zero terminated.
+ @param pathOut Holds the string which is the relative path. The string is held in the blob
+ zero terminated.
@returns A `SlangResult` to indicate success or failure in loading the file.
*/
virtual SLANG_NO_THROW SlangResult SLANG_MCALL calcCombinedPath(
SlangPathType fromPathType,
const char* fromPath,
const char* path,
- ISlangBlob** pathOut) = 0;
-
- /** Gets the type of path that path is on the file system.
+ ISlangBlob** pathOut) = 0;
+
+ /** Gets the type of path that path is on the file system.
@param path
@param pathTypeOut
- @returns SLANG_OK if located and type is known, else an error. SLANG_E_NOT_FOUND if not found.
+ @returns SLANG_OK if located and type is known, else an error. SLANG_E_NOT_FOUND if not
+ found.
*/
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getPathType(
- const char* path,
- SlangPathType* pathTypeOut) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getPathType(const char* path, SlangPathType* pathTypeOut) = 0;
/** Get a path based on the kind.
@param kind The kind of path wanted
@param path The input path
@param outPath The output path held in a blob
- @returns SLANG_OK if successfully simplified the path (SLANG_E_NOT_IMPLEMENTED if not implemented, or some other error code)
+ @returns SLANG_OK if successfully simplified the path (SLANG_E_NOT_IMPLEMENTED if not
+ implemented, or some other error code)
*/
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getPath(
- PathKind kind,
- const char* path,
- ISlangBlob** outPath) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getPath(PathKind kind, const char* path, ISlangBlob** outPath) = 0;
/** Clears any cached information */
virtual SLANG_NO_THROW void SLANG_MCALL clearCache() = 0;
/** Enumerate the contents of the path
-
- Note that for normal Slang operation it isn't necessary to enumerate contents this can return SLANG_E_NOT_IMPLEMENTED.
-
+
+ Note that for normal Slang operation it isn't necessary to enumerate contents this can
+ return SLANG_E_NOT_IMPLEMENTED.
+
@param The path to enumerate
- @param callback This callback is called for each entry in the path.
+ @param callback This callback is called for each entry in the path.
@param userData This is passed to the callback
- @returns SLANG_OK if successful
+ @returns SLANG_OK if successful
*/
virtual SLANG_NO_THROW SlangResult SLANG_MCALL enumeratePathContents(
const char* path,
@@ -1468,67 +1564,69 @@ extern "C"
void* userData) = 0;
/** Returns how paths map to the OS file system
-
+
@returns OSPathKind that describes how paths map to the Operating System file system
*/
virtual SLANG_NO_THROW OSPathKind SLANG_MCALL getOSPathKind() = 0;
};
- #define SLANG_UUID_ISlangFileSystemExt ISlangFileSystemExt::getTypeGuid()
+#define SLANG_UUID_ISlangFileSystemExt ISlangFileSystemExt::getTypeGuid()
struct ISlangMutableFileSystem : public ISlangFileSystemExt
{
- SLANG_COM_INTERFACE(0xa058675c, 0x1d65, 0x452a, { 0x84, 0x58, 0xcc, 0xde, 0xd1, 0x42, 0x71, 0x5 })
+ SLANG_COM_INTERFACE(
+ 0xa058675c,
+ 0x1d65,
+ 0x452a,
+ {0x84, 0x58, 0xcc, 0xde, 0xd1, 0x42, 0x71, 0x5})
/** Write data to the specified path.
@param path The path for data to be saved to
@param data The data to be saved
@param size The size of the data in bytes
- @returns SLANG_OK if successful (SLANG_E_NOT_IMPLEMENTED if not implemented, or some other error code)
+ @returns SLANG_OK if successful (SLANG_E_NOT_IMPLEMENTED if not implemented, or some other
+ error code)
*/
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL saveFile(
- const char* path,
- const void* data,
- size_t size) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ saveFile(const char* path, const void* data, size_t size) = 0;
/** Write data in the form of a blob to the specified path.
- Depending on the implementation writing a blob might be faster/use less memory. It is assumed the
- blob is *immutable* and that an implementation can reference count it.
+ Depending on the implementation writing a blob might be faster/use less memory. It is
+ assumed the blob is *immutable* and that an implementation can reference count it.
- It is not guaranteed loading the same file will return the *same* blob - just a blob with same
- contents.
+ It is not guaranteed loading the same file will return the *same* blob - just a blob with
+ same contents.
@param path The path for data to be saved to
@param dataBlob The data to be saved
- @returns SLANG_OK if successful (SLANG_E_NOT_IMPLEMENTED if not implemented, or some other error code)
+ @returns SLANG_OK if successful (SLANG_E_NOT_IMPLEMENTED if not implemented, or some other
+ error code)
*/
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL saveFileBlob(
- const char* path,
- ISlangBlob* dataBlob) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ saveFileBlob(const char* path, ISlangBlob* dataBlob) = 0;
- /** Remove the entry in the path (directory of file). Will only delete an empty directory, if not empty
- will return an error.
+ /** Remove the entry in the path (directory of file). Will only delete an empty directory,
+ if not empty will return an error.
- @param path The path to remove
- @returns SLANG_OK if successful
+ @param path The path to remove
+ @returns SLANG_OK if successful
*/
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL remove(
- const char* path) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL remove(const char* path) = 0;
/** Create a directory.
The path to the directory must exist
- @param path To the directory to create. The parent path *must* exist otherwise will return an error.
- @returns SLANG_OK if successful
+ @param path To the directory to create. The parent path *must* exist otherwise will return
+ an error.
+ @returns SLANG_OK if successful
*/
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL createDirectory(
- const char* path) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL createDirectory(const char* path) = 0;
};
- #define SLANG_UUID_ISlangMutableFileSystem ISlangMutableFileSystem::getTypeGuid()
+#define SLANG_UUID_ISlangMutableFileSystem ISlangMutableFileSystem::getTypeGuid()
/* Identifies different types of writer target*/
typedef unsigned int SlangWriterChannelIntegral;
@@ -1548,51 +1646,64 @@ extern "C"
};
/** A stream typically of text, used for outputting diagnostic as well as other information.
- */
+ */
struct ISlangWriter : public ISlangUnknown
{
- SLANG_COM_INTERFACE(0xec457f0e, 0x9add, 0x4e6b,{ 0x85, 0x1c, 0xd7, 0xfa, 0x71, 0x6d, 0x15, 0xfd })
-
- /** Begin an append buffer.
- NOTE! Only one append buffer can be active at any time.
- @param maxNumChars The maximum of chars that will be appended
- @returns The start of the buffer for appending to. */
+ SLANG_COM_INTERFACE(
+ 0xec457f0e,
+ 0x9add,
+ 0x4e6b,
+ {0x85, 0x1c, 0xd7, 0xfa, 0x71, 0x6d, 0x15, 0xfd})
+
+ /** Begin an append buffer.
+ NOTE! Only one append buffer can be active at any time.
+ @param maxNumChars The maximum of chars that will be appended
+ @returns The start of the buffer for appending to. */
virtual SLANG_NO_THROW char* SLANG_MCALL beginAppendBuffer(size_t maxNumChars) = 0;
- /** Ends the append buffer, and is equivalent to a write of the append buffer.
- NOTE! That an endAppendBuffer is not necessary if there are no characters to write.
- @param buffer is the start of the data to append and must be identical to last value returned from beginAppendBuffer
- @param numChars must be a value less than or equal to what was returned from last call to beginAppendBuffer
- @returns Result, will be SLANG_OK on success */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL endAppendBuffer(char* buffer, size_t numChars) = 0;
- /** Write text to the writer
- @param chars The characters to write out
- @param numChars The amount of characters
- @returns SLANG_OK on success */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL write(const char* chars, size_t numChars) = 0;
- /** Flushes any content to the output */
+ /** Ends the append buffer, and is equivalent to a write of the append buffer.
+ NOTE! That an endAppendBuffer is not necessary if there are no characters to write.
+ @param buffer is the start of the data to append and must be identical to last value
+ returned from beginAppendBuffer
+ @param numChars must be a value less than or equal to what was returned from last call to
+ beginAppendBuffer
+ @returns Result, will be SLANG_OK on success */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ endAppendBuffer(char* buffer, size_t numChars) = 0;
+ /** Write text to the writer
+ @param chars The characters to write out
+ @param numChars The amount of characters
+ @returns SLANG_OK on success */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ write(const char* chars, size_t numChars) = 0;
+ /** Flushes any content to the output */
virtual SLANG_NO_THROW void SLANG_MCALL flush() = 0;
- /** Determines if the writer stream is to the console, and can be used to alter the output
- @returns Returns true if is a console writer */
+ /** Determines if the writer stream is to the console, and can be used to alter the output
+ @returns Returns true if is a console writer */
virtual SLANG_NO_THROW SlangBool SLANG_MCALL isConsole() = 0;
- /** Set the mode for the writer to use
- @param mode The mode to use
- @returns SLANG_OK on success */
+ /** Set the mode for the writer to use
+ @param mode The mode to use
+ @returns SLANG_OK on success */
virtual SLANG_NO_THROW SlangResult SLANG_MCALL setMode(SlangWriterMode mode) = 0;
};
-
- #define SLANG_UUID_ISlangWriter ISlangWriter::getTypeGuid()
+
+#define SLANG_UUID_ISlangWriter ISlangWriter::getTypeGuid()
struct ISlangProfiler : public ISlangUnknown
{
- SLANG_COM_INTERFACE(0x197772c7, 0x0155, 0x4b91, { 0x84, 0xe8, 0x66, 0x68, 0xba, 0xff, 0x06, 0x19 })
+ SLANG_COM_INTERFACE(
+ 0x197772c7,
+ 0x0155,
+ 0x4b91,
+ {0x84, 0xe8, 0x66, 0x68, 0xba, 0xff, 0x06, 0x19})
virtual SLANG_NO_THROW size_t SLANG_MCALL getEntryCount() = 0;
virtual SLANG_NO_THROW const char* SLANG_MCALL getEntryName(uint32_t index) = 0;
virtual SLANG_NO_THROW long SLANG_MCALL getEntryTimeMS(uint32_t index) = 0;
virtual SLANG_NO_THROW uint32_t SLANG_MCALL getEntryInvocationTimes(uint32_t index) = 0;
};
- #define SLANG_UUID_ISlangProfiler ISlangProfiler::getTypeGuid()
+#define SLANG_UUID_ISlangProfiler ISlangProfiler::getTypeGuid()
- namespace slang {
+ namespace slang
+ {
struct IGlobalSession;
struct ICompileRequest;
@@ -1602,7 +1713,7 @@ extern "C"
@brief An instance of the Slang library.
*/
typedef slang::IGlobalSession SlangSession;
-
+
typedef struct SlangProgramLayout SlangProgramLayout;
@@ -1612,12 +1723,10 @@ extern "C"
typedef struct slang::ICompileRequest SlangCompileRequest;
- /*!
- @brief Callback type used for diagnostic output.
- */
- typedef void(*SlangDiagnosticCallback)(
- char const* message,
- void* userData);
+ /*!
+@brief Callback type used for diagnostic output.
+*/
+ typedef void (*SlangDiagnosticCallback)(char const* message, void* userData);
/*!
@brief Get the build version 'tag' string. The string is the same as
@@ -1645,17 +1754,17 @@ extern "C"
typedef struct SlangEntryPoint SlangEntryPoint;
typedef struct SlangEntryPointLayout SlangEntryPointLayout;
- typedef struct SlangReflectionDecl SlangReflectionDecl;
- typedef struct SlangReflectionModifier SlangReflectionModifier;
- typedef struct SlangReflectionType SlangReflectionType;
- typedef struct SlangReflectionTypeLayout SlangReflectionTypeLayout;
- typedef struct SlangReflectionVariable SlangReflectionVariable;
- typedef struct SlangReflectionVariableLayout SlangReflectionVariableLayout;
- typedef struct SlangReflectionTypeParameter SlangReflectionTypeParameter;
- typedef struct SlangReflectionUserAttribute SlangReflectionUserAttribute;
- typedef struct SlangReflectionFunction SlangReflectionFunction;
- typedef struct SlangReflectionGeneric SlangReflectionGeneric;
-
+ typedef struct SlangReflectionDecl SlangReflectionDecl;
+ typedef struct SlangReflectionModifier SlangReflectionModifier;
+ typedef struct SlangReflectionType SlangReflectionType;
+ typedef struct SlangReflectionTypeLayout SlangReflectionTypeLayout;
+ typedef struct SlangReflectionVariable SlangReflectionVariable;
+ typedef struct SlangReflectionVariableLayout SlangReflectionVariableLayout;
+ typedef struct SlangReflectionTypeParameter SlangReflectionTypeParameter;
+ typedef struct SlangReflectionUserAttribute SlangReflectionUserAttribute;
+ typedef struct SlangReflectionFunction SlangReflectionFunction;
+ typedef struct SlangReflectionGeneric SlangReflectionGeneric;
+
union SlangReflectionGenericArg
{
SlangReflectionType* typeVal;
@@ -1739,40 +1848,41 @@ extern "C"
};
#ifndef SLANG_RESOURCE_SHAPE
-# define SLANG_RESOURCE_SHAPE
+ #define SLANG_RESOURCE_SHAPE
typedef unsigned int SlangResourceShapeIntegral;
enum SlangResourceShape : SlangResourceShapeIntegral
{
- SLANG_RESOURCE_BASE_SHAPE_MASK = 0x0F,
+ SLANG_RESOURCE_BASE_SHAPE_MASK = 0x0F,
- SLANG_RESOURCE_NONE = 0x00,
+ SLANG_RESOURCE_NONE = 0x00,
- SLANG_TEXTURE_1D = 0x01,
- SLANG_TEXTURE_2D = 0x02,
- SLANG_TEXTURE_3D = 0x03,
- SLANG_TEXTURE_CUBE = 0x04,
- SLANG_TEXTURE_BUFFER = 0x05,
+ SLANG_TEXTURE_1D = 0x01,
+ SLANG_TEXTURE_2D = 0x02,
+ SLANG_TEXTURE_3D = 0x03,
+ SLANG_TEXTURE_CUBE = 0x04,
+ SLANG_TEXTURE_BUFFER = 0x05,
- SLANG_STRUCTURED_BUFFER = 0x06,
- SLANG_BYTE_ADDRESS_BUFFER = 0x07,
- SLANG_RESOURCE_UNKNOWN = 0x08,
- SLANG_ACCELERATION_STRUCTURE = 0x09,
- SLANG_TEXTURE_SUBPASS = 0x0A,
+ SLANG_STRUCTURED_BUFFER = 0x06,
+ SLANG_BYTE_ADDRESS_BUFFER = 0x07,
+ SLANG_RESOURCE_UNKNOWN = 0x08,
+ SLANG_ACCELERATION_STRUCTURE = 0x09,
+ SLANG_TEXTURE_SUBPASS = 0x0A,
- SLANG_RESOURCE_EXT_SHAPE_MASK = 0xF0,
+ SLANG_RESOURCE_EXT_SHAPE_MASK = 0xF0,
- SLANG_TEXTURE_FEEDBACK_FLAG = 0x10,
- SLANG_TEXTURE_SHADOW_FLAG = 0x20,
- SLANG_TEXTURE_ARRAY_FLAG = 0x40,
- SLANG_TEXTURE_MULTISAMPLE_FLAG = 0x80,
+ SLANG_TEXTURE_FEEDBACK_FLAG = 0x10,
+ SLANG_TEXTURE_SHADOW_FLAG = 0x20,
+ SLANG_TEXTURE_ARRAY_FLAG = 0x40,
+ SLANG_TEXTURE_MULTISAMPLE_FLAG = 0x80,
- SLANG_TEXTURE_1D_ARRAY = SLANG_TEXTURE_1D | SLANG_TEXTURE_ARRAY_FLAG,
- SLANG_TEXTURE_2D_ARRAY = SLANG_TEXTURE_2D | SLANG_TEXTURE_ARRAY_FLAG,
- SLANG_TEXTURE_CUBE_ARRAY = SLANG_TEXTURE_CUBE | SLANG_TEXTURE_ARRAY_FLAG,
+ SLANG_TEXTURE_1D_ARRAY = SLANG_TEXTURE_1D | SLANG_TEXTURE_ARRAY_FLAG,
+ SLANG_TEXTURE_2D_ARRAY = SLANG_TEXTURE_2D | SLANG_TEXTURE_ARRAY_FLAG,
+ SLANG_TEXTURE_CUBE_ARRAY = SLANG_TEXTURE_CUBE | SLANG_TEXTURE_ARRAY_FLAG,
- SLANG_TEXTURE_2D_MULTISAMPLE = SLANG_TEXTURE_2D | SLANG_TEXTURE_MULTISAMPLE_FLAG,
- SLANG_TEXTURE_2D_MULTISAMPLE_ARRAY = SLANG_TEXTURE_2D | SLANG_TEXTURE_MULTISAMPLE_FLAG | SLANG_TEXTURE_ARRAY_FLAG,
- SLANG_TEXTURE_SUBPASS_MULTISAMPLE = SLANG_TEXTURE_SUBPASS | SLANG_TEXTURE_MULTISAMPLE_FLAG,
+ SLANG_TEXTURE_2D_MULTISAMPLE = SLANG_TEXTURE_2D | SLANG_TEXTURE_MULTISAMPLE_FLAG,
+ SLANG_TEXTURE_2D_MULTISAMPLE_ARRAY =
+ SLANG_TEXTURE_2D | SLANG_TEXTURE_MULTISAMPLE_FLAG | SLANG_TEXTURE_ARRAY_FLAG,
+ SLANG_TEXTURE_SUBPASS_MULTISAMPLE = SLANG_TEXTURE_SUBPASS | SLANG_TEXTURE_MULTISAMPLE_FLAG,
};
#endif
typedef unsigned int SlangResourceAccessIntegral;
@@ -1888,7 +1998,7 @@ extern "C"
};
/** Types of API-managed bindings that a parameter might use.
-
+
`SlangBindingType` represents the distinct types of binding ranges that might be
understood by an underlying graphics API or cross-API abstraction layer.
Several of the enumeration cases here correspond to cases of `VkDescriptorType`
@@ -1934,12 +2044,15 @@ extern "C"
SLANG_BINDING_TYPE_MUTABLE_FLAG = 0x100,
- SLANG_BINDING_TYPE_MUTABLE_TETURE = SLANG_BINDING_TYPE_TEXTURE | SLANG_BINDING_TYPE_MUTABLE_FLAG,
- SLANG_BINDING_TYPE_MUTABLE_TYPED_BUFFER = SLANG_BINDING_TYPE_TYPED_BUFFER | SLANG_BINDING_TYPE_MUTABLE_FLAG,
- SLANG_BINDING_TYPE_MUTABLE_RAW_BUFFER = SLANG_BINDING_TYPE_RAW_BUFFER | SLANG_BINDING_TYPE_MUTABLE_FLAG,
+ SLANG_BINDING_TYPE_MUTABLE_TETURE =
+ SLANG_BINDING_TYPE_TEXTURE | SLANG_BINDING_TYPE_MUTABLE_FLAG,
+ SLANG_BINDING_TYPE_MUTABLE_TYPED_BUFFER =
+ SLANG_BINDING_TYPE_TYPED_BUFFER | SLANG_BINDING_TYPE_MUTABLE_FLAG,
+ SLANG_BINDING_TYPE_MUTABLE_RAW_BUFFER =
+ SLANG_BINDING_TYPE_RAW_BUFFER | SLANG_BINDING_TYPE_MUTABLE_FLAG,
SLANG_BINDING_TYPE_BASE_MASK = 0x00FF,
- SLANG_BINDING_TYPE_EXT_MASK = 0xFF00,
+ SLANG_BINDING_TYPE_EXT_MASK = 0xFF00,
};
typedef SlangUInt32 SlangLayoutRulesIntegral;
@@ -1973,7 +2086,7 @@ extern "C"
#undef SLANG_FORMAT
};
- #define SLANG_UNBOUNDED_SIZE (~size_t(0))
+#define SLANG_UNBOUNDED_SIZE (~size_t(0))
// Shader Parameter Reflection
@@ -1986,7 +2099,7 @@ extern "C"
#ifdef __cplusplus
namespace slang
{
- struct ISession;
+struct ISession;
}
#endif
@@ -1997,2249 +2110,2264 @@ namespace slang
/* Helper interfaces for C++ users */
namespace slang
{
- struct BufferReflection;
- struct DeclReflection;
- struct TypeLayoutReflection;
- struct TypeReflection;
- struct VariableLayoutReflection;
- struct VariableReflection;
- struct FunctionReflection;
- struct GenericReflection;
-
- union GenericArgReflection
- {
- TypeReflection* typeVal;
- int64_t intVal;
- bool boolVal;
- };
-
- struct UserAttribute
- {
- char const* getName()
- {
- return spReflectionUserAttribute_GetName((SlangReflectionUserAttribute*)this);
- }
- uint32_t getArgumentCount()
- {
- return (uint32_t)spReflectionUserAttribute_GetArgumentCount((SlangReflectionUserAttribute*)this);
- }
- TypeReflection* getArgumentType(uint32_t index)
- {
- return (TypeReflection*)spReflectionUserAttribute_GetArgumentType((SlangReflectionUserAttribute*)this, index);
- }
- SlangResult getArgumentValueInt(uint32_t index, int * value)
- {
- return spReflectionUserAttribute_GetArgumentValueInt((SlangReflectionUserAttribute*)this, index, value);
- }
- SlangResult getArgumentValueFloat(uint32_t index, float * value)
- {
- return spReflectionUserAttribute_GetArgumentValueFloat((SlangReflectionUserAttribute*)this, index, value);
- }
- const char* getArgumentValueString(uint32_t index, size_t * outSize)
- {
- return spReflectionUserAttribute_GetArgumentValueString((SlangReflectionUserAttribute*)this, index, outSize);
- }
- };
+struct BufferReflection;
+struct DeclReflection;
+struct TypeLayoutReflection;
+struct TypeReflection;
+struct VariableLayoutReflection;
+struct VariableReflection;
+struct FunctionReflection;
+struct GenericReflection;
+
+union GenericArgReflection
+{
+ TypeReflection* typeVal;
+ int64_t intVal;
+ bool boolVal;
+};
- struct TypeReflection
+struct UserAttribute
+{
+ char const* getName()
{
- enum class Kind
- {
- None = SLANG_TYPE_KIND_NONE,
- Struct = SLANG_TYPE_KIND_STRUCT,
- Array = SLANG_TYPE_KIND_ARRAY,
- Matrix = SLANG_TYPE_KIND_MATRIX,
- Vector = SLANG_TYPE_KIND_VECTOR,
- Scalar = SLANG_TYPE_KIND_SCALAR,
- ConstantBuffer = SLANG_TYPE_KIND_CONSTANT_BUFFER,
- Resource = SLANG_TYPE_KIND_RESOURCE,
- SamplerState = SLANG_TYPE_KIND_SAMPLER_STATE,
- TextureBuffer = SLANG_TYPE_KIND_TEXTURE_BUFFER,
- ShaderStorageBuffer = SLANG_TYPE_KIND_SHADER_STORAGE_BUFFER,
- ParameterBlock = SLANG_TYPE_KIND_PARAMETER_BLOCK,
- GenericTypeParameter = SLANG_TYPE_KIND_GENERIC_TYPE_PARAMETER,
- Interface = SLANG_TYPE_KIND_INTERFACE,
- OutputStream = SLANG_TYPE_KIND_OUTPUT_STREAM,
- Specialized = SLANG_TYPE_KIND_SPECIALIZED,
- Feedback = SLANG_TYPE_KIND_FEEDBACK,
- Pointer = SLANG_TYPE_KIND_POINTER,
- DynamicResource = SLANG_TYPE_KIND_DYNAMIC_RESOURCE,
- };
-
- enum ScalarType : SlangScalarTypeIntegral
- {
- None = SLANG_SCALAR_TYPE_NONE,
- Void = SLANG_SCALAR_TYPE_VOID,
- Bool = SLANG_SCALAR_TYPE_BOOL,
- Int32 = SLANG_SCALAR_TYPE_INT32,
- UInt32 = SLANG_SCALAR_TYPE_UINT32,
- Int64 = SLANG_SCALAR_TYPE_INT64,
- UInt64 = SLANG_SCALAR_TYPE_UINT64,
- Float16 = SLANG_SCALAR_TYPE_FLOAT16,
- Float32 = SLANG_SCALAR_TYPE_FLOAT32,
- Float64 = SLANG_SCALAR_TYPE_FLOAT64,
- Int8 = SLANG_SCALAR_TYPE_INT8,
- UInt8 = SLANG_SCALAR_TYPE_UINT8,
- Int16 = SLANG_SCALAR_TYPE_INT16,
- UInt16 = SLANG_SCALAR_TYPE_UINT16,
- };
-
- Kind getKind()
- {
- return (Kind) spReflectionType_GetKind((SlangReflectionType*) this);
- }
-
- // only useful if `getKind() == Kind::Struct`
- unsigned int getFieldCount()
- {
- return spReflectionType_GetFieldCount((SlangReflectionType*) this);
- }
+ return spReflectionUserAttribute_GetName((SlangReflectionUserAttribute*)this);
+ }
+ uint32_t getArgumentCount()
+ {
+ return (uint32_t)spReflectionUserAttribute_GetArgumentCount(
+ (SlangReflectionUserAttribute*)this);
+ }
+ TypeReflection* getArgumentType(uint32_t index)
+ {
+ return (TypeReflection*)spReflectionUserAttribute_GetArgumentType(
+ (SlangReflectionUserAttribute*)this,
+ index);
+ }
+ SlangResult getArgumentValueInt(uint32_t index, int* value)
+ {
+ return spReflectionUserAttribute_GetArgumentValueInt(
+ (SlangReflectionUserAttribute*)this,
+ index,
+ value);
+ }
+ SlangResult getArgumentValueFloat(uint32_t index, float* value)
+ {
+ return spReflectionUserAttribute_GetArgumentValueFloat(
+ (SlangReflectionUserAttribute*)this,
+ index,
+ value);
+ }
+ const char* getArgumentValueString(uint32_t index, size_t* outSize)
+ {
+ return spReflectionUserAttribute_GetArgumentValueString(
+ (SlangReflectionUserAttribute*)this,
+ index,
+ outSize);
+ }
+};
- VariableReflection* getFieldByIndex(unsigned int index)
- {
- return (VariableReflection*) spReflectionType_GetFieldByIndex((SlangReflectionType*) this, index);
- }
+struct TypeReflection
+{
+ enum class Kind
+ {
+ None = SLANG_TYPE_KIND_NONE,
+ Struct = SLANG_TYPE_KIND_STRUCT,
+ Array = SLANG_TYPE_KIND_ARRAY,
+ Matrix = SLANG_TYPE_KIND_MATRIX,
+ Vector = SLANG_TYPE_KIND_VECTOR,
+ Scalar = SLANG_TYPE_KIND_SCALAR,
+ ConstantBuffer = SLANG_TYPE_KIND_CONSTANT_BUFFER,
+ Resource = SLANG_TYPE_KIND_RESOURCE,
+ SamplerState = SLANG_TYPE_KIND_SAMPLER_STATE,
+ TextureBuffer = SLANG_TYPE_KIND_TEXTURE_BUFFER,
+ ShaderStorageBuffer = SLANG_TYPE_KIND_SHADER_STORAGE_BUFFER,
+ ParameterBlock = SLANG_TYPE_KIND_PARAMETER_BLOCK,
+ GenericTypeParameter = SLANG_TYPE_KIND_GENERIC_TYPE_PARAMETER,
+ Interface = SLANG_TYPE_KIND_INTERFACE,
+ OutputStream = SLANG_TYPE_KIND_OUTPUT_STREAM,
+ Specialized = SLANG_TYPE_KIND_SPECIALIZED,
+ Feedback = SLANG_TYPE_KIND_FEEDBACK,
+ Pointer = SLANG_TYPE_KIND_POINTER,
+ DynamicResource = SLANG_TYPE_KIND_DYNAMIC_RESOURCE,
+ };
- bool isArray() { return getKind() == TypeReflection::Kind::Array; }
+ enum ScalarType : SlangScalarTypeIntegral
+ {
+ None = SLANG_SCALAR_TYPE_NONE,
+ Void = SLANG_SCALAR_TYPE_VOID,
+ Bool = SLANG_SCALAR_TYPE_BOOL,
+ Int32 = SLANG_SCALAR_TYPE_INT32,
+ UInt32 = SLANG_SCALAR_TYPE_UINT32,
+ Int64 = SLANG_SCALAR_TYPE_INT64,
+ UInt64 = SLANG_SCALAR_TYPE_UINT64,
+ Float16 = SLANG_SCALAR_TYPE_FLOAT16,
+ Float32 = SLANG_SCALAR_TYPE_FLOAT32,
+ Float64 = SLANG_SCALAR_TYPE_FLOAT64,
+ Int8 = SLANG_SCALAR_TYPE_INT8,
+ UInt8 = SLANG_SCALAR_TYPE_UINT8,
+ Int16 = SLANG_SCALAR_TYPE_INT16,
+ UInt16 = SLANG_SCALAR_TYPE_UINT16,
+ };
- TypeReflection* unwrapArray()
- {
- TypeReflection* type = this;
- while( type->isArray() )
- {
- type = type->getElementType();
- }
- return type;
- }
+ Kind getKind() { return (Kind)spReflectionType_GetKind((SlangReflectionType*)this); }
- // only useful if `getKind() == Kind::Array`
- size_t getElementCount()
- {
- return spReflectionType_GetElementCount((SlangReflectionType*) this);
- }
+ // only useful if `getKind() == Kind::Struct`
+ unsigned int getFieldCount()
+ {
+ return spReflectionType_GetFieldCount((SlangReflectionType*)this);
+ }
- size_t getTotalArrayElementCount()
- {
- if(!isArray()) return 0;
- size_t result = 1;
- TypeReflection* type = this;
- for(;;)
- {
- if(!type->isArray())
- return result;
+ VariableReflection* getFieldByIndex(unsigned int index)
+ {
+ return (
+ VariableReflection*)spReflectionType_GetFieldByIndex((SlangReflectionType*)this, index);
+ }
- result *= type->getElementCount();
- type = type->getElementType();
- }
- }
+ bool isArray() { return getKind() == TypeReflection::Kind::Array; }
- TypeReflection* getElementType()
+ TypeReflection* unwrapArray()
+ {
+ TypeReflection* type = this;
+ while (type->isArray())
{
- return (TypeReflection*) spReflectionType_GetElementType((SlangReflectionType*) this);
+ type = type->getElementType();
}
+ return type;
+ }
- unsigned getRowCount()
- {
- return spReflectionType_GetRowCount((SlangReflectionType*) this);
- }
+ // only useful if `getKind() == Kind::Array`
+ size_t getElementCount()
+ {
+ return spReflectionType_GetElementCount((SlangReflectionType*)this);
+ }
- unsigned getColumnCount()
+ size_t getTotalArrayElementCount()
+ {
+ if (!isArray())
+ return 0;
+ size_t result = 1;
+ TypeReflection* type = this;
+ for (;;)
{
- return spReflectionType_GetColumnCount((SlangReflectionType*) this);
- }
+ if (!type->isArray())
+ return result;
- ScalarType getScalarType()
- {
- return (ScalarType) spReflectionType_GetScalarType((SlangReflectionType*) this);
+ result *= type->getElementCount();
+ type = type->getElementType();
}
+ }
- TypeReflection* getResourceResultType()
- {
- return (TypeReflection*) spReflectionType_GetResourceResultType((SlangReflectionType*) this);
- }
+ TypeReflection* getElementType()
+ {
+ return (TypeReflection*)spReflectionType_GetElementType((SlangReflectionType*)this);
+ }
- SlangResourceShape getResourceShape()
- {
- return spReflectionType_GetResourceShape((SlangReflectionType*) this);
- }
+ unsigned getRowCount() { return spReflectionType_GetRowCount((SlangReflectionType*)this); }
- SlangResourceAccess getResourceAccess()
- {
- return spReflectionType_GetResourceAccess((SlangReflectionType*) this);
- }
+ unsigned getColumnCount()
+ {
+ return spReflectionType_GetColumnCount((SlangReflectionType*)this);
+ }
- char const* getName()
- {
- return spReflectionType_GetName((SlangReflectionType*) this);
- }
+ ScalarType getScalarType()
+ {
+ return (ScalarType)spReflectionType_GetScalarType((SlangReflectionType*)this);
+ }
- SlangResult getFullName(ISlangBlob** outNameBlob)
- {
- return spReflectionType_GetFullName((SlangReflectionType*)this, outNameBlob);
- }
+ TypeReflection* getResourceResultType()
+ {
+ return (TypeReflection*)spReflectionType_GetResourceResultType((SlangReflectionType*)this);
+ }
- unsigned int getUserAttributeCount()
- {
- return spReflectionType_GetUserAttributeCount((SlangReflectionType*)this);
- }
+ SlangResourceShape getResourceShape()
+ {
+ return spReflectionType_GetResourceShape((SlangReflectionType*)this);
+ }
- UserAttribute* getUserAttributeByIndex(unsigned int index)
- {
- return (UserAttribute*)spReflectionType_GetUserAttribute((SlangReflectionType*)this, index);
- }
+ SlangResourceAccess getResourceAccess()
+ {
+ return spReflectionType_GetResourceAccess((SlangReflectionType*)this);
+ }
- UserAttribute* findUserAttributeByName(char const* name)
- {
- return (UserAttribute*)spReflectionType_FindUserAttributeByName((SlangReflectionType*)this, name);
- }
+ char const* getName() { return spReflectionType_GetName((SlangReflectionType*)this); }
- TypeReflection* applySpecializations(GenericReflection* generic)
- {
- return (TypeReflection*)spReflectionType_applySpecializations((SlangReflectionType*)this, (SlangReflectionGeneric*)generic);
- }
+ SlangResult getFullName(ISlangBlob** outNameBlob)
+ {
+ return spReflectionType_GetFullName((SlangReflectionType*)this, outNameBlob);
+ }
- GenericReflection* getGenericContainer()
- {
- return (GenericReflection*) spReflectionType_GetGenericContainer((SlangReflectionType*) this);
- }
- };
+ unsigned int getUserAttributeCount()
+ {
+ return spReflectionType_GetUserAttributeCount((SlangReflectionType*)this);
+ }
- enum ParameterCategory : SlangParameterCategoryIntegral
+ UserAttribute* getUserAttributeByIndex(unsigned int index)
{
- // TODO: these aren't scoped...
- None = SLANG_PARAMETER_CATEGORY_NONE,
- Mixed = SLANG_PARAMETER_CATEGORY_MIXED,
- ConstantBuffer = SLANG_PARAMETER_CATEGORY_CONSTANT_BUFFER,
- ShaderResource = SLANG_PARAMETER_CATEGORY_SHADER_RESOURCE,
- UnorderedAccess = SLANG_PARAMETER_CATEGORY_UNORDERED_ACCESS,
- VaryingInput = SLANG_PARAMETER_CATEGORY_VARYING_INPUT,
- VaryingOutput = SLANG_PARAMETER_CATEGORY_VARYING_OUTPUT,
- SamplerState = SLANG_PARAMETER_CATEGORY_SAMPLER_STATE,
- Uniform = SLANG_PARAMETER_CATEGORY_UNIFORM,
- DescriptorTableSlot = SLANG_PARAMETER_CATEGORY_DESCRIPTOR_TABLE_SLOT,
- SpecializationConstant = SLANG_PARAMETER_CATEGORY_SPECIALIZATION_CONSTANT,
- PushConstantBuffer = SLANG_PARAMETER_CATEGORY_PUSH_CONSTANT_BUFFER,
- RegisterSpace = SLANG_PARAMETER_CATEGORY_REGISTER_SPACE,
- GenericResource = SLANG_PARAMETER_CATEGORY_GENERIC,
+ return (UserAttribute*)spReflectionType_GetUserAttribute((SlangReflectionType*)this, index);
+ }
- RayPayload = SLANG_PARAMETER_CATEGORY_RAY_PAYLOAD,
- HitAttributes = SLANG_PARAMETER_CATEGORY_HIT_ATTRIBUTES,
- CallablePayload = SLANG_PARAMETER_CATEGORY_CALLABLE_PAYLOAD,
+ UserAttribute* findUserAttributeByName(char const* name)
+ {
+ return (UserAttribute*)spReflectionType_FindUserAttributeByName(
+ (SlangReflectionType*)this,
+ name);
+ }
- ShaderRecord = SLANG_PARAMETER_CATEGORY_SHADER_RECORD,
+ TypeReflection* applySpecializations(GenericReflection* generic)
+ {
+ return (TypeReflection*)spReflectionType_applySpecializations(
+ (SlangReflectionType*)this,
+ (SlangReflectionGeneric*)generic);
+ }
- ExistentialTypeParam = SLANG_PARAMETER_CATEGORY_EXISTENTIAL_TYPE_PARAM,
- ExistentialObjectParam = SLANG_PARAMETER_CATEGORY_EXISTENTIAL_OBJECT_PARAM,
+ GenericReflection* getGenericContainer()
+ {
+ return (GenericReflection*)spReflectionType_GetGenericContainer((SlangReflectionType*)this);
+ }
+};
- SubElementRegisterSpace = SLANG_PARAMETER_CATEGORY_SUB_ELEMENT_REGISTER_SPACE,
+enum ParameterCategory : SlangParameterCategoryIntegral
+{
+ // TODO: these aren't scoped...
+ None = SLANG_PARAMETER_CATEGORY_NONE,
+ Mixed = SLANG_PARAMETER_CATEGORY_MIXED,
+ ConstantBuffer = SLANG_PARAMETER_CATEGORY_CONSTANT_BUFFER,
+ ShaderResource = SLANG_PARAMETER_CATEGORY_SHADER_RESOURCE,
+ UnorderedAccess = SLANG_PARAMETER_CATEGORY_UNORDERED_ACCESS,
+ VaryingInput = SLANG_PARAMETER_CATEGORY_VARYING_INPUT,
+ VaryingOutput = SLANG_PARAMETER_CATEGORY_VARYING_OUTPUT,
+ SamplerState = SLANG_PARAMETER_CATEGORY_SAMPLER_STATE,
+ Uniform = SLANG_PARAMETER_CATEGORY_UNIFORM,
+ DescriptorTableSlot = SLANG_PARAMETER_CATEGORY_DESCRIPTOR_TABLE_SLOT,
+ SpecializationConstant = SLANG_PARAMETER_CATEGORY_SPECIALIZATION_CONSTANT,
+ PushConstantBuffer = SLANG_PARAMETER_CATEGORY_PUSH_CONSTANT_BUFFER,
+ RegisterSpace = SLANG_PARAMETER_CATEGORY_REGISTER_SPACE,
+ GenericResource = SLANG_PARAMETER_CATEGORY_GENERIC,
+
+ RayPayload = SLANG_PARAMETER_CATEGORY_RAY_PAYLOAD,
+ HitAttributes = SLANG_PARAMETER_CATEGORY_HIT_ATTRIBUTES,
+ CallablePayload = SLANG_PARAMETER_CATEGORY_CALLABLE_PAYLOAD,
+
+ ShaderRecord = SLANG_PARAMETER_CATEGORY_SHADER_RECORD,
+
+ ExistentialTypeParam = SLANG_PARAMETER_CATEGORY_EXISTENTIAL_TYPE_PARAM,
+ ExistentialObjectParam = SLANG_PARAMETER_CATEGORY_EXISTENTIAL_OBJECT_PARAM,
+
+ SubElementRegisterSpace = SLANG_PARAMETER_CATEGORY_SUB_ELEMENT_REGISTER_SPACE,
+
+ InputAttachmentIndex = SLANG_PARAMETER_CATEGORY_SUBPASS,
+
+ MetalBuffer = SLANG_PARAMETER_CATEGORY_CONSTANT_BUFFER,
+ MetalTexture = SLANG_PARAMETER_CATEGORY_METAL_TEXTURE,
+ MetalArgumentBufferElement = SLANG_PARAMETER_CATEGORY_METAL_ARGUMENT_BUFFER_ELEMENT,
+ MetalAttribute = SLANG_PARAMETER_CATEGORY_METAL_ATTRIBUTE,
+ MetalPayload = SLANG_PARAMETER_CATEGORY_METAL_PAYLOAD,
+
+ // DEPRECATED:
+ VertexInput = SLANG_PARAMETER_CATEGORY_VERTEX_INPUT,
+ FragmentOutput = SLANG_PARAMETER_CATEGORY_FRAGMENT_OUTPUT,
+};
+
+enum class BindingType : SlangBindingTypeIntegral
+{
+ Unknown = SLANG_BINDING_TYPE_UNKNOWN,
+
+ Sampler = SLANG_BINDING_TYPE_SAMPLER,
+ Texture = SLANG_BINDING_TYPE_TEXTURE,
+ ConstantBuffer = SLANG_BINDING_TYPE_CONSTANT_BUFFER,
+ ParameterBlock = SLANG_BINDING_TYPE_PARAMETER_BLOCK,
+ TypedBuffer = SLANG_BINDING_TYPE_TYPED_BUFFER,
+ RawBuffer = SLANG_BINDING_TYPE_RAW_BUFFER,
+ CombinedTextureSampler = SLANG_BINDING_TYPE_COMBINED_TEXTURE_SAMPLER,
+ InputRenderTarget = SLANG_BINDING_TYPE_INPUT_RENDER_TARGET,
+ InlineUniformData = SLANG_BINDING_TYPE_INLINE_UNIFORM_DATA,
+ RayTracingAccelerationStructure = SLANG_BINDING_TYPE_RAY_TRACING_ACCELERATION_STRUCTURE,
+ VaryingInput = SLANG_BINDING_TYPE_VARYING_INPUT,
+ VaryingOutput = SLANG_BINDING_TYPE_VARYING_OUTPUT,
+ ExistentialValue = SLANG_BINDING_TYPE_EXISTENTIAL_VALUE,
+ PushConstant = SLANG_BINDING_TYPE_PUSH_CONSTANT,
+
+ MutableFlag = SLANG_BINDING_TYPE_MUTABLE_FLAG,
+
+ MutableTexture = SLANG_BINDING_TYPE_MUTABLE_TETURE,
+ MutableTypedBuffer = SLANG_BINDING_TYPE_MUTABLE_TYPED_BUFFER,
+ MutableRawBuffer = SLANG_BINDING_TYPE_MUTABLE_RAW_BUFFER,
+
+ BaseMask = SLANG_BINDING_TYPE_BASE_MASK,
+ ExtMask = SLANG_BINDING_TYPE_EXT_MASK,
+};
+
+struct TypeLayoutReflection
+{
+ TypeReflection* getType()
+ {
+ return (TypeReflection*)spReflectionTypeLayout_GetType((SlangReflectionTypeLayout*)this);
+ }
- InputAttachmentIndex = SLANG_PARAMETER_CATEGORY_SUBPASS,
+ TypeReflection::Kind getKind()
+ {
+ return (TypeReflection::Kind)spReflectionTypeLayout_getKind(
+ (SlangReflectionTypeLayout*)this);
+ }
- MetalBuffer = SLANG_PARAMETER_CATEGORY_CONSTANT_BUFFER,
- MetalTexture = SLANG_PARAMETER_CATEGORY_METAL_TEXTURE,
- MetalArgumentBufferElement = SLANG_PARAMETER_CATEGORY_METAL_ARGUMENT_BUFFER_ELEMENT,
- MetalAttribute = SLANG_PARAMETER_CATEGORY_METAL_ATTRIBUTE,
- MetalPayload = SLANG_PARAMETER_CATEGORY_METAL_PAYLOAD,
+ size_t getSize(SlangParameterCategory category = SLANG_PARAMETER_CATEGORY_UNIFORM)
+ {
+ return spReflectionTypeLayout_GetSize((SlangReflectionTypeLayout*)this, category);
+ }
- // DEPRECATED:
- VertexInput = SLANG_PARAMETER_CATEGORY_VERTEX_INPUT,
- FragmentOutput = SLANG_PARAMETER_CATEGORY_FRAGMENT_OUTPUT,
- };
+ size_t getStride(SlangParameterCategory category = SLANG_PARAMETER_CATEGORY_UNIFORM)
+ {
+ return spReflectionTypeLayout_GetStride((SlangReflectionTypeLayout*)this, category);
+ }
- enum class BindingType : SlangBindingTypeIntegral
- {
- Unknown = SLANG_BINDING_TYPE_UNKNOWN,
-
- Sampler = SLANG_BINDING_TYPE_SAMPLER,
- Texture = SLANG_BINDING_TYPE_TEXTURE,
- ConstantBuffer = SLANG_BINDING_TYPE_CONSTANT_BUFFER,
- ParameterBlock = SLANG_BINDING_TYPE_PARAMETER_BLOCK,
- TypedBuffer = SLANG_BINDING_TYPE_TYPED_BUFFER,
- RawBuffer = SLANG_BINDING_TYPE_RAW_BUFFER,
- CombinedTextureSampler = SLANG_BINDING_TYPE_COMBINED_TEXTURE_SAMPLER,
- InputRenderTarget = SLANG_BINDING_TYPE_INPUT_RENDER_TARGET,
- InlineUniformData = SLANG_BINDING_TYPE_INLINE_UNIFORM_DATA,
- RayTracingAccelerationStructure = SLANG_BINDING_TYPE_RAY_TRACING_ACCELERATION_STRUCTURE,
- VaryingInput = SLANG_BINDING_TYPE_VARYING_INPUT,
- VaryingOutput = SLANG_BINDING_TYPE_VARYING_OUTPUT,
- ExistentialValue = SLANG_BINDING_TYPE_EXISTENTIAL_VALUE,
- PushConstant = SLANG_BINDING_TYPE_PUSH_CONSTANT,
-
- MutableFlag = SLANG_BINDING_TYPE_MUTABLE_FLAG,
-
- MutableTexture = SLANG_BINDING_TYPE_MUTABLE_TETURE,
- MutableTypedBuffer = SLANG_BINDING_TYPE_MUTABLE_TYPED_BUFFER,
- MutableRawBuffer = SLANG_BINDING_TYPE_MUTABLE_RAW_BUFFER,
-
- BaseMask = SLANG_BINDING_TYPE_BASE_MASK,
- ExtMask = SLANG_BINDING_TYPE_EXT_MASK,
- };
+ int32_t getAlignment(SlangParameterCategory category = SLANG_PARAMETER_CATEGORY_UNIFORM)
+ {
+ return spReflectionTypeLayout_getAlignment((SlangReflectionTypeLayout*)this, category);
+ }
- struct TypeLayoutReflection
+ unsigned int getFieldCount()
{
- TypeReflection* getType()
- {
- return (TypeReflection*) spReflectionTypeLayout_GetType((SlangReflectionTypeLayout*) this);
- }
+ return spReflectionTypeLayout_GetFieldCount((SlangReflectionTypeLayout*)this);
+ }
- TypeReflection::Kind getKind()
- {
- return (TypeReflection::Kind) spReflectionTypeLayout_getKind((SlangReflectionTypeLayout*) this);
- }
+ VariableLayoutReflection* getFieldByIndex(unsigned int index)
+ {
+ return (VariableLayoutReflection*)spReflectionTypeLayout_GetFieldByIndex(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- size_t getSize(SlangParameterCategory category = SLANG_PARAMETER_CATEGORY_UNIFORM)
- {
- return spReflectionTypeLayout_GetSize((SlangReflectionTypeLayout*) this, category);
- }
+ SlangInt findFieldIndexByName(char const* nameBegin, char const* nameEnd = nullptr)
+ {
+ return spReflectionTypeLayout_findFieldIndexByName(
+ (SlangReflectionTypeLayout*)this,
+ nameBegin,
+ nameEnd);
+ }
- size_t getStride(SlangParameterCategory category = SLANG_PARAMETER_CATEGORY_UNIFORM)
- {
- return spReflectionTypeLayout_GetStride((SlangReflectionTypeLayout*) this, category);
- }
+ VariableLayoutReflection* getExplicitCounter()
+ {
+ return (VariableLayoutReflection*)spReflectionTypeLayout_GetExplicitCounter(
+ (SlangReflectionTypeLayout*)this);
+ }
- int32_t getAlignment(SlangParameterCategory category = SLANG_PARAMETER_CATEGORY_UNIFORM)
- {
- return spReflectionTypeLayout_getAlignment((SlangReflectionTypeLayout*) this, category);
- }
+ bool isArray() { return getType()->isArray(); }
- unsigned int getFieldCount()
+ TypeLayoutReflection* unwrapArray()
+ {
+ TypeLayoutReflection* typeLayout = this;
+ while (typeLayout->isArray())
{
- return spReflectionTypeLayout_GetFieldCount((SlangReflectionTypeLayout*)this);
+ typeLayout = typeLayout->getElementTypeLayout();
}
+ return typeLayout;
+ }
- VariableLayoutReflection* getFieldByIndex(unsigned int index)
- {
- return (VariableLayoutReflection*) spReflectionTypeLayout_GetFieldByIndex((SlangReflectionTypeLayout*) this, index);
- }
+ // only useful if `getKind() == Kind::Array`
+ size_t getElementCount() { return getType()->getElementCount(); }
- SlangInt findFieldIndexByName(char const* nameBegin, char const* nameEnd = nullptr)
- {
- return spReflectionTypeLayout_findFieldIndexByName((SlangReflectionTypeLayout*) this, nameBegin, nameEnd);
- }
+ size_t getTotalArrayElementCount() { return getType()->getTotalArrayElementCount(); }
- VariableLayoutReflection* getExplicitCounter()
- {
- return (VariableLayoutReflection*) spReflectionTypeLayout_GetExplicitCounter((SlangReflectionTypeLayout*) this);
- }
+ size_t getElementStride(SlangParameterCategory category)
+ {
+ return spReflectionTypeLayout_GetElementStride((SlangReflectionTypeLayout*)this, category);
+ }
- bool isArray() { return getType()->isArray(); }
+ TypeLayoutReflection* getElementTypeLayout()
+ {
+ return (TypeLayoutReflection*)spReflectionTypeLayout_GetElementTypeLayout(
+ (SlangReflectionTypeLayout*)this);
+ }
- TypeLayoutReflection* unwrapArray()
- {
- TypeLayoutReflection* typeLayout = this;
- while( typeLayout->isArray() )
- {
- typeLayout = typeLayout->getElementTypeLayout();
- }
- return typeLayout;
- }
+ VariableLayoutReflection* getElementVarLayout()
+ {
+ return (VariableLayoutReflection*)spReflectionTypeLayout_GetElementVarLayout(
+ (SlangReflectionTypeLayout*)this);
+ }
- // only useful if `getKind() == Kind::Array`
- size_t getElementCount()
- {
- return getType()->getElementCount();
- }
+ VariableLayoutReflection* getContainerVarLayout()
+ {
+ return (VariableLayoutReflection*)spReflectionTypeLayout_getContainerVarLayout(
+ (SlangReflectionTypeLayout*)this);
+ }
- size_t getTotalArrayElementCount()
- {
- return getType()->getTotalArrayElementCount();
- }
+ // How is this type supposed to be bound?
+ ParameterCategory getParameterCategory()
+ {
+ return (ParameterCategory)spReflectionTypeLayout_GetParameterCategory(
+ (SlangReflectionTypeLayout*)this);
+ }
- size_t getElementStride(SlangParameterCategory category)
- {
- return spReflectionTypeLayout_GetElementStride((SlangReflectionTypeLayout*) this, category);
- }
+ unsigned int getCategoryCount()
+ {
+ return spReflectionTypeLayout_GetCategoryCount((SlangReflectionTypeLayout*)this);
+ }
- TypeLayoutReflection* getElementTypeLayout()
- {
- return (TypeLayoutReflection*) spReflectionTypeLayout_GetElementTypeLayout((SlangReflectionTypeLayout*) this);
- }
+ ParameterCategory getCategoryByIndex(unsigned int index)
+ {
+ return (ParameterCategory)spReflectionTypeLayout_GetCategoryByIndex(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- VariableLayoutReflection* getElementVarLayout()
- {
- return (VariableLayoutReflection*)spReflectionTypeLayout_GetElementVarLayout((SlangReflectionTypeLayout*) this);
- }
+ unsigned getRowCount() { return getType()->getRowCount(); }
- VariableLayoutReflection* getContainerVarLayout()
- {
- return (VariableLayoutReflection*)spReflectionTypeLayout_getContainerVarLayout((SlangReflectionTypeLayout*) this);
- }
+ unsigned getColumnCount() { return getType()->getColumnCount(); }
- // How is this type supposed to be bound?
- ParameterCategory getParameterCategory()
- {
- return (ParameterCategory) spReflectionTypeLayout_GetParameterCategory((SlangReflectionTypeLayout*) this);
- }
+ TypeReflection::ScalarType getScalarType() { return getType()->getScalarType(); }
- unsigned int getCategoryCount()
- {
- return spReflectionTypeLayout_GetCategoryCount((SlangReflectionTypeLayout*) this);
- }
+ TypeReflection* getResourceResultType() { return getType()->getResourceResultType(); }
- ParameterCategory getCategoryByIndex(unsigned int index)
- {
- return (ParameterCategory) spReflectionTypeLayout_GetCategoryByIndex((SlangReflectionTypeLayout*) this, index);
- }
+ SlangResourceShape getResourceShape() { return getType()->getResourceShape(); }
- unsigned getRowCount()
- {
- return getType()->getRowCount();
- }
+ SlangResourceAccess getResourceAccess() { return getType()->getResourceAccess(); }
- unsigned getColumnCount()
- {
- return getType()->getColumnCount();
- }
+ char const* getName() { return getType()->getName(); }
- TypeReflection::ScalarType getScalarType()
- {
- return getType()->getScalarType();
- }
+ SlangMatrixLayoutMode getMatrixLayoutMode()
+ {
+ return spReflectionTypeLayout_GetMatrixLayoutMode((SlangReflectionTypeLayout*)this);
+ }
- TypeReflection* getResourceResultType()
- {
- return getType()->getResourceResultType();
- }
+ int getGenericParamIndex()
+ {
+ return spReflectionTypeLayout_getGenericParamIndex((SlangReflectionTypeLayout*)this);
+ }
- SlangResourceShape getResourceShape()
- {
- return getType()->getResourceShape();
- }
+ TypeLayoutReflection* getPendingDataTypeLayout()
+ {
+ return (TypeLayoutReflection*)spReflectionTypeLayout_getPendingDataTypeLayout(
+ (SlangReflectionTypeLayout*)this);
+ }
- SlangResourceAccess getResourceAccess()
- {
- return getType()->getResourceAccess();
- }
+ VariableLayoutReflection* getSpecializedTypePendingDataVarLayout()
+ {
+ return (VariableLayoutReflection*)
+ spReflectionTypeLayout_getSpecializedTypePendingDataVarLayout(
+ (SlangReflectionTypeLayout*)this);
+ }
- char const* getName()
- {
- return getType()->getName();
- }
+ SlangInt getBindingRangeCount()
+ {
+ return spReflectionTypeLayout_getBindingRangeCount((SlangReflectionTypeLayout*)this);
+ }
- SlangMatrixLayoutMode getMatrixLayoutMode()
- {
- return spReflectionTypeLayout_GetMatrixLayoutMode((SlangReflectionTypeLayout*) this);
- }
+ BindingType getBindingRangeType(SlangInt index)
+ {
+ return (BindingType)spReflectionTypeLayout_getBindingRangeType(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- int getGenericParamIndex()
- {
- return spReflectionTypeLayout_getGenericParamIndex(
- (SlangReflectionTypeLayout*) this);
- }
+ bool isBindingRangeSpecializable(SlangInt index)
+ {
+ return (bool)spReflectionTypeLayout_isBindingRangeSpecializable(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- TypeLayoutReflection* getPendingDataTypeLayout()
- {
- return (TypeLayoutReflection*) spReflectionTypeLayout_getPendingDataTypeLayout(
- (SlangReflectionTypeLayout*) this);
- }
+ SlangInt getBindingRangeBindingCount(SlangInt index)
+ {
+ return spReflectionTypeLayout_getBindingRangeBindingCount(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- VariableLayoutReflection* getSpecializedTypePendingDataVarLayout()
- {
- return (VariableLayoutReflection*) spReflectionTypeLayout_getSpecializedTypePendingDataVarLayout(
- (SlangReflectionTypeLayout*) this);
- }
+ /*
+ SlangInt getBindingRangeIndexOffset(SlangInt index)
+ {
+ return spReflectionTypeLayout_getBindingRangeIndexOffset(
+ (SlangReflectionTypeLayout*) this,
+ index);
+ }
- SlangInt getBindingRangeCount()
- {
- return spReflectionTypeLayout_getBindingRangeCount(
- (SlangReflectionTypeLayout*) this);
- }
+ SlangInt getBindingRangeSpaceOffset(SlangInt index)
+ {
+ return spReflectionTypeLayout_getBindingRangeSpaceOffset(
+ (SlangReflectionTypeLayout*) this,
+ index);
+ }
+ */
- BindingType getBindingRangeType(SlangInt index)
- {
- return (BindingType) spReflectionTypeLayout_getBindingRangeType(
- (SlangReflectionTypeLayout*) this,
- index);
- }
+ SlangInt getFieldBindingRangeOffset(SlangInt fieldIndex)
+ {
+ return spReflectionTypeLayout_getFieldBindingRangeOffset(
+ (SlangReflectionTypeLayout*)this,
+ fieldIndex);
+ }
- bool isBindingRangeSpecializable(SlangInt index)
- {
- return (bool)spReflectionTypeLayout_isBindingRangeSpecializable(
- (SlangReflectionTypeLayout*)this,
- index);
+ SlangInt getExplicitCounterBindingRangeOffset()
+ {
+ return spReflectionTypeLayout_getExplicitCounterBindingRangeOffset(
+ (SlangReflectionTypeLayout*)this);
+ }
- }
+ TypeLayoutReflection* getBindingRangeLeafTypeLayout(SlangInt index)
+ {
+ return (TypeLayoutReflection*)spReflectionTypeLayout_getBindingRangeLeafTypeLayout(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- SlangInt getBindingRangeBindingCount(SlangInt index)
- {
- return spReflectionTypeLayout_getBindingRangeBindingCount(
- (SlangReflectionTypeLayout*) this,
- index);
- }
+ VariableReflection* getBindingRangeLeafVariable(SlangInt index)
+ {
+ return (VariableReflection*)spReflectionTypeLayout_getBindingRangeLeafVariable(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- /*
- SlangInt getBindingRangeIndexOffset(SlangInt index)
- {
- return spReflectionTypeLayout_getBindingRangeIndexOffset(
- (SlangReflectionTypeLayout*) this,
- index);
- }
+ SlangImageFormat getBindingRangeImageFormat(SlangInt index)
+ {
+ return spReflectionTypeLayout_getBindingRangeImageFormat(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- SlangInt getBindingRangeSpaceOffset(SlangInt index)
- {
- return spReflectionTypeLayout_getBindingRangeSpaceOffset(
- (SlangReflectionTypeLayout*) this,
- index);
- }
- */
+ SlangInt getBindingRangeDescriptorSetIndex(SlangInt index)
+ {
+ return spReflectionTypeLayout_getBindingRangeDescriptorSetIndex(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- SlangInt getFieldBindingRangeOffset(SlangInt fieldIndex)
- {
- return spReflectionTypeLayout_getFieldBindingRangeOffset(
- (SlangReflectionTypeLayout*) this,
- fieldIndex);
- }
+ SlangInt getBindingRangeFirstDescriptorRangeIndex(SlangInt index)
+ {
+ return spReflectionTypeLayout_getBindingRangeFirstDescriptorRangeIndex(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- SlangInt getExplicitCounterBindingRangeOffset()
- {
- return spReflectionTypeLayout_getExplicitCounterBindingRangeOffset(
- (SlangReflectionTypeLayout*) this);
- }
+ SlangInt getBindingRangeDescriptorRangeCount(SlangInt index)
+ {
+ return spReflectionTypeLayout_getBindingRangeDescriptorRangeCount(
+ (SlangReflectionTypeLayout*)this,
+ index);
+ }
- TypeLayoutReflection* getBindingRangeLeafTypeLayout(SlangInt index)
- {
- return (TypeLayoutReflection*) spReflectionTypeLayout_getBindingRangeLeafTypeLayout(
- (SlangReflectionTypeLayout*) this,
- index);
- }
+ SlangInt getDescriptorSetCount()
+ {
+ return spReflectionTypeLayout_getDescriptorSetCount((SlangReflectionTypeLayout*)this);
+ }
- VariableReflection* getBindingRangeLeafVariable(SlangInt index)
- {
- return (VariableReflection*)spReflectionTypeLayout_getBindingRangeLeafVariable(
- (SlangReflectionTypeLayout*)this, index);
- }
+ SlangInt getDescriptorSetSpaceOffset(SlangInt setIndex)
+ {
+ return spReflectionTypeLayout_getDescriptorSetSpaceOffset(
+ (SlangReflectionTypeLayout*)this,
+ setIndex);
+ }
- SlangImageFormat getBindingRangeImageFormat(SlangInt index)
- {
- return spReflectionTypeLayout_getBindingRangeImageFormat(
- (SlangReflectionTypeLayout*)this, index);
- }
+ SlangInt getDescriptorSetDescriptorRangeCount(SlangInt setIndex)
+ {
+ return spReflectionTypeLayout_getDescriptorSetDescriptorRangeCount(
+ (SlangReflectionTypeLayout*)this,
+ setIndex);
+ }
- SlangInt getBindingRangeDescriptorSetIndex(SlangInt index)
- {
- return spReflectionTypeLayout_getBindingRangeDescriptorSetIndex(
- (SlangReflectionTypeLayout*) this,
- index);
- }
+ SlangInt getDescriptorSetDescriptorRangeIndexOffset(SlangInt setIndex, SlangInt rangeIndex)
+ {
+ return spReflectionTypeLayout_getDescriptorSetDescriptorRangeIndexOffset(
+ (SlangReflectionTypeLayout*)this,
+ setIndex,
+ rangeIndex);
+ }
- SlangInt getBindingRangeFirstDescriptorRangeIndex(SlangInt index)
- {
- return spReflectionTypeLayout_getBindingRangeFirstDescriptorRangeIndex(
- (SlangReflectionTypeLayout*) this,
- index);
- }
+ SlangInt getDescriptorSetDescriptorRangeDescriptorCount(SlangInt setIndex, SlangInt rangeIndex)
+ {
+ return spReflectionTypeLayout_getDescriptorSetDescriptorRangeDescriptorCount(
+ (SlangReflectionTypeLayout*)this,
+ setIndex,
+ rangeIndex);
+ }
- SlangInt getBindingRangeDescriptorRangeCount(SlangInt index)
- {
- return spReflectionTypeLayout_getBindingRangeDescriptorRangeCount(
- (SlangReflectionTypeLayout*) this,
- index);
- }
+ BindingType getDescriptorSetDescriptorRangeType(SlangInt setIndex, SlangInt rangeIndex)
+ {
+ return (BindingType)spReflectionTypeLayout_getDescriptorSetDescriptorRangeType(
+ (SlangReflectionTypeLayout*)this,
+ setIndex,
+ rangeIndex);
+ }
- SlangInt getDescriptorSetCount()
- {
- return spReflectionTypeLayout_getDescriptorSetCount(
- (SlangReflectionTypeLayout*) this);
- }
+ ParameterCategory getDescriptorSetDescriptorRangeCategory(
+ SlangInt setIndex,
+ SlangInt rangeIndex)
+ {
+ return (ParameterCategory)spReflectionTypeLayout_getDescriptorSetDescriptorRangeCategory(
+ (SlangReflectionTypeLayout*)this,
+ setIndex,
+ rangeIndex);
+ }
- SlangInt getDescriptorSetSpaceOffset(SlangInt setIndex)
- {
- return spReflectionTypeLayout_getDescriptorSetSpaceOffset(
- (SlangReflectionTypeLayout*) this,
- setIndex);
- }
+ SlangInt getSubObjectRangeCount()
+ {
+ return spReflectionTypeLayout_getSubObjectRangeCount((SlangReflectionTypeLayout*)this);
+ }
- SlangInt getDescriptorSetDescriptorRangeCount(SlangInt setIndex)
- {
- return spReflectionTypeLayout_getDescriptorSetDescriptorRangeCount(
- (SlangReflectionTypeLayout*) this,
- setIndex);
- }
+ SlangInt getSubObjectRangeBindingRangeIndex(SlangInt subObjectRangeIndex)
+ {
+ return spReflectionTypeLayout_getSubObjectRangeBindingRangeIndex(
+ (SlangReflectionTypeLayout*)this,
+ subObjectRangeIndex);
+ }
- SlangInt getDescriptorSetDescriptorRangeIndexOffset(SlangInt setIndex, SlangInt rangeIndex)
- {
- return spReflectionTypeLayout_getDescriptorSetDescriptorRangeIndexOffset(
- (SlangReflectionTypeLayout*) this,
- setIndex,
- rangeIndex);
- }
+ SlangInt getSubObjectRangeSpaceOffset(SlangInt subObjectRangeIndex)
+ {
+ return spReflectionTypeLayout_getSubObjectRangeSpaceOffset(
+ (SlangReflectionTypeLayout*)this,
+ subObjectRangeIndex);
+ }
- SlangInt getDescriptorSetDescriptorRangeDescriptorCount(SlangInt setIndex, SlangInt rangeIndex)
- {
- return spReflectionTypeLayout_getDescriptorSetDescriptorRangeDescriptorCount(
- (SlangReflectionTypeLayout*) this,
- setIndex,
- rangeIndex);
- }
+ VariableLayoutReflection* getSubObjectRangeOffset(SlangInt subObjectRangeIndex)
+ {
+ return (VariableLayoutReflection*)spReflectionTypeLayout_getSubObjectRangeOffset(
+ (SlangReflectionTypeLayout*)this,
+ subObjectRangeIndex);
+ }
+};
- BindingType getDescriptorSetDescriptorRangeType(SlangInt setIndex, SlangInt rangeIndex)
- {
- return (BindingType) spReflectionTypeLayout_getDescriptorSetDescriptorRangeType(
- (SlangReflectionTypeLayout*) this,
- setIndex,
- rangeIndex);
- }
+struct Modifier
+{
+ enum ID : SlangModifierIDIntegral
+ {
+ Shared = SLANG_MODIFIER_SHARED,
+ NoDiff = SLANG_MODIFIER_NO_DIFF,
+ Static = SLANG_MODIFIER_STATIC,
+ Const = SLANG_MODIFIER_CONST,
+ Export = SLANG_MODIFIER_EXPORT,
+ Extern = SLANG_MODIFIER_EXTERN,
+ Differentiable = SLANG_MODIFIER_DIFFERENTIABLE,
+ Mutating = SLANG_MODIFIER_MUTATING,
+ In = SLANG_MODIFIER_IN,
+ Out = SLANG_MODIFIER_OUT,
+ InOut = SLANG_MODIFIER_INOUT
+ };
+};
- ParameterCategory getDescriptorSetDescriptorRangeCategory(SlangInt setIndex, SlangInt rangeIndex)
- {
- return (ParameterCategory) spReflectionTypeLayout_getDescriptorSetDescriptorRangeCategory(
- (SlangReflectionTypeLayout*) this,
- setIndex,
- rangeIndex);
- }
+struct VariableReflection
+{
+ char const* getName() { return spReflectionVariable_GetName((SlangReflectionVariable*)this); }
- SlangInt getSubObjectRangeCount()
- {
- return spReflectionTypeLayout_getSubObjectRangeCount(
- (SlangReflectionTypeLayout*) this);
- }
+ TypeReflection* getType()
+ {
+ return (TypeReflection*)spReflectionVariable_GetType((SlangReflectionVariable*)this);
+ }
- SlangInt getSubObjectRangeBindingRangeIndex(SlangInt subObjectRangeIndex)
- {
- return spReflectionTypeLayout_getSubObjectRangeBindingRangeIndex(
- (SlangReflectionTypeLayout*) this,
- subObjectRangeIndex);
- }
+ Modifier* findModifier(Modifier::ID id)
+ {
+ return (Modifier*)spReflectionVariable_FindModifier(
+ (SlangReflectionVariable*)this,
+ (SlangModifierID)id);
+ }
- SlangInt getSubObjectRangeSpaceOffset(SlangInt subObjectRangeIndex)
- {
- return spReflectionTypeLayout_getSubObjectRangeSpaceOffset(
- (SlangReflectionTypeLayout*) this,
- subObjectRangeIndex);
- }
+ unsigned int getUserAttributeCount()
+ {
+ return spReflectionVariable_GetUserAttributeCount((SlangReflectionVariable*)this);
+ }
- VariableLayoutReflection* getSubObjectRangeOffset(SlangInt subObjectRangeIndex)
- {
- return (VariableLayoutReflection*) spReflectionTypeLayout_getSubObjectRangeOffset(
- (SlangReflectionTypeLayout*) this,
- subObjectRangeIndex);
- }
- };
+ UserAttribute* getUserAttributeByIndex(unsigned int index)
+ {
+ return (UserAttribute*)spReflectionVariable_GetUserAttribute(
+ (SlangReflectionVariable*)this,
+ index);
+ }
- struct Modifier
+ UserAttribute* findUserAttributeByName(SlangSession* globalSession, char const* name)
{
- enum ID : SlangModifierIDIntegral
- {
- Shared = SLANG_MODIFIER_SHARED,
- NoDiff = SLANG_MODIFIER_NO_DIFF,
- Static = SLANG_MODIFIER_STATIC,
- Const = SLANG_MODIFIER_CONST,
- Export = SLANG_MODIFIER_EXPORT,
- Extern = SLANG_MODIFIER_EXTERN,
- Differentiable = SLANG_MODIFIER_DIFFERENTIABLE,
- Mutating = SLANG_MODIFIER_MUTATING,
- In = SLANG_MODIFIER_IN,
- Out = SLANG_MODIFIER_OUT,
- InOut = SLANG_MODIFIER_INOUT
- };
- };
+ return (UserAttribute*)spReflectionVariable_FindUserAttributeByName(
+ (SlangReflectionVariable*)this,
+ globalSession,
+ name);
+ }
- struct VariableReflection
+ bool hasDefaultValue()
{
- char const* getName()
- {
- return spReflectionVariable_GetName((SlangReflectionVariable*) this);
- }
+ return spReflectionVariable_HasDefaultValue((SlangReflectionVariable*)this);
+ }
- TypeReflection* getType()
- {
- return (TypeReflection*) spReflectionVariable_GetType((SlangReflectionVariable*) this);
- }
+ GenericReflection* getGenericContainer()
+ {
+ return (GenericReflection*)spReflectionVariable_GetGenericContainer(
+ (SlangReflectionVariable*)this);
+ }
- Modifier* findModifier(Modifier::ID id)
- {
- return (Modifier*) spReflectionVariable_FindModifier((SlangReflectionVariable*) this, (SlangModifierID) id);
- }
+ VariableReflection* applySpecializations(GenericReflection* generic)
+ {
+ return (VariableReflection*)spReflectionVariable_applySpecializations(
+ (SlangReflectionVariable*)this,
+ (SlangReflectionGeneric*)generic);
+ }
+};
- unsigned int getUserAttributeCount()
- {
- return spReflectionVariable_GetUserAttributeCount((SlangReflectionVariable*)this);
- }
+struct VariableLayoutReflection
+{
+ VariableReflection* getVariable()
+ {
+ return (VariableReflection*)spReflectionVariableLayout_GetVariable(
+ (SlangReflectionVariableLayout*)this);
+ }
- UserAttribute* getUserAttributeByIndex(unsigned int index)
- {
- return (UserAttribute*)spReflectionVariable_GetUserAttribute((SlangReflectionVariable*)this, index);
- }
+ char const* getName() { return getVariable()->getName(); }
- UserAttribute* findUserAttributeByName(SlangSession* globalSession, char const* name)
- {
- return (UserAttribute*)spReflectionVariable_FindUserAttributeByName((SlangReflectionVariable*)this, globalSession, name);
- }
+ Modifier* findModifier(Modifier::ID id) { return getVariable()->findModifier(id); }
- bool hasDefaultValue()
- {
- return spReflectionVariable_HasDefaultValue((SlangReflectionVariable*)this);
- }
+ TypeLayoutReflection* getTypeLayout()
+ {
+ return (TypeLayoutReflection*)spReflectionVariableLayout_GetTypeLayout(
+ (SlangReflectionVariableLayout*)this);
+ }
- GenericReflection* getGenericContainer()
- {
- return (GenericReflection*)spReflectionVariable_GetGenericContainer((SlangReflectionVariable*)this);
- }
+ ParameterCategory getCategory() { return getTypeLayout()->getParameterCategory(); }
- VariableReflection* applySpecializations(GenericReflection* generic)
- {
- return (VariableReflection*)spReflectionVariable_applySpecializations((SlangReflectionVariable*)this, (SlangReflectionGeneric*)generic);
- }
- };
+ unsigned int getCategoryCount() { return getTypeLayout()->getCategoryCount(); }
- struct VariableLayoutReflection
+ ParameterCategory getCategoryByIndex(unsigned int index)
{
- VariableReflection* getVariable()
- {
- return (VariableReflection*) spReflectionVariableLayout_GetVariable((SlangReflectionVariableLayout*) this);
- }
+ return getTypeLayout()->getCategoryByIndex(index);
+ }
- char const* getName()
- {
- return getVariable()->getName();
- }
- Modifier* findModifier(Modifier::ID id)
- {
- return getVariable()->findModifier(id);
- }
+ size_t getOffset(SlangParameterCategory category = SLANG_PARAMETER_CATEGORY_UNIFORM)
+ {
+ return spReflectionVariableLayout_GetOffset((SlangReflectionVariableLayout*)this, category);
+ }
- TypeLayoutReflection* getTypeLayout()
- {
- return (TypeLayoutReflection*) spReflectionVariableLayout_GetTypeLayout((SlangReflectionVariableLayout*) this);
- }
+ TypeReflection* getType() { return getVariable()->getType(); }
- ParameterCategory getCategory()
- {
- return getTypeLayout()->getParameterCategory();
- }
+ unsigned getBindingIndex()
+ {
+ return spReflectionParameter_GetBindingIndex((SlangReflectionVariableLayout*)this);
+ }
- unsigned int getCategoryCount()
- {
- return getTypeLayout()->getCategoryCount();
- }
+ unsigned getBindingSpace()
+ {
+ return spReflectionParameter_GetBindingSpace((SlangReflectionVariableLayout*)this);
+ }
- ParameterCategory getCategoryByIndex(unsigned int index)
- {
- return getTypeLayout()->getCategoryByIndex(index);
- }
+ size_t getBindingSpace(SlangParameterCategory category)
+ {
+ return spReflectionVariableLayout_GetSpace((SlangReflectionVariableLayout*)this, category);
+ }
+ char const* getSemanticName()
+ {
+ return spReflectionVariableLayout_GetSemanticName((SlangReflectionVariableLayout*)this);
+ }
- size_t getOffset(SlangParameterCategory category = SLANG_PARAMETER_CATEGORY_UNIFORM)
- {
- return spReflectionVariableLayout_GetOffset((SlangReflectionVariableLayout*) this, category);
- }
+ size_t getSemanticIndex()
+ {
+ return spReflectionVariableLayout_GetSemanticIndex((SlangReflectionVariableLayout*)this);
+ }
- TypeReflection* getType()
- {
- return getVariable()->getType();
- }
+ SlangStage getStage()
+ {
+ return spReflectionVariableLayout_getStage((SlangReflectionVariableLayout*)this);
+ }
- unsigned getBindingIndex()
- {
- return spReflectionParameter_GetBindingIndex((SlangReflectionVariableLayout*) this);
- }
+ VariableLayoutReflection* getPendingDataLayout()
+ {
+ return (VariableLayoutReflection*)spReflectionVariableLayout_getPendingDataLayout(
+ (SlangReflectionVariableLayout*)this);
+ }
+};
- unsigned getBindingSpace()
- {
- return spReflectionParameter_GetBindingSpace((SlangReflectionVariableLayout*) this);
- }
+struct FunctionReflection
+{
+ char const* getName() { return spReflectionFunction_GetName((SlangReflectionFunction*)this); }
- size_t getBindingSpace(SlangParameterCategory category)
- {
- return spReflectionVariableLayout_GetSpace((SlangReflectionVariableLayout*) this, category);
- }
+ TypeReflection* getReturnType()
+ {
+ return (TypeReflection*)spReflectionFunction_GetResultType((SlangReflectionFunction*)this);
+ }
- char const* getSemanticName()
- {
- return spReflectionVariableLayout_GetSemanticName((SlangReflectionVariableLayout*) this);
- }
+ unsigned int getParameterCount()
+ {
+ return spReflectionFunction_GetParameterCount((SlangReflectionFunction*)this);
+ }
- size_t getSemanticIndex()
- {
- return spReflectionVariableLayout_GetSemanticIndex((SlangReflectionVariableLayout*) this);
- }
+ VariableReflection* getParameterByIndex(unsigned int index)
+ {
+ return (VariableReflection*)spReflectionFunction_GetParameter(
+ (SlangReflectionFunction*)this,
+ index);
+ }
- SlangStage getStage()
- {
- return spReflectionVariableLayout_getStage((SlangReflectionVariableLayout*) this);
- }
+ unsigned int getUserAttributeCount()
+ {
+ return spReflectionFunction_GetUserAttributeCount((SlangReflectionFunction*)this);
+ }
+ UserAttribute* getUserAttributeByIndex(unsigned int index)
+ {
+ return (UserAttribute*)spReflectionFunction_GetUserAttribute(
+ (SlangReflectionFunction*)this,
+ index);
+ }
+ UserAttribute* findUserAttributeByName(SlangSession* globalSession, char const* name)
+ {
+ return (UserAttribute*)spReflectionFunction_FindUserAttributeByName(
+ (SlangReflectionFunction*)this,
+ globalSession,
+ name);
+ }
- VariableLayoutReflection* getPendingDataLayout()
- {
- return (VariableLayoutReflection*) spReflectionVariableLayout_getPendingDataLayout((SlangReflectionVariableLayout*) this);
- }
- };
+ Modifier* findModifier(Modifier::ID id)
+ {
+ return (Modifier*)spReflectionFunction_FindModifier(
+ (SlangReflectionFunction*)this,
+ (SlangModifierID)id);
+ }
- struct FunctionReflection
+ GenericReflection* getGenericContainer()
{
- char const* getName()
- {
- return spReflectionFunction_GetName((SlangReflectionFunction*)this);
- }
+ return (GenericReflection*)spReflectionFunction_GetGenericContainer(
+ (SlangReflectionFunction*)this);
+ }
- TypeReflection* getReturnType()
- {
- return (TypeReflection*)spReflectionFunction_GetResultType((SlangReflectionFunction*)this);
- }
+ FunctionReflection* applySpecializations(GenericReflection* generic)
+ {
+ return (FunctionReflection*)spReflectionFunction_applySpecializations(
+ (SlangReflectionFunction*)this,
+ (SlangReflectionGeneric*)generic);
+ }
- unsigned int getParameterCount()
- {
- return spReflectionFunction_GetParameterCount((SlangReflectionFunction*)this);
- }
+ FunctionReflection* specializeWithArgTypes(unsigned int argCount, TypeReflection* const* types)
+ {
+ return (FunctionReflection*)spReflectionFunction_specializeWithArgTypes(
+ (SlangReflectionFunction*)this,
+ argCount,
+ (SlangReflectionType* const*)types);
+ }
- VariableReflection* getParameterByIndex(unsigned int index)
- {
- return (VariableReflection*)spReflectionFunction_GetParameter((SlangReflectionFunction*)this, index);
- }
+ bool isOverloaded()
+ {
+ return spReflectionFunction_isOverloaded((SlangReflectionFunction*)this);
+ }
- unsigned int getUserAttributeCount()
- {
- return spReflectionFunction_GetUserAttributeCount((SlangReflectionFunction*)this);
- }
- UserAttribute* getUserAttributeByIndex(unsigned int index)
- {
- return (UserAttribute*)spReflectionFunction_GetUserAttribute((SlangReflectionFunction*)this, index);
- }
- UserAttribute* findUserAttributeByName(SlangSession* globalSession, char const* name)
- {
- return (UserAttribute*)spReflectionFunction_FindUserAttributeByName((SlangReflectionFunction*)this, globalSession, name);
- }
+ unsigned int getOverloadCount()
+ {
+ return spReflectionFunction_getOverloadCount((SlangReflectionFunction*)this);
+ }
- Modifier* findModifier(Modifier::ID id)
- {
- return (Modifier*)spReflectionFunction_FindModifier((SlangReflectionFunction*)this, (SlangModifierID)id);
- }
+ FunctionReflection* getOverload(unsigned int index)
+ {
+ return (FunctionReflection*)spReflectionFunction_getOverload(
+ (SlangReflectionFunction*)this,
+ index);
+ }
+};
- GenericReflection* getGenericContainer()
- {
- return (GenericReflection*)spReflectionFunction_GetGenericContainer((SlangReflectionFunction*)this);
- }
+struct GenericReflection
+{
- FunctionReflection* applySpecializations(GenericReflection* generic)
- {
- return (FunctionReflection*)spReflectionFunction_applySpecializations((SlangReflectionFunction*)this, (SlangReflectionGeneric*)generic);
- }
+ DeclReflection* asDecl()
+ {
+ return (DeclReflection*)spReflectionGeneric_asDecl((SlangReflectionGeneric*)this);
+ }
- FunctionReflection* specializeWithArgTypes(unsigned int argCount, TypeReflection* const* types)
- {
- return (FunctionReflection*)spReflectionFunction_specializeWithArgTypes((SlangReflectionFunction*)this, argCount, (SlangReflectionType* const*)types);
- }
+ char const* getName() { return spReflectionGeneric_GetName((SlangReflectionGeneric*)this); }
- bool isOverloaded()
- {
- return spReflectionFunction_isOverloaded((SlangReflectionFunction*)this);
- }
+ unsigned int getTypeParameterCount()
+ {
+ return spReflectionGeneric_GetTypeParameterCount((SlangReflectionGeneric*)this);
+ }
- unsigned int getOverloadCount()
- {
- return spReflectionFunction_getOverloadCount((SlangReflectionFunction*)this);
- }
+ VariableReflection* getTypeParameter(unsigned index)
+ {
+ return (VariableReflection*)spReflectionGeneric_GetTypeParameter(
+ (SlangReflectionGeneric*)this,
+ index);
+ }
- FunctionReflection* getOverload(unsigned int index)
- {
- return (FunctionReflection*)spReflectionFunction_getOverload((SlangReflectionFunction*)this, index);
- }
- };
+ unsigned int getValueParameterCount()
+ {
+ return spReflectionGeneric_GetValueParameterCount((SlangReflectionGeneric*)this);
+ }
- struct GenericReflection
+ VariableReflection* getValueParameter(unsigned index)
{
+ return (VariableReflection*)spReflectionGeneric_GetValueParameter(
+ (SlangReflectionGeneric*)this,
+ index);
+ }
- DeclReflection* asDecl()
- {
- return (DeclReflection*)spReflectionGeneric_asDecl((SlangReflectionGeneric*)this);
- }
+ unsigned int getTypeParameterConstraintCount(VariableReflection* typeParam)
+ {
+ return spReflectionGeneric_GetTypeParameterConstraintCount(
+ (SlangReflectionGeneric*)this,
+ (SlangReflectionVariable*)typeParam);
+ }
- char const* getName()
- {
- return spReflectionGeneric_GetName((SlangReflectionGeneric*)this);
- }
+ TypeReflection* getTypeParameterConstraintType(VariableReflection* typeParam, unsigned index)
+ {
+ return (TypeReflection*)spReflectionGeneric_GetTypeParameterConstraintType(
+ (SlangReflectionGeneric*)this,
+ (SlangReflectionVariable*)typeParam,
+ index);
+ }
- unsigned int getTypeParameterCount()
- {
- return spReflectionGeneric_GetTypeParameterCount((SlangReflectionGeneric*)this);
- }
+ DeclReflection* getInnerDecl()
+ {
+ return (DeclReflection*)spReflectionGeneric_GetInnerDecl((SlangReflectionGeneric*)this);
+ }
- VariableReflection* getTypeParameter(unsigned index)
- {
- return (VariableReflection*)spReflectionGeneric_GetTypeParameter((SlangReflectionGeneric*)this, index);
- }
+ SlangDeclKind getInnerKind()
+ {
+ return spReflectionGeneric_GetInnerKind((SlangReflectionGeneric*)this);
+ }
- unsigned int getValueParameterCount()
- {
- return spReflectionGeneric_GetValueParameterCount((SlangReflectionGeneric*)this);
- }
+ GenericReflection* getOuterGenericContainer()
+ {
+ return (GenericReflection*)spReflectionGeneric_GetOuterGenericContainer(
+ (SlangReflectionGeneric*)this);
+ }
- VariableReflection* getValueParameter(unsigned index)
- {
- return (VariableReflection*)spReflectionGeneric_GetValueParameter((SlangReflectionGeneric*)this, index);
- }
+ TypeReflection* getConcreteType(VariableReflection* typeParam)
+ {
+ return (TypeReflection*)spReflectionGeneric_GetConcreteType(
+ (SlangReflectionGeneric*)this,
+ (SlangReflectionVariable*)typeParam);
+ }
- unsigned int getTypeParameterConstraintCount(VariableReflection* typeParam)
- {
- return spReflectionGeneric_GetTypeParameterConstraintCount((SlangReflectionGeneric*)this, (SlangReflectionVariable*)typeParam);
- }
+ int64_t getConcreteIntVal(VariableReflection* valueParam)
+ {
+ return spReflectionGeneric_GetConcreteIntVal(
+ (SlangReflectionGeneric*)this,
+ (SlangReflectionVariable*)valueParam);
+ }
- TypeReflection* getTypeParameterConstraintType(VariableReflection* typeParam, unsigned index)
- {
- return (TypeReflection*)spReflectionGeneric_GetTypeParameterConstraintType((SlangReflectionGeneric*)this, (SlangReflectionVariable*)typeParam, index);
- }
+ GenericReflection* applySpecializations(GenericReflection* generic)
+ {
+ return (GenericReflection*)spReflectionGeneric_applySpecializations(
+ (SlangReflectionGeneric*)this,
+ (SlangReflectionGeneric*)generic);
+ }
+};
- DeclReflection* getInnerDecl()
- {
- return (DeclReflection*)spReflectionGeneric_GetInnerDecl((SlangReflectionGeneric*)this);
- }
+struct EntryPointReflection
+{
+ char const* getName()
+ {
+ return spReflectionEntryPoint_getName((SlangReflectionEntryPoint*)this);
+ }
- SlangDeclKind getInnerKind()
- {
- return spReflectionGeneric_GetInnerKind((SlangReflectionGeneric*)this);
- }
+ char const* getNameOverride()
+ {
+ return spReflectionEntryPoint_getNameOverride((SlangReflectionEntryPoint*)this);
+ }
- GenericReflection* getOuterGenericContainer()
- {
- return (GenericReflection*)spReflectionGeneric_GetOuterGenericContainer((SlangReflectionGeneric*)this);
- }
+ unsigned getParameterCount()
+ {
+ return spReflectionEntryPoint_getParameterCount((SlangReflectionEntryPoint*)this);
+ }
- TypeReflection* getConcreteType(VariableReflection* typeParam)
- {
- return (TypeReflection*)spReflectionGeneric_GetConcreteType((SlangReflectionGeneric*)this, (SlangReflectionVariable*)typeParam);
- }
+ FunctionReflection* getFunction()
+ {
+ return (FunctionReflection*)spReflectionEntryPoint_getFunction(
+ (SlangReflectionEntryPoint*)this);
+ }
- int64_t getConcreteIntVal(VariableReflection* valueParam)
- {
- return spReflectionGeneric_GetConcreteIntVal((SlangReflectionGeneric*)this, (SlangReflectionVariable*)valueParam);
- }
+ VariableLayoutReflection* getParameterByIndex(unsigned index)
+ {
+ return (VariableLayoutReflection*)spReflectionEntryPoint_getParameterByIndex(
+ (SlangReflectionEntryPoint*)this,
+ index);
+ }
- GenericReflection* applySpecializations(GenericReflection* generic)
- {
- return (GenericReflection*)spReflectionGeneric_applySpecializations((SlangReflectionGeneric*)this, (SlangReflectionGeneric*)generic);
- }
- };
+ SlangStage getStage()
+ {
+ return spReflectionEntryPoint_getStage((SlangReflectionEntryPoint*)this);
+ }
- struct EntryPointReflection
+ void getComputeThreadGroupSize(SlangUInt axisCount, SlangUInt* outSizeAlongAxis)
{
- char const* getName()
- {
- return spReflectionEntryPoint_getName((SlangReflectionEntryPoint*) this);
- }
+ return spReflectionEntryPoint_getComputeThreadGroupSize(
+ (SlangReflectionEntryPoint*)this,
+ axisCount,
+ outSizeAlongAxis);
+ }
- char const* getNameOverride()
- {
- return spReflectionEntryPoint_getNameOverride((SlangReflectionEntryPoint*)this);
- }
+ void getComputeWaveSize(SlangUInt* outWaveSize)
+ {
+ return spReflectionEntryPoint_getComputeWaveSize(
+ (SlangReflectionEntryPoint*)this,
+ outWaveSize);
+ }
- unsigned getParameterCount()
- {
- return spReflectionEntryPoint_getParameterCount((SlangReflectionEntryPoint*) this);
- }
+ bool usesAnySampleRateInput()
+ {
+ return 0 != spReflectionEntryPoint_usesAnySampleRateInput((SlangReflectionEntryPoint*)this);
+ }
- FunctionReflection* getFunction()
- {
- return (FunctionReflection*)spReflectionEntryPoint_getFunction((SlangReflectionEntryPoint*) this);
- }
+ VariableLayoutReflection* getVarLayout()
+ {
+ return (VariableLayoutReflection*)spReflectionEntryPoint_getVarLayout(
+ (SlangReflectionEntryPoint*)this);
+ }
- VariableLayoutReflection* getParameterByIndex(unsigned index)
- {
- return (VariableLayoutReflection*) spReflectionEntryPoint_getParameterByIndex((SlangReflectionEntryPoint*) this, index);
- }
+ TypeLayoutReflection* getTypeLayout() { return getVarLayout()->getTypeLayout(); }
- SlangStage getStage()
- {
- return spReflectionEntryPoint_getStage((SlangReflectionEntryPoint*) this);
- }
+ VariableLayoutReflection* getResultVarLayout()
+ {
+ return (VariableLayoutReflection*)spReflectionEntryPoint_getResultVarLayout(
+ (SlangReflectionEntryPoint*)this);
+ }
- void getComputeThreadGroupSize(
- SlangUInt axisCount,
- SlangUInt* outSizeAlongAxis)
- {
- return spReflectionEntryPoint_getComputeThreadGroupSize((SlangReflectionEntryPoint*) this, axisCount, outSizeAlongAxis);
- }
+ bool hasDefaultConstantBuffer()
+ {
+ return spReflectionEntryPoint_hasDefaultConstantBuffer((SlangReflectionEntryPoint*)this) !=
+ 0;
+ }
+};
- void getComputeWaveSize(
- SlangUInt* outWaveSize)
- {
- return spReflectionEntryPoint_getComputeWaveSize((SlangReflectionEntryPoint*)this, outWaveSize);
- }
+typedef EntryPointReflection EntryPointLayout;
- bool usesAnySampleRateInput()
- {
- return 0 != spReflectionEntryPoint_usesAnySampleRateInput((SlangReflectionEntryPoint*) this);
- }
+struct TypeParameterReflection
+{
+ char const* getName()
+ {
+ return spReflectionTypeParameter_GetName((SlangReflectionTypeParameter*)this);
+ }
+ unsigned getIndex()
+ {
+ return spReflectionTypeParameter_GetIndex((SlangReflectionTypeParameter*)this);
+ }
+ unsigned getConstraintCount()
+ {
+ return spReflectionTypeParameter_GetConstraintCount((SlangReflectionTypeParameter*)this);
+ }
+ TypeReflection* getConstraintByIndex(int index)
+ {
+ return (TypeReflection*)spReflectionTypeParameter_GetConstraintByIndex(
+ (SlangReflectionTypeParameter*)this,
+ index);
+ }
+};
- VariableLayoutReflection* getVarLayout()
- {
- return (VariableLayoutReflection*) spReflectionEntryPoint_getVarLayout((SlangReflectionEntryPoint*) this);
- }
+enum class LayoutRules : SlangLayoutRulesIntegral
+{
+ Default = SLANG_LAYOUT_RULES_DEFAULT,
+ MetalArgumentBufferTier2 = SLANG_LAYOUT_RULES_METAL_ARGUMENT_BUFFER_TIER_2,
+};
- TypeLayoutReflection* getTypeLayout()
- {
- return getVarLayout()->getTypeLayout();
- }
+typedef struct ShaderReflection ProgramLayout;
+typedef enum SlangReflectionGenericArgType GenericArgType;
- VariableLayoutReflection* getResultVarLayout()
- {
- return (VariableLayoutReflection*) spReflectionEntryPoint_getResultVarLayout((SlangReflectionEntryPoint*) this);
- }
+struct ShaderReflection
+{
+ unsigned getParameterCount() { return spReflection_GetParameterCount((SlangReflection*)this); }
- bool hasDefaultConstantBuffer()
- {
- return spReflectionEntryPoint_hasDefaultConstantBuffer((SlangReflectionEntryPoint*) this) != 0;
- }
- };
+ unsigned getTypeParameterCount()
+ {
+ return spReflection_GetTypeParameterCount((SlangReflection*)this);
+ }
- typedef EntryPointReflection EntryPointLayout;
+ slang::ISession* getSession() { return spReflection_GetSession((SlangReflection*)this); }
- struct TypeParameterReflection
+ TypeParameterReflection* getTypeParameterByIndex(unsigned index)
{
- char const* getName()
- {
- return spReflectionTypeParameter_GetName((SlangReflectionTypeParameter*) this);
- }
- unsigned getIndex()
- {
- return spReflectionTypeParameter_GetIndex((SlangReflectionTypeParameter*) this);
- }
- unsigned getConstraintCount()
- {
- return spReflectionTypeParameter_GetConstraintCount((SlangReflectionTypeParameter*) this);
- }
- TypeReflection* getConstraintByIndex(int index)
- {
- return (TypeReflection*)spReflectionTypeParameter_GetConstraintByIndex((SlangReflectionTypeParameter*) this, index);
- }
- };
+ return (TypeParameterReflection*)spReflection_GetTypeParameterByIndex(
+ (SlangReflection*)this,
+ index);
+ }
- enum class LayoutRules : SlangLayoutRulesIntegral
+ TypeParameterReflection* findTypeParameter(char const* name)
{
- Default = SLANG_LAYOUT_RULES_DEFAULT,
- MetalArgumentBufferTier2 = SLANG_LAYOUT_RULES_METAL_ARGUMENT_BUFFER_TIER_2,
- };
-
- typedef struct ShaderReflection ProgramLayout;
- typedef enum SlangReflectionGenericArgType GenericArgType;
+ return (
+ TypeParameterReflection*)spReflection_FindTypeParameter((SlangReflection*)this, name);
+ }
- struct ShaderReflection
+ VariableLayoutReflection* getParameterByIndex(unsigned index)
{
- unsigned getParameterCount()
- {
- return spReflection_GetParameterCount((SlangReflection*) this);
- }
-
- unsigned getTypeParameterCount()
- {
- return spReflection_GetTypeParameterCount((SlangReflection*) this);
- }
-
- slang::ISession* getSession()
- {
- return spReflection_GetSession((SlangReflection*)this);
- }
-
- TypeParameterReflection* getTypeParameterByIndex(unsigned index)
- {
- return (TypeParameterReflection*)spReflection_GetTypeParameterByIndex((SlangReflection*) this, index);
- }
+ return (VariableLayoutReflection*)spReflection_GetParameterByIndex(
+ (SlangReflection*)this,
+ index);
+ }
- TypeParameterReflection* findTypeParameter(char const* name)
- {
- return (TypeParameterReflection*)spReflection_FindTypeParameter((SlangReflection*)this, name);
- }
+ static ProgramLayout* get(SlangCompileRequest* request)
+ {
+ return (ProgramLayout*)spGetReflection(request);
+ }
- VariableLayoutReflection* getParameterByIndex(unsigned index)
- {
- return (VariableLayoutReflection*) spReflection_GetParameterByIndex((SlangReflection*) this, index);
- }
+ SlangUInt getEntryPointCount()
+ {
+ return spReflection_getEntryPointCount((SlangReflection*)this);
+ }
- static ProgramLayout* get(SlangCompileRequest* request)
- {
- return (ProgramLayout*) spGetReflection(request);
- }
+ EntryPointReflection* getEntryPointByIndex(SlangUInt index)
+ {
+ return (
+ EntryPointReflection*)spReflection_getEntryPointByIndex((SlangReflection*)this, index);
+ }
- SlangUInt getEntryPointCount()
- {
- return spReflection_getEntryPointCount((SlangReflection*) this);
- }
+ SlangUInt getGlobalConstantBufferBinding()
+ {
+ return spReflection_getGlobalConstantBufferBinding((SlangReflection*)this);
+ }
- EntryPointReflection* getEntryPointByIndex(SlangUInt index)
- {
- return (EntryPointReflection*) spReflection_getEntryPointByIndex((SlangReflection*) this, index);
- }
+ size_t getGlobalConstantBufferSize()
+ {
+ return spReflection_getGlobalConstantBufferSize((SlangReflection*)this);
+ }
- SlangUInt getGlobalConstantBufferBinding()
- {
- return spReflection_getGlobalConstantBufferBinding((SlangReflection*)this);
- }
+ TypeReflection* findTypeByName(const char* name)
+ {
+ return (TypeReflection*)spReflection_FindTypeByName((SlangReflection*)this, name);
+ }
- size_t getGlobalConstantBufferSize()
- {
- return spReflection_getGlobalConstantBufferSize((SlangReflection*)this);
- }
+ FunctionReflection* findFunctionByName(const char* name)
+ {
+ return (FunctionReflection*)spReflection_FindFunctionByName((SlangReflection*)this, name);
+ }
- TypeReflection* findTypeByName(const char* name)
- {
- return (TypeReflection*)spReflection_FindTypeByName(
- (SlangReflection*) this,
- name);
- }
+ FunctionReflection* findFunctionByNameInType(TypeReflection* type, const char* name)
+ {
+ return (FunctionReflection*)spReflection_FindFunctionByNameInType(
+ (SlangReflection*)this,
+ (SlangReflectionType*)type,
+ name);
+ }
- FunctionReflection* findFunctionByName(const char* name)
- {
- return (FunctionReflection*)spReflection_FindFunctionByName(
- (SlangReflection*) this,
- name);
- }
+ VariableReflection* findVarByNameInType(TypeReflection* type, const char* name)
+ {
+ return (VariableReflection*)spReflection_FindVarByNameInType(
+ (SlangReflection*)this,
+ (SlangReflectionType*)type,
+ name);
+ }
- FunctionReflection* findFunctionByNameInType(TypeReflection* type, const char* name)
- {
- return (FunctionReflection*)spReflection_FindFunctionByNameInType(
- (SlangReflection*) this,
- (SlangReflectionType*) type,
- name);
- }
+ TypeLayoutReflection* getTypeLayout(
+ TypeReflection* type,
+ LayoutRules rules = LayoutRules::Default)
+ {
+ return (TypeLayoutReflection*)spReflection_GetTypeLayout(
+ (SlangReflection*)this,
+ (SlangReflectionType*)type,
+ SlangLayoutRules(rules));
+ }
- VariableReflection* findVarByNameInType(TypeReflection* type, const char* name)
- {
- return (VariableReflection*)spReflection_FindVarByNameInType(
- (SlangReflection*) this,
- (SlangReflectionType*) type,
- name);
- }
+ EntryPointReflection* findEntryPointByName(const char* name)
+ {
+ return (
+ EntryPointReflection*)spReflection_findEntryPointByName((SlangReflection*)this, name);
+ }
- TypeLayoutReflection* getTypeLayout(
- TypeReflection* type,
- LayoutRules rules = LayoutRules::Default)
- {
- return (TypeLayoutReflection*)spReflection_GetTypeLayout(
- (SlangReflection*) this,
- (SlangReflectionType*)type,
- SlangLayoutRules(rules));
- }
+ TypeReflection* specializeType(
+ TypeReflection* type,
+ SlangInt specializationArgCount,
+ TypeReflection* const* specializationArgs,
+ ISlangBlob** outDiagnostics)
+ {
+ return (TypeReflection*)spReflection_specializeType(
+ (SlangReflection*)this,
+ (SlangReflectionType*)type,
+ specializationArgCount,
+ (SlangReflectionType* const*)specializationArgs,
+ outDiagnostics);
+ }
- EntryPointReflection* findEntryPointByName(const char* name)
- {
- return (EntryPointReflection*)spReflection_findEntryPointByName(
- (SlangReflection*) this,
- name);
- }
+ GenericReflection* specializeGeneric(
+ GenericReflection* generic,
+ SlangInt specializationArgCount,
+ GenericArgType const* specializationArgTypes,
+ GenericArgReflection const* specializationArgVals,
+ ISlangBlob** outDiagnostics)
+ {
+ return (GenericReflection*)spReflection_specializeGeneric(
+ (SlangReflection*)this,
+ (SlangReflectionGeneric*)generic,
+ specializationArgCount,
+ (SlangReflectionGenericArgType const*)specializationArgTypes,
+ (SlangReflectionGenericArg const*)specializationArgVals,
+ outDiagnostics);
+ }
- TypeReflection* specializeType(
- TypeReflection* type,
- SlangInt specializationArgCount,
- TypeReflection* const* specializationArgs,
- ISlangBlob** outDiagnostics)
- {
- return (TypeReflection*) spReflection_specializeType(
- (SlangReflection*) this,
- (SlangReflectionType*) type,
- specializationArgCount,
- (SlangReflectionType* const*) specializationArgs,
- outDiagnostics);
- }
+ bool isSubType(TypeReflection* subType, TypeReflection* superType)
+ {
+ return spReflection_isSubType(
+ (SlangReflection*)this,
+ (SlangReflectionType*)subType,
+ (SlangReflectionType*)superType);
+ }
- GenericReflection* specializeGeneric(
- GenericReflection* generic,
- SlangInt specializationArgCount,
- GenericArgType const* specializationArgTypes,
- GenericArgReflection const* specializationArgVals,
- ISlangBlob** outDiagnostics)
- {
- return (GenericReflection*) spReflection_specializeGeneric(
- (SlangReflection*) this,
- (SlangReflectionGeneric*) generic,
- specializationArgCount,
- (SlangReflectionGenericArgType const*) specializationArgTypes,
- (SlangReflectionGenericArg const*) specializationArgVals,
- outDiagnostics);
- }
+ SlangUInt getHashedStringCount() const
+ {
+ return spReflection_getHashedStringCount((SlangReflection*)this);
+ }
- bool isSubType(
- TypeReflection* subType,
- TypeReflection* superType)
- {
- return spReflection_isSubType(
- (SlangReflection*) this,
- (SlangReflectionType*) subType,
- (SlangReflectionType*) superType);
- }
+ const char* getHashedString(SlangUInt index, size_t* outCount) const
+ {
+ return spReflection_getHashedString((SlangReflection*)this, index, outCount);
+ }
- SlangUInt getHashedStringCount() const { return spReflection_getHashedStringCount((SlangReflection*)this); }
+ TypeLayoutReflection* getGlobalParamsTypeLayout()
+ {
+ return (TypeLayoutReflection*)spReflection_getGlobalParamsTypeLayout(
+ (SlangReflection*)this);
+ }
- const char* getHashedString(SlangUInt index, size_t* outCount) const
- {
- return spReflection_getHashedString((SlangReflection*)this, index, outCount);
- }
+ VariableLayoutReflection* getGlobalParamsVarLayout()
+ {
+ return (VariableLayoutReflection*)spReflection_getGlobalParamsVarLayout(
+ (SlangReflection*)this);
+ }
+};
- TypeLayoutReflection* getGlobalParamsTypeLayout()
- {
- return (TypeLayoutReflection*) spReflection_getGlobalParamsTypeLayout((SlangReflection*) this);
- }
- VariableLayoutReflection* getGlobalParamsVarLayout()
- {
- return (VariableLayoutReflection*) spReflection_getGlobalParamsVarLayout((SlangReflection*) this);
- }
+struct DeclReflection
+{
+ enum class Kind
+ {
+ Unsupported = SLANG_DECL_KIND_UNSUPPORTED_FOR_REFLECTION,
+ Struct = SLANG_DECL_KIND_STRUCT,
+ Func = SLANG_DECL_KIND_FUNC,
+ Module = SLANG_DECL_KIND_MODULE,
+ Generic = SLANG_DECL_KIND_GENERIC,
+ Variable = SLANG_DECL_KIND_VARIABLE,
+ Namespace = SLANG_DECL_KIND_NAMESPACE,
};
-
- struct DeclReflection
- {
- enum class Kind
- {
- Unsupported = SLANG_DECL_KIND_UNSUPPORTED_FOR_REFLECTION,
- Struct = SLANG_DECL_KIND_STRUCT,
- Func = SLANG_DECL_KIND_FUNC,
- Module = SLANG_DECL_KIND_MODULE,
- Generic = SLANG_DECL_KIND_GENERIC,
- Variable = SLANG_DECL_KIND_VARIABLE,
- Namespace = SLANG_DECL_KIND_NAMESPACE,
- };
+ char const* getName() { return spReflectionDecl_getName((SlangReflectionDecl*)this); }
- char const* getName()
- {
- return spReflectionDecl_getName((SlangReflectionDecl*) this);
- }
+ Kind getKind() { return (Kind)spReflectionDecl_getKind((SlangReflectionDecl*)this); }
- Kind getKind()
- {
- return (Kind)spReflectionDecl_getKind((SlangReflectionDecl*)this);
- }
+ unsigned int getChildrenCount()
+ {
+ return spReflectionDecl_getChildrenCount((SlangReflectionDecl*)this);
+ }
- unsigned int getChildrenCount()
- {
- return spReflectionDecl_getChildrenCount((SlangReflectionDecl*)this);
- }
+ DeclReflection* getChild(unsigned int index)
+ {
+ return (DeclReflection*)spReflectionDecl_getChild((SlangReflectionDecl*)this, index);
+ }
- DeclReflection* getChild(unsigned int index)
- {
- return (DeclReflection*)spReflectionDecl_getChild((SlangReflectionDecl*)this, index);
- }
+ TypeReflection* getType()
+ {
+ return (TypeReflection*)spReflection_getTypeFromDecl((SlangReflectionDecl*)this);
+ }
- TypeReflection* getType()
- {
- return (TypeReflection*)spReflection_getTypeFromDecl((SlangReflectionDecl*)this);
- }
+ VariableReflection* asVariable()
+ {
+ return (VariableReflection*)spReflectionDecl_castToVariable((SlangReflectionDecl*)this);
+ }
- VariableReflection* asVariable()
- {
- return (VariableReflection*)spReflectionDecl_castToVariable((SlangReflectionDecl*)this);
- }
+ FunctionReflection* asFunction()
+ {
+ return (FunctionReflection*)spReflectionDecl_castToFunction((SlangReflectionDecl*)this);
+ }
- FunctionReflection* asFunction()
- {
- return (FunctionReflection*)spReflectionDecl_castToFunction((SlangReflectionDecl*)this);
- }
+ GenericReflection* asGeneric()
+ {
+ return (GenericReflection*)spReflectionDecl_castToGeneric((SlangReflectionDecl*)this);
+ }
- GenericReflection* asGeneric()
- {
- return (GenericReflection*)spReflectionDecl_castToGeneric((SlangReflectionDecl*)this);
- }
+ DeclReflection* getParent()
+ {
+ return (DeclReflection*)spReflectionDecl_getParent((SlangReflectionDecl*)this);
+ }
- DeclReflection* getParent()
- {
- return (DeclReflection*)spReflectionDecl_getParent((SlangReflectionDecl*)this);
- }
+ template<Kind K>
+ struct FilteredList
+ {
+ unsigned int count;
+ DeclReflection* parent;
- template <Kind K>
- struct FilteredList
+ struct FilteredIterator
{
- unsigned int count;
DeclReflection* parent;
+ unsigned int count;
+ unsigned int index;
- struct FilteredIterator
+ DeclReflection* operator*() { return parent->getChild(index); }
+ void operator++()
{
- DeclReflection* parent;
- unsigned int count;
- unsigned int index;
-
- DeclReflection* operator*() { return parent->getChild(index); }
- void operator++()
- {
- index++;
- while (index < count && !(parent->getChild(index)->getKind() == K))
- {
- index++;
- }
- }
- bool operator!=(FilteredIterator const& other) { return index != other.index; }
- };
-
- // begin/end for range-based for that checks the kind
- FilteredIterator begin()
- {
- // Find the first child of the right kind
- unsigned int index = 0;
+ index++;
while (index < count && !(parent->getChild(index)->getKind() == K))
{
index++;
}
- return FilteredIterator{parent, count, index};
}
-
- FilteredIterator end() { return FilteredIterator{parent, count, count}; }
+ bool operator!=(FilteredIterator const& other) { return index != other.index; }
};
-
- template <Kind K>
- FilteredList<K> getChildrenOfKind()
+
+ // begin/end for range-based for that checks the kind
+ FilteredIterator begin()
{
- return FilteredList<K>{ getChildrenCount(), (DeclReflection*)this };
+ // Find the first child of the right kind
+ unsigned int index = 0;
+ while (index < count && !(parent->getChild(index)->getKind() == K))
+ {
+ index++;
+ }
+ return FilteredIterator{parent, count, index};
}
- struct IteratedList
+ FilteredIterator end() { return FilteredIterator{parent, count, count}; }
+ };
+
+ template<Kind K>
+ FilteredList<K> getChildrenOfKind()
+ {
+ return FilteredList<K>{getChildrenCount(), (DeclReflection*)this};
+ }
+
+ struct IteratedList
+ {
+ unsigned int count;
+ DeclReflection* parent;
+
+ struct Iterator
{
- unsigned int count;
DeclReflection* parent;
+ unsigned int count;
+ unsigned int index;
- struct Iterator
- {
- DeclReflection* parent;
- unsigned int count;
- unsigned int index;
-
- DeclReflection* operator*() { return parent->getChild(index); }
- void operator++() { index++; }
- bool operator!=(Iterator const& other) { return index != other.index; }
- };
-
- // begin/end for range-based for that checks the kind
- IteratedList::Iterator begin() { return IteratedList::Iterator{ parent, count, 0 }; }
- IteratedList::Iterator end() { return IteratedList::Iterator{ parent, count, count }; }
+ DeclReflection* operator*() { return parent->getChild(index); }
+ void operator++() { index++; }
+ bool operator!=(Iterator const& other) { return index != other.index; }
};
- IteratedList getChildren()
- {
- return IteratedList{ getChildrenCount(), (DeclReflection*)this };
- }
-
+ // begin/end for range-based for that checks the kind
+ IteratedList::Iterator begin() { return IteratedList::Iterator{parent, count, 0}; }
+ IteratedList::Iterator end() { return IteratedList::Iterator{parent, count, count}; }
};
- typedef uint32_t CompileCoreModuleFlags;
- struct CompileCoreModuleFlag
+ IteratedList getChildren() { return IteratedList{getChildrenCount(), (DeclReflection*)this}; }
+};
+
+typedef uint32_t CompileCoreModuleFlags;
+struct CompileCoreModuleFlag
+{
+ enum Enum : CompileCoreModuleFlags
{
- enum Enum : CompileCoreModuleFlags
- {
- WriteDocumentation = 0x1,
- };
+ WriteDocumentation = 0x1,
};
+};
- typedef ISlangBlob IBlob;
+typedef ISlangBlob IBlob;
- struct IComponentType;
- struct ITypeConformance;
- struct IGlobalSession;
- struct IModule;
+struct IComponentType;
+struct ITypeConformance;
+struct IGlobalSession;
+struct IModule;
- struct SessionDesc;
- struct SpecializationArg;
- struct TargetDesc;
+struct SessionDesc;
+struct SpecializationArg;
+struct TargetDesc;
- /** A global session for interaction with the Slang library.
+/** A global session for interaction with the Slang library.
- An application may create and re-use a single global session across
- multiple sessions, in order to amortize startups costs (in current
- Slang this is mostly the cost of loading the Slang standard library).
+An application may create and re-use a single global session across
+multiple sessions, in order to amortize startups costs (in current
+Slang this is mostly the cost of loading the Slang standard library).
- The global session is currently *not* thread-safe and objects created from
- a single global session should only be used from a single thread at
- a time.
- */
- struct IGlobalSession : public ISlangUnknown
- {
- SLANG_COM_INTERFACE(0xc140b5fd, 0xc78, 0x452e, { 0xba, 0x7c, 0x1a, 0x1e, 0x70, 0xc7, 0xf7, 0x1c })
-
- /** Create a new session for loading and compiling code.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL createSession(
- SessionDesc const& desc,
- ISession** outSession) = 0;
-
- /** Look up the internal ID of a profile by its `name`.
-
- Profile IDs are *not* guaranteed to be stable across versions
- of the Slang library, so clients are expected to look up
- profiles by name at runtime.
- */
- virtual SLANG_NO_THROW SlangProfileID SLANG_MCALL findProfile(
- char const* name) = 0;
-
- /** Set the path that downstream compilers (aka back end compilers) will
- be looked from.
- @param passThrough Identifies the downstream compiler
- @param path The path to find the downstream compiler (shared library/dll/executable)
-
- For back ends that are dlls/shared libraries, it will mean the path will
- be prefixed with the path when calls are made out to ISlangSharedLibraryLoader.
- For executables - it will look for executables along the path */
- virtual SLANG_NO_THROW void SLANG_MCALL setDownstreamCompilerPath(
- SlangPassThrough passThrough,
- char const* path) = 0;
-
- /** DEPRECATED: Use setLanguagePrelude
-
- Set the 'prelude' for generated code for a 'downstream compiler'.
- @param passThrough The downstream compiler for generated code that will have the prelude applied to it.
- @param preludeText The text added pre-pended verbatim before the generated source
-
- That for pass-through usage, prelude is not pre-pended, preludes are for code generation only.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setDownstreamCompilerPrelude(
- SlangPassThrough passThrough,
- const char* preludeText) = 0;
-
- /** DEPRECATED: Use getLanguagePrelude
-
- Get the 'prelude' for generated code for a 'downstream compiler'.
- @param passThrough The downstream compiler for generated code that will have the prelude applied to it.
- @param outPrelude On exit holds a blob that holds the string of the prelude.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL getDownstreamCompilerPrelude(
- SlangPassThrough passThrough,
- ISlangBlob** outPrelude) = 0;
-
- /** Get the build version 'tag' string. The string is the same as produced via `git describe --tags`
- for the project. If Slang is built separately from the automated build scripts
- the contents will by default be 'unknown'. Any string can be set by changing the
- contents of 'slang-tag-version.h' file and recompiling the project.
-
- This method will return exactly the same result as the free function spGetBuildTagString.
-
- @return The build tag string
- */
- virtual SLANG_NO_THROW const char* SLANG_MCALL getBuildTagString() = 0;
-
- /* For a given source language set the default compiler.
- If a default cannot be chosen (for example the target cannot be achieved by the default),
- the default will not be used.
-
- @param sourceLanguage the source language
- @param defaultCompiler the default compiler for that language
- @return
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL setDefaultDownstreamCompiler(
- SlangSourceLanguage sourceLanguage,
- SlangPassThrough defaultCompiler) = 0;
-
- /* For a source type get the default compiler
-
- @param sourceLanguage the source language
- @return The downstream compiler for that source language */
- virtual SlangPassThrough SLANG_MCALL getDefaultDownstreamCompiler(
- SlangSourceLanguage sourceLanguage) = 0;
-
- /* Set the 'prelude' placed before generated code for a specific language type.
-
- @param sourceLanguage The language the prelude should be inserted on.
- @param preludeText The text added pre-pended verbatim before the generated source
-
- Note! That for pass-through usage, prelude is not pre-pended, preludes are for code generation only.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setLanguagePrelude(
- SlangSourceLanguage sourceLanguage,
- const char* preludeText) = 0;
-
- /** Get the 'prelude' associated with a specific source language.
- @param sourceLanguage The language the prelude should be inserted on.
- @param outPrelude On exit holds a blob that holds the string of the prelude.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL getLanguagePrelude(
- SlangSourceLanguage sourceLanguage,
- ISlangBlob** outPrelude) = 0;
-
- /** Create a compile request.
- */
- [[deprecated]]
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL createCompileRequest(
- slang::ICompileRequest** outCompileRequest) = 0;
-
- /** Add new builtin declarations to be used in subsequent compiles.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL addBuiltins(
- char const* sourcePath,
- char const* sourceString) = 0;
-
- /** Set the session shared library loader. If this changes the loader, it may cause shared libraries to be unloaded
- @param loader The loader to set. Setting nullptr sets the default loader.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setSharedLibraryLoader(
- ISlangSharedLibraryLoader* loader) = 0;
-
- /** Gets the currently set shared library loader
- @return Gets the currently set loader. If returns nullptr, it's the default loader
- */
- virtual SLANG_NO_THROW ISlangSharedLibraryLoader* SLANG_MCALL getSharedLibraryLoader() = 0;
-
- /** Returns SLANG_OK if a the compilation target is supported for this session
-
- @param target The compilation target to test
- @return SLANG_OK if the target is available
- SLANG_E_NOT_IMPLEMENTED if not implemented in this build
- SLANG_E_NOT_FOUND if other resources (such as shared libraries) required to make target work could not be found
- SLANG_FAIL other kinds of failures */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL checkCompileTargetSupport(
- SlangCompileTarget target) = 0;
-
- /** Returns SLANG_OK if a the pass through support is supported for this session
- @param session Session
- @param target The compilation target to test
- @return SLANG_OK if the target is available
- SLANG_E_NOT_IMPLEMENTED if not implemented in this build
- SLANG_E_NOT_FOUND if other resources (such as shared libraries) required to make target work could not be found
- SLANG_FAIL other kinds of failures */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL checkPassThroughSupport(
- SlangPassThrough passThrough) = 0;
-
- /** Compile from (embedded source) the core module on the session.
- Will return a failure if there is already a core module available
- NOTE! API is experimental and not ready for production code
- @param flags to control compilation
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL compileCoreModule(CompileCoreModuleFlags flags) = 0;
-
- /** Load the core module. Currently loads modules from the file system.
- @param coreModule Start address of the serialized core module
- @param coreModuleSizeInBytes The size in bytes of the serialized core module
-
- NOTE! API is experimental and not ready for production code
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL loadCoreModule(const void* coreModule, size_t coreModuleSizeInBytes) = 0;
-
- /** Save the core module to the file system
- @param archiveType The type of archive used to hold the core module
- @param outBlob The serialized blob containing the core module
-
- NOTE! API is experimental and not ready for production code */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL saveCoreModule(SlangArchiveType archiveType, ISlangBlob** outBlob) = 0;
-
- /** Look up the internal ID of a capability by its `name`.
-
- Capability IDs are *not* guaranteed to be stable across versions
- of the Slang library, so clients are expected to look up
- capabilities by name at runtime.
- */
- virtual SLANG_NO_THROW SlangCapabilityID SLANG_MCALL findCapability(
- char const* name) = 0;
-
- /** Set the downstream/pass through compiler to be used for a transition from the source type to the target type
- @param source The source 'code gen target'
- @param target The target 'code gen target'
- @param compiler The compiler/pass through to use for the transition from source to target
- */
- virtual SLANG_NO_THROW void SLANG_MCALL setDownstreamCompilerForTransition(SlangCompileTarget source, SlangCompileTarget target, SlangPassThrough compiler) = 0;
-
- /** Get the downstream/pass through compiler for a transition specified by source and target
- @param source The source 'code gen target'
- @param target The target 'code gen target'
- @return The compiler that is used for the transition. Returns SLANG_PASS_THROUGH_NONE it is not defined
- */
- virtual SLANG_NO_THROW SlangPassThrough SLANG_MCALL getDownstreamCompilerForTransition(SlangCompileTarget source, SlangCompileTarget target) = 0;
-
- /** Get the time in seconds spent in the slang and downstream compiler.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL getCompilerElapsedTime(double* outTotalTime, double* outDownstreamTime) = 0;
-
- /** Specify a spirv.core.grammar.json file to load and use when
- * parsing and checking any SPIR-V code
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL setSPIRVCoreGrammar(
- char const* jsonPath) = 0;
-
- /** Parse slangc command line options into a SessionDesc that can be used to create a session
- * with all the compiler options specified in the command line.
- * @param argc The number of command line arguments.
- * @param argv An input array of command line arguments to parse.
- * @param outSessionDesc A pointer to a SessionDesc struct to receive parsed session desc.
- * @param outAuxAllocation Auxillary memory allocated to hold data used in the sesion desc.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL parseCommandLineArguments(
- int argc, const char* const* argv, SessionDesc* outSessionDesc, ISlangUnknown** outAuxAllocation) = 0;
-
- /** Computes a digest that uniquely identifies the session description.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getSessionDescDigest(SessionDesc* sessionDesc, ISlangBlob** outBlob) = 0;
- };
+The global session is currently *not* thread-safe and objects created from
+a single global session should only be used from a single thread at
+a time.
+*/
+struct IGlobalSession : public ISlangUnknown
+{
+ SLANG_COM_INTERFACE(0xc140b5fd, 0xc78, 0x452e, {0xba, 0x7c, 0x1a, 0x1e, 0x70, 0xc7, 0xf7, 0x1c})
- #define SLANG_UUID_IGlobalSession IGlobalSession::getTypeGuid()
+ /** Create a new session for loading and compiling code.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ createSession(SessionDesc const& desc, ISession** outSession) = 0;
- /** Description of a code generation target.
- */
- struct TargetDesc
- {
- /** The size of this structure, in bytes.
- */
- size_t structureSize = sizeof(TargetDesc);
+ /** Look up the internal ID of a profile by its `name`.
- /** The target format to generate code for (e.g., SPIR-V, DXIL, etc.)
- */
- SlangCompileTarget format = SLANG_TARGET_UNKNOWN;
+ Profile IDs are *not* guaranteed to be stable across versions
+ of the Slang library, so clients are expected to look up
+ profiles by name at runtime.
+ */
+ virtual SLANG_NO_THROW SlangProfileID SLANG_MCALL findProfile(char const* name) = 0;
- /** The compilation profile supported by the target (e.g., "Shader Model 5.1")
- */
- SlangProfileID profile = SLANG_PROFILE_UNKNOWN;
+ /** Set the path that downstream compilers (aka back end compilers) will
+ be looked from.
+ @param passThrough Identifies the downstream compiler
+ @param path The path to find the downstream compiler (shared library/dll/executable)
- /** Flags for the code generation target. Currently unused. */
- SlangTargetFlags flags = kDefaultTargetFlags;
+ For back ends that are dlls/shared libraries, it will mean the path will
+ be prefixed with the path when calls are made out to ISlangSharedLibraryLoader.
+ For executables - it will look for executables along the path */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setDownstreamCompilerPath(SlangPassThrough passThrough, char const* path) = 0;
- /** Default mode to use for floating-point operations on the target.
- */
- SlangFloatingPointMode floatingPointMode = SLANG_FLOATING_POINT_MODE_DEFAULT;
+ /** DEPRECATED: Use setLanguagePrelude
- /** The line directive mode for output source code.
- */
- SlangLineDirectiveMode lineDirectiveMode = SLANG_LINE_DIRECTIVE_MODE_DEFAULT;
+ Set the 'prelude' for generated code for a 'downstream compiler'.
+ @param passThrough The downstream compiler for generated code that will have the prelude applied
+ to it.
+ @param preludeText The text added pre-pended verbatim before the generated source
- /** Whether to force `scalar` layout for glsl shader storage buffers.
- */
- bool forceGLSLScalarBufferLayout = false;
+ That for pass-through usage, prelude is not pre-pended, preludes are for code generation only.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setDownstreamCompilerPrelude(SlangPassThrough passThrough, const char* preludeText) = 0;
- /** Pointer to an array of compiler option entries, whose size is compilerOptionEntryCount.
- */
- CompilerOptionEntry* compilerOptionEntries = nullptr;
+ /** DEPRECATED: Use getLanguagePrelude
- /** Number of additional compiler option entries.
- */
- uint32_t compilerOptionEntryCount = 0;
+ Get the 'prelude' for generated code for a 'downstream compiler'.
+ @param passThrough The downstream compiler for generated code that will have the prelude applied
+ to it.
+ @param outPrelude On exit holds a blob that holds the string of the prelude.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ getDownstreamCompilerPrelude(SlangPassThrough passThrough, ISlangBlob** outPrelude) = 0;
- };
+ /** Get the build version 'tag' string. The string is the same as produced via `git describe
+ --tags` for the project. If Slang is built separately from the automated build scripts the
+ contents will by default be 'unknown'. Any string can be set by changing the contents of
+ 'slang-tag-version.h' file and recompiling the project.
- typedef uint32_t SessionFlags;
- enum
- {
- kSessionFlags_None = 0
- };
+ This method will return exactly the same result as the free function spGetBuildTagString.
- struct PreprocessorMacroDesc
- {
- const char* name;
- const char* value;
- };
+ @return The build tag string
+ */
+ virtual SLANG_NO_THROW const char* SLANG_MCALL getBuildTagString() = 0;
- struct SessionDesc
- {
- /** The size of this structure, in bytes.
- */
- size_t structureSize = sizeof(SessionDesc);
+ /* For a given source language set the default compiler.
+ If a default cannot be chosen (for example the target cannot be achieved by the default),
+ the default will not be used.
- /** Code generation targets to include in the session.
- */
- TargetDesc const* targets = nullptr;
- SlangInt targetCount = 0;
+ @param sourceLanguage the source language
+ @param defaultCompiler the default compiler for that language
+ @return
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL setDefaultDownstreamCompiler(
+ SlangSourceLanguage sourceLanguage,
+ SlangPassThrough defaultCompiler) = 0;
- /** Flags to configure the session.
- */
- SessionFlags flags = kSessionFlags_None;
+ /* For a source type get the default compiler
- /** Default layout to assume for variables with matrix types.
- */
- SlangMatrixLayoutMode defaultMatrixLayoutMode = SLANG_MATRIX_LAYOUT_ROW_MAJOR;
+ @param sourceLanguage the source language
+ @return The downstream compiler for that source language */
+ virtual SlangPassThrough SLANG_MCALL
+ getDefaultDownstreamCompiler(SlangSourceLanguage sourceLanguage) = 0;
- /** Paths to use when searching for `#include`d or `import`ed files.
- */
- char const* const* searchPaths = nullptr;
- SlangInt searchPathCount = 0;
+ /* Set the 'prelude' placed before generated code for a specific language type.
- PreprocessorMacroDesc const* preprocessorMacros = nullptr;
- SlangInt preprocessorMacroCount = 0;
+ @param sourceLanguage The language the prelude should be inserted on.
+ @param preludeText The text added pre-pended verbatim before the generated source
- ISlangFileSystem* fileSystem = nullptr;
+ Note! That for pass-through usage, prelude is not pre-pended, preludes are for code generation
+ only.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setLanguagePrelude(SlangSourceLanguage sourceLanguage, const char* preludeText) = 0;
- bool enableEffectAnnotations = false;
- bool allowGLSLSyntax = false;
+ /** Get the 'prelude' associated with a specific source language.
+ @param sourceLanguage The language the prelude should be inserted on.
+ @param outPrelude On exit holds a blob that holds the string of the prelude.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ getLanguagePrelude(SlangSourceLanguage sourceLanguage, ISlangBlob** outPrelude) = 0;
+
+ /** Create a compile request.
+ */
+ [[deprecated]] virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ createCompileRequest(slang::ICompileRequest** outCompileRequest) = 0;
+
+ /** Add new builtin declarations to be used in subsequent compiles.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ addBuiltins(char const* sourcePath, char const* sourceString) = 0;
+
+ /** Set the session shared library loader. If this changes the loader, it may cause shared
+ libraries to be unloaded
+ @param loader The loader to set. Setting nullptr sets the default loader.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ setSharedLibraryLoader(ISlangSharedLibraryLoader* loader) = 0;
- /** Pointer to an array of compiler option entries, whose size is compilerOptionEntryCount.
- */
- CompilerOptionEntry* compilerOptionEntries = nullptr;
+ /** Gets the currently set shared library loader
+ @return Gets the currently set loader. If returns nullptr, it's the default loader
+ */
+ virtual SLANG_NO_THROW ISlangSharedLibraryLoader* SLANG_MCALL getSharedLibraryLoader() = 0;
+
+ /** Returns SLANG_OK if a the compilation target is supported for this session
+
+ @param target The compilation target to test
+ @return SLANG_OK if the target is available
+ SLANG_E_NOT_IMPLEMENTED if not implemented in this build
+ SLANG_E_NOT_FOUND if other resources (such as shared libraries) required to make target work
+ could not be found SLANG_FAIL other kinds of failures */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ checkCompileTargetSupport(SlangCompileTarget target) = 0;
+
+ /** Returns SLANG_OK if a the pass through support is supported for this session
+ @param session Session
+ @param target The compilation target to test
+ @return SLANG_OK if the target is available
+ SLANG_E_NOT_IMPLEMENTED if not implemented in this build
+ SLANG_E_NOT_FOUND if other resources (such as shared libraries) required to make target work
+ could not be found SLANG_FAIL other kinds of failures */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ checkPassThroughSupport(SlangPassThrough passThrough) = 0;
+
+ /** Compile from (embedded source) the core module on the session.
+ Will return a failure if there is already a core module available
+ NOTE! API is experimental and not ready for production code
+ @param flags to control compilation
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ compileCoreModule(CompileCoreModuleFlags flags) = 0;
- /** Number of additional compiler option entries.
- */
- uint32_t compilerOptionEntryCount = 0;
+ /** Load the core module. Currently loads modules from the file system.
+ @param coreModule Start address of the serialized core module
+ @param coreModuleSizeInBytes The size in bytes of the serialized core module
- };
+ NOTE! API is experimental and not ready for production code
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ loadCoreModule(const void* coreModule, size_t coreModuleSizeInBytes) = 0;
- enum class ContainerType
- {
- None, UnsizedArray, StructuredBuffer, ConstantBuffer, ParameterBlock
- };
+ /** Save the core module to the file system
+ @param archiveType The type of archive used to hold the core module
+ @param outBlob The serialized blob containing the core module
- /** A session provides a scope for code that is loaded.
+ NOTE! API is experimental and not ready for production code */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ saveCoreModule(SlangArchiveType archiveType, ISlangBlob** outBlob) = 0;
- A session can be used to load modules of Slang source code,
- and to request target-specific compiled binaries and layout
- information.
+ /** Look up the internal ID of a capability by its `name`.
- In order to be able to load code, the session owns a set
- of active "search paths" for resolving `#include` directives
- and `import` declrations, as well as a set of global
- preprocessor definitions that will be used for all code
- that gets `import`ed in the session.
+ Capability IDs are *not* guaranteed to be stable across versions
+ of the Slang library, so clients are expected to look up
+ capabilities by name at runtime.
+ */
+ virtual SLANG_NO_THROW SlangCapabilityID SLANG_MCALL findCapability(char const* name) = 0;
- If multiple user shaders are loaded in the same session,
- and import the same module (e.g., two source files do `import X`)
- then there will only be one copy of `X` loaded within the session.
+ /** Set the downstream/pass through compiler to be used for a transition from the source type to
+ the target type
+ @param source The source 'code gen target'
+ @param target The target 'code gen target'
+ @param compiler The compiler/pass through to use for the transition from source to target
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL setDownstreamCompilerForTransition(
+ SlangCompileTarget source,
+ SlangCompileTarget target,
+ SlangPassThrough compiler) = 0;
+
+ /** Get the downstream/pass through compiler for a transition specified by source and target
+ @param source The source 'code gen target'
+ @param target The target 'code gen target'
+ @return The compiler that is used for the transition. Returns SLANG_PASS_THROUGH_NONE it is not
+ defined
+ */
+ virtual SLANG_NO_THROW SlangPassThrough SLANG_MCALL
+ getDownstreamCompilerForTransition(SlangCompileTarget source, SlangCompileTarget target) = 0;
+
+ /** Get the time in seconds spent in the slang and downstream compiler.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ getCompilerElapsedTime(double* outTotalTime, double* outDownstreamTime) = 0;
+
+ /** Specify a spirv.core.grammar.json file to load and use when
+ * parsing and checking any SPIR-V code
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL setSPIRVCoreGrammar(char const* jsonPath) = 0;
+
+ /** Parse slangc command line options into a SessionDesc that can be used to create a session
+ * with all the compiler options specified in the command line.
+ * @param argc The number of command line arguments.
+ * @param argv An input array of command line arguments to parse.
+ * @param outSessionDesc A pointer to a SessionDesc struct to receive parsed session desc.
+ * @param outAuxAllocation Auxillary memory allocated to hold data used in the sesion desc.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL parseCommandLineArguments(
+ int argc,
+ const char* const* argv,
+ SessionDesc* outSessionDesc,
+ ISlangUnknown** outAuxAllocation) = 0;
+
+ /** Computes a digest that uniquely identifies the session description.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getSessionDescDigest(SessionDesc* sessionDesc, ISlangBlob** outBlob) = 0;
+};
- In order to be able to generate target code, the session
- owns a list of available compilation targets, which specify
- code generation options.
+ #define SLANG_UUID_IGlobalSession IGlobalSession::getTypeGuid()
- Code loaded and compiled within a session is owned by the session
- and will remain resident in memory until the session is released.
- Applications wishing to control the memory usage for compiled
- and loaded code should use multiple sessions.
- */
- struct ISession : public ISlangUnknown
- {
- SLANG_COM_INTERFACE( 0x67618701, 0xd116, 0x468f, { 0xab, 0x3b, 0x47, 0x4b, 0xed, 0xce, 0xe, 0x3d } )
+/** Description of a code generation target.
+ */
+struct TargetDesc
+{
+ /** The size of this structure, in bytes.
+ */
+ size_t structureSize = sizeof(TargetDesc);
- /** Get the global session thas was used to create this session.
- */
- virtual SLANG_NO_THROW IGlobalSession* SLANG_MCALL getGlobalSession() = 0;
+ /** The target format to generate code for (e.g., SPIR-V, DXIL, etc.)
+ */
+ SlangCompileTarget format = SLANG_TARGET_UNKNOWN;
- /** Load a module as it would be by code using `import`.
- */
- virtual SLANG_NO_THROW IModule* SLANG_MCALL loadModule(
- const char* moduleName,
- IBlob** outDiagnostics = nullptr) = 0;
+ /** The compilation profile supported by the target (e.g., "Shader Model 5.1")
+ */
+ SlangProfileID profile = SLANG_PROFILE_UNKNOWN;
- /** Load a module from Slang source code.
- */
- virtual SLANG_NO_THROW IModule* SLANG_MCALL loadModuleFromSource(
- const char* moduleName,
- const char* path,
- slang::IBlob* source,
- slang::IBlob** outDiagnostics = nullptr) = 0;
-
- /** Combine multiple component types to create a composite component type.
-
- The `componentTypes` array must contain `componentTypeCount` pointers
- to component types that were loaded or created using the same session.
-
- The shader parameters and specialization parameters of the composite will
- be the union of those in `componentTypes`. The relative order of child
- component types is significant, and will affect the order in which
- parameters are reflected and laid out.
-
- The entry-point functions of the composite will be the union of those in
- `componentTypes`, and will follow the ordering of `componentTypes`.
-
- The requirements of the composite component type will be a subset of
- those in `componentTypes`. If an entry in `componentTypes` has a requirement
- that can be satisfied by another entry, then the composition will
- satisfy the requirement and it will not appear as a requirement of
- the composite. If multiple entries in `componentTypes` have a requirement
- for the same type, then only the first such requirement will be retained
- on the composite. The relative ordering of requirements on the composite
- will otherwise match that of `componentTypes`.
-
- If any diagnostics are generated during creation of the composite, they
- will be written to `outDiagnostics`. If an error is encountered, the
- function will return null.
-
- It is an error to create a composite component type that recursively
- aggregates the a single module more than once.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL createCompositeComponentType(
- IComponentType* const* componentTypes,
- SlangInt componentTypeCount,
- IComponentType** outCompositeComponentType,
- ISlangBlob** outDiagnostics = nullptr) = 0;
-
- /** Specialize a type based on type arguments.
- */
- virtual SLANG_NO_THROW TypeReflection* SLANG_MCALL specializeType(
- TypeReflection* type,
- SpecializationArg const* specializationArgs,
- SlangInt specializationArgCount,
- ISlangBlob** outDiagnostics = nullptr) = 0;
-
-
- /** Get the layout `type` on the chosen `target`.
- */
- virtual SLANG_NO_THROW TypeLayoutReflection* SLANG_MCALL getTypeLayout(
- TypeReflection* type,
- SlangInt targetIndex = 0,
- LayoutRules rules = LayoutRules::Default,
- ISlangBlob** outDiagnostics = nullptr) = 0;
-
- /** Get a container type from `elementType`. For example, given type `T`, returns
- a type that represents `StructuredBuffer<T>`.
-
- @param `elementType`: the element type to wrap around.
- @param `containerType`: the type of the container to wrap `elementType` in.
- @param `outDiagnostics`: a blob to receive diagnostic messages.
- */
- virtual SLANG_NO_THROW TypeReflection* SLANG_MCALL getContainerType(
- TypeReflection* elementType,
- ContainerType containerType,
- ISlangBlob** outDiagnostics = nullptr) = 0;
-
- /** Return a `TypeReflection` that represents the `__Dynamic` type.
- This type can be used as a specialization argument to indicate using
- dynamic dispatch.
- */
- virtual SLANG_NO_THROW TypeReflection* SLANG_MCALL getDynamicType() = 0;
-
- /** Get the mangled name for a type RTTI object.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTypeRTTIMangledName(
- TypeReflection* type,
- ISlangBlob** outNameBlob) = 0;
-
- /** Get the mangled name for a type witness.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTypeConformanceWitnessMangledName(
- TypeReflection* type,
- TypeReflection* interfaceType,
- ISlangBlob** outNameBlob) = 0;
-
- /** Get the sequential ID used to identify a type witness in a dynamic object.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTypeConformanceWitnessSequentialID(
- slang::TypeReflection* type,
- slang::TypeReflection* interfaceType,
- uint32_t* outId) = 0;
-
- /** Create a request to load/compile front-end code.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL createCompileRequest(
- SlangCompileRequest** outCompileRequest) = 0;
-
-
- /** Creates a `IComponentType` that represents a type's conformance to an interface.
- The retrieved `ITypeConformance` objects can be included in a composite `IComponentType`
- to explicitly specify which implementation types should be included in the final compiled
- code. For example, if an module defines `IMaterial` interface and `AMaterial`,
- `BMaterial`, `CMaterial` types that implements the interface, the user can exclude
- `CMaterial` implementation from the resulting shader code by explcitly adding
- `AMaterial:IMaterial` and `BMaterial:IMaterial` conformances to a composite
- `IComponentType` and get entry point code from it. The resulting code will not have
- anything related to `CMaterial` in the dynamic dispatch logic. If the user does not
- explicitly include any `TypeConformances` to an interface type, all implementations to
- that interface will be included by default. By linking a `ITypeConformance`, the user is
- also given the opportunity to specify the dispatch ID of the implementation type. If
- `conformanceIdOverride` is -1, there will be no override behavior and Slang will
- automatically assign IDs to implementation types. The automatically assigned IDs can be
- queried via `ISession::getTypeConformanceWitnessSequentialID`.
-
- Returns SLANG_OK if succeeds, or SLANG_FAIL if `type` does not conform to `interfaceType`.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL createTypeConformanceComponentType(
- slang::TypeReflection* type,
- slang::TypeReflection* interfaceType,
- ITypeConformance** outConformance,
- SlangInt conformanceIdOverride,
- ISlangBlob** outDiagnostics) = 0;
-
- /** Load a module from a Slang module blob.
- */
- virtual SLANG_NO_THROW IModule* SLANG_MCALL loadModuleFromIRBlob(
- const char* moduleName,
- const char* path,
- slang::IBlob* source,
- slang::IBlob** outDiagnostics = nullptr) = 0;
-
- virtual SLANG_NO_THROW SlangInt SLANG_MCALL getLoadedModuleCount() = 0;
- virtual SLANG_NO_THROW IModule* SLANG_MCALL getLoadedModule(SlangInt index) = 0;
-
- /** Checks if a precompiled binary module is up-to-date with the current compiler
- * option settings and the source file contents.
- */
- virtual SLANG_NO_THROW bool SLANG_MCALL isBinaryModuleUpToDate(
- const char* modulePath, slang::IBlob* binaryModuleBlob) = 0;
-
- /** Load a module from a string.
- */
- virtual SLANG_NO_THROW IModule* SLANG_MCALL loadModuleFromSourceString(
- const char* moduleName,
- const char* path,
- const char* string,
- slang::IBlob** outDiagnostics = nullptr) = 0;
- };
+ /** Flags for the code generation target. Currently unused. */
+ SlangTargetFlags flags = kDefaultTargetFlags;
+
+ /** Default mode to use for floating-point operations on the target.
+ */
+ SlangFloatingPointMode floatingPointMode = SLANG_FLOATING_POINT_MODE_DEFAULT;
+
+ /** The line directive mode for output source code.
+ */
+ SlangLineDirectiveMode lineDirectiveMode = SLANG_LINE_DIRECTIVE_MODE_DEFAULT;
+
+ /** Whether to force `scalar` layout for glsl shader storage buffers.
+ */
+ bool forceGLSLScalarBufferLayout = false;
+
+ /** Pointer to an array of compiler option entries, whose size is compilerOptionEntryCount.
+ */
+ CompilerOptionEntry* compilerOptionEntries = nullptr;
+
+ /** Number of additional compiler option entries.
+ */
+ uint32_t compilerOptionEntryCount = 0;
+};
+
+typedef uint32_t SessionFlags;
+enum
+{
+ kSessionFlags_None = 0
+};
+
+struct PreprocessorMacroDesc
+{
+ const char* name;
+ const char* value;
+};
+
+struct SessionDesc
+{
+ /** The size of this structure, in bytes.
+ */
+ size_t structureSize = sizeof(SessionDesc);
+
+ /** Code generation targets to include in the session.
+ */
+ TargetDesc const* targets = nullptr;
+ SlangInt targetCount = 0;
+
+ /** Flags to configure the session.
+ */
+ SessionFlags flags = kSessionFlags_None;
+
+ /** Default layout to assume for variables with matrix types.
+ */
+ SlangMatrixLayoutMode defaultMatrixLayoutMode = SLANG_MATRIX_LAYOUT_ROW_MAJOR;
+
+ /** Paths to use when searching for `#include`d or `import`ed files.
+ */
+ char const* const* searchPaths = nullptr;
+ SlangInt searchPathCount = 0;
+
+ PreprocessorMacroDesc const* preprocessorMacros = nullptr;
+ SlangInt preprocessorMacroCount = 0;
+
+ ISlangFileSystem* fileSystem = nullptr;
+
+ bool enableEffectAnnotations = false;
+ bool allowGLSLSyntax = false;
+
+ /** Pointer to an array of compiler option entries, whose size is compilerOptionEntryCount.
+ */
+ CompilerOptionEntry* compilerOptionEntries = nullptr;
+
+ /** Number of additional compiler option entries.
+ */
+ uint32_t compilerOptionEntryCount = 0;
+};
+
+enum class ContainerType
+{
+ None,
+ UnsizedArray,
+ StructuredBuffer,
+ ConstantBuffer,
+ ParameterBlock
+};
+
+/** A session provides a scope for code that is loaded.
+
+A session can be used to load modules of Slang source code,
+and to request target-specific compiled binaries and layout
+information.
+
+In order to be able to load code, the session owns a set
+of active "search paths" for resolving `#include` directives
+and `import` declrations, as well as a set of global
+preprocessor definitions that will be used for all code
+that gets `import`ed in the session.
+
+If multiple user shaders are loaded in the same session,
+and import the same module (e.g., two source files do `import X`)
+then there will only be one copy of `X` loaded within the session.
+
+In order to be able to generate target code, the session
+owns a list of available compilation targets, which specify
+code generation options.
+
+Code loaded and compiled within a session is owned by the session
+and will remain resident in memory until the session is released.
+Applications wishing to control the memory usage for compiled
+and loaded code should use multiple sessions.
+*/
+struct ISession : public ISlangUnknown
+{
+ SLANG_COM_INTERFACE(0x67618701, 0xd116, 0x468f, {0xab, 0x3b, 0x47, 0x4b, 0xed, 0xce, 0xe, 0x3d})
+
+ /** Get the global session thas was used to create this session.
+ */
+ virtual SLANG_NO_THROW IGlobalSession* SLANG_MCALL getGlobalSession() = 0;
+
+ /** Load a module as it would be by code using `import`.
+ */
+ virtual SLANG_NO_THROW IModule* SLANG_MCALL
+ loadModule(const char* moduleName, IBlob** outDiagnostics = nullptr) = 0;
+
+ /** Load a module from Slang source code.
+ */
+ virtual SLANG_NO_THROW IModule* SLANG_MCALL loadModuleFromSource(
+ const char* moduleName,
+ const char* path,
+ slang::IBlob* source,
+ slang::IBlob** outDiagnostics = nullptr) = 0;
+
+ /** Combine multiple component types to create a composite component type.
+
+ The `componentTypes` array must contain `componentTypeCount` pointers
+ to component types that were loaded or created using the same session.
+
+ The shader parameters and specialization parameters of the composite will
+ be the union of those in `componentTypes`. The relative order of child
+ component types is significant, and will affect the order in which
+ parameters are reflected and laid out.
+
+ The entry-point functions of the composite will be the union of those in
+ `componentTypes`, and will follow the ordering of `componentTypes`.
+
+ The requirements of the composite component type will be a subset of
+ those in `componentTypes`. If an entry in `componentTypes` has a requirement
+ that can be satisfied by another entry, then the composition will
+ satisfy the requirement and it will not appear as a requirement of
+ the composite. If multiple entries in `componentTypes` have a requirement
+ for the same type, then only the first such requirement will be retained
+ on the composite. The relative ordering of requirements on the composite
+ will otherwise match that of `componentTypes`.
+
+ If any diagnostics are generated during creation of the composite, they
+ will be written to `outDiagnostics`. If an error is encountered, the
+ function will return null.
+
+ It is an error to create a composite component type that recursively
+ aggregates the a single module more than once.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL createCompositeComponentType(
+ IComponentType* const* componentTypes,
+ SlangInt componentTypeCount,
+ IComponentType** outCompositeComponentType,
+ ISlangBlob** outDiagnostics = nullptr) = 0;
+
+ /** Specialize a type based on type arguments.
+ */
+ virtual SLANG_NO_THROW TypeReflection* SLANG_MCALL specializeType(
+ TypeReflection* type,
+ SpecializationArg const* specializationArgs,
+ SlangInt specializationArgCount,
+ ISlangBlob** outDiagnostics = nullptr) = 0;
+
+
+ /** Get the layout `type` on the chosen `target`.
+ */
+ virtual SLANG_NO_THROW TypeLayoutReflection* SLANG_MCALL getTypeLayout(
+ TypeReflection* type,
+ SlangInt targetIndex = 0,
+ LayoutRules rules = LayoutRules::Default,
+ ISlangBlob** outDiagnostics = nullptr) = 0;
+
+ /** Get a container type from `elementType`. For example, given type `T`, returns
+ a type that represents `StructuredBuffer<T>`.
+
+ @param `elementType`: the element type to wrap around.
+ @param `containerType`: the type of the container to wrap `elementType` in.
+ @param `outDiagnostics`: a blob to receive diagnostic messages.
+ */
+ virtual SLANG_NO_THROW TypeReflection* SLANG_MCALL getContainerType(
+ TypeReflection* elementType,
+ ContainerType containerType,
+ ISlangBlob** outDiagnostics = nullptr) = 0;
+
+ /** Return a `TypeReflection` that represents the `__Dynamic` type.
+ This type can be used as a specialization argument to indicate using
+ dynamic dispatch.
+ */
+ virtual SLANG_NO_THROW TypeReflection* SLANG_MCALL getDynamicType() = 0;
+
+ /** Get the mangled name for a type RTTI object.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getTypeRTTIMangledName(TypeReflection* type, ISlangBlob** outNameBlob) = 0;
+
+ /** Get the mangled name for a type witness.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTypeConformanceWitnessMangledName(
+ TypeReflection* type,
+ TypeReflection* interfaceType,
+ ISlangBlob** outNameBlob) = 0;
+
+ /** Get the sequential ID used to identify a type witness in a dynamic object.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTypeConformanceWitnessSequentialID(
+ slang::TypeReflection* type,
+ slang::TypeReflection* interfaceType,
+ uint32_t* outId) = 0;
+
+ /** Create a request to load/compile front-end code.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ createCompileRequest(SlangCompileRequest** outCompileRequest) = 0;
+
+
+ /** Creates a `IComponentType` that represents a type's conformance to an interface.
+ The retrieved `ITypeConformance` objects can be included in a composite `IComponentType`
+ to explicitly specify which implementation types should be included in the final compiled
+ code. For example, if an module defines `IMaterial` interface and `AMaterial`,
+ `BMaterial`, `CMaterial` types that implements the interface, the user can exclude
+ `CMaterial` implementation from the resulting shader code by explcitly adding
+ `AMaterial:IMaterial` and `BMaterial:IMaterial` conformances to a composite
+ `IComponentType` and get entry point code from it. The resulting code will not have
+ anything related to `CMaterial` in the dynamic dispatch logic. If the user does not
+ explicitly include any `TypeConformances` to an interface type, all implementations to
+ that interface will be included by default. By linking a `ITypeConformance`, the user is
+ also given the opportunity to specify the dispatch ID of the implementation type. If
+ `conformanceIdOverride` is -1, there will be no override behavior and Slang will
+ automatically assign IDs to implementation types. The automatically assigned IDs can be
+ queried via `ISession::getTypeConformanceWitnessSequentialID`.
+
+ Returns SLANG_OK if succeeds, or SLANG_FAIL if `type` does not conform to `interfaceType`.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL createTypeConformanceComponentType(
+ slang::TypeReflection* type,
+ slang::TypeReflection* interfaceType,
+ ITypeConformance** outConformance,
+ SlangInt conformanceIdOverride,
+ ISlangBlob** outDiagnostics) = 0;
+
+ /** Load a module from a Slang module blob.
+ */
+ virtual SLANG_NO_THROW IModule* SLANG_MCALL loadModuleFromIRBlob(
+ const char* moduleName,
+ const char* path,
+ slang::IBlob* source,
+ slang::IBlob** outDiagnostics = nullptr) = 0;
+
+ virtual SLANG_NO_THROW SlangInt SLANG_MCALL getLoadedModuleCount() = 0;
+ virtual SLANG_NO_THROW IModule* SLANG_MCALL getLoadedModule(SlangInt index) = 0;
+
+ /** Checks if a precompiled binary module is up-to-date with the current compiler
+ * option settings and the source file contents.
+ */
+ virtual SLANG_NO_THROW bool SLANG_MCALL
+ isBinaryModuleUpToDate(const char* modulePath, slang::IBlob* binaryModuleBlob) = 0;
+
+ /** Load a module from a string.
+ */
+ virtual SLANG_NO_THROW IModule* SLANG_MCALL loadModuleFromSourceString(
+ const char* moduleName,
+ const char* path,
+ const char* string,
+ slang::IBlob** outDiagnostics = nullptr) = 0;
+};
#define SLANG_UUID_ISession ISession::getTypeGuid()
- struct IMetadata : public ISlangCastable
- {
- SLANG_COM_INTERFACE(0x8044a8a3, 0xddc0, 0x4b7f, { 0xaf, 0x8e, 0x2, 0x6e, 0x90, 0x5d, 0x73, 0x32 })
+struct IMetadata : public ISlangCastable
+{
+ SLANG_COM_INTERFACE(0x8044a8a3, 0xddc0, 0x4b7f, {0xaf, 0x8e, 0x2, 0x6e, 0x90, 0x5d, 0x73, 0x32})
- /*
- Returns whether a resource parameter at the specifieid binding location is actually being used
- in the compiled shader.
- */
- virtual SlangResult isParameterLocationUsed(
- SlangParameterCategory category, // is this a `t` register? `s` register?
- SlangUInt spaceIndex, // `space` for D3D12, `set` for Vulkan
- SlangUInt registerIndex, // `register` for D3D12, `binding` for Vulkan
- bool& outUsed) = 0;
- };
+ /*
+ Returns whether a resource parameter at the specifieid binding location is actually being used
+ in the compiled shader.
+ */
+ virtual SlangResult isParameterLocationUsed(
+ SlangParameterCategory category, // is this a `t` register? `s` register?
+ SlangUInt spaceIndex, // `space` for D3D12, `set` for Vulkan
+ SlangUInt registerIndex, // `register` for D3D12, `binding` for Vulkan
+ bool& outUsed) = 0;
+};
#define SLANG_UUID_IMetadata IMetadata::getTypeGuid()
- /** A component type is a unit of shader code layout, reflection, and linking.
+/** A component type is a unit of shader code layout, reflection, and linking.
- A component type is a unit of shader code that can be included into
- a linked and compiled shader program. Each component type may have:
+A component type is a unit of shader code that can be included into
+a linked and compiled shader program. Each component type may have:
- * Zero or more uniform shader parameters, representing textures,
- buffers, etc. that the code in the component depends on.
+* Zero or more uniform shader parameters, representing textures,
+ buffers, etc. that the code in the component depends on.
- * Zero or more *specialization* parameters, which are type or
- value parameters that can be used to synthesize specialized
- versions of the component type.
+* Zero or more *specialization* parameters, which are type or
+ value parameters that can be used to synthesize specialized
+ versions of the component type.
- * Zero or more entry points, which are the individually invocable
- kernels that can have final code generated.
+* Zero or more entry points, which are the individually invocable
+ kernels that can have final code generated.
- * Zero or more *requirements*, which are other component
- types on which the component type depends.
+* Zero or more *requirements*, which are other component
+ types on which the component type depends.
- One example of a component type is a module of Slang code:
+One example of a component type is a module of Slang code:
- * The global-scope shader parameters declared in the module are
- the parameters when considered as a component type.
+* The global-scope shader parameters declared in the module are
+ the parameters when considered as a component type.
- * Any global-scope generic or interface type parameters introduce
- specialization parameters for the module.
+* Any global-scope generic or interface type parameters introduce
+ specialization parameters for the module.
- * A module does not by default include any entry points when
- considered as a component type (although the code of the
- module might *declare* some entry points).
+* A module does not by default include any entry points when
+ considered as a component type (although the code of the
+ module might *declare* some entry points).
- * Any other modules that are `import`ed in the source code
- become requirements of the module, when considered as a
- component type.
+* Any other modules that are `import`ed in the source code
+ become requirements of the module, when considered as a
+ component type.
- An entry point is another example of a component type:
+An entry point is another example of a component type:
- * The `uniform` parameters of the entry point function are
- its shader parameters when considered as a component type.
+* The `uniform` parameters of the entry point function are
+ its shader parameters when considered as a component type.
- * Any generic or interface-type parameters of the entry point
- introduce specialization parameters.
+* Any generic or interface-type parameters of the entry point
+ introduce specialization parameters.
- * An entry point component type exposes a single entry point (itself).
+* An entry point component type exposes a single entry point (itself).
- * An entry point has one requirement for the module in which
- it was defined.
+* An entry point has one requirement for the module in which
+ it was defined.
- Component types can be manipulated in a few ways:
+Component types can be manipulated in a few ways:
- * Multiple component types can be combined into a composite, which
- combines all of their code, parameters, etc.
+* Multiple component types can be combined into a composite, which
+ combines all of their code, parameters, etc.
- * A component type can be specialized, by "plugging in" types and
- values for its specialization parameters.
+* A component type can be specialized, by "plugging in" types and
+ values for its specialization parameters.
- * A component type can be laid out for a particular target, giving
- offsets/bindings to the shader parameters it contains.
+* A component type can be laid out for a particular target, giving
+ offsets/bindings to the shader parameters it contains.
- * Generated kernel code can be requested for entry points.
+* Generated kernel code can be requested for entry points.
- */
- struct IComponentType : public ISlangUnknown
- {
- SLANG_COM_INTERFACE(0x5bc42be8, 0x5c50, 0x4929, { 0x9e, 0x5e, 0xd1, 0x5e, 0x7c, 0x24, 0x1, 0x5f })
-
- /** Get the runtime session that this component type belongs to.
- */
- virtual SLANG_NO_THROW ISession* SLANG_MCALL getSession() = 0;
-
- /** Get the layout for this program for the chosen `targetIndex`.
-
- The resulting layout will establish offsets/bindings for all
- of the global and entry-point shader parameters in the
- component type.
-
- If this component type has specialization parameters (that is,
- it is not fully specialized), then the resulting layout may
- be incomplete, and plugging in arguments for generic specialization
- parameters may result in a component type that doesn't have
- a compatible layout. If the component type only uses
- interface-type specialization parameters, then the layout
- for a specialization should be compatible with an unspecialized
- layout (all parameters in the unspecialized layout will have
- the same offset/binding in the specialized layout).
-
- If this component type is combined into a composite, then
- the absolute offsets/bindings of parameters may not stay the same.
- If the shader parameters in a component type don't make
- use of explicit binding annotations (e.g., `register(...)`),
- then the *relative* offset of shader parameters will stay
- the same when it is used in a composition.
- */
- virtual SLANG_NO_THROW ProgramLayout* SLANG_MCALL getLayout(
- SlangInt targetIndex = 0,
- IBlob** outDiagnostics = nullptr) = 0;
-
- /** Get the number of (unspecialized) specialization parameters for the component type.
- */
- virtual SLANG_NO_THROW SlangInt SLANG_MCALL getSpecializationParamCount() = 0;
-
- /** Get the compiled code for the entry point at `entryPointIndex` for the chosen `targetIndex`
-
- Entry point code can only be computed for a component type that
- has no specialization parameters (it must be fully specialized)
- and that has no requirements (it must be fully linked).
-
- If code has not already been generated for the given entry point and target,
- then a compilation error may be detected, in which case `outDiagnostics`
- (if non-null) will be filled in with a blob of messages diagnosing the error.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointCode(
- SlangInt entryPointIndex,
- SlangInt targetIndex,
- IBlob** outCode,
- IBlob** outDiagnostics = nullptr) = 0;
-
- /** Get the compilation result as a file system.
-
- Has the same requirements as getEntryPointCode.
-
- The result is not written to the actual OS file system, but is made avaiable as an
- in memory representation.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getResultAsFileSystem(
- SlangInt entryPointIndex,
- SlangInt targetIndex,
- ISlangMutableFileSystem** outFileSystem) = 0;
-
- /** Compute a hash for the entry point at `entryPointIndex` for the chosen `targetIndex`.
-
- This computes a hash based on all the dependencies for this component type as well as the
- target settings affecting the compiler backend. The computed hash is used as a key for caching
- the output of the compiler backend to implement shader caching.
- */
- virtual SLANG_NO_THROW void SLANG_MCALL getEntryPointHash(
- SlangInt entryPointIndex,
- SlangInt targetIndex,
- IBlob** outHash) = 0;
-
- /** Specialize the component by binding its specialization parameters to concrete arguments.
-
- The `specializationArgs` array must have `specializationArgCount` entries, and
- this must match the number of specialization parameters on this component type.
-
- If any diagnostics (error or warnings) are produced, they will be written to `outDiagnostics`.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL specialize(
- SpecializationArg const* specializationArgs,
- SlangInt specializationArgCount,
- IComponentType** outSpecializedComponentType,
- ISlangBlob** outDiagnostics = nullptr) = 0;
-
- /** Link this component type against all of its unsatisifed dependencies.
-
- A component type may have unsatisfied dependencies. For example, a module
- depends on any other modules it `import`s, and an entry point depends
- on the module that defined it.
-
- A user can manually satisfy dependencies by creating a composite
- component type, and when doing so they retain full control over
- the relative ordering of shader parameters in the resulting layout.
-
- It is an error to try to generate/access compiled kernel code for
- a component type with unresolved dependencies, so if dependencies
- remain after whatever manual composition steps an application
- cares to peform, the `link()` function can be used to automatically
- compose in any remaining dependencies. The order of parameters
- (and hence the global layout) that results will be deterministic,
- but is not currently documented.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL link(
- IComponentType** outLinkedComponentType,
- ISlangBlob** outDiagnostics = nullptr) = 0;
-
- /** Get entry point 'callable' functions accessible through the ISlangSharedLibrary interface.
-
- The functions remain in scope as long as the ISlangSharedLibrary interface is in scope.
-
- NOTE! Requires a compilation target of SLANG_HOST_CALLABLE.
-
- @param entryPointIndex The index of the entry point to get code for.
- @param targetIndex The index of the target to get code for (default: zero).
- @param outSharedLibrary A pointer to a ISharedLibrary interface which functions can be queried on.
- @returns A `SlangResult` to indicate success or failure.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointHostCallable(
- int entryPointIndex,
- int targetIndex,
- ISlangSharedLibrary** outSharedLibrary,
- slang::IBlob** outDiagnostics = 0) = 0;
-
- /** Get a new ComponentType object that represents a renamed entry point.
-
- The current object must be a single EntryPoint, or a CompositeComponentType or
- SpecializedComponentType that contains one EntryPoint component.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL renameEntryPoint(
- const char* newName, IComponentType** outEntryPoint) = 0;
-
- /** Link and specify additional compiler options when generating code
- * from the linked program.
- */
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL linkWithOptions(
- IComponentType** outLinkedComponentType,
- uint32_t compilerOptionEntryCount,
- CompilerOptionEntry* compilerOptionEntries,
- ISlangBlob** outDiagnostics = nullptr) = 0;
-
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTargetCode(
- SlangInt targetIndex,
- IBlob** outCode,
- IBlob** outDiagnostics = nullptr) = 0;
-
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTargetMetadata(
- SlangInt targetIndex,
- IMetadata** outMetadata,
- IBlob** outDiagnostics = nullptr) = 0;
-
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointMetadata(
- SlangInt entryPointIndex,
- SlangInt targetIndex,
- IMetadata** outMetadata,
- IBlob** outDiagnostics = nullptr) = 0;
- };
+*/
+struct IComponentType : public ISlangUnknown
+{
+ SLANG_COM_INTERFACE(0x5bc42be8, 0x5c50, 0x4929, {0x9e, 0x5e, 0xd1, 0x5e, 0x7c, 0x24, 0x1, 0x5f})
+
+ /** Get the runtime session that this component type belongs to.
+ */
+ virtual SLANG_NO_THROW ISession* SLANG_MCALL getSession() = 0;
+
+ /** Get the layout for this program for the chosen `targetIndex`.
+
+ The resulting layout will establish offsets/bindings for all
+ of the global and entry-point shader parameters in the
+ component type.
+
+ If this component type has specialization parameters (that is,
+ it is not fully specialized), then the resulting layout may
+ be incomplete, and plugging in arguments for generic specialization
+ parameters may result in a component type that doesn't have
+ a compatible layout. If the component type only uses
+ interface-type specialization parameters, then the layout
+ for a specialization should be compatible with an unspecialized
+ layout (all parameters in the unspecialized layout will have
+ the same offset/binding in the specialized layout).
+
+ If this component type is combined into a composite, then
+ the absolute offsets/bindings of parameters may not stay the same.
+ If the shader parameters in a component type don't make
+ use of explicit binding annotations (e.g., `register(...)`),
+ then the *relative* offset of shader parameters will stay
+ the same when it is used in a composition.
+ */
+ virtual SLANG_NO_THROW ProgramLayout* SLANG_MCALL
+ getLayout(SlangInt targetIndex = 0, IBlob** outDiagnostics = nullptr) = 0;
+
+ /** Get the number of (unspecialized) specialization parameters for the component type.
+ */
+ virtual SLANG_NO_THROW SlangInt SLANG_MCALL getSpecializationParamCount() = 0;
+
+ /** Get the compiled code for the entry point at `entryPointIndex` for the chosen `targetIndex`
+
+ Entry point code can only be computed for a component type that
+ has no specialization parameters (it must be fully specialized)
+ and that has no requirements (it must be fully linked).
+
+ If code has not already been generated for the given entry point and target,
+ then a compilation error may be detected, in which case `outDiagnostics`
+ (if non-null) will be filled in with a blob of messages diagnosing the error.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointCode(
+ SlangInt entryPointIndex,
+ SlangInt targetIndex,
+ IBlob** outCode,
+ IBlob** outDiagnostics = nullptr) = 0;
+
+ /** Get the compilation result as a file system.
+
+ Has the same requirements as getEntryPointCode.
+
+ The result is not written to the actual OS file system, but is made avaiable as an
+ in memory representation.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getResultAsFileSystem(
+ SlangInt entryPointIndex,
+ SlangInt targetIndex,
+ ISlangMutableFileSystem** outFileSystem) = 0;
+
+ /** Compute a hash for the entry point at `entryPointIndex` for the chosen `targetIndex`.
+
+ This computes a hash based on all the dependencies for this component type as well as the
+ target settings affecting the compiler backend. The computed hash is used as a key for caching
+ the output of the compiler backend to implement shader caching.
+ */
+ virtual SLANG_NO_THROW void SLANG_MCALL
+ getEntryPointHash(SlangInt entryPointIndex, SlangInt targetIndex, IBlob** outHash) = 0;
+
+ /** Specialize the component by binding its specialization parameters to concrete arguments.
+
+ The `specializationArgs` array must have `specializationArgCount` entries, and
+ this must match the number of specialization parameters on this component type.
+
+ If any diagnostics (error or warnings) are produced, they will be written to `outDiagnostics`.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL specialize(
+ SpecializationArg const* specializationArgs,
+ SlangInt specializationArgCount,
+ IComponentType** outSpecializedComponentType,
+ ISlangBlob** outDiagnostics = nullptr) = 0;
+
+ /** Link this component type against all of its unsatisifed dependencies.
+
+ A component type may have unsatisfied dependencies. For example, a module
+ depends on any other modules it `import`s, and an entry point depends
+ on the module that defined it.
+
+ A user can manually satisfy dependencies by creating a composite
+ component type, and when doing so they retain full control over
+ the relative ordering of shader parameters in the resulting layout.
+
+ It is an error to try to generate/access compiled kernel code for
+ a component type with unresolved dependencies, so if dependencies
+ remain after whatever manual composition steps an application
+ cares to peform, the `link()` function can be used to automatically
+ compose in any remaining dependencies. The order of parameters
+ (and hence the global layout) that results will be deterministic,
+ but is not currently documented.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ link(IComponentType** outLinkedComponentType, ISlangBlob** outDiagnostics = nullptr) = 0;
+
+ /** Get entry point 'callable' functions accessible through the ISlangSharedLibrary interface.
+
+ The functions remain in scope as long as the ISlangSharedLibrary interface is in scope.
+
+ NOTE! Requires a compilation target of SLANG_HOST_CALLABLE.
+
+ @param entryPointIndex The index of the entry point to get code for.
+ @param targetIndex The index of the target to get code for (default: zero).
+ @param outSharedLibrary A pointer to a ISharedLibrary interface which functions can be queried
+ on.
+ @returns A `SlangResult` to indicate success or failure.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointHostCallable(
+ int entryPointIndex,
+ int targetIndex,
+ ISlangSharedLibrary** outSharedLibrary,
+ slang::IBlob** outDiagnostics = 0) = 0;
+
+ /** Get a new ComponentType object that represents a renamed entry point.
+
+ The current object must be a single EntryPoint, or a CompositeComponentType or
+ SpecializedComponentType that contains one EntryPoint component.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ renameEntryPoint(const char* newName, IComponentType** outEntryPoint) = 0;
+
+ /** Link and specify additional compiler options when generating code
+ * from the linked program.
+ */
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL linkWithOptions(
+ IComponentType** outLinkedComponentType,
+ uint32_t compilerOptionEntryCount,
+ CompilerOptionEntry* compilerOptionEntries,
+ ISlangBlob** outDiagnostics = nullptr) = 0;
+
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getTargetCode(SlangInt targetIndex, IBlob** outCode, IBlob** outDiagnostics = nullptr) = 0;
+
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getTargetMetadata(
+ SlangInt targetIndex,
+ IMetadata** outMetadata,
+ IBlob** outDiagnostics = nullptr) = 0;
+
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getEntryPointMetadata(
+ SlangInt entryPointIndex,
+ SlangInt targetIndex,
+ IMetadata** outMetadata,
+ IBlob** outDiagnostics = nullptr) = 0;
+};
#define SLANG_UUID_IComponentType IComponentType::getTypeGuid()
- struct IEntryPoint : public IComponentType
- {
- SLANG_COM_INTERFACE(0x8f241361, 0xf5bd, 0x4ca0, { 0xa3, 0xac, 0x2, 0xf7, 0xfa, 0x24, 0x2, 0xb8 })
+struct IEntryPoint : public IComponentType
+{
+ SLANG_COM_INTERFACE(0x8f241361, 0xf5bd, 0x4ca0, {0xa3, 0xac, 0x2, 0xf7, 0xfa, 0x24, 0x2, 0xb8})
- virtual SLANG_NO_THROW FunctionReflection* SLANG_MCALL getFunctionReflection() = 0;
- };
+ virtual SLANG_NO_THROW FunctionReflection* SLANG_MCALL getFunctionReflection() = 0;
+};
#define SLANG_UUID_IEntryPoint IEntryPoint::getTypeGuid()
- struct ITypeConformance : public IComponentType
- {
- SLANG_COM_INTERFACE(0x73eb3147, 0xe544, 0x41b5, { 0xb8, 0xf0, 0xa2, 0x44, 0xdf, 0x21, 0x94, 0xb })
- };
+struct ITypeConformance : public IComponentType
+{
+ SLANG_COM_INTERFACE(0x73eb3147, 0xe544, 0x41b5, {0xb8, 0xf0, 0xa2, 0x44, 0xdf, 0x21, 0x94, 0xb})
+};
#define SLANG_UUID_ITypeConformance ITypeConformance::getTypeGuid()
- /** A module is the granularity of shader code compilation and loading.
+/** A module is the granularity of shader code compilation and loading.
- In most cases a module corresponds to a single compile "translation unit."
- This will often be a single `.slang` or `.hlsl` file and everything it
- `#include`s.
+In most cases a module corresponds to a single compile "translation unit."
+This will often be a single `.slang` or `.hlsl` file and everything it
+`#include`s.
- Notably, a module `M` does *not* include the things it `import`s, as these
- as distinct modules that `M` depends on. There is a directed graph of
- module dependencies, and all modules in the graph must belong to the
- same session (`ISession`).
+Notably, a module `M` does *not* include the things it `import`s, as these
+as distinct modules that `M` depends on. There is a directed graph of
+module dependencies, and all modules in the graph must belong to the
+same session (`ISession`).
- A module establishes a namespace for looking up types, functions, etc.
- */
- struct IModule : public IComponentType
- {
- SLANG_COM_INTERFACE(0xc720e64, 0x8722, 0x4d31, { 0x89, 0x90, 0x63, 0x8a, 0x98, 0xb1, 0xc2, 0x79 })
+A module establishes a namespace for looking up types, functions, etc.
+*/
+struct IModule : public IComponentType
+{
+ SLANG_COM_INTERFACE(0xc720e64, 0x8722, 0x4d31, {0x89, 0x90, 0x63, 0x8a, 0x98, 0xb1, 0xc2, 0x79})
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL findEntryPointByName(
- char const* name,
- IEntryPoint** outEntryPoint) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ findEntryPointByName(char const* name, IEntryPoint** outEntryPoint) = 0;
- /// Get number of entry points defined in the module. An entry point defined in a module
- /// is by default not included in the linkage, so calls to `IComponentType::getEntryPointCount`
- /// on an `IModule` instance will always return 0. However `IModule::getDefinedEntryPointCount`
- /// will return the number of defined entry points.
- virtual SLANG_NO_THROW SlangInt32 SLANG_MCALL getDefinedEntryPointCount() = 0;
- /// Get the name of an entry point defined in the module.
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL
- getDefinedEntryPoint(SlangInt32 index, IEntryPoint** outEntryPoint) = 0;
+ /// Get number of entry points defined in the module. An entry point defined in a module
+ /// is by default not included in the linkage, so calls to `IComponentType::getEntryPointCount`
+ /// on an `IModule` instance will always return 0. However `IModule::getDefinedEntryPointCount`
+ /// will return the number of defined entry points.
+ virtual SLANG_NO_THROW SlangInt32 SLANG_MCALL getDefinedEntryPointCount() = 0;
+ /// Get the name of an entry point defined in the module.
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ getDefinedEntryPoint(SlangInt32 index, IEntryPoint** outEntryPoint) = 0;
- /// Get a serialized representation of the checked module.
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL serialize(ISlangBlob** outSerializedBlob) = 0;
+ /// Get a serialized representation of the checked module.
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL serialize(ISlangBlob** outSerializedBlob) = 0;
- /// Write the serialized representation of this module to a file.
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL writeToFile(char const* fileName) = 0;
+ /// Write the serialized representation of this module to a file.
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL writeToFile(char const* fileName) = 0;
- /// Get the name of the module.
- virtual SLANG_NO_THROW const char* SLANG_MCALL getName() = 0;
+ /// Get the name of the module.
+ virtual SLANG_NO_THROW const char* SLANG_MCALL getName() = 0;
- /// Get the path of the module.
- virtual SLANG_NO_THROW const char* SLANG_MCALL getFilePath() = 0;
+ /// Get the path of the module.
+ virtual SLANG_NO_THROW const char* SLANG_MCALL getFilePath() = 0;
- /// Get the unique identity of the module.
- virtual SLANG_NO_THROW const char* SLANG_MCALL getUniqueIdentity() = 0;
+ /// Get the unique identity of the module.
+ virtual SLANG_NO_THROW const char* SLANG_MCALL getUniqueIdentity() = 0;
- /// Find and validate an entry point by name, even if the function is
- /// not marked with the `[shader("...")]` attribute.
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL findAndCheckEntryPoint(
- char const* name,
- SlangStage stage,
- IEntryPoint** outEntryPoint,
- ISlangBlob** outDiagnostics) = 0;
+ /// Find and validate an entry point by name, even if the function is
+ /// not marked with the `[shader("...")]` attribute.
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL findAndCheckEntryPoint(
+ char const* name,
+ SlangStage stage,
+ IEntryPoint** outEntryPoint,
+ ISlangBlob** outDiagnostics) = 0;
- /// Get the number of dependency files that this module depends on.
- /// This includes both the explicit source files, as well as any
- /// additional files that were transitively referenced (e.g., via
- /// a `#include` directive).
- virtual SLANG_NO_THROW SlangInt32 SLANG_MCALL getDependencyFileCount() = 0;
+ /// Get the number of dependency files that this module depends on.
+ /// This includes both the explicit source files, as well as any
+ /// additional files that were transitively referenced (e.g., via
+ /// a `#include` directive).
+ virtual SLANG_NO_THROW SlangInt32 SLANG_MCALL getDependencyFileCount() = 0;
- /// Get the path to a file this module depends on.
- virtual SLANG_NO_THROW char const* SLANG_MCALL getDependencyFilePath(
- SlangInt32 index) = 0;
+ /// Get the path to a file this module depends on.
+ virtual SLANG_NO_THROW char const* SLANG_MCALL getDependencyFilePath(SlangInt32 index) = 0;
+
+ virtual SLANG_NO_THROW DeclReflection* SLANG_MCALL getModuleReflection() = 0;
+};
- virtual SLANG_NO_THROW DeclReflection* SLANG_MCALL getModuleReflection() = 0;
- };
-
#define SLANG_UUID_IModule IModule::getTypeGuid()
- /* Experimental interface for doing target precompilation of slang modules */
- struct IModulePrecompileService_Experimental : public ISlangUnknown
- {
- //uuidgen output: 8e12e8e3 - 5fcd - 433e - afcb - 13a088bc5ee5
- SLANG_COM_INTERFACE(0x8e12e8e3, 0x5fcd, 0x433e, { 0xaf, 0xcb, 0x13, 0xa0, 0x88, 0xbc, 0x5e, 0xe5 })
+/* Experimental interface for doing target precompilation of slang modules */
+struct IModulePrecompileService_Experimental : public ISlangUnknown
+{
+ // uuidgen output: 8e12e8e3 - 5fcd - 433e - afcb - 13a088bc5ee5
+ SLANG_COM_INTERFACE(
+ 0x8e12e8e3,
+ 0x5fcd,
+ 0x433e,
+ {0xaf, 0xcb, 0x13, 0xa0, 0x88, 0xbc, 0x5e, 0xe5})
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL precompileForTarget(
- SlangCompileTarget target,
- ISlangBlob** outDiagnostics) = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL
+ precompileForTarget(SlangCompileTarget target, ISlangBlob** outDiagnostics) = 0;
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getPrecompiledTargetCode(
- SlangCompileTarget target,
- IBlob** outCode,
- IBlob** outDiagnostics = nullptr) = 0;
-
- virtual SLANG_NO_THROW SlangInt SLANG_MCALL getModuleDependencyCount() = 0;
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getPrecompiledTargetCode(
+ SlangCompileTarget target,
+ IBlob** outCode,
+ IBlob** outDiagnostics = nullptr) = 0;
- virtual SLANG_NO_THROW SlangResult SLANG_MCALL getModuleDependency(
- SlangInt dependencyIndex,
- IModule** outModule,
- IBlob** outDiagnostics = nullptr) = 0;
- };
+ virtual SLANG_NO_THROW SlangInt SLANG_MCALL getModuleDependencyCount() = 0;
- #define SLANG_UUID_IModulePrecompileService_Experimental IModulePrecompileService_Experimental::getTypeGuid()
+ virtual SLANG_NO_THROW SlangResult SLANG_MCALL getModuleDependency(
+ SlangInt dependencyIndex,
+ IModule** outModule,
+ IBlob** outDiagnostics = nullptr) = 0;
+};
- /** Argument used for specialization to types/values.
- */
- struct SpecializationArg
- {
- enum class Kind : int32_t
- {
- Unknown, /**< An invalid specialization argument. */
- Type, /**< Specialize to a type. */
- };
+ #define SLANG_UUID_IModulePrecompileService_Experimental \
+ IModulePrecompileService_Experimental::getTypeGuid()
- /** The kind of specialization argument. */
- Kind kind;
- union
- {
- /** A type specialization argument, used for `Kind::Type`. */
- TypeReflection* type;
- };
+/** Argument used for specialization to types/values.
+ */
+struct SpecializationArg
+{
+ enum class Kind : int32_t
+ {
+ Unknown, /**< An invalid specialization argument. */
+ Type, /**< Specialize to a type. */
+ };
- static SpecializationArg fromType(TypeReflection* inType)
- {
- SpecializationArg rs;
- rs.kind = Kind::Type;
- rs.type = inType;
- return rs;
- }
+ /** The kind of specialization argument. */
+ Kind kind;
+ union
+ {
+ /** A type specialization argument, used for `Kind::Type`. */
+ TypeReflection* type;
};
-}
-// Passed into functions to create globalSession to identify the API version client code is
-// using.
-#define SLANG_API_VERSION 0
+ static SpecializationArg fromType(TypeReflection* inType)
+ {
+ SpecializationArg rs;
+ rs.kind = Kind::Type;
+ rs.type = inType;
+ return rs;
+ }
+};
+} // namespace slang
+
+ // Passed into functions to create globalSession to identify the API version client code is
+ // using.
+ #define SLANG_API_VERSION 0
/* Create a global session, with the built-in core module.
@param apiVersion Pass in SLANG_API_VERSION
-@param outGlobalSession (out)The created global session.
+@param outGlobalSession (out)The created global session.
*/
-SLANG_EXTERN_C SLANG_API SlangResult slang_createGlobalSession(
- SlangInt apiVersion,
- slang::IGlobalSession** outGlobalSession);
+SLANG_EXTERN_C SLANG_API SlangResult
+slang_createGlobalSession(SlangInt apiVersion, slang::IGlobalSession** outGlobalSession);
/* Create a global session, but do not set up the core module. The core module can
then be loaded via loadCoreModule or compileCoreModule
@@ -4247,10 +4375,10 @@ then be loaded via loadCoreModule or compileCoreModule
@param apiVersion Pass in SLANG_API_VERSION
@param outGlobalSession (out)The created global session that doesn't have a core module setup.
-NOTE! API is experimental and not ready for production code
+NOTE! API is experimental and not ready for production code
*/
SLANG_EXTERN_C SLANG_API SlangResult slang_createGlobalSessionWithoutCoreModule(
- SlangInt apiVersion,
+ SlangInt apiVersion,
slang::IGlobalSession** outGlobalSession);
/* Returns a blob that contains the serialized core module.
@@ -4270,13 +4398,15 @@ SLANG_EXTERN_C SLANG_API void slang_shutdown();
namespace slang
{
- inline SlangResult createGlobalSession(
- slang::IGlobalSession** outGlobalSession)
- {
- return slang_createGlobalSession(SLANG_API_VERSION, outGlobalSession);
- }
- inline void shutdown() { slang_shutdown(); }
+inline SlangResult createGlobalSession(slang::IGlobalSession** outGlobalSession)
+{
+ return slang_createGlobalSession(SLANG_API_VERSION, outGlobalSession);
+}
+inline void shutdown()
+{
+ slang_shutdown();
}
+} // namespace slang
#endif // C++ helpers