Refactor ShaderBuffer
This commit is contained in:
@@ -361,8 +361,8 @@ VkAccessFlags UniformBuffer::getDestAccessMask()
|
||||
return VK_ACCESS_UNIFORM_READ_BIT;
|
||||
}
|
||||
|
||||
StructuredBuffer::StructuredBuffer(PGraphics graphics, const StructuredBufferCreateInfo &resourceData)
|
||||
: Gfx::StructuredBuffer(graphics->getFamilyMapping(), resourceData.stride, resourceData.resourceData.size / resourceData.stride, resourceData.resourceData)
|
||||
ShaderBuffer::ShaderBuffer(PGraphics graphics, const ShaderBufferCreateInfo &resourceData)
|
||||
: Gfx::ShaderBuffer(graphics->getFamilyMapping(), resourceData.stride, resourceData.resourceData.size / resourceData.stride, resourceData.resourceData)
|
||||
, Vulkan::ShaderBuffer(graphics, resourceData.resourceData.size, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, currentOwner, resourceData.bDynamic)
|
||||
{
|
||||
if (resourceData.resourceData.data != nullptr)
|
||||
@@ -373,21 +373,21 @@ StructuredBuffer::StructuredBuffer(PGraphics graphics, const StructuredBufferCre
|
||||
}
|
||||
}
|
||||
|
||||
StructuredBuffer::~StructuredBuffer()
|
||||
ShaderBuffer::~ShaderBuffer()
|
||||
{
|
||||
}
|
||||
|
||||
bool StructuredBuffer::updateContents(const BulkResourceData &resourceData)
|
||||
bool ShaderBuffer::updateContents(const BulkResourceData &resourceData)
|
||||
{
|
||||
assert(resourceData.size <= getSize());
|
||||
Gfx::StructuredBuffer::updateContents(resourceData);
|
||||
Gfx::ShaderBuffer::updateContents(resourceData);
|
||||
//We always want to update, as the contents could be different on the GPU
|
||||
void* data = lock();
|
||||
std::memcpy(data, resourceData.data, resourceData.size);
|
||||
unlock();
|
||||
return true;
|
||||
}
|
||||
void* StructuredBuffer::lock(bool bWriteOnly)
|
||||
void* ShaderBuffer::lock(bool bWriteOnly)
|
||||
{
|
||||
if(dedicatedStagingBuffer != nullptr)
|
||||
{
|
||||
@@ -396,7 +396,7 @@ void* StructuredBuffer::lock(bool bWriteOnly)
|
||||
return ShaderBuffer::lock(bWriteOnly);
|
||||
}
|
||||
|
||||
void StructuredBuffer::unlock()
|
||||
void ShaderBuffer::unlock()
|
||||
{
|
||||
if(dedicatedStagingBuffer != nullptr)
|
||||
{
|
||||
@@ -416,28 +416,28 @@ void StructuredBuffer::unlock()
|
||||
}
|
||||
}
|
||||
|
||||
void StructuredBuffer::requestOwnershipTransfer(Gfx::QueueType newOwner)
|
||||
void ShaderBuffer::requestOwnershipTransfer(Gfx::QueueType newOwner)
|
||||
{
|
||||
Gfx::QueueOwnedResource::transferOwnership(newOwner);
|
||||
}
|
||||
|
||||
void StructuredBuffer::executeOwnershipBarrier(Gfx::QueueType newOwner)
|
||||
void ShaderBuffer::executeOwnershipBarrier(Gfx::QueueType newOwner)
|
||||
{
|
||||
Vulkan::ShaderBuffer::executeOwnershipBarrier(newOwner);
|
||||
}
|
||||
|
||||
void StructuredBuffer::executePipelineBarrier(VkAccessFlags srcAccess, VkPipelineStageFlags srcStage,
|
||||
void ShaderBuffer::executePipelineBarrier(VkAccessFlags srcAccess, VkPipelineStageFlags srcStage,
|
||||
VkAccessFlags dstAccess, VkPipelineStageFlags dstStage)
|
||||
{
|
||||
Vulkan::ShaderBuffer::executePipelineBarrier(srcAccess, srcStage, dstAccess, dstStage);
|
||||
}
|
||||
|
||||
VkAccessFlags StructuredBuffer::getSourceAccessMask()
|
||||
VkAccessFlags ShaderBuffer::getSourceAccessMask()
|
||||
{
|
||||
return VK_ACCESS_MEMORY_WRITE_BIT;
|
||||
}
|
||||
|
||||
VkAccessFlags StructuredBuffer::getDestAccessMask()
|
||||
VkAccessFlags ShaderBuffer::getDestAccessMask()
|
||||
{
|
||||
return VK_ACCESS_MEMORY_READ_BIT;
|
||||
}
|
||||
|
||||
@@ -135,10 +135,10 @@ void DescriptorSet::updateBuffer(uint32_t binding, Gfx::PUniformBuffer uniformBu
|
||||
cachedData[binding] = new UniformBuffer(*vulkanBuffer.getHandle());
|
||||
}
|
||||
|
||||
void DescriptorSet::updateBuffer(uint32_t binding, Gfx::PStructuredBuffer structuredBuffer)
|
||||
void DescriptorSet::updateBuffer(uint32_t binding, Gfx::PShaderBuffer ShaderBuffer)
|
||||
{
|
||||
PStructuredBuffer vulkanBuffer = structuredBuffer.cast<StructuredBuffer>();
|
||||
StructuredBuffer* cachedBuffer = reinterpret_cast<StructuredBuffer*>(cachedData[binding]);
|
||||
PShaderBuffer vulkanBuffer = ShaderBuffer.cast<ShaderBuffer>();
|
||||
ShaderBuffer* cachedBuffer = reinterpret_cast<ShaderBuffer*>(cachedData[binding]);
|
||||
if(vulkanBuffer.getHandle() == cachedBuffer)
|
||||
{
|
||||
return;
|
||||
|
||||
@@ -67,7 +67,7 @@ public:
|
||||
virtual ~DescriptorSet();
|
||||
virtual void writeChanges();
|
||||
virtual void updateBuffer(uint32_t binding, Gfx::PUniformBuffer uniformBuffer);
|
||||
virtual void updateBuffer(uint32_t binding, Gfx::PStructuredBuffer uniformBuffer);
|
||||
virtual void updateBuffer(uint32_t binding, Gfx::PShaderBuffer uniformBuffer);
|
||||
virtual void updateSampler(uint32_t binding, Gfx::PSamplerState samplerState);
|
||||
virtual void updateTexture(uint32_t binding, Gfx::PTexture texture, Gfx::PSamplerState sampler = nullptr);
|
||||
virtual void updateTextureArray(uint32_t binding, Array<Gfx::PTexture> texture);
|
||||
|
||||
@@ -134,10 +134,10 @@ Gfx::PUniformBuffer Graphics::createUniformBuffer(const UniformBufferCreateInfo
|
||||
return uniformBuffer;
|
||||
}
|
||||
|
||||
Gfx::PStructuredBuffer Graphics::createStructuredBuffer(const StructuredBufferCreateInfo &bulkData)
|
||||
Gfx::PShaderBuffer Graphics::createShaderBuffer(const ShaderBufferCreateInfo &bulkData)
|
||||
{
|
||||
PStructuredBuffer structuredBuffer = new StructuredBuffer(this, bulkData);
|
||||
return structuredBuffer;
|
||||
PShaderBuffer ShaderBuffer = new ShaderBuffer(this, bulkData);
|
||||
return ShaderBuffer;
|
||||
}
|
||||
Gfx::PVertexBuffer Graphics::createVertexBuffer(const VertexBufferCreateInfo &bulkData)
|
||||
{
|
||||
@@ -269,7 +269,7 @@ void Graphics::copyTexture(Gfx::PTexture srcTexture, Gfx::PTexture dstTexture)
|
||||
{
|
||||
/*VkMemoryRequirements imageRequirements;
|
||||
vkGetImageMemoryRequirements(handle, srcHandle->getImage(), &imageRequirements);
|
||||
PStructuredBuffer tempBuffer = createStructuredBuffer();
|
||||
PShaderBuffer tempBuffer = createShaderBuffer();
|
||||
VkBufferImageCopy bufferImageCopy;
|
||||
bufferImageCopy.bufferOffset = 0;
|
||||
bufferImageCopy.bufferRowLength = srcTexture->getSizeX();
|
||||
|
||||
@@ -48,7 +48,7 @@ public:
|
||||
virtual Gfx::PTexture3D createTexture3D(const TextureCreateInfo &createInfo) override;
|
||||
virtual Gfx::PTextureCube createTextureCube(const TextureCreateInfo &createInfo) override;
|
||||
virtual Gfx::PUniformBuffer createUniformBuffer(const UniformBufferCreateInfo &bulkData) override;
|
||||
virtual Gfx::PStructuredBuffer createStructuredBuffer(const StructuredBufferCreateInfo &bulkData) override;
|
||||
virtual Gfx::PShaderBuffer createShaderBuffer(const ShaderBufferCreateInfo &bulkData) override;
|
||||
virtual Gfx::PVertexBuffer createVertexBuffer(const VertexBufferCreateInfo &bulkData) override;
|
||||
virtual Gfx::PIndexBuffer createIndexBuffer(const IndexBufferCreateInfo &bulkData) override;
|
||||
virtual Gfx::PRenderCommand createRenderCommand(const std::string& name) override;
|
||||
|
||||
@@ -140,11 +140,11 @@ private:
|
||||
};
|
||||
DEFINE_REF(UniformBuffer)
|
||||
|
||||
class StructuredBuffer : public Gfx::StructuredBuffer, public ShaderBuffer
|
||||
class ShaderBuffer : public Gfx::ShaderBuffer, public ShaderBuffer
|
||||
{
|
||||
public:
|
||||
StructuredBuffer(PGraphics graphics, const StructuredBufferCreateInfo &resourceData);
|
||||
virtual ~StructuredBuffer();
|
||||
ShaderBuffer(PGraphics graphics, const ShaderBufferCreateInfo &resourceData);
|
||||
virtual ~ShaderBuffer();
|
||||
virtual bool updateContents(const BulkResourceData &resourceData);
|
||||
|
||||
virtual void* lock(bool bWriteOnly = true) override;
|
||||
@@ -161,7 +161,7 @@ protected:
|
||||
private:
|
||||
PStagingBuffer dedicatedStagingBuffer;
|
||||
};
|
||||
DEFINE_REF(StructuredBuffer)
|
||||
DEFINE_REF(ShaderBuffer)
|
||||
|
||||
class VertexBuffer : public Gfx::VertexBuffer, public ShaderBuffer
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user