implement vkCmdBindVertexBuffers and vkFreeDescriptorSets

This commit is contained in:
baldurk
2015-08-30 22:09:23 +02:00
parent 1b6c7d6c65
commit 2c34df1e64
4 changed files with 113 additions and 0 deletions
+1
View File
@@ -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,
+95
View File
@@ -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;
+13
View File
@@ -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); \