summaryrefslogtreecommitdiff
path: root/source/compiler-core/slang-artifact-impl.h
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2022-08-10 11:37:26 -0400
committerGitHub <noreply@github.com>2022-08-10 11:37:26 -0400
commitfcdb4629c4c3dd2931eaa88b96b668d914c4519c (patch)
treec54c0b9c6411f9be55b9a2816e528b91d6032703 /source/compiler-core/slang-artifact-impl.h
parent1378fffd9da094beb41b2db89b96f556c23ab6cb (diff)
Yet more refactoring around Artifact (#2352)
* #include an absolute path didn't work - because paths were taken to always be relative. * WIP with hierarchical enums. * Some small fixes and improvements around artifact desc related types. * Improvements around hierarchical enum. * Fixes to get Artifact types refactor to be able to execute tests. * Attempt to better categorize PTX. * Work around for potentially unused function warning. * Typo fix. * Simplify Artifact header. * Small improvements around Artifact kind/payload/style. * Added IDestroyable/ICastable * Add IArtifactList. * First impl of IArtifactUtil. * Use the ICastable interface for IArtifactRepresentation. * Added IArtifactRepresentation & IArtifactAssociated. * Add SLANG_OVERRIDE to avoid gcc/clang warning. * Fix calling convention issue on win32. * Fix missing SLANG_OVERRIDE. * First attempt at file abstraction around Artifact. * Added creation of lock file. * Move functionality for determining file paths to the IArtifactUtil. Add casting to ICastable. * Added some casting/finding mechanisms. * Simplify IArtifact interface, and use Items for file reps. * Fix problem with libraries on DXIL. * Split out ArtifactRepresentation. * Move ArtifactDesc functionality to ArtifactDescUtil. ArtifactInfoUtil becomes ArtifactDescUtil. * Split implementations from the interfaces for Artifact. * Use TypeTextUtil for target name outputting. * Add artifact impls. * Add ICastableList * Added UnknownCastableAdapter * Make ISlangSharedLibrary derive from ICastable, and remain backwards compatible with slang-llvm. * Refactor Representation on Artifact. * Make our ISlangBlobs also derive from ICastable. Make ISlangBlob atomic ref counted. * Split out CastableList and related types, and placed in core. * Small fixes around IArtifact. Improve IArtifact docs. First impl of getChildren for IArtifact. * Documentation improvements for Artifact related types. * Fix typo. * Special case adding a ICastableList to a LazyCastableList. * Small simplification of LazyCastableList, by adding State member. * Removed the ILockFile interface because IFileArtifactRepresentation can be used.
Diffstat (limited to 'source/compiler-core/slang-artifact-impl.h')
-rw-r--r--source/compiler-core/slang-artifact-impl.h98
1 files changed, 5 insertions, 93 deletions
diff --git a/source/compiler-core/slang-artifact-impl.h b/source/compiler-core/slang-artifact-impl.h
index 79aad3b64..e4db46222 100644
--- a/source/compiler-core/slang-artifact-impl.h
+++ b/source/compiler-core/slang-artifact-impl.h
@@ -4,6 +4,8 @@
#include "slang-artifact.h"
+#include "../core/slang-lazy-castable-list.h"
+
#include "../../slang-com-helper.h"
#include "../../slang-com-ptr.h"
@@ -12,89 +14,6 @@
namespace Slang
{
-/* An adapter such that types which aren't derived from ICastable, can be used as such.
-
-With the following caveats.
-* the interfaces/objects of the adapter are checked *first*, so IUnknown will always be for the adapter
-* assumes when doing a queryInterface on the contained item
-*/
-class UnknownCastableAdapter : public ComBaseObject, public IUnknownCastableAdapter
-{
-public:
- SLANG_COM_BASE_IUNKNOWN_ALL
-
- // ICastable
- SLANG_NO_THROW void* SLANG_MCALL castAs(const Guid& guid) SLANG_OVERRIDE;
-
- // IUnknownCastableAdapter
- virtual SLANG_NO_THROW ISlangUnknown* SLANG_MCALL getContained() SLANG_OVERRIDE { return m_contained; }
-
- UnknownCastableAdapter(ISlangUnknown* unk):
- m_contained(unk)
- {
- SLANG_ASSERT(unk);
- }
-
-protected:
- void* getInterface(const Guid& guid);
- void* getObject(const Guid& guid);
-
- ComPtr<ISlangUnknown> m_contained;
-
- // We hold a cache for a single lookup to make things a little faster
- void* m_found = nullptr;
- Guid m_foundGuid;
-};
-
-class CastableList : public ComBaseObject, public ICastableList
-{
-public:
- SLANG_COM_BASE_IUNKNOWN_ALL
-
- // ICastable
- SLANG_NO_THROW void* SLANG_MCALL castAs(const Guid& guid) SLANG_OVERRIDE;
-
- // ICastableList
- virtual Count SLANG_MCALL getCount() SLANG_OVERRIDE { return m_list.getCount(); }
- virtual ICastable* SLANG_MCALL getAt(Index i) SLANG_OVERRIDE { return m_list[i]; }
- virtual void SLANG_MCALL add(ICastable* castable) SLANG_OVERRIDE;
- virtual void SLANG_MCALL addUnknown(ISlangUnknown* unk) SLANG_OVERRIDE;
- virtual void SLANG_MCALL removeAt(Index i) SLANG_OVERRIDE;
- virtual void SLANG_MCALL clear() SLANG_OVERRIDE;
- virtual Index SLANG_MCALL indexOf(ICastable* castable) SLANG_OVERRIDE;
- virtual Index SLANG_MCALL indexOfUnknown(ISlangUnknown* unk) SLANG_OVERRIDE;
- virtual void* SLANG_MCALL find(const Guid& guid) SLANG_OVERRIDE;
- virtual ICastable* const* SLANG_MCALL getBuffer() SLANG_OVERRIDE { return m_list.getBuffer(); }
-
- virtual ~CastableList();
-
-protected:
- void* getInterface(const Guid& guid);
- void* getObject(const Guid& guid);
-
- List<ICastable*> m_list;
-};
-
-class LazyCastableList
-{
-public:
- void add(ICastable* castable);
- Count getCount() const;
- void removeAt(Index index);
- void clear();
- void clearAndDeallocate();
- void* find(const Guid& guid);
- ConstArrayView<ICastable*> getView() const;
- Index indexOf(ICastable* castable) const;
- Index indexOfUnknown(ISlangUnknown* unk) const;
-
- ICastableList* requireList();
- ICastableList* getList();
-
-protected:
- ComPtr<ICastable> m_castable;
-};
-
class ArtifactList : public ComBaseObject, public IArtifactList
{
public:
@@ -134,15 +53,6 @@ protected:
/*
Discussion:
-It could make sense to remove the explicit variables of a ISlangBlob, and the file backing from this interface, as they could
-all be implemented as element types presumably deriving from IArtifactInstance. Doing so would mean how a 'file' is turned into
-a blob is abstracted.
-
-It may be helpful to be able to add temporary files to the artifact (such that they will be deleted when the artifact goes out of
-scope). Using an implementation of the File backed IArtifactInstance, with a suitable desc would sort of work, but it breaks the idea
-that any IArtifactInstance *represents* the contents of Artifact that contains it. Of course there could be types *not* deriving
-from IArtifactInstance that handle temporary file existance. This is probably the simplest answer to the problem.
-
Another issue occurs around wanting to hold multiple kernels within a container. The problem here is that although through the desc
we can identify what target a kernel is for, there is no way of telling what stage it is for.
@@ -174,11 +84,13 @@ public:
virtual void* SLANG_MCALL SLANG_MCALL findAssociated(const Guid& unk) SLANG_OVERRIDE;
virtual ICastableList* SLANG_MCALL getAssociated() SLANG_OVERRIDE;
- virtual SLANG_NO_THROW void SLANG_MCALL addRepresentation(IArtifactRepresentation* rep) SLANG_OVERRIDE;
+ virtual SLANG_NO_THROW void SLANG_MCALL addRepresentation(ICastable* castable) SLANG_OVERRIDE;
virtual SLANG_NO_THROW void SLANG_MCALL addRepresentationUnknown(ISlangUnknown* rep) SLANG_OVERRIDE;
virtual void* SLANG_MCALL SLANG_MCALL findRepresentation(const Guid& guid) SLANG_OVERRIDE;
virtual ICastableList* SLANG_MCALL getRepresentations() SLANG_OVERRIDE;
+ virtual IArtifactList* SLANG_MCALL getChildren() SLANG_OVERRIDE;
+
/// Ctor
Artifact(const Desc& desc, const String& name) :
m_desc(desc),