mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-16 20:47:12 +00:00
Pass through base mip/level for vulkan resources (also for GL textures)
This commit is contained in:
@@ -117,6 +117,7 @@ struct GLPipelineState
|
||||
}
|
||||
ResourceId Resource;
|
||||
uint32_t FirstSlice;
|
||||
uint32_t HighestMip;
|
||||
ShaderResourceType ResType;
|
||||
|
||||
TextureSwizzle Swizzle[4];
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -276,6 +276,7 @@ struct VulkanCreationInfo
|
||||
void Init(VulkanResourceManager *resourceMan, const VkImageViewCreateInfo* pCreateInfo);
|
||||
|
||||
ResourceId image;
|
||||
VkImageSubresourceRange range;
|
||||
};
|
||||
map<ResourceId, ImageView> m_ImageView;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user