Pass through base mip/level for vulkan resources (also for GL textures)

This commit is contained in:
baldurk
2015-11-22 13:57:43 +01:00
parent 534f9943f9
commit ebb9f05c75
8 changed files with 41 additions and 4 deletions
+1
View File
@@ -117,6 +117,7 @@ struct GLPipelineState
}
ResourceId Resource;
uint32_t FirstSlice;
uint32_t HighestMip;
ShaderResourceType ResType;
TextureSwizzle Swizzle[4];
+7
View File
@@ -50,6 +50,10 @@ struct VulkanPipelineState
ResourceId res; // buffer, image, attachment
ResourceId sampler;
// image views
uint32_t baseMip;
uint32_t baseLayer;
// buffers
uint64_t offset;
uint64_t size;
@@ -266,6 +270,9 @@ struct VulkanPipelineState
{
ResourceId view;
ResourceId img;
uint32_t baseMip;
uint32_t baseLayer;
};
rdctype::array<Attachment> attachments;
+6 -2
View File
@@ -1252,12 +1252,16 @@ void GLReplay::SavePipelineState()
else
{
// very bespoke/specific
GLint firstSlice = 0;
GLint firstSlice = 0, firstMip = 0;
if(target != eGL_TEXTURE_BUFFER)
gl.glGetTexParameteriv(target, eGL_TEXTURE_VIEW_MIN_LEVEL, &firstSlice);
{
gl.glGetTexParameteriv(target, eGL_TEXTURE_VIEW_MIN_LEVEL, &firstMip);
gl.glGetTexParameteriv(target, eGL_TEXTURE_VIEW_MIN_LAYER, &firstSlice);
}
pipe.Textures[unit].Resource = rm->GetOriginalID(rm->GetID(TextureRes(ctx, tex)));
pipe.Textures[unit].HighestMip = (uint32_t)firstMip;
pipe.Textures[unit].FirstSlice = (uint32_t)firstSlice;
pipe.Textures[unit].ResType = resType;
+1
View File
@@ -347,6 +347,7 @@ void VulkanCreationInfo::Sampler::Init(VulkanResourceManager *resourceMan, const
void VulkanCreationInfo::ImageView::Init(VulkanResourceManager *resourceMan, const VkImageViewCreateInfo* pCreateInfo)
{
image = resourceMan->GetNonDispWrapper(pCreateInfo->image)->id;
range = pCreateInfo->subresourceRange;
}
void VulkanCreationInfo::ShaderModule::Init(VulkanResourceManager *resourceMan, const VkShaderModuleCreateInfo* pCreateInfo)
+1
View File
@@ -276,6 +276,7 @@ struct VulkanCreationInfo
void Init(VulkanResourceManager *resourceMan, const VkImageViewCreateInfo* pCreateInfo);
ResourceId image;
VkImageSubresourceRange range;
};
map<ResourceId, ImageView> m_ImageView;
+18 -2
View File
@@ -2803,8 +2803,22 @@ void VulkanReplay::SavePipelineState()
{
ResourceId viewid = c.m_Framebuffer[state.framebuffer].attachments[i].view;
m_VulkanPipelineState.Pass.framebuffer.attachments[i].view = rm->GetOriginalID(viewid);
m_VulkanPipelineState.Pass.framebuffer.attachments[i].img = rm->GetOriginalID(c.m_ImageView[viewid].image);
if(viewid != ResourceId())
{
m_VulkanPipelineState.Pass.framebuffer.attachments[i].view = rm->GetOriginalID(viewid);
m_VulkanPipelineState.Pass.framebuffer.attachments[i].img = rm->GetOriginalID(c.m_ImageView[viewid].image);
m_VulkanPipelineState.Pass.framebuffer.attachments[i].baseMip = c.m_ImageView[viewid].range.baseMipLevel;
m_VulkanPipelineState.Pass.framebuffer.attachments[i].baseLayer = c.m_ImageView[viewid].range.baseArrayLayer;
}
else
{
m_VulkanPipelineState.Pass.framebuffer.attachments[i].view = ResourceId();
m_VulkanPipelineState.Pass.framebuffer.attachments[i].img = ResourceId();
m_VulkanPipelineState.Pass.framebuffer.attachments[i].baseMip = 0;
m_VulkanPipelineState.Pass.framebuffer.attachments[i].baseLayer = 0;
}
}
m_VulkanPipelineState.Pass.renderArea.x = state.renderArea.offset.x;
@@ -2917,6 +2931,8 @@ void VulkanReplay::SavePipelineState()
dst.bindings[b].binds[a].view = rm->GetOriginalID(viewid);
dst.bindings[b].binds[a].res = rm->GetOriginalID(c.m_ImageView[viewid].image);
dst.bindings[b].binds[a].baseMip = c.m_ImageView[viewid].range.baseMipLevel;
dst.bindings[b].binds[a].baseLayer = c.m_ImageView[viewid].range.baseArrayLayer;
}
if(layoutBind.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER ||
layoutBind.descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER)
+1
View File
@@ -132,6 +132,7 @@ namespace renderdoc
{
public ResourceId Resource;
public UInt32 FirstSlice;
public UInt32 HighestMip;
public ShaderResourceType ResType;
[CustomMarshalAs(CustomUnmanagedType.FixedArray, FixedLength = 4)]
public TextureSwizzle[] Swizzle;
@@ -56,6 +56,9 @@ namespace renderdoc
public ResourceId res;
public ResourceId sampler;
public UInt32 baseMip;
public UInt32 baseLayer;
public UInt64 offset;
public UInt64 size;
@@ -348,6 +351,9 @@ namespace renderdoc
{
public ResourceId view;
public ResourceId img;
public UInt32 baseMip;
public UInt32 baseArray;
};
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
public Attachment[] attachments;