mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-28 17:36:36 +00:00
Fetch image for attachment view, use in 'fake' d3d11 pipe state
This commit is contained in:
@@ -250,6 +250,7 @@ struct VulkanPipelineState
|
||||
struct Attachment
|
||||
{
|
||||
ResourceId view;
|
||||
ResourceId img;
|
||||
// VKTODOLOW need layout here?
|
||||
};
|
||||
rdctype::array<Attachment> attachments;
|
||||
|
||||
@@ -157,6 +157,11 @@ void VulkanCreationInfo::Framebuffer::Init(const VkFramebufferCreateInfo* pCreat
|
||||
attachments[i].view = VKMGR()->GetNonDispWrapper(pCreateInfo->pAttachments[i].view)->id;
|
||||
}
|
||||
|
||||
void VulkanCreationInfo::AttachmentView::Init(const VkAttachmentViewCreateInfo* pCreateInfo)
|
||||
{
|
||||
image = VKMGR()->GetNonDispWrapper(pCreateInfo->image)->id;
|
||||
}
|
||||
|
||||
void VulkanCreationInfo::DescSetLayout::Init(const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
|
||||
{
|
||||
bindings.resize(pCreateInfo->count);
|
||||
|
||||
@@ -166,6 +166,14 @@ struct VulkanCreationInfo
|
||||
};
|
||||
map<ResourceId, Framebuffer> m_Framebuffer;
|
||||
|
||||
struct AttachmentView
|
||||
{
|
||||
void Init(const VkAttachmentViewCreateInfo* pCreateInfo);
|
||||
|
||||
ResourceId image;
|
||||
};
|
||||
map<ResourceId, AttachmentView> m_AttachmentView;
|
||||
|
||||
struct DescSetLayout
|
||||
{
|
||||
void Init(const VkDescriptorSetLayoutCreateInfo* pCreateInfo);
|
||||
|
||||
@@ -1205,18 +1205,6 @@ void VulkanReplay::SavePipelineState()
|
||||
{
|
||||
VULKANNOTIMP("SavePipelineState");
|
||||
|
||||
{
|
||||
create_array_uninit(m_D3D11PipelineState.m_OM.RenderTargets, 1);
|
||||
|
||||
ResourceId id;
|
||||
VkImage fakeBBIm = VK_NULL_HANDLE;
|
||||
VkExtent3D fakeBBext;
|
||||
ResourceFormat fakeBBfmt;
|
||||
m_pDriver->GetFakeBB(id, fakeBBIm, fakeBBext, fakeBBfmt);
|
||||
|
||||
m_D3D11PipelineState.m_OM.RenderTargets[0].Resource = id;
|
||||
}
|
||||
|
||||
{
|
||||
const WrappedVulkan::PartialReplayData::StateVector &state = m_pDriver->m_PartialReplayData.state;
|
||||
VulkanCreationInfo &c = m_pDriver->m_CreationInfo;
|
||||
@@ -1480,8 +1468,10 @@ void VulkanReplay::SavePipelineState()
|
||||
create_array_uninit(m_VulkanPipelineState.Pass.framebuffer.attachments, c.m_Framebuffer[state.framebuffer].attachments.size());
|
||||
for(size_t i=0; i < c.m_Framebuffer[state.framebuffer].attachments.size(); i++)
|
||||
{
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].view =
|
||||
c.m_Framebuffer[state.framebuffer].attachments[i].view;
|
||||
ResourceId viewid = rm->GetOriginalID(c.m_Framebuffer[state.framebuffer].attachments[i].view);
|
||||
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].view = viewid;
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].img = rm->GetOriginalID(c.m_AttachmentView[viewid].image);
|
||||
}
|
||||
|
||||
m_VulkanPipelineState.Pass.renderArea.x = state.renderArea.offset.x;
|
||||
@@ -1490,6 +1480,21 @@ void VulkanReplay::SavePipelineState()
|
||||
m_VulkanPipelineState.Pass.renderArea.height = state.renderArea.extent.height;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
create_array_uninit(m_D3D11PipelineState.m_OM.RenderTargets, 1);
|
||||
|
||||
ResourceId id;
|
||||
VkImage fakeBBIm = VK_NULL_HANDLE;
|
||||
VkExtent3D fakeBBext;
|
||||
ResourceFormat fakeBBfmt;
|
||||
m_pDriver->GetFakeBB(id, fakeBBIm, fakeBBext, fakeBBfmt);
|
||||
|
||||
if(m_VulkanPipelineState.Pass.framebuffer.attachments.count > 0 && m_VulkanPipelineState.Pass.framebuffer.attachments[0].img != ResourceId())
|
||||
id = m_VulkanPipelineState.Pass.framebuffer.attachments[0].img;
|
||||
|
||||
m_D3D11PipelineState.m_OM.RenderTargets[0].Resource = id;
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanReplay::FillCBufferVariables(ResourceId shader, uint32_t cbufSlot, vector<ShaderVariable> &outvars, const vector<byte> &data)
|
||||
|
||||
@@ -807,6 +807,9 @@ bool WrappedVulkan::Serialise_vkCreateAttachmentView(
|
||||
device = GetResourceManager()->GetLiveHandle<VkDevice>(devId);
|
||||
VkAttachmentView view = VK_NULL_HANDLE;
|
||||
|
||||
// use original ID
|
||||
m_CreationInfo.m_AttachmentView[id].Init(&info);
|
||||
|
||||
VkResult ret = ObjDisp(device)->CreateAttachmentView(Unwrap(device), &info, &view);
|
||||
|
||||
if(ret != VK_SUCCESS)
|
||||
|
||||
Reference in New Issue
Block a user