mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
implement vkCmdBindVertexBuffers and vkFreeDescriptorSets
This commit is contained in:
@@ -176,6 +176,7 @@ enum VulkanChunkType
|
||||
BIND_CB_STATE,
|
||||
BIND_DS_STATE,
|
||||
BIND_DESCRIPTOR_SET,
|
||||
BIND_VERTEX_BUFFERS,
|
||||
BIND_INDEX_BUFFER,
|
||||
COPY_BUF2IMG,
|
||||
COPY_IMG2BUF,
|
||||
|
||||
@@ -109,6 +109,7 @@ const char *VkChunkNames[] =
|
||||
"vkCmdBindDynamicColorBlendState",
|
||||
"vkCmdBindDynamicDepthStencilState",
|
||||
"vkCmdBindDescriptorSet",
|
||||
"vkCmdBindVertexBuffers",
|
||||
"vkCmdBindIndexBuffer",
|
||||
"vkCmdCopyBufferToImage",
|
||||
"vkCmdCopyImageToBuffer",
|
||||
@@ -3127,6 +3128,32 @@ VkResult WrappedVulkan::vkAllocDescriptorSets(
|
||||
return ret;
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkFreeDescriptorSets(
|
||||
VkDevice device,
|
||||
VkDescriptorPool descriptorPool,
|
||||
uint32_t count,
|
||||
const VkDescriptorSet* pDescriptorSets)
|
||||
{
|
||||
VkResult ret = m_Real.vkFreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
|
||||
|
||||
if(ret == VK_SUCCESS)
|
||||
{
|
||||
for(uint32_t i=0; i < count; i++)
|
||||
{
|
||||
VkResource res = MakeRes(pDescriptorSets[i]);
|
||||
ResourceId id = GetResourceManager()->GetID(res);
|
||||
|
||||
GetResourceManager()->MarkCleanResource(id);
|
||||
VkResourceRecord *record = GetResourceManager()->GetResourceRecord(id);
|
||||
if(record)
|
||||
record->Delete(GetResourceManager());
|
||||
GetResourceManager()->UnregisterResource(res);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool WrappedVulkan::Serialise_vkUpdateDescriptorSets(
|
||||
VkDevice device,
|
||||
uint32_t writeCount,
|
||||
@@ -3779,6 +3806,71 @@ void WrappedVulkan::vkCmdBindDynamicDepthStencilState(
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedVulkan::Serialise_vkCmdBindVertexBuffers(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
uint32_t startBinding,
|
||||
uint32_t bindingCount,
|
||||
const VkBuffer* pBuffers,
|
||||
const VkDeviceSize* pOffsets)
|
||||
{
|
||||
SERIALISE_ELEMENT(ResourceId, cmdid, GetResourceManager()->GetID(MakeRes(cmdBuffer)));
|
||||
SERIALISE_ELEMENT(uint32_t, start, startBinding);
|
||||
SERIALISE_ELEMENT(uint32_t, count, bindingCount);
|
||||
|
||||
vector<VkBuffer> bufs;
|
||||
vector<VkDeviceSize> offs;
|
||||
|
||||
for(uint32_t i=0; i < count; i++)
|
||||
{
|
||||
ResourceId id;
|
||||
VkDeviceSize o;
|
||||
if(m_State >= WRITING)
|
||||
{
|
||||
id = GetResourceManager()->GetID(MakeRes(pBuffers[i]));
|
||||
o = pOffsets[i];
|
||||
}
|
||||
|
||||
m_pSerialiser->Serialise("pBuffers[]", id);
|
||||
m_pSerialiser->Serialise("pOffsets[]", o);
|
||||
|
||||
if(m_State < WRITING)
|
||||
{
|
||||
bufs.push_back((VkBuffer)GetResourceManager()->GetLiveResource(id).handle);
|
||||
offs.push_back(o);
|
||||
}
|
||||
}
|
||||
|
||||
if(m_State < WRITING)
|
||||
{
|
||||
cmdBuffer = (VkCmdBuffer)GetResourceManager()->GetLiveResource(cmdid).handle;
|
||||
|
||||
m_Real.vkCmdBindVertexBuffers(cmdBuffer, start, count, &bufs[0], &offs[0]);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedVulkan::vkCmdBindVertexBuffers(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
uint32_t startBinding,
|
||||
uint32_t bindingCount,
|
||||
const VkBuffer* pBuffers,
|
||||
const VkDeviceSize* pOffsets)
|
||||
{
|
||||
m_Real.vkCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
|
||||
|
||||
if(m_State >= WRITING)
|
||||
{
|
||||
VkResourceRecord *record = GetResourceManager()->GetResourceRecord(MakeRes(cmdBuffer));
|
||||
|
||||
SCOPED_SERIALISE_CONTEXT(BIND_VERTEX_BUFFERS);
|
||||
Serialise_vkCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool WrappedVulkan::Serialise_vkCmdBindIndexBuffer(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkBuffer buffer,
|
||||
@@ -6082,6 +6174,9 @@ void WrappedVulkan::ProcessChunk(uint64_t offset, VulkanChunkType context)
|
||||
case BIND_INDEX_BUFFER:
|
||||
Serialise_vkCmdBindIndexBuffer(VK_NULL_HANDLE, VK_NULL_HANDLE, 0, VK_INDEX_TYPE_MAX_ENUM);
|
||||
break;
|
||||
case BIND_VERTEX_BUFFERS:
|
||||
Serialise_vkCmdBindVertexBuffers(VK_NULL_HANDLE, 0, 0, NULL, NULL);
|
||||
break;
|
||||
case COPY_BUF2IMG:
|
||||
Serialise_vkCmdCopyBufferToImage(VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_MAX_ENUM, 0, NULL);
|
||||
break;
|
||||
|
||||
@@ -611,6 +611,12 @@ public:
|
||||
uint32_t copyCount,
|
||||
const VkCopyDescriptorSet* pDescriptorCopies));
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkFreeDescriptorSets(
|
||||
VkDevice device,
|
||||
VkDescriptorPool descriptorPool,
|
||||
uint32_t count,
|
||||
const VkDescriptorSet* pDescriptorSets));
|
||||
|
||||
// State object functions
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkCreateDynamicViewportState(
|
||||
@@ -726,6 +732,13 @@ public:
|
||||
VkDeviceSize offset,
|
||||
VkIndexType indexType));
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdBindVertexBuffers(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
uint32_t startBinding,
|
||||
uint32_t bindingCount,
|
||||
const VkBuffer* pBuffers,
|
||||
const VkDeviceSize* pOffsets));
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdDraw(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
uint32_t firstVertex,
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
HookInit(vkDestroyDescriptorPool); \
|
||||
HookInit(vkAllocDescriptorSets); \
|
||||
HookInit(vkUpdateDescriptorSets); \
|
||||
HookInit(vkFreeDescriptorSets); \
|
||||
HookInit(vkCreateDynamicViewportState); \
|
||||
HookInit(vkDestroyDynamicViewportState); \
|
||||
HookInit(vkCreateDynamicRasterState); \
|
||||
@@ -106,6 +107,7 @@
|
||||
HookInit(vkCmdBindDynamicColorBlendState); \
|
||||
HookInit(vkCmdBindDynamicDepthStencilState); \
|
||||
HookInit(vkCmdBindDescriptorSets); \
|
||||
HookInit(vkCmdBindVertexBuffers); \
|
||||
HookInit(vkCmdBindIndexBuffer); \
|
||||
HookInit(vkCmdDraw); \
|
||||
HookInit(vkCmdDrawIndirect); \
|
||||
@@ -201,6 +203,7 @@
|
||||
HookDefine2(VkResult, vkDestroyDescriptorPool, VkDevice, device, VkDescriptorPool, descriptorPool); \
|
||||
HookDefine7(VkResult, vkAllocDescriptorSets, VkDevice, device, VkDescriptorPool, descriptorPool, VkDescriptorSetUsage, setUsage, uint32_t, count, const VkDescriptorSetLayout*, pSetLayouts, VkDescriptorSet*, pDescriptorSets, uint32_t*, pCount); \
|
||||
HookDefine5(VkResult, vkUpdateDescriptorSets, VkDevice, device, uint32_t, writeCount, const VkWriteDescriptorSet*, pDescriptorWrites, uint32_t, copyCount, const VkCopyDescriptorSet*, pDescriptorCopies); \
|
||||
HookDefine4(VkResult, vkFreeDescriptorSets, VkDevice, device, VkDescriptorPool, descriptorPool, uint32_t, count, const VkDescriptorSet*, pDescriptorSets); \
|
||||
HookDefine3(VkResult, vkCreateDynamicViewportState, VkDevice, device, const VkDynamicViewportStateCreateInfo*, pCreateInfo, VkDynamicViewportState*, pState); \
|
||||
HookDefine2(VkResult, vkDestroyDynamicViewportState, VkDevice, device, VkDynamicViewportState, state); \
|
||||
HookDefine3(VkResult, vkCreateDynamicRasterState, VkDevice, device, const VkDynamicRasterStateCreateInfo*, pCreateInfo, VkDynamicRasterState*, pState); \
|
||||
@@ -224,6 +227,7 @@
|
||||
HookDefine2(void, vkCmdBindDynamicDepthStencilState, VkCmdBuffer, cmdBuffer, VkDynamicDepthStencilState, dynamicDepthStencilState); \
|
||||
HookDefine8(void, vkCmdBindDescriptorSets, VkCmdBuffer, cmdBuffer, VkPipelineBindPoint, pipelineBindPoint, VkPipelineLayout, layout, uint32_t, firstSet, uint32_t, setCount, const VkDescriptorSet*, pDescriptorSets, uint32_t, dynamicOffsetCount, const uint32_t*, pDynamicOffsets); \
|
||||
HookDefine4(void, vkCmdBindIndexBuffer, VkCmdBuffer, cmdBuffer, VkBuffer, buffer, VkDeviceSize, offset, VkIndexType, indexType); \
|
||||
HookDefine5(void, vkCmdBindVertexBuffers, VkCmdBuffer, cmdBuffer, uint32_t, startBinding, uint32_t, bindingCount, const VkBuffer*, pBuffers, const VkDeviceSize*, pOffsets); \
|
||||
HookDefine5(void, vkCmdDraw, VkCmdBuffer, cmdBuffer, uint32_t, firstVertex, uint32_t, vertexCount, uint32_t, firstInstance, uint32_t, instanceCount); \
|
||||
HookDefine6(void, vkCmdDrawIndexed, VkCmdBuffer, cmdBuffer, uint32_t, firstIndex, uint32_t, indexCount, int32_t, vertexOffset, uint32_t, firstInstance, uint32_t, instanceCount); \
|
||||
HookDefine5(void, vkCmdDrawIndirect, VkCmdBuffer, cmdBuffer, VkBuffer, buffer, VkDeviceSize, offset, uint32_t, count, uint32_t, stride); \
|
||||
|
||||
Reference in New Issue
Block a user