Implementing graphics layer changes in metal
This commit is contained in:
@@ -7,7 +7,38 @@
|
||||
|
||||
namespace Seele {
|
||||
namespace Metal {
|
||||
class TextureHandle : public CommandBoundResource{
|
||||
DECLARE_REF(TextureHandle)
|
||||
class TextureView : public Gfx::TextureView, public CommandBoundResource {
|
||||
public:
|
||||
TextureView(PGraphics graphics, PTextureHandle source, uint32 width, uint32 height, uint32 numLayers, uint32 numMipLevels, MTL::Texture* view);
|
||||
virtual ~TextureView();
|
||||
virtual Gfx::SeFormat getFormat() const override;
|
||||
virtual uint32 getWidth() const override;
|
||||
virtual uint32 getHeight() const override;
|
||||
virtual uint32 getDepth() const override;
|
||||
virtual uint32 getNumLayers() const override;
|
||||
virtual Gfx::SeSampleCountFlags getNumSamples() const override;
|
||||
virtual uint32 getMipLevels() const override;
|
||||
virtual void pipelineBarrier(Gfx::SeAccessFlags srcAccess, Gfx::SePipelineStageFlags srcStage, Gfx::SeAccessFlags dstAccess,
|
||||
Gfx::SePipelineStageFlags dstStage) override;
|
||||
virtual void changeLayout(Gfx::SeImageLayout newLayout, Gfx::SeAccessFlags srcAccess, Gfx::SePipelineStageFlags srcStage,
|
||||
Gfx::SeAccessFlags dstAccess, Gfx::SePipelineStageFlags dstStage) override;
|
||||
|
||||
MTL::Texture* getHandle() const { return view; }
|
||||
PTextureHandle getSource() const { return source;}
|
||||
|
||||
private:
|
||||
uint32 width;
|
||||
uint32 height;
|
||||
uint32 numLayers;
|
||||
uint32 numMipLevels;
|
||||
PTextureHandle source;
|
||||
MTL::Texture* view;
|
||||
friend class TextureBase;
|
||||
};
|
||||
DEFINE_REF(TextureView)
|
||||
|
||||
class TextureHandle : public CommandBoundResource {
|
||||
public:
|
||||
TextureHandle(PGraphics graphics, MTL::TextureType type, const TextureCreateInfo& createInfo, MTL::Texture* existingImage);
|
||||
virtual ~TextureHandle();
|
||||
@@ -18,8 +49,10 @@ class TextureHandle : public CommandBoundResource{
|
||||
Gfx::SeAccessFlags dstAccess, Gfx::SePipelineStageFlags dstStage);
|
||||
void download(uint32 mipLevel, uint32 arrayLayer, uint32 face, Array<uint8>& buffer);
|
||||
void generateMipmaps();
|
||||
Gfx::OTextureView createTextureView(uint32 baseMipLevel, uint32 levelCount, uint32 baseArrayLayer, uint32 layerCount);
|
||||
|
||||
MTL::Texture* texture;
|
||||
OTextureView textureView;
|
||||
MTL::TextureType type;
|
||||
uint32 width;
|
||||
uint32 height;
|
||||
@@ -87,6 +120,8 @@ class Texture2D : public Gfx::Texture2D, public TextureBase {
|
||||
Gfx::SeAccessFlags dstAccess, Gfx::SePipelineStageFlags dstStage) override;
|
||||
virtual void download(uint32 mipLevel, uint32 arrayLayer, uint32 face, Array<uint8>& buffer) override;
|
||||
virtual void generateMipmaps() override;
|
||||
virtual Gfx::PTextureView getDefaultView() const override;
|
||||
virtual Gfx::OTextureView createTextureView(uint32 baseMipLevel, uint32 levelCount, uint32 baseArrayLayer, uint32 layerCount) override;
|
||||
|
||||
protected:
|
||||
// Inherited via QueueOwnedResource
|
||||
@@ -95,7 +130,31 @@ class Texture2D : public Gfx::Texture2D, public TextureBase {
|
||||
Gfx::SePipelineStageFlags dstStage) override;
|
||||
};
|
||||
DEFINE_REF(Texture2D)
|
||||
class Texture2DArray : public Gfx::Texture2DArray, public TextureBase {
|
||||
public:
|
||||
Texture2DArray(PGraphics graphics, const TextureCreateInfo& createInfo, MTL::Texture* existingImage = nullptr);
|
||||
virtual ~Texture2DArray();
|
||||
virtual uint32 getWidth() const override { return handle->width; }
|
||||
virtual uint32 getHeight() const override { return handle->height; }
|
||||
virtual uint32 getDepth() const override { return handle->depth; }
|
||||
virtual uint32 getNumLayers() const override { return handle->arrayCount; }
|
||||
virtual Gfx::SeFormat getFormat() const override { return handle->format; }
|
||||
virtual Gfx::SeSampleCountFlags getNumSamples() const override { return handle->samples; }
|
||||
virtual uint32 getMipLevels() const override { return handle->mipLevels; }
|
||||
virtual void changeLayout(Gfx::SeImageLayout newLayout, Gfx::SeAccessFlags srcAccess, Gfx::SePipelineStageFlags srcStage,
|
||||
Gfx::SeAccessFlags dstAccess, Gfx::SePipelineStageFlags dstStage) override;
|
||||
virtual void download(uint32 mipLevel, uint32 arrayLayer, uint32 face, Array<uint8>& buffer) override;
|
||||
virtual void generateMipmaps() override;
|
||||
virtual Gfx::PTextureView getDefaultView() const override;
|
||||
virtual Gfx::OTextureView createTextureView(uint32 baseMipLevel, uint32 levelCount, uint32 baseArrayLayer, uint32 layerCount) override;
|
||||
|
||||
protected:
|
||||
// Inherited via QueueOwnedResource
|
||||
virtual void executeOwnershipBarrier(Gfx::QueueType newOwner) override;
|
||||
virtual void executePipelineBarrier(Gfx::SeAccessFlags srcAccess, Gfx::SePipelineStageFlags srcStage, Gfx::SeAccessFlags dstAccess,
|
||||
Gfx::SePipelineStageFlags dstStage) override;
|
||||
};
|
||||
DEFINE_REF(Texture2DArray)
|
||||
class Texture3D : public Gfx::Texture3D, public TextureBase {
|
||||
public:
|
||||
Texture3D(PGraphics graphics, const TextureCreateInfo& createInfo);
|
||||
@@ -111,6 +170,8 @@ class Texture3D : public Gfx::Texture3D, public TextureBase {
|
||||
Gfx::SeAccessFlags dstAccess, Gfx::SePipelineStageFlags dstStage) override;
|
||||
virtual void download(uint32 mipLevel, uint32 arrayLayer, uint32 face, Array<uint8>& buffer) override;
|
||||
virtual void generateMipmaps() override;
|
||||
virtual Gfx::PTextureView getDefaultView() const override;
|
||||
virtual Gfx::OTextureView createTextureView(uint32 baseMipLevel, uint32 levelCount, uint32 baseArrayLayer, uint32 layerCount) override;
|
||||
|
||||
protected:
|
||||
// Inherited via QueueOwnedResource
|
||||
@@ -135,6 +196,8 @@ class TextureCube : public Gfx::TextureCube, public TextureBase {
|
||||
Gfx::SeAccessFlags dstAccess, Gfx::SePipelineStageFlags dstStage) override;
|
||||
virtual void download(uint32 mipLevel, uint32 arrayLayer, uint32 face, Array<uint8>& buffer) override;
|
||||
virtual void generateMipmaps() override;
|
||||
virtual Gfx::PTextureView getDefaultView() const override;
|
||||
virtual Gfx::OTextureView createTextureView(uint32 baseMipLevel, uint32 levelCount, uint32 baseArrayLayer, uint32 layerCount) override;
|
||||
|
||||
protected:
|
||||
// Inherited via QueueOwnedResource
|
||||
|
||||
Reference in New Issue
Block a user