mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 21:10:42 +00:00
Pass through number of mips/layers in Vulkan image views
This commit is contained in:
@@ -79,6 +79,8 @@ struct VulkanPipelineState
|
||||
TextureSwizzle swizzle[4];
|
||||
uint32_t baseMip;
|
||||
uint32_t baseLayer;
|
||||
uint32_t numMip;
|
||||
uint32_t numLayer;
|
||||
|
||||
// buffers
|
||||
uint64_t offset;
|
||||
@@ -318,7 +320,7 @@ struct VulkanPipelineState
|
||||
|
||||
struct Attachment
|
||||
{
|
||||
Attachment() : baseMip(0), baseLayer(0)
|
||||
Attachment() : baseMip(0), baseLayer(0), numMip(1), numLayer(1)
|
||||
{
|
||||
swizzle[0] = eSwizzle_Red;
|
||||
swizzle[1] = eSwizzle_Green;
|
||||
@@ -332,6 +334,8 @@ struct VulkanPipelineState
|
||||
TextureSwizzle swizzle[4];
|
||||
uint32_t baseMip;
|
||||
uint32_t baseLayer;
|
||||
uint32_t numMip;
|
||||
uint32_t numLayer;
|
||||
};
|
||||
rdctype::array<Attachment> attachments;
|
||||
|
||||
|
||||
@@ -743,6 +743,8 @@ void Serialiser::Serialise(
|
||||
SerialisePODArray<4>("", el.swizzle);
|
||||
Serialise("", el.baseMip);
|
||||
Serialise("", el.baseLayer);
|
||||
Serialise("", el.numMip);
|
||||
Serialise("", el.numLayer);
|
||||
|
||||
Serialise("", el.offset);
|
||||
Serialise("", el.size);
|
||||
@@ -763,7 +765,7 @@ void Serialiser::Serialise(
|
||||
Serialise("", el.border);
|
||||
Serialise("", el.unnormalized);
|
||||
|
||||
SIZE_CHECK(VulkanPipelineState::Pipeline::DescriptorSet::DescriptorBinding::BindingElement, 320);
|
||||
SIZE_CHECK(VulkanPipelineState::Pipeline::DescriptorSet::DescriptorBinding::BindingElement, 328);
|
||||
};
|
||||
|
||||
template <>
|
||||
@@ -891,6 +893,24 @@ void Serialiser::Serialise(const char *name, VulkanPipelineState::ColorBlend &el
|
||||
SIZE_CHECK(VulkanPipelineState::ColorBlend, 64);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name,
|
||||
VulkanPipelineState::CurrentPass::Framebuffer::Attachment &el)
|
||||
{
|
||||
Serialise("", el.view);
|
||||
Serialise("", el.img);
|
||||
|
||||
Serialise("", el.viewfmt);
|
||||
SerialisePODArray<4>("", el.swizzle);
|
||||
|
||||
Serialise("", el.baseMip);
|
||||
Serialise("", el.baseLayer);
|
||||
Serialise("", el.numMip);
|
||||
Serialise("", el.numLayer);
|
||||
|
||||
SIZE_CHECK(VulkanPipelineState::CurrentPass::Framebuffer::Attachment, 104);
|
||||
}
|
||||
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VulkanPipelineState::DepthStencil &el)
|
||||
{
|
||||
@@ -1599,12 +1619,6 @@ string ToStrHelper<false, VulkanPipelineState::ViewState::ViewportScissor>::Get(
|
||||
return "<...>";
|
||||
}
|
||||
template <>
|
||||
string ToStrHelper<false, VulkanPipelineState::CurrentPass::Framebuffer::Attachment>::Get(
|
||||
const VulkanPipelineState::CurrentPass::Framebuffer::Attachment &el)
|
||||
{
|
||||
return "<...>";
|
||||
}
|
||||
template <>
|
||||
string ToStrHelper<false, EventUsage>::Get(const EventUsage &el)
|
||||
{
|
||||
return "<...>";
|
||||
|
||||
@@ -543,6 +543,12 @@ void VulkanCreationInfo::ImageView::Init(VulkanResourceManager *resourceMan, Vul
|
||||
format = pCreateInfo->format;
|
||||
range = pCreateInfo->subresourceRange;
|
||||
|
||||
if(range.levelCount == VK_REMAINING_MIP_LEVELS)
|
||||
range.levelCount = info.m_Image[image].mipLevels - range.baseMipLevel;
|
||||
|
||||
if(range.layerCount == VK_REMAINING_ARRAY_LAYERS)
|
||||
range.layerCount = info.m_Image[image].arrayLayers - range.baseArrayLayer;
|
||||
|
||||
swizzle[0] = Convert(pCreateInfo->components.r, 0);
|
||||
swizzle[1] = Convert(pCreateInfo->components.g, 1);
|
||||
swizzle[2] = Convert(pCreateInfo->components.b, 2);
|
||||
|
||||
@@ -3396,6 +3396,10 @@ void VulkanReplay::SavePipelineState()
|
||||
c.m_ImageView[viewid].range.baseMipLevel;
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].baseLayer =
|
||||
c.m_ImageView[viewid].range.baseArrayLayer;
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].numMip =
|
||||
c.m_ImageView[viewid].range.levelCount;
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].numLayer =
|
||||
c.m_ImageView[viewid].range.layerCount;
|
||||
|
||||
memcpy(m_VulkanPipelineState.Pass.framebuffer.attachments[i].swizzle,
|
||||
c.m_ImageView[viewid].swizzle, sizeof(TextureSwizzle) * 4);
|
||||
@@ -3407,6 +3411,8 @@ void VulkanReplay::SavePipelineState()
|
||||
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].baseMip = 0;
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].baseLayer = 0;
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].numMip = 1;
|
||||
m_VulkanPipelineState.Pass.framebuffer.attachments[i].numLayer = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3575,6 +3581,8 @@ void VulkanReplay::SavePipelineState()
|
||||
sizeof(TextureSwizzle) * 4);
|
||||
dst.bindings[b].binds[a].baseMip = c.m_ImageView[viewid].range.baseMipLevel;
|
||||
dst.bindings[b].binds[a].baseLayer = c.m_ImageView[viewid].range.baseArrayLayer;
|
||||
dst.bindings[b].binds[a].numMip = c.m_ImageView[viewid].range.levelCount;
|
||||
dst.bindings[b].binds[a].numLayer = c.m_ImageView[viewid].range.layerCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3582,6 +3590,8 @@ void VulkanReplay::SavePipelineState()
|
||||
dst.bindings[b].binds[a].res = ResourceId();
|
||||
dst.bindings[b].binds[a].baseMip = 0;
|
||||
dst.bindings[b].binds[a].baseLayer = 0;
|
||||
dst.bindings[b].binds[a].numMip = 1;
|
||||
dst.bindings[b].binds[a].numLayer = 1;
|
||||
}
|
||||
}
|
||||
if(layoutBind.descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER ||
|
||||
|
||||
@@ -1090,7 +1090,7 @@ namespace renderdocui.Code
|
||||
var ret = new BoundResource();
|
||||
ret.Id = fb.attachments[rp.depthstencilAttachment].img;
|
||||
ret.HighestMip = (int)fb.attachments[rp.depthstencilAttachment].baseMip;
|
||||
ret.FirstSlice = (int)fb.attachments[rp.depthstencilAttachment].baseArray;
|
||||
ret.FirstSlice = (int)fb.attachments[rp.depthstencilAttachment].baseLayer;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1151,7 +1151,7 @@ namespace renderdocui.Code
|
||||
{
|
||||
ret[i].Id = fb.attachments[rp.colorAttachments[i]].img;
|
||||
ret[i].HighestMip = (int)fb.attachments[rp.colorAttachments[i]].baseMip;
|
||||
ret[i].FirstSlice = (int)fb.attachments[rp.colorAttachments[i]].baseArray;
|
||||
ret[i].FirstSlice = (int)fb.attachments[rp.colorAttachments[i]].baseLayer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -69,6 +69,8 @@ namespace renderdoc
|
||||
|
||||
public UInt32 baseMip;
|
||||
public UInt32 baseLayer;
|
||||
public UInt32 numMip;
|
||||
public UInt32 numLayer;
|
||||
|
||||
public UInt64 offset;
|
||||
public UInt64 size;
|
||||
@@ -383,7 +385,9 @@ namespace renderdoc
|
||||
public TextureSwizzle[] swizzle;
|
||||
|
||||
public UInt32 baseMip;
|
||||
public UInt32 baseArray;
|
||||
public UInt32 baseLayer;
|
||||
public UInt32 numMip;
|
||||
public UInt32 numLayer;
|
||||
};
|
||||
[CustomMarshalAs(CustomUnmanagedType.TemplatedArray)]
|
||||
public Attachment[] attachments;
|
||||
|
||||
Reference in New Issue
Block a user