@@ -3893,6 +3893,94 @@ void WrappedVulkan::vkCmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer
3893
3893
}
3894
3894
}
3895
3895
3896
+ template <typename SerialiserType>
3897
+ bool WrappedVulkan::Serialise_vkCmdBindIndexBuffer2KHR(SerialiserType &ser,
3898
+ VkCommandBuffer commandBuffer,
3899
+ VkBuffer buffer, VkDeviceSize offset,
3900
+ VkDeviceSize size, VkIndexType indexType)
3901
+ {
3902
+ SERIALISE_ELEMENT(commandBuffer);
3903
+ SERIALISE_ELEMENT(buffer).Important();
3904
+ SERIALISE_ELEMENT(offset).OffsetOrSize();
3905
+ SERIALISE_ELEMENT(size).OffsetOrSize();
3906
+ SERIALISE_ELEMENT(indexType).Important();
3907
+
3908
+ Serialise_DebugMessages(ser);
3909
+
3910
+ SERIALISE_CHECK_READ_ERRORS();
3911
+
3912
+ if(IsReplayingAndReading())
3913
+ {
3914
+ m_LastCmdBufferID = GetResourceManager()->GetOriginalID(GetResID(commandBuffer));
3915
+
3916
+ if(IsActiveReplaying(m_State))
3917
+ {
3918
+ if(InRerecordRange(m_LastCmdBufferID))
3919
+ {
3920
+ commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
3921
+ ObjDisp(commandBuffer)
3922
+ ->CmdBindIndexBuffer2KHR(Unwrap(commandBuffer), Unwrap(buffer), offset, size, indexType);
3923
+
3924
+ {
3925
+ VulkanRenderState &renderstate = GetCmdRenderState();
3926
+ renderstate.ibuffer.buf = GetResID(buffer);
3927
+ renderstate.ibuffer.offs = offset;
3928
+ renderstate.ibuffer.size = size;
3929
+
3930
+ if(indexType == VK_INDEX_TYPE_UINT32)
3931
+ renderstate.ibuffer.bytewidth = 4;
3932
+ else if(indexType == VK_INDEX_TYPE_UINT8_KHR)
3933
+ renderstate.ibuffer.bytewidth = 1;
3934
+ else
3935
+ renderstate.ibuffer.bytewidth = 2;
3936
+ }
3937
+ }
3938
+ }
3939
+ else
3940
+ {
3941
+ // track while reading, as we need to bind current topology & index byte width in AddAction
3942
+ if(indexType == VK_INDEX_TYPE_UINT32)
3943
+ m_BakedCmdBufferInfo[m_LastCmdBufferID].state.ibuffer.bytewidth = 4;
3944
+ else if(indexType == VK_INDEX_TYPE_UINT8_KHR)
3945
+ m_BakedCmdBufferInfo[m_LastCmdBufferID].state.ibuffer.bytewidth = 1;
3946
+ else
3947
+ m_BakedCmdBufferInfo[m_LastCmdBufferID].state.ibuffer.bytewidth = 2;
3948
+
3949
+ // track while reading, as we need to track resource usage
3950
+ m_BakedCmdBufferInfo[m_LastCmdBufferID].state.ibuffer.buf = GetResID(buffer);
3951
+
3952
+ ObjDisp(commandBuffer)
3953
+ ->CmdBindIndexBuffer2KHR(Unwrap(commandBuffer), Unwrap(buffer), offset, size, indexType);
3954
+ }
3955
+ }
3956
+
3957
+ return true;
3958
+ }
3959
+
3960
+ void WrappedVulkan::vkCmdBindIndexBuffer2KHR(VkCommandBuffer commandBuffer, VkBuffer buffer,
3961
+ VkDeviceSize offset, VkDeviceSize size,
3962
+ VkIndexType indexType)
3963
+ {
3964
+ SCOPED_DBG_SINK();
3965
+
3966
+ SERIALISE_TIME_CALL(
3967
+ ObjDisp(commandBuffer)
3968
+ ->CmdBindIndexBuffer2KHR(Unwrap(commandBuffer), Unwrap(buffer), offset, size, indexType));
3969
+
3970
+ if(IsCaptureMode(m_State))
3971
+ {
3972
+ VkResourceRecord *record = GetRecord(commandBuffer);
3973
+
3974
+ CACHE_THREAD_SERIALISER();
3975
+
3976
+ SCOPED_SERIALISE_CHUNK(VulkanChunk::vkCmdBindIndexBuffer2KHR);
3977
+ Serialise_vkCmdBindIndexBuffer2KHR(ser, commandBuffer, buffer, offset, size, indexType);
3978
+
3979
+ record->AddChunk(scope.Get(&record->cmdInfo->alloc));
3980
+ record->MarkBufferFrameReferenced(GetRecord(buffer), 0, VK_WHOLE_SIZE, eFrameRef_Read);
3981
+ }
3982
+ }
3983
+
3896
3984
template <typename SerialiserType>
3897
3985
bool WrappedVulkan::Serialise_vkCmdPushConstants(SerialiserType &ser, VkCommandBuffer commandBuffer,
3898
3986
VkPipelineLayout layout,
@@ -7733,3 +7821,7 @@ INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdBeginRendering, VkCommandBuffer comma
7733
7821
const VkRenderingInfo *pRenderingInfo);
7734
7822
7735
7823
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdEndRendering, VkCommandBuffer commandBuffer);
7824
+
7825
+ INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdBindIndexBuffer2KHR, VkCommandBuffer commandBuffer,
7826
+ VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size,
7827
+ VkIndexType indexType);
0 commit comments