[dxvk] Remove initial image layout parameter

This is now always going to be UNDEFINED.
This commit is contained in:
Philip Rebohle 2024-10-30 23:51:15 +01:00
parent dda4ef3be1
commit 4724dfff86
11 changed files with 74 additions and 101 deletions

View file

@ -205,9 +205,7 @@ namespace dxvk {
EmitCs([
cImage = std::move(image)
] (DxvkContext* ctx) {
ctx->initImage(cImage,
cImage->getAvailableSubresources(),
VK_IMAGE_LAYOUT_UNDEFINED);
ctx->initImage(cImage, cImage->getAvailableSubresources());
});
}

View file

@ -653,11 +653,8 @@ namespace dxvk {
m_parent->GetContext()->InjectCs([
cImages = std::move(images)
] (DxvkContext* ctx) {
for (size_t i = 0; i < cImages.size(); i++) {
ctx->initImage(cImages[i],
cImages[i]->getAvailableSubresources(),
VK_IMAGE_LAYOUT_UNDEFINED);
}
for (size_t i = 0; i < cImages.size(); i++)
ctx->initImage(cImages[i], cImages[i]->getAvailableSubresources());
});
}

View file

@ -41,7 +41,6 @@ namespace dxvk {
| VK_ACCESS_TRANSFER_WRITE_BIT;
imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
imageInfo.layout = VK_IMAGE_LAYOUT_GENERAL;
imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
imageInfo.shared = vkImage != VK_NULL_HANDLE;
// Normalise hSharedhandle to INVALID_HANDLE_VALUE to allow passing in nullptr

View file

@ -101,9 +101,7 @@ namespace dxvk {
EmitCs([
cImage = std::move(image)
] (DxvkContext* ctx) {
ctx->initImage(cImage,
cImage->getAvailableSubresources(),
VK_IMAGE_LAYOUT_UNDEFINED);
ctx->initImage(cImage, cImage->getAvailableSubresources());
});
ThrottleAllocationLocked();

View file

@ -1120,11 +1120,8 @@ namespace dxvk {
m_parent->InjectCs([
cImages = std::move(images)
] (DxvkContext* ctx) {
for (size_t i = 0; i < cImages.size(); i++) {
ctx->initImage(cImages[i],
cImages[i]->getAvailableSubresources(),
VK_IMAGE_LAYOUT_UNDEFINED);
}
for (size_t i = 0; i < cImages.size(); i++)
ctx->initImage(cImages[i], cImages[i]->getAvailableSubresources());
});
return D3D_OK;

View file

@ -995,15 +995,7 @@ namespace dxvk {
void DxvkContext::initImage(
const Rc<DxvkImage>& image,
const VkImageSubresourceRange& subresources,
VkImageLayout initialLayout) {
if (initialLayout == VK_IMAGE_LAYOUT_PREINITIALIZED) {
accessImage(DxvkCmdBuffer::InitBuffer,
*image, subresources, initialLayout,
VK_PIPELINE_STAGE_2_NONE, 0);
m_cmd->track(image, DxvkAccess::None);
} else {
const VkImageSubresourceRange& subresources) {
VkImageLayout clearLayout = image->pickLayout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
addImageInitTransition(*image, subresources, clearLayout,
@ -1086,7 +1078,6 @@ namespace dxvk {
m_cmd->track(image, DxvkAccess::Write);
}
}
void DxvkContext::initSparseImage(
@ -6761,7 +6752,7 @@ namespace dxvk {
if (srcLayout == dstLayout && srcStages == dstStages)
return;
if (srcLayout == VK_IMAGE_LAYOUT_UNDEFINED || srcLayout == VK_IMAGE_LAYOUT_PREINITIALIZED)
if (srcLayout == VK_IMAGE_LAYOUT_UNDEFINED)
image.trackInitialization(subresources);
auto& barrier = m_imageLayoutTransitions.emplace_back();
@ -6865,7 +6856,7 @@ namespace dxvk {
VkAccessFlags2 dstAccess) {
auto& batch = getBarrierBatch(cmdBuffer);
if (srcLayout == VK_IMAGE_LAYOUT_UNDEFINED || srcLayout == VK_IMAGE_LAYOUT_PREINITIALIZED)
if (srcLayout == VK_IMAGE_LAYOUT_UNDEFINED)
image.trackInitialization(subresources);
VkImageMemoryBarrier2 barrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2 };

View file

@ -898,12 +898,10 @@ namespace dxvk {
* Only safe to call if the image is not in use by the GPU.
* \param [in] image The image to initialize
* \param [in] subresources Image subresources
* \param [in] initialLayout Initial image layout
*/
void initImage(
const Rc<DxvkImage>& image,
const VkImageSubresourceRange& subresources,
VkImageLayout initialLayout);
const VkImageSubresourceRange& subresources);
/**
* \brief Initializes sparse image

View file

@ -296,7 +296,7 @@ namespace dxvk {
info.tiling = m_info.tiling;
info.usage = m_info.usage | usageInfo.usage;
info.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
info.initialLayout = m_info.initialLayout;
info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
return info;
}

View file

@ -52,9 +52,6 @@ namespace dxvk {
/// Common image layout
VkImageLayout layout = VK_IMAGE_LAYOUT_UNDEFINED;
// Initial image layout
VkImageLayout initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
// Image is used by multiple contexts so it needs
// to be in its default layout after each submission
VkBool32 shared = VK_FALSE;
@ -585,8 +582,8 @@ namespace dxvk {
/**
* \brief Tracks subresource initialization
*
* Initialization happens when transitioning the image
* away from \c PREINITIALIZED or \c UNDEFINED layouts.
* Initialization happens when transitioning
* the image away from \c UNDEFINED layouts.
* \param [in] subresources Subresource range
*/
void trackInitialization(

View file

@ -366,7 +366,6 @@ namespace dxvk {
imageInfo.access = VK_ACCESS_2_TRANSFER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT;
imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
imageInfo.layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
m_gammaImage = m_device->createImage(imageInfo,
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);

View file

@ -347,7 +347,6 @@ namespace dxvk::hud {
| VK_ACCESS_SHADER_READ_BIT;
fontTextureInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
fontTextureInfo.layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
fontTextureInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
m_fontTexture = m_device->createImage(fontTextureInfo, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);