mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-01 08:52:11 +01:00
[dxvk] Normalize render target layouts when binding framebuffer
No reason to use ATTACHMENT_OPTIMAL when the default layout is GENERAL.
This commit is contained in:
parent
f76fb75956
commit
af4ec3c63d
@ -50,19 +50,15 @@ namespace dxvk {
|
||||
}
|
||||
|
||||
VkImageLayout GetRenderLayout() const {
|
||||
if (m_view->image()->info().tiling == VK_IMAGE_TILING_OPTIMAL) {
|
||||
switch (m_desc.Flags & (D3D11_DSV_READ_ONLY_DEPTH | D3D11_DSV_READ_ONLY_STENCIL)) {
|
||||
default: // case 0
|
||||
return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
case D3D11_DSV_READ_ONLY_DEPTH:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR;
|
||||
case D3D11_DSV_READ_ONLY_STENCIL:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR;
|
||||
case D3D11_DSV_READ_ONLY_DEPTH | D3D11_DSV_READ_ONLY_STENCIL:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
} else {
|
||||
return VK_IMAGE_LAYOUT_GENERAL;
|
||||
switch (m_desc.Flags & (D3D11_DSV_READ_ONLY_DEPTH | D3D11_DSV_READ_ONLY_STENCIL)) {
|
||||
default: // case 0
|
||||
return VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
case D3D11_DSV_READ_ONLY_DEPTH:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR;
|
||||
case D3D11_DSV_READ_ONLY_STENCIL:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR;
|
||||
case D3D11_DSV_READ_ONLY_DEPTH | D3D11_DSV_READ_ONLY_STENCIL:
|
||||
return VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,9 +52,7 @@ namespace dxvk {
|
||||
}
|
||||
|
||||
VkImageLayout GetRenderLayout() const {
|
||||
return m_view->image()->info().tiling == VK_IMAGE_TILING_OPTIMAL
|
||||
? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
|
||||
: VK_IMAGE_LAYOUT_GENERAL;
|
||||
return VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
}
|
||||
|
||||
UINT GetSampleCount() const {
|
||||
|
@ -120,9 +120,16 @@ namespace dxvk {
|
||||
void bindRenderTargets(
|
||||
DxvkRenderTargets&& targets,
|
||||
VkImageAspectFlags feedbackLoop) {
|
||||
// Set up default render pass ops
|
||||
// Set up default render pass ops and normalize layouts
|
||||
m_state.om.renderTargets = std::move(targets);
|
||||
|
||||
for (uint32_t i = 0; i < MaxNumRenderTargets; i++) {
|
||||
auto& rt = m_state.om.renderTargets.color[i];
|
||||
|
||||
if (rt.view)
|
||||
rt.layout = rt.view->pickLayout(rt.layout);
|
||||
}
|
||||
|
||||
if (unlikely(m_state.gp.state.om.feedbackLoop() != feedbackLoop)) {
|
||||
m_state.gp.state.om.setFeedbackLoop(feedbackLoop);
|
||||
m_flags.set(DxvkContextFlag::GpDirtyPipelineState);
|
||||
|
Loading…
x
Reference in New Issue
Block a user