mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-26 17:31:42 +00:00
Add support for VK_AMD_buffer_marker extension
This commit is contained in:
@@ -471,6 +471,7 @@ enum class VulkanChunk : uint32_t
|
||||
vkUpdateDescriptorSetWithTemplateKHR,
|
||||
vkBindBufferMemory2KHR,
|
||||
vkBindImageMemory2KHR,
|
||||
vkCmdWriteBufferMarkerAMD,
|
||||
Max,
|
||||
};
|
||||
|
||||
|
||||
@@ -509,6 +509,9 @@ bool operator<(const VkExtensionProperties &a, const VkExtensionProperties &b)
|
||||
|
||||
// This list must be kept sorted according to the above sort operator!
|
||||
static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_AMD_BUFFER_MARKER_EXTENSION_NAME, VK_AMD_BUFFER_MARKER_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_GCN_SHADER_EXTENSION_NAME, VK_AMD_GCN_SHADER_SPEC_VERSION,
|
||||
},
|
||||
@@ -2301,6 +2304,11 @@ bool WrappedVulkan::ProcessChunk(ReadSerialiser &ser, VulkanChunk chunk)
|
||||
return Serialise_vkBindImageMemory2KHR(ser, VK_NULL_HANDLE, 0, NULL);
|
||||
break;
|
||||
|
||||
case VulkanChunk::vkCmdWriteBufferMarkerAMD:
|
||||
return Serialise_vkCmdWriteBufferMarkerAMD(
|
||||
ser, VK_NULL_HANDLE, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_NULL_HANDLE, 0, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
SystemChunk system = (SystemChunk)chunk;
|
||||
|
||||
@@ -1694,4 +1694,8 @@ public:
|
||||
void vkGetDescriptorSetLayoutSupportKHR(VkDevice device,
|
||||
const VkDescriptorSetLayoutCreateInfo *pCreateInfo,
|
||||
VkDescriptorSetLayoutSupport *pSupport);
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdWriteBufferMarkerAMD, VkCommandBuffer commandBuffer,
|
||||
VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer,
|
||||
VkDeviceSize dstOffset, uint32_t marker);
|
||||
};
|
||||
|
||||
@@ -323,7 +323,8 @@
|
||||
CheckExt(KHR_descriptor_update_template, VK11); \
|
||||
CheckExt(KHR_bind_memory2, VK11); \
|
||||
CheckExt(EXT_conservative_rasterization, VKXX); \
|
||||
CheckExt(EXT_global_priority, VKXX);
|
||||
CheckExt(EXT_global_priority, VKXX); \
|
||||
CheckExt(AMD_buffer_marker, VKXX);
|
||||
|
||||
#define HookInitVulkanInstanceExts() \
|
||||
HookInitExtension(KHR_surface, DestroySurfaceKHR); \
|
||||
@@ -397,6 +398,7 @@
|
||||
HookInitExtension(KHR_bind_memory2, BindBufferMemory2KHR); \
|
||||
HookInitExtension(KHR_bind_memory2, BindImageMemory2KHR); \
|
||||
HookInitExtension(KHR_maintenance3, GetDescriptorSetLayoutSupportKHR); \
|
||||
HookInitExtension(AMD_buffer_marker, CmdWriteBufferMarkerAMD); \
|
||||
HookInitDevice_PlatformSpecific()
|
||||
|
||||
#define DefineHooks() \
|
||||
@@ -840,6 +842,9 @@
|
||||
HookDefine3(void, vkGetDescriptorSetLayoutSupportKHR, VkDevice, device, \
|
||||
const VkDescriptorSetLayoutCreateInfo *, pCreateInfo, \
|
||||
VkDescriptorSetLayoutSupport *, pSupport); \
|
||||
HookDefine5(void, vkCmdWriteBufferMarkerAMD, VkCommandBuffer, commandBuffer, \
|
||||
VkPipelineStageFlagBits, pipelineStage, VkBuffer, dstBuffer, VkDeviceSize, \
|
||||
dstOffset, uint32_t, marker); \
|
||||
HookDefine_PlatformSpecific()
|
||||
|
||||
struct VkLayerInstanceDispatchTableExtended : VkLayerInstanceDispatchTable
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
template <>
|
||||
std::string DoStringise(const VulkanChunk &el)
|
||||
{
|
||||
RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1104, "Chunks changed without updating names");
|
||||
RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1105, "Chunks changed without updating names");
|
||||
|
||||
BEGIN_ENUM_STRINGISE(VulkanChunk)
|
||||
{
|
||||
@@ -136,6 +136,7 @@ std::string DoStringise(const VulkanChunk &el)
|
||||
STRINGISE_ENUM_CLASS(vkUpdateDescriptorSetWithTemplateKHR);
|
||||
STRINGISE_ENUM_CLASS(vkBindBufferMemory2KHR);
|
||||
STRINGISE_ENUM_CLASS(vkBindImageMemory2KHR);
|
||||
STRINGISE_ENUM_CLASS(vkCmdWriteBufferMarkerAMD);
|
||||
STRINGISE_ENUM_CLASS_NAMED(Max, "Max Chunk");
|
||||
}
|
||||
END_ENUM_STRINGISE()
|
||||
|
||||
@@ -3504,6 +3504,81 @@ void WrappedVulkan::vkCmdPushDescriptorSetWithTemplateKHR(
|
||||
}
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
bool WrappedVulkan::Serialise_vkCmdWriteBufferMarkerAMD(SerialiserType &ser,
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkPipelineStageFlagBits pipelineStage,
|
||||
VkBuffer dstBuffer, VkDeviceSize dstOffset,
|
||||
uint32_t marker)
|
||||
{
|
||||
SERIALISE_ELEMENT(commandBuffer);
|
||||
SERIALISE_ELEMENT(pipelineStage);
|
||||
SERIALISE_ELEMENT(dstBuffer);
|
||||
SERIALISE_ELEMENT(dstOffset);
|
||||
SERIALISE_ELEMENT(marker);
|
||||
|
||||
Serialise_DebugMessages(ser);
|
||||
|
||||
SERIALISE_CHECK_READ_ERRORS();
|
||||
|
||||
if(IsReplayingAndReading())
|
||||
{
|
||||
m_LastCmdBufferID = GetResourceManager()->GetOriginalID(GetResID(commandBuffer));
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
else
|
||||
commandBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
if(commandBuffer != VK_NULL_HANDLE)
|
||||
{
|
||||
ObjDisp(commandBuffer)
|
||||
->CmdWriteBufferMarkerAMD(Unwrap(commandBuffer), pipelineStage, Unwrap(dstBuffer),
|
||||
dstOffset, marker);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedVulkan::vkCmdWriteBufferMarkerAMD(VkCommandBuffer commandBuffer,
|
||||
VkPipelineStageFlagBits pipelineStage,
|
||||
VkBuffer dstBuffer, VkDeviceSize dstOffset,
|
||||
uint32_t marker)
|
||||
{
|
||||
SCOPED_DBG_SINK();
|
||||
|
||||
SERIALISE_TIME_CALL(ObjDisp(commandBuffer)
|
||||
->CmdWriteBufferMarkerAMD(Unwrap(commandBuffer), pipelineStage,
|
||||
Unwrap(dstBuffer), dstOffset, marker));
|
||||
|
||||
if(IsCaptureMode(m_State))
|
||||
{
|
||||
VkResourceRecord *record = GetRecord(commandBuffer);
|
||||
|
||||
CACHE_THREAD_SERIALISER();
|
||||
|
||||
SCOPED_SERIALISE_CHUNK(VulkanChunk::vkCmdWriteBufferMarkerAMD);
|
||||
Serialise_vkCmdWriteBufferMarkerAMD(ser, commandBuffer, pipelineStage, dstBuffer, dstOffset,
|
||||
marker);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
|
||||
VkResourceRecord *buf = GetRecord(dstBuffer);
|
||||
|
||||
// mark buffer just as read, and memory behind as write & dirtied
|
||||
record->MarkResourceFrameReferenced(buf->GetResourceID(), eFrameRef_Read);
|
||||
record->MarkResourceFrameReferenced(buf->baseResource, eFrameRef_Write);
|
||||
if(buf->baseResource != ResourceId())
|
||||
record->cmdInfo->dirtied.insert(buf->baseResource);
|
||||
if(buf->sparseInfo)
|
||||
record->cmdInfo->sparse.insert(buf->sparseInfo);
|
||||
}
|
||||
}
|
||||
|
||||
INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateCommandPool, VkDevice device,
|
||||
const VkCommandPoolCreateInfo *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator, VkCommandPool *pCommandPool);
|
||||
@@ -3601,3 +3676,7 @@ INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdPushDescriptorSetWithTemplateKHR,
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkDescriptorUpdateTemplateKHR descriptorUpdateTemplate,
|
||||
VkPipelineLayout layout, uint32_t set, const void *pData);
|
||||
|
||||
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdWriteBufferMarkerAMD, VkCommandBuffer commandBuffer,
|
||||
VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer,
|
||||
VkDeviceSize dstOffset, uint32_t marker);
|
||||
Reference in New Issue
Block a user