vkCmdBlitImage() support format component swizzling.
This commit is contained in:
parent
f824c1a955
commit
74e8af1525
@ -26,6 +26,7 @@ Released TBD
|
||||
- Ensure Vulkan loader magic number is set every time before returning any dispatchable Vulkan handle.
|
||||
- Fix crash when `VkDeviceCreateInfo` specifies queue families out of numerical order.
|
||||
- Fix crash in `vkDestroyPipelineLayout()`.
|
||||
- `vkCmdBlitImage()` support format component swizzling.
|
||||
- `vkCmdClearImage()` set error if attempt made to clear 1D image, and fix validation of depth attachment formats.
|
||||
- Remove error logging on `VK_TIMEOUT` of `VkSemaphore` and `VkFence`.
|
||||
- Consolidate the various linkable objects into a `MVKLinkableMixin` template base class.
|
||||
|
@ -52,7 +52,8 @@ public:
|
||||
|
||||
protected:
|
||||
void setContent(VkImage srcImage, VkImageLayout srcImageLayout,
|
||||
VkImage dstImage, VkImageLayout dstImageLayout, MVKCommandUse commandUse);
|
||||
VkImage dstImage, VkImageLayout dstImageLayout,
|
||||
bool formatsMustMatch, MVKCommandUse commandUse);
|
||||
void addImageCopyRegion(const VkImageCopy& region);
|
||||
void addTempBufferImageCopyRegion(const VkImageCopy& region);
|
||||
|
||||
|
@ -41,7 +41,7 @@ void MVKCmdCopyImage::setContent(VkImage srcImage,
|
||||
const VkImageCopy* pRegions,
|
||||
MVKCommandUse commandUse) {
|
||||
|
||||
setContent(srcImage, srcImageLayout, dstImage, dstImageLayout, commandUse);
|
||||
setContent(srcImage, srcImageLayout, dstImage, dstImageLayout, false, commandUse);
|
||||
|
||||
for (uint32_t i = 0; i < regionCount; i++) {
|
||||
addImageCopyRegion(pRegions[i]);
|
||||
@ -56,11 +56,12 @@ void MVKCmdCopyImage::setContent(VkImage srcImage,
|
||||
}
|
||||
}
|
||||
|
||||
// Sets basic content for use by this class and subclasses
|
||||
// Sets common content for use by this class and subclasses
|
||||
void MVKCmdCopyImage::setContent(VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage dstImage,
|
||||
VkImageLayout dstImageLayout,
|
||||
bool formatsMustMatch,
|
||||
MVKCommandUse commandUse) {
|
||||
_srcImage = (MVKImage*)srcImage;
|
||||
_srcLayout = srcImageLayout;
|
||||
@ -76,7 +77,9 @@ void MVKCmdCopyImage::setContent(VkImage srcImage,
|
||||
_isDstCompressed = _dstImage->getIsCompressed();
|
||||
uint32_t dstBytesPerBlock = mvkMTLPixelFormatBytesPerBlock(_dstMTLPixFmt);
|
||||
|
||||
_canCopyFormats = (srcBytesPerBlock == dstBytesPerBlock) && (_srcSampleCount == _dstSampleCount);
|
||||
_canCopyFormats = formatsMustMatch
|
||||
? (_dstMTLPixFmt == _srcMTLPixFmt)
|
||||
: ((dstBytesPerBlock == srcBytesPerBlock) && (_dstSampleCount == _srcSampleCount));
|
||||
_useTempBuffer = (_srcMTLPixFmt != _dstMTLPixFmt) && (_isSrcCompressed || _isDstCompressed); // Different formats and at least one is compressed
|
||||
|
||||
_commandUse = commandUse;
|
||||
@ -214,7 +217,7 @@ void MVKCmdBlitImage::setContent(VkImage srcImage,
|
||||
VkFilter filter,
|
||||
MVKCommandUse commandUse) {
|
||||
|
||||
MVKCmdCopyImage::setContent(srcImage, srcImageLayout, dstImage, dstImageLayout, commandUse);
|
||||
MVKCmdCopyImage::setContent(srcImage, srcImageLayout, dstImage, dstImageLayout, true, commandUse);
|
||||
|
||||
_mtlFilter = mvkMTLSamplerMinMagFilterFromVkFilter(filter);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user