mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-20 10:54:16 +01:00
[d3d9] Use ATTACHMENT_OPTIMAL layout for render targets
Significantly improves GPU-bound performance on RADV in a number of games.
This commit is contained in:
parent
1b97ca253f
commit
dcf4599c98
@ -401,7 +401,7 @@ namespace dxvk {
|
||||
}
|
||||
|
||||
|
||||
VkImageLayout D3D9CommonTexture::OptimizeLayout(VkImageUsageFlags Usage) {
|
||||
VkImageLayout D3D9CommonTexture::OptimizeLayout(VkImageUsageFlags Usage) const {
|
||||
const VkImageUsageFlags usageFlags = Usage;
|
||||
|
||||
// Filter out unnecessary flags. Transfer operations
|
||||
@ -409,6 +409,11 @@ namespace dxvk {
|
||||
Usage &= ~(VK_IMAGE_USAGE_TRANSFER_DST_BIT
|
||||
| VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
|
||||
|
||||
// Ignore sampled bit in case the image was created with
|
||||
// an image flag that only allows attachment usage
|
||||
if (m_desc.IsAttachmentOnly)
|
||||
Usage &= ~VK_IMAGE_USAGE_SAMPLED_BIT;
|
||||
|
||||
// If the image is used only as an attachment, we never
|
||||
// have to transform the image back to a different layout
|
||||
if (Usage == VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
|
||||
|
@ -43,6 +43,7 @@ namespace dxvk {
|
||||
D3DMULTISAMPLE_TYPE MultiSample;
|
||||
DWORD MultisampleQuality;
|
||||
BOOL IsBackBuffer;
|
||||
BOOL IsAttachmentOnly;
|
||||
};
|
||||
|
||||
struct D3D9ColorView {
|
||||
@ -473,6 +474,9 @@ namespace dxvk {
|
||||
return D3D9_COMMON_TEXTURE_MAP_MODE_BACKED;
|
||||
}
|
||||
|
||||
VkImageLayout OptimizeLayout(
|
||||
VkImageUsageFlags Usage) const;
|
||||
|
||||
static VkImageType GetImageTypeFromResourceType(
|
||||
D3DRESOURCETYPE Dimension);
|
||||
|
||||
@ -480,9 +484,6 @@ namespace dxvk {
|
||||
D3DRESOURCETYPE Dimension,
|
||||
UINT Layer);
|
||||
|
||||
static VkImageLayout OptimizeLayout(
|
||||
VkImageUsageFlags Usage);
|
||||
|
||||
static constexpr UINT AllLayers = UINT32_MAX;
|
||||
|
||||
};
|
||||
|
@ -394,6 +394,7 @@ namespace dxvk {
|
||||
desc.MultiSample = D3DMULTISAMPLE_NONE;
|
||||
desc.MultisampleQuality = 0;
|
||||
desc.IsBackBuffer = FALSE;
|
||||
desc.IsAttachmentOnly = FALSE;
|
||||
|
||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
||||
return D3DERR_INVALIDCALL;
|
||||
@ -449,6 +450,7 @@ namespace dxvk {
|
||||
desc.MultiSample = D3DMULTISAMPLE_NONE;
|
||||
desc.MultisampleQuality = 0;
|
||||
desc.IsBackBuffer = FALSE;
|
||||
desc.IsAttachmentOnly = FALSE;
|
||||
|
||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
||||
return D3DERR_INVALIDCALL;
|
||||
@ -494,6 +496,7 @@ namespace dxvk {
|
||||
desc.MultiSample = D3DMULTISAMPLE_NONE;
|
||||
desc.MultisampleQuality = 0;
|
||||
desc.IsBackBuffer = FALSE;
|
||||
desc.IsAttachmentOnly = FALSE;
|
||||
|
||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
||||
return D3DERR_INVALIDCALL;
|
||||
@ -3381,6 +3384,7 @@ namespace dxvk {
|
||||
desc.MultiSample = MultiSample;
|
||||
desc.MultisampleQuality = MultisampleQuality;
|
||||
desc.IsBackBuffer = FALSE;
|
||||
desc.IsAttachmentOnly = TRUE;
|
||||
|
||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
||||
return D3DERR_INVALIDCALL;
|
||||
@ -3425,6 +3429,7 @@ namespace dxvk {
|
||||
desc.MultiSample = D3DMULTISAMPLE_NONE;
|
||||
desc.MultisampleQuality = 0;
|
||||
desc.IsBackBuffer = FALSE;
|
||||
desc.IsAttachmentOnly = Pool == D3DPOOL_DEFAULT;
|
||||
|
||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
||||
return D3DERR_INVALIDCALL;
|
||||
@ -3471,6 +3476,7 @@ namespace dxvk {
|
||||
desc.MultiSample = MultiSample;
|
||||
desc.MultisampleQuality = MultisampleQuality;
|
||||
desc.IsBackBuffer = FALSE;
|
||||
desc.IsAttachmentOnly = TRUE;
|
||||
|
||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
||||
return D3DERR_INVALIDCALL;
|
||||
@ -6953,6 +6959,7 @@ namespace dxvk {
|
||||
desc.MultiSample = pPresentationParameters->MultiSampleType;
|
||||
desc.MultisampleQuality = pPresentationParameters->MultiSampleQuality;
|
||||
desc.IsBackBuffer = FALSE;
|
||||
desc.IsAttachmentOnly = TRUE;
|
||||
|
||||
if (FAILED(D3D9CommonTexture::NormalizeTextureProperties(this, &desc)))
|
||||
return D3DERR_NOTAVAILABLE;
|
||||
|
@ -1070,6 +1070,7 @@ namespace dxvk {
|
||||
desc.Usage = D3DUSAGE_RENDERTARGET;
|
||||
desc.Discard = FALSE;
|
||||
desc.IsBackBuffer = TRUE;
|
||||
desc.IsAttachmentOnly = FALSE;
|
||||
|
||||
for (uint32_t i = 0; i < m_backBuffers.size(); i++)
|
||||
m_backBuffers[i] = new D3D9Surface(m_parent, &desc, this);
|
||||
|
Loading…
x
Reference in New Issue
Block a user