Fetch image for attachment view, use in 'fake' d3d11 pipe state

This commit is contained in:
baldurk
2016-02-07 18:41:25 +01:00
parent f43051a1ca
commit eb66032a49
5 changed files with 36 additions and 14 deletions
+1
View File
@@ -250,6 +250,7 @@ struct VulkanPipelineState
struct Attachment
{
ResourceId view;
ResourceId img;
// VKTODOLOW need layout here?
};
rdctype::array<Attachment> attachments;
+5
View File
@@ -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);
+8
View File
@@ -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);
+19 -14
View File
@@ -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)