diff --git a/src/core/gpu_hw_d3d12.cpp b/src/core/gpu_hw_d3d12.cpp
index e39ead729..f09a9eda9 100644
--- a/src/core/gpu_hw_d3d12.cpp
+++ b/src/core/gpu_hw_d3d12.cpp
@@ -1043,14 +1043,14 @@ void GPU_HW_D3D12::UpdateVRAMReadTexture()
 {
   ID3D12GraphicsCommandList* cmdlist = g_d3d12_context->GetCommandList();
 
-  m_vram_texture.TransitionToState(D3D12_RESOURCE_STATE_COPY_SOURCE);
-  m_vram_read_texture.TransitionToState(D3D12_RESOURCE_STATE_COPY_DEST);
 
   const auto scaled_rect = m_vram_dirty_rect * m_resolution_scale;
 
   if (m_vram_texture.IsMultisampled())
   {
-    cmdlist->ResolveSubresource(m_vram_read_texture, 0, m_vram_texture, 0, DXGI_FORMAT_R8G8B8A8_UNORM);
+    m_vram_texture.TransitionToState(D3D12_RESOURCE_STATE_RESOLVE_SOURCE);
+    m_vram_read_texture.TransitionToState(D3D12_RESOURCE_STATE_RESOLVE_DEST);
+    cmdlist->ResolveSubresource(m_vram_read_texture, 0, m_vram_texture, 0, m_vram_texture.GetFormat());
   }
   else
   {
@@ -1058,6 +1058,8 @@ void GPU_HW_D3D12::UpdateVRAMReadTexture()
     const D3D12_TEXTURE_COPY_LOCATION dst = {m_vram_read_texture.GetResource(),
                                              D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX};
     const D3D12_BOX src_box = {scaled_rect.left, scaled_rect.top, 0u, scaled_rect.right, scaled_rect.bottom, 1u};
+    m_vram_texture.TransitionToState(D3D12_RESOURCE_STATE_COPY_SOURCE);
+    m_vram_read_texture.TransitionToState(D3D12_RESOURCE_STATE_COPY_DEST);
     cmdlist->CopyTextureRegion(&dst, scaled_rect.left, scaled_rect.top, 0, &src, &src_box);
   }