mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-09 15:25:38 +00:00
Allow a few EXT & IHV vulkan extensions
* VK_EXT_astc_decode_mode * VK_EXT_swapchain_colorspace - this will cause slight artifacts as we won't interpret pixels in the right color space, but it's minor. * VK_EXT_validation_cache - we don't serialise this but we do allow it during capture and pass-through straight. We don't wrap the VkValidationCacheEXT object at all which makes support simpler. * VK_EXT_external_memory_dma_buf - this is just a new memory type for external memory, we don't need to do anything special to handle it. * VK_AMD_mixed_attachment_samples & VK_AMD_shader_core_properties - these are no-op once enabled * Many shader-only extensions: - VK_AMD_gpu_shader_int16 - VK_AMD_shader_fragment_mask - VK_AMD_image_load_store_lod - VK_AMD_texture_gather_bias_lod - VK_NV_compute_shader_derivatives - VK_NV_fragment_shader_barycentric - VK_NV_geometry_shader_passthrough - VK_NV_sample_mask_override_coverage - VK_NV_shader_image_footprint - VK_NV_shader_subgroup_partitioned - VK_NV_viewport_array2
This commit is contained in:
@@ -467,6 +467,10 @@ size_t GetNextPatchSize(const void *pNext)
|
||||
else if(next->sType == VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO)
|
||||
memSize += sizeof(VkDeviceGroupRenderPassBeginInfo);
|
||||
|
||||
// VkShaderModuleCreateInfo
|
||||
if(next->sType == VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
|
||||
memSize += sizeof(VkValidationCacheCreateInfoEXT);
|
||||
|
||||
next = next->pNext;
|
||||
}
|
||||
|
||||
@@ -786,6 +790,12 @@ void UnwrapNextChain(CaptureState state, const char *structName, byte *&tempMem,
|
||||
CopyNextChainedStruct<VkPipelineVertexInputDivisorStateCreateInfoEXT>(tempMem, nextInput,
|
||||
nextChainTail);
|
||||
}
|
||||
else if(nextInput->sType == VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT)
|
||||
{
|
||||
if(IsCaptureMode(state))
|
||||
CopyNextChainedStruct<VkShaderModuleValidationCacheCreateInfoEXT>(tempMem, nextInput,
|
||||
nextChainTail);
|
||||
}
|
||||
else
|
||||
{
|
||||
RDCERR("unrecognised struct %d in %s pNext chain", nextInput->sType, structName);
|
||||
|
||||
@@ -652,6 +652,8 @@ DECLARE_REFLECTION_STRUCT(VkDeviceGroupRenderPassBeginInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkMemoryAllocateFlagsInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkProtectedSubmitInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageFormatListCreateInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageViewASTCDecodeModeEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkShaderModuleValidationCacheCreateInfoEXT);
|
||||
DECLARE_REFLECTION_STRUCT(VkDispatchIndirectCommand);
|
||||
DECLARE_REFLECTION_STRUCT(VkDrawIndirectCommand);
|
||||
DECLARE_REFLECTION_STRUCT(VkDrawIndexedIndirectCommand);
|
||||
|
||||
@@ -575,24 +575,46 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME, VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME, VK_AMD_GPU_SHADER_INT16_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME, VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME, VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_SHADER_BALLOT_EXTENSION_NAME, VK_AMD_SHADER_BALLOT_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME, VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME,
|
||||
VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME, VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME,
|
||||
VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME, VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME, VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION,
|
||||
},
|
||||
#ifdef VK_EXT_acquire_xlib_display
|
||||
{
|
||||
VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME, VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME,
|
||||
VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION,
|
||||
@@ -618,6 +640,9 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
{
|
||||
VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME, VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME, VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION,
|
||||
},
|
||||
@@ -643,6 +668,12 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME,
|
||||
VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_VALIDATION_CACHE_EXTENSION_NAME, VK_EXT_VALIDATION_CACHE_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME, VK_EXT_VALIDATION_FLAGS_SPEC_VERSION,
|
||||
},
|
||||
@@ -834,6 +865,9 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
VK_MVK_MACOS_SURFACE_EXTENSION_NAME, VK_MVK_MACOS_SURFACE_SPEC_VERSION,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME, VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME, VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION,
|
||||
},
|
||||
@@ -849,6 +883,28 @@ static const VkExtensionProperties supportedExtensions[] = {
|
||||
VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME,
|
||||
VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME,
|
||||
VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME,
|
||||
VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME, VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME,
|
||||
VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION,
|
||||
},
|
||||
{
|
||||
VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME, VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION,
|
||||
},
|
||||
#ifdef VK_NV_win32_keyed_mutex
|
||||
{
|
||||
VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME, VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION,
|
||||
|
||||
@@ -1897,4 +1897,19 @@ public:
|
||||
VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset,
|
||||
VkBuffer countBuffer, VkDeviceSize countBufferOffset,
|
||||
uint32_t maxDrawCount, uint32_t stride);
|
||||
|
||||
// VK_EXT_validation_cache
|
||||
VkResult vkCreateValidationCacheEXT(VkDevice device,
|
||||
const VkValidationCacheCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkValidationCacheEXT *pValidationCache);
|
||||
|
||||
void vkDestroyValidationCacheEXT(VkDevice device, VkValidationCacheEXT validationCache,
|
||||
const VkAllocationCallbacks *pAllocator);
|
||||
|
||||
VkResult vkMergeValidationCachesEXT(VkDevice device, VkValidationCacheEXT dstCache,
|
||||
uint32_t srcCacheCount, const VkValidationCacheEXT *pSrcCaches);
|
||||
|
||||
VkResult vkGetValidationCacheDataEXT(VkDevice device, VkValidationCacheEXT validationCache,
|
||||
size_t *pDataSize, void *pData);
|
||||
};
|
||||
|
||||
@@ -349,7 +349,8 @@
|
||||
CheckExt(KHR_sampler_ycbcr_conversion, VK11); \
|
||||
CheckExt(KHR_device_group, VK11); \
|
||||
CheckExt(MVK_moltenvk, VKXX); \
|
||||
CheckExt(KHR_draw_indirect_count, VKXX);
|
||||
CheckExt(KHR_draw_indirect_count, VKXX); \
|
||||
CheckExt(EXT_validation_cache, VKXX);
|
||||
|
||||
#define HookInitVulkanInstanceExts() \
|
||||
HookInitExtension(KHR_surface, DestroySurfaceKHR); \
|
||||
@@ -461,6 +462,10 @@
|
||||
HookInitExtension(protected_memory, GetDeviceQueue2); \
|
||||
HookInitExtension(KHR_draw_indirect_count, CmdDrawIndirectCountKHR); \
|
||||
HookInitExtension(KHR_draw_indirect_count, CmdDrawIndexedIndirectCountKHR); \
|
||||
HookInitExtension(EXT_validation_cache, CreateValidationCacheEXT); \
|
||||
HookInitExtension(EXT_validation_cache, DestroyValidationCacheEXT); \
|
||||
HookInitExtension(EXT_validation_cache, MergeValidationCachesEXT); \
|
||||
HookInitExtension(EXT_validation_cache, GetValidationCacheDataEXT); \
|
||||
HookInitDevice_PlatformSpecific()
|
||||
|
||||
#define DefineHooks() \
|
||||
@@ -977,6 +982,15 @@
|
||||
HookDefine7(void, vkCmdDrawIndexedIndirectCountKHR, VkCommandBuffer, commandBuffer, VkBuffer, \
|
||||
buffer, VkDeviceSize, offset, VkBuffer, countBuffer, VkDeviceSize, \
|
||||
countBufferOffset, uint32_t, maxDrawCount, uint32_t, stride); \
|
||||
HookDefine4(VkResult, vkCreateValidationCacheEXT, VkDevice, device, \
|
||||
const VkValidationCacheCreateInfoEXT *, pCreateInfo, const VkAllocationCallbacks *, \
|
||||
pAllocator, VkValidationCacheEXT *, pValidationCache); \
|
||||
HookDefine3(void, vkDestroyValidationCacheEXT, VkDevice, device, VkValidationCacheEXT, \
|
||||
validationCache, const VkAllocationCallbacks *, pAllocator); \
|
||||
HookDefine4(VkResult, vkMergeValidationCachesEXT, VkDevice, device, VkValidationCacheEXT, \
|
||||
dstCache, uint32_t, srcCacheCount, const VkValidationCacheEXT *, pSrcCaches); \
|
||||
HookDefine4(VkResult, vkGetValidationCacheDataEXT, VkDevice, device, VkValidationCacheEXT, \
|
||||
validationCache, size_t *, pDataSize, void *, pData); \
|
||||
HookDefine_PlatformSpecific()
|
||||
|
||||
struct VkLayerInstanceDispatchTableExtended : VkLayerInstanceDispatchTable
|
||||
|
||||
@@ -255,7 +255,14 @@ SERIALISE_VK_HANDLES();
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO, VkRenderPassMultiviewCreateInfo) \
|
||||
\
|
||||
/* VK_KHR_image_format_list */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR, VkImageFormatListCreateInfoKHR)
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR, VkImageFormatListCreateInfoKHR) \
|
||||
\
|
||||
/* VK_EXT_astc_decode_mode */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT, VkImageViewASTCDecodeModeEXT) \
|
||||
\
|
||||
/* VK_EXT_validation_cache */ \
|
||||
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT, \
|
||||
VkShaderModuleValidationCacheCreateInfoEXT)
|
||||
|
||||
template <typename SerialiserType>
|
||||
static void SerialiseNext(SerialiserType &ser, VkStructureType &sType, const void *&pNext)
|
||||
@@ -2532,6 +2539,27 @@ void Deserialise(const VkImageFormatListCreateInfoKHR &el)
|
||||
delete[] el.pViewFormats;
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkImageViewASTCDecodeModeEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
SERIALISE_MEMBER(decodeMode);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkShaderModuleValidationCacheCreateInfoEXT &el)
|
||||
{
|
||||
RDCASSERT(ser.IsReading() ||
|
||||
el.sType == VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT);
|
||||
SerialiseNext(ser, el.sType, el.pNext);
|
||||
|
||||
// we skip this, because it's unwrapped and has no ResourceId. The presence of this struct is
|
||||
// enough
|
||||
// SERIALISE_MEMBER(validationCache);
|
||||
}
|
||||
|
||||
template <typename SerialiserType>
|
||||
void DoSerialise(SerialiserType &ser, VkDispatchIndirectCommand &el)
|
||||
{
|
||||
@@ -3147,6 +3175,8 @@ INSTANTIATE_SERIALISE_TYPE(VkDeviceGroupRenderPassBeginInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkMemoryAllocateFlagsInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkProtectedSubmitInfo);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImageFormatListCreateInfoKHR);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkImageViewASTCDecodeModeEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkShaderModuleValidationCacheCreateInfoEXT);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDispatchIndirectCommand);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDrawIndirectCommand);
|
||||
INSTANTIATE_SERIALISE_TYPE(VkDrawIndexedIndirectCommand);
|
||||
|
||||
@@ -997,6 +997,10 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], VK_EXT_DEBUG_MARKER_EXTENSION_NAME))
|
||||
continue;
|
||||
|
||||
// don't include the validation cache extension
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], VK_EXT_VALIDATION_CACHE_EXTENSION_NAME))
|
||||
continue;
|
||||
|
||||
// don't include direct-display WSI extensions
|
||||
if(!strcmp(createInfo.ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) ||
|
||||
!strcmp(createInfo.ppEnabledExtensionNames[i], VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME))
|
||||
|
||||
@@ -643,4 +643,35 @@ void WrappedVulkan::vkGetDeviceGroupPeerMemoryFeatures(VkDevice device, uint32_t
|
||||
{
|
||||
return ObjDisp(device)->GetDeviceGroupPeerMemoryFeatures(
|
||||
Unwrap(device), heapIndex, localDeviceIndex, remoteDeviceIndex, pPeerMemoryFeatures);
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkCreateValidationCacheEXT(VkDevice device,
|
||||
const VkValidationCacheCreateInfoEXT *pCreateInfo,
|
||||
const VkAllocationCallbacks *pAllocator,
|
||||
VkValidationCacheEXT *pValidationCache)
|
||||
{
|
||||
return ObjDisp(device)->CreateValidationCacheEXT(Unwrap(device), pCreateInfo, pAllocator,
|
||||
pValidationCache);
|
||||
}
|
||||
|
||||
void WrappedVulkan::vkDestroyValidationCacheEXT(VkDevice device, VkValidationCacheEXT validationCache,
|
||||
const VkAllocationCallbacks *pAllocator)
|
||||
{
|
||||
return ObjDisp(device)->DestroyValidationCacheEXT(Unwrap(device), validationCache, pAllocator);
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkMergeValidationCachesEXT(VkDevice device, VkValidationCacheEXT dstCache,
|
||||
uint32_t srcCacheCount,
|
||||
const VkValidationCacheEXT *pSrcCaches)
|
||||
{
|
||||
return ObjDisp(device)->MergeValidationCachesEXT(Unwrap(device), dstCache, srcCacheCount,
|
||||
pSrcCaches);
|
||||
}
|
||||
|
||||
VkResult WrappedVulkan::vkGetValidationCacheDataEXT(VkDevice device,
|
||||
VkValidationCacheEXT validationCache,
|
||||
size_t *pDataSize, void *pData)
|
||||
{
|
||||
return ObjDisp(device)->GetValidationCacheDataEXT(Unwrap(device), validationCache, pDataSize,
|
||||
pData);
|
||||
}
|
||||
@@ -218,7 +218,13 @@ bool WrappedVulkan::Serialise_vkCreateShaderModule(SerialiserType &ser, VkDevice
|
||||
{
|
||||
VkShaderModule sh = VK_NULL_HANDLE;
|
||||
|
||||
VkResult ret = ObjDisp(device)->CreateShaderModule(Unwrap(device), &CreateInfo, NULL, &sh);
|
||||
VkShaderModuleCreateInfo patched = CreateInfo;
|
||||
|
||||
byte *tempMem = GetTempMemory(GetNextPatchSize(patched.pNext));
|
||||
|
||||
UnwrapNextChain(m_State, "VkShaderModuleCreateInfo", tempMem, (VkBaseInStructure *)&patched);
|
||||
|
||||
VkResult ret = ObjDisp(device)->CreateShaderModule(Unwrap(device), &patched, NULL, &sh);
|
||||
|
||||
if(ret != VK_SUCCESS)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user