Add support for VK_AMD_buffer_marker extension

This commit is contained in:
baldurk
2018-04-25 19:10:58 +01:00
parent 6ba2045e27
commit 168d98bbde
6 changed files with 100 additions and 2 deletions
+1
View File
@@ -471,6 +471,7 @@ enum class VulkanChunk : uint32_t
vkUpdateDescriptorSetWithTemplateKHR,
vkBindBufferMemory2KHR,
vkBindImageMemory2KHR,
vkCmdWriteBufferMarkerAMD,
Max,
};
+8
View File
@@ -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;
+4
View File
@@ -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);
};
+6 -1
View File
@@ -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
+2 -1
View File
@@ -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);