[dxvk] Added method to clear images that are not bound for rendering

This commit is contained in:
Philip Rebohle 2017-12-01 00:52:13 +01:00
parent 5acc65504f
commit 4b6d8264e7
6 changed files with 69 additions and 0 deletions

View File

@ -147,6 +147,18 @@ namespace dxvk {
}
void DxvkCommandList::cmdClearColorImage(
VkImage image,
VkImageLayout imageLayout,
const VkClearColorValue* pColor,
uint32_t rangeCount,
const VkImageSubresourceRange* pRanges) {
m_vkd->vkCmdClearColorImage(m_buffer,
image, imageLayout, pColor,
rangeCount, pRanges);
}
void DxvkCommandList::cmdCopyBuffer(
VkBuffer srcBuffer,
VkBuffer dstBuffer,

View File

@ -103,6 +103,13 @@ namespace dxvk {
uint32_t rectCount,
const VkClearRect* pRects) final;
void cmdClearColorImage(
VkImage image,
VkImageLayout imageLayout,
const VkClearColorValue* pColor,
uint32_t rangeCount,
const VkImageSubresourceRange* pRanges) final;
void cmdCopyBuffer(
VkBuffer srcBuffer,
VkBuffer dstBuffer,

View File

@ -101,6 +101,23 @@ namespace dxvk {
}
void DxvkContext::clearColorImage(
const Rc<DxvkImage>& image,
const VkClearColorValue& value,
const VkImageSubresourceRange& subresources) {
this->renderPassEnd();
m_cmd->cmdClearColorImage(
image->handle(),
VK_IMAGE_LAYOUT_GENERAL,
&value, 1, &subresources);
// TODO memory barrier
m_cmd->trackResource(image);
}
void DxvkContext::clearRenderTarget(
const VkClearAttachment& attachment,
const VkClearRect& clearArea) {

View File

@ -86,6 +86,18 @@ namespace dxvk {
uint32_t binding,
const DxvkBufferBinding& buffer);
/**
* \brief Clears subresources of an image
*
* \param [in] image The image to clear
* \param [in] value Clear value
* \param [in] subresources Subresources to clear
*/
void clearColorImage(
const Rc<DxvkImage>& image,
const VkClearColorValue& value,
const VkImageSubresourceRange& subresources);
/**
* \brief Clears an active render target
*

View File

@ -175,6 +175,20 @@ namespace dxvk {
return m_image;
}
/**
* \brief Subresource range
* \returns Subresource range
*/
VkImageSubresourceRange subresources() const {
VkImageSubresourceRange result;
result.aspectMask = m_info.aspect;
result.baseMipLevel = m_info.minLevel;
result.levelCount = m_info.numLevels;
result.baseArrayLayer = m_info.minLayer;
result.layerCount = m_info.numLayers;
return result;
}
private:
Rc<vk::DeviceFn> m_vkd;

View File

@ -60,6 +60,13 @@ namespace dxvk {
uint32_t rectCount,
const VkClearRect* pRects) = 0;
virtual void cmdClearColorImage(
VkImage image,
VkImageLayout imageLayout,
const VkClearColorValue* pColor,
uint32_t rangeCount,
const VkImageSubresourceRange* pRanges) = 0;
virtual void cmdCopyBuffer(
VkBuffer srcBuffer,
VkBuffer dstBuffer,