Add stubbed functions and hooks for EXT_descriptor_buffer

This commit is contained in:
baldurk
2024-03-29 15:12:25 +00:00
parent 78862bfce7
commit 87927b4c7a
8 changed files with 226 additions and 3 deletions
+4
View File
@@ -1211,6 +1211,10 @@ enum class VulkanChunk : uint32_t
vkCmdTraceRaysIndirect2KHR,
vkCmdWriteAccelerationStructuresPropertiesKHR,
vkCmdBindIndexBuffer2KHR,
vkGetDescriptorEXT,
vkCmdBindDescriptorBuffersEXT,
vkCmdSetDescriptorBufferOffsetsEXT,
vkCmdBindDescriptorBufferEmbeddedSamplersEXT,
Max,
};
+10
View File
@@ -4379,6 +4379,16 @@ bool WrappedVulkan::ProcessChunk(ReadSerialiser &ser, VulkanChunk chunk)
return Serialise_vkCmdCopyMemoryToAccelerationStructureKHR(ser, VK_NULL_HANDLE, NULL);
case VulkanChunk::vkCreateAccelerationStructureKHR:
return Serialise_vkCreateAccelerationStructureKHR(ser, VK_NULL_HANDLE, NULL, NULL, NULL);
case VulkanChunk::vkGetDescriptorEXT:
return Serialise_vkGetDescriptorEXT(ser, VK_NULL_HANDLE, NULL, 0, NULL);
case VulkanChunk::vkCmdBindDescriptorBuffersEXT:
return Serialise_vkCmdBindDescriptorBuffersEXT(ser, VK_NULL_HANDLE, 0, NULL);
case VulkanChunk::vkCmdSetDescriptorBufferOffsetsEXT:
return Serialise_vkCmdSetDescriptorBufferOffsetsEXT(
ser, VK_NULL_HANDLE, VK_PIPELINE_BIND_POINT_MAX_ENUM, VK_NULL_HANDLE, 0, 0, NULL, NULL);
case VulkanChunk::vkCmdBindDescriptorBufferEmbeddedSamplersEXT:
return Serialise_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(
ser, VK_NULL_HANDLE, VK_PIPELINE_BIND_POINT_MAX_ENUM, VK_NULL_HANDLE, 0);
case VulkanChunk::vkCmdBindShadersEXT:
return Serialise_vkCmdBindShadersEXT(ser, VK_NULL_HANDLE, 0, NULL, NULL);
+31
View File
@@ -3054,4 +3054,35 @@ public:
void vkGetImageSubresourceLayout2EXT(VkDevice device, VkImage image,
const VkImageSubresource2 *pSubresource,
VkSubresourceLayout2 *pLayout);
// VK_EXT_descriptor_buffer
void vkGetDescriptorSetLayoutSizeEXT(VkDevice device, VkDescriptorSetLayout layout,
VkDeviceSize *pLayoutSizeInBytes);
void vkGetDescriptorSetLayoutBindingOffsetEXT(VkDevice device, VkDescriptorSetLayout layout,
uint32_t binding, VkDeviceSize *pOffset);
VkResult vkGetBufferOpaqueCaptureDescriptorDataEXT(VkDevice device,
const VkBufferCaptureDescriptorDataInfoEXT *pInfo,
void *pData);
VkResult vkGetImageOpaqueCaptureDescriptorDataEXT(VkDevice device,
const VkImageCaptureDescriptorDataInfoEXT *pInfo,
void *pData);
VkResult vkGetImageViewOpaqueCaptureDescriptorDataEXT(
VkDevice device, const VkImageViewCaptureDescriptorDataInfoEXT *pInfo, void *pData);
VkResult vkGetSamplerOpaqueCaptureDescriptorDataEXT(
VkDevice device, const VkSamplerCaptureDescriptorDataInfoEXT *pInfo, void *pData);
VkResult vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT(
VkDevice device, const VkAccelerationStructureCaptureDescriptorDataInfoEXT *pInfo, void *pData);
IMPLEMENT_FUNCTION_SERIALISED(void, vkGetDescriptorEXT, VkDevice device,
const VkDescriptorGetInfoEXT *pDescriptorInfo, size_t dataSize,
void *pDescriptor);
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdBindDescriptorBuffersEXT, VkCommandBuffer commandBuffer,
uint32_t bufferCount,
const VkDescriptorBufferBindingInfoEXT *pBindingInfos);
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdSetDescriptorBufferOffsetsEXT,
VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount,
const uint32_t *pBufferIndices, const VkDeviceSize *pOffsets);
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdBindDescriptorBufferEmbeddedSamplersEXT,
VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout, uint32_t set);
};
+38 -2
View File
@@ -548,7 +548,8 @@
DeclExt(KHR_ray_tracing_maintenance1); \
DeclExt(KHR_maintenance5); \
DeclExt(EXT_image_compression_control); \
DeclExt(EXT_image_compression_control_swapchain);
DeclExt(EXT_image_compression_control_swapchain); \
DeclExt(EXT_descriptor_buffer);
// for simplicity and since the check itself is platform agnostic,
// these aren't protected in platform defines
@@ -686,7 +687,8 @@
CheckExt(KHR_ray_tracing_maintenance1, VKXX); \
CheckExt(KHR_maintenance5, VKXX); \
CheckExt(EXT_image_compression_control, VKXX); \
CheckExt(EXT_image_compression_control_swapchain, VKXX);
CheckExt(EXT_image_compression_control_swapchain, VKXX); \
CheckExt(EXT_descriptor_buffer, VKXX);
#define HookInitVulkanInstanceExts_PhysDev() \
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
@@ -1058,6 +1060,17 @@
HookInitExtension(KHR_maintenance5, GetImageSubresourceLayout2KHR); \
HookInitExtension(KHR_maintenance5, GetRenderingAreaGranularityKHR); \
HookInitExtension(EXT_image_compression_control, GetImageSubresourceLayout2EXT); \
HookInitExtension(EXT_descriptor_buffer, CmdBindDescriptorBufferEmbeddedSamplersEXT); \
HookInitExtension(EXT_descriptor_buffer, CmdBindDescriptorBuffersEXT); \
HookInitExtension(EXT_descriptor_buffer, CmdSetDescriptorBufferOffsetsEXT); \
HookInitExtension(EXT_descriptor_buffer, GetBufferOpaqueCaptureDescriptorDataEXT); \
HookInitExtension(EXT_descriptor_buffer, GetDescriptorEXT); \
HookInitExtension(EXT_descriptor_buffer, GetDescriptorSetLayoutBindingOffsetEXT); \
HookInitExtension(EXT_descriptor_buffer, GetDescriptorSetLayoutSizeEXT); \
HookInitExtension(EXT_descriptor_buffer, GetImageOpaqueCaptureDescriptorDataEXT); \
HookInitExtension(EXT_descriptor_buffer, GetImageViewOpaqueCaptureDescriptorDataEXT); \
HookInitExtension(EXT_descriptor_buffer, GetSamplerOpaqueCaptureDescriptorDataEXT); \
HookInitExtension(EXT_descriptor_buffer, GetAccelerationStructureOpaqueCaptureDescriptorDataEXT); \
HookInitExtension_Device_Win32(); \
HookInitExtension_Device_Linux(); \
HookInitExtension_Device_Android(); \
@@ -1975,6 +1988,29 @@
const VkRenderingAreaInfo *, pRenderingAreaInfo, VkExtent2D *, pGranularity); \
HookDefine4(void, vkGetImageSubresourceLayout2EXT, VkDevice, device, VkImage, image, \
const VkImageSubresource2 *, pSubresource, VkSubresourceLayout2 *, pLayout); \
HookDefine3(void, vkGetDescriptorSetLayoutSizeEXT, VkDevice, device, VkDescriptorSetLayout, \
layout, VkDeviceSize *, pLayoutSizeInBytes); \
HookDefine4(void, vkGetDescriptorSetLayoutBindingOffsetEXT, VkDevice, device, \
VkDescriptorSetLayout, layout, uint32_t, binding, VkDeviceSize *, pOffset); \
HookDefine4(void, vkGetDescriptorEXT, VkDevice, device, const VkDescriptorGetInfoEXT *, \
pDescriptorInfo, size_t, dataSize, void *, pDescriptor); \
HookDefine3(void, vkCmdBindDescriptorBuffersEXT, VkCommandBuffer, commandBuffer, uint32_t, \
bufferCount, const VkDescriptorBufferBindingInfoEXT *, pBindingInfos); \
HookDefine7(void, vkCmdSetDescriptorBufferOffsetsEXT, VkCommandBuffer, commandBuffer, \
VkPipelineBindPoint, pipelineBindPoint, VkPipelineLayout, layout, uint32_t, firstSet, \
uint32_t, setCount, const uint32_t *, pBufferIndices, const VkDeviceSize *, pOffsets); \
HookDefine4(void, vkCmdBindDescriptorBufferEmbeddedSamplersEXT, VkCommandBuffer, commandBuffer, \
VkPipelineBindPoint, pipelineBindPoint, VkPipelineLayout, layout, uint32_t, set); \
HookDefine3(VkResult, vkGetBufferOpaqueCaptureDescriptorDataEXT, VkDevice, device, \
const VkBufferCaptureDescriptorDataInfoEXT *, pInfo, void *, pData); \
HookDefine3(VkResult, vkGetImageOpaqueCaptureDescriptorDataEXT, VkDevice, device, \
const VkImageCaptureDescriptorDataInfoEXT *, pInfo, void *, pData); \
HookDefine3(VkResult, vkGetImageViewOpaqueCaptureDescriptorDataEXT, VkDevice, device, \
const VkImageViewCaptureDescriptorDataInfoEXT *, pInfo, void *, pData); \
HookDefine3(VkResult, vkGetSamplerOpaqueCaptureDescriptorDataEXT, VkDevice, device, \
const VkSamplerCaptureDescriptorDataInfoEXT *, pInfo, void *, pData); \
HookDefine3(VkResult, vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT, VkDevice, device, \
const VkAccelerationStructureCaptureDescriptorDataInfoEXT *, pInfo, void *, pData); \
HookDefine_Win32(); \
HookDefine_Linux(); \
HookDefine_Android(); \
+5 -1
View File
@@ -28,7 +28,7 @@
template <>
rdcstr DoStringise(const VulkanChunk &el)
{
RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1218, "Chunks changed without updating names");
RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1222, "Chunks changed without updating names");
BEGIN_ENUM_STRINGISE(VulkanChunk)
{
@@ -250,6 +250,10 @@ rdcstr DoStringise(const VulkanChunk &el)
STRINGISE_ENUM_CLASS(vkCmdTraceRaysIndirect2KHR)
STRINGISE_ENUM_CLASS(vkCmdWriteAccelerationStructuresPropertiesKHR)
STRINGISE_ENUM_CLASS(vkCmdBindIndexBuffer2KHR)
STRINGISE_ENUM_CLASS(vkGetDescriptorEXT)
STRINGISE_ENUM_CLASS(vkCmdBindDescriptorBuffersEXT)
STRINGISE_ENUM_CLASS(vkCmdSetDescriptorBufferOffsetsEXT)
STRINGISE_ENUM_CLASS(vkCmdBindDescriptorBufferEmbeddedSamplersEXT)
STRINGISE_ENUM_CLASS_NAMED(Max, "Max Chunk");
}
END_ENUM_STRINGISE()
@@ -8667,6 +8667,52 @@ void WrappedVulkan::vkCmdBindIndexBuffer2KHR(VkCommandBuffer commandBuffer, VkBu
}
}
template <typename SerialiserType>
bool WrappedVulkan::Serialise_vkCmdBindDescriptorBuffersEXT(
SerialiserType &ser, VkCommandBuffer commandBuffer, uint32_t bufferCount,
const VkDescriptorBufferBindingInfoEXT *pBindingInfos)
{
return true;
}
void WrappedVulkan::vkCmdBindDescriptorBuffersEXT(VkCommandBuffer commandBuffer, uint32_t bufferCount,
const VkDescriptorBufferBindingInfoEXT *pBindingInfos)
{
}
template <typename SerialiserType>
bool WrappedVulkan::Serialise_vkCmdSetDescriptorBufferOffsetsEXT(
SerialiserType &ser, VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const uint32_t *pBufferIndices,
const VkDeviceSize *pOffsets)
{
return true;
}
void WrappedVulkan::vkCmdSetDescriptorBufferOffsetsEXT(VkCommandBuffer commandBuffer,
VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout, uint32_t firstSet,
uint32_t setCount,
const uint32_t *pBufferIndices,
const VkDeviceSize *pOffsets)
{
}
template <typename SerialiserType>
bool WrappedVulkan::Serialise_vkCmdBindDescriptorBufferEmbeddedSamplersEXT(
SerialiserType &ser, VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout, uint32_t set)
{
return true;
}
void WrappedVulkan::vkCmdBindDescriptorBufferEmbeddedSamplersEXT(VkCommandBuffer commandBuffer,
VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout,
uint32_t set)
{
}
INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateCommandPool, VkDevice device,
const VkCommandPoolCreateInfo *pCreateInfo,
const VkAllocationCallbacks *, VkCommandPool *pCommandPool);
@@ -8862,3 +8908,14 @@ INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdBindShadersEXT, VkCommandBuffer comma
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdBindIndexBuffer2KHR, VkCommandBuffer commandBuffer,
VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size,
VkIndexType indexType);
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdBindDescriptorBuffersEXT, VkCommandBuffer commandBuffer,
uint32_t bufferCount,
const VkDescriptorBufferBindingInfoEXT *pBindingInfos);
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdSetDescriptorBufferOffsetsEXT,
VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount,
const uint32_t *pBufferIndices, const VkDeviceSize *pOffsets);
INSTANTIATE_FUNCTION_SERIALISED(void, vkCmdBindDescriptorBufferEmbeddedSamplersEXT,
VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint,
VkPipelineLayout layout, uint32_t set);
@@ -1870,6 +1870,19 @@ void WrappedVulkan::vkUpdateDescriptorSetWithTemplate(
}
}
template <typename SerialiserType>
bool WrappedVulkan::Serialise_vkGetDescriptorEXT(SerialiserType &ser, VkDevice device,
const VkDescriptorGetInfoEXT *pDescriptorInfo,
size_t dataSize, void *pDescriptor)
{
return true;
}
void WrappedVulkan::vkGetDescriptorEXT(VkDevice device, const VkDescriptorGetInfoEXT *pDescriptorInfo,
size_t dataSize, void *pDescriptor)
{
}
INSTANTIATE_FUNCTION_SERIALISED(VkResult, vkCreateDescriptorSetLayout, VkDevice device,
const VkDescriptorSetLayoutCreateInfo *pCreateInfo,
const VkAllocationCallbacks *, VkDescriptorSetLayout *pSetLayout);
@@ -1897,3 +1910,7 @@ INSTANTIATE_FUNCTION_SERIALISED(void, vkUpdateDescriptorSetWithTemplate, VkDevic
VkDescriptorSet descriptorSet,
VkDescriptorUpdateTemplate descriptorUpdateTemplate,
const void *pData);
INSTANTIATE_FUNCTION_SERIALISED(void, vkGetDescriptorEXT, VkDevice device,
const VkDescriptorGetInfoEXT *pDescriptorInfo, size_t dataSize,
void *pDescriptor);
@@ -1332,3 +1332,67 @@ void WrappedVulkan::vkGetImageSubresourceLayout2EXT(VkDevice device, VkImage ima
ObjDisp(device)->GetImageSubresourceLayout2EXT(Unwrap(device), Unwrap(image), pSubresource,
pLayout);
}
void WrappedVulkan::vkGetDescriptorSetLayoutSizeEXT(VkDevice device, VkDescriptorSetLayout layout,
VkDeviceSize *pLayoutSizeInBytes)
{
ObjDisp(device)->GetDescriptorSetLayoutSizeEXT(Unwrap(device), Unwrap(layout), pLayoutSizeInBytes);
}
void WrappedVulkan::vkGetDescriptorSetLayoutBindingOffsetEXT(VkDevice device,
VkDescriptorSetLayout layout,
uint32_t binding, VkDeviceSize *pOffset)
{
ObjDisp(device)->GetDescriptorSetLayoutBindingOffsetEXT(Unwrap(device), Unwrap(layout), binding,
pOffset);
}
VkResult WrappedVulkan::vkGetBufferOpaqueCaptureDescriptorDataEXT(
VkDevice device, const VkBufferCaptureDescriptorDataInfoEXT *pInfo, void *pData)
{
VkBufferCaptureDescriptorDataInfoEXT unwrappedInfo = *pInfo;
unwrappedInfo.buffer = Unwrap(unwrappedInfo.buffer);
return ObjDisp(device)->GetBufferOpaqueCaptureDescriptorDataEXT(Unwrap(device), &unwrappedInfo,
pData);
}
VkResult WrappedVulkan::vkGetImageOpaqueCaptureDescriptorDataEXT(
VkDevice device, const VkImageCaptureDescriptorDataInfoEXT *pInfo, void *pData)
{
VkImageCaptureDescriptorDataInfoEXT unwrappedInfo = *pInfo;
unwrappedInfo.image = Unwrap(unwrappedInfo.image);
return ObjDisp(device)->GetImageOpaqueCaptureDescriptorDataEXT(Unwrap(device), &unwrappedInfo,
pData);
}
VkResult WrappedVulkan::vkGetImageViewOpaqueCaptureDescriptorDataEXT(
VkDevice device, const VkImageViewCaptureDescriptorDataInfoEXT *pInfo, void *pData)
{
VkImageViewCaptureDescriptorDataInfoEXT unwrappedInfo = *pInfo;
unwrappedInfo.imageView = Unwrap(unwrappedInfo.imageView);
return ObjDisp(device)->GetImageViewOpaqueCaptureDescriptorDataEXT(Unwrap(device), &unwrappedInfo,
pData);
}
VkResult WrappedVulkan::vkGetSamplerOpaqueCaptureDescriptorDataEXT(
VkDevice device, const VkSamplerCaptureDescriptorDataInfoEXT *pInfo, void *pData)
{
VkSamplerCaptureDescriptorDataInfoEXT unwrappedInfo = *pInfo;
unwrappedInfo.sampler = Unwrap(unwrappedInfo.sampler);
return ObjDisp(device)->GetSamplerOpaqueCaptureDescriptorDataEXT(Unwrap(device), &unwrappedInfo,
pData);
}
VkResult WrappedVulkan::vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT(
VkDevice device, const VkAccelerationStructureCaptureDescriptorDataInfoEXT *pInfo, void *pData)
{
VkAccelerationStructureCaptureDescriptorDataInfoEXT unwrappedInfo = *pInfo;
unwrappedInfo.accelerationStructure = Unwrap(unwrappedInfo.accelerationStructure);
return ObjDisp(device)->GetAccelerationStructureOpaqueCaptureDescriptorDataEXT(
Unwrap(device), &unwrappedInfo, pData);
}