Skip to content

Commit fd7e27a

Browse files
Support reading and writing VkDescriptorDataEXT
Needed for VK_EXT_descriptor_buffer support.
1 parent 7332cb9 commit fd7e27a

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

scripts/util.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,28 @@ def print_load(self, name, owner): # called for each parameter
522522
z.do('%s = debug_report_callback; // hijacking this pointer with our own callback function' % varname)
523523
elif self.name == 'pNext':
524524
z.do('read_extension(reader, (VkBaseOutStructure**)&%s);' % varname)
525+
elif self.type == 'VkDescriptorDataEXT':
526+
z.decl('uint8_t', 'opt')
527+
z.do('switch (sptr->type)')
528+
z.brace_begin()
529+
z.do('case VK_DESCRIPTOR_TYPE_SAMPLER: { VkSampler* tmp = reader.pool.allocate<VkSampler>(1); uint32_t index = reader.read_handle(DEBUGPARAM("%s")); *tmp = index_to_VkSampler.at(index); sptr->data.pSampler = tmp; } break;' % self.type)
530+
z.do('case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: opt = reader.read_uint8_t(); if (opt) read_VkDescriptorImageInfo(reader, (VkDescriptorImageInfo*)sptr->data.pCombinedImageSampler); break;')
531+
z.do('case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: opt = reader.read_uint8_t(); if (opt) read_VkDescriptorImageInfo(reader, (VkDescriptorImageInfo*)sptr->data.pInputAttachmentImage); break;')
532+
z.do('case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: opt = reader.read_uint8_t(); if (opt) read_VkDescriptorImageInfo(reader, (VkDescriptorImageInfo*)sptr->data.pSampledImage); break;')
533+
z.do('case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: opt = reader.read_uint8_t(); if (opt) read_VkDescriptorImageInfo(reader, (VkDescriptorImageInfo*)sptr->data.pStorageImage); break;')
534+
z.do('case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: opt = reader.read_uint8_t(); if (opt) read_VkDescriptorAddressInfoEXT(reader, (VkDescriptorAddressInfoEXT*)sptr->data.pUniformTexelBuffer); break;')
535+
z.do('case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: opt = reader.read_uint8_t(); if (opt) read_VkDescriptorAddressInfoEXT(reader, (VkDescriptorAddressInfoEXT*)sptr->data.pStorageTexelBuffer); break;')
536+
z.do('case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: opt = reader.read_uint8_t(); if (opt) read_VkDescriptorAddressInfoEXT(reader, (VkDescriptorAddressInfoEXT*)sptr->data.pUniformBuffer); break;')
537+
z.do('case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: opt = reader.read_uint8_t(); if (opt) read_VkDescriptorAddressInfoEXT(reader, (VkDescriptorAddressInfoEXT*)sptr->data.pStorageBuffer); break;')
538+
z.do('case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:')
539+
z.brace_begin()
540+
z.do('uint64_t stored_address = reader.read_uint64_t();')
541+
z.do('sptr->data.accelerationStructure = reader.parent->device_address_remapping.translate_address(stored_address);')
542+
z.do('ILOG("%s changing device address from %%lu to %%lu", (unsigned long)stored_address, (unsigned long)%s.accelerationStructure);' % (self.funcname, varname))
543+
z.brace_end()
544+
z.do('break;')
545+
z.do('default: ABORT("Unsupported descriptor type for VkDescriptorDataEXT"); break;')
546+
z.brace_end()
525547
elif self.string_array:
526548
len = self.length.split(',')[0]
527549
if self.funcname == 'VkInstanceCreateInfo' and self.name == 'ppEnabledExtensionNames':
@@ -816,6 +838,21 @@ def print_save(self, name, owner, postprocess = False): # called for each parame
816838
elif self.funcname in ['VkDebugMarkerObjectNameInfoEXT', 'VkDebugMarkerObjectTagInfoEXT', 'vkDebugReportMessageEXT'] and self.name == 'object':
817839
z.do('auto* object_data = debug_object_trackable(writer.parent->records, %sobjectType, %s);' % (owner, varname))
818840
z.do('writer.write_handle(object_data);')
841+
elif self.type == 'VkDescriptorDataEXT':
842+
z.do('switch (sptr->type)')
843+
z.brace_begin()
844+
z.do('case VK_DESCRIPTOR_TYPE_SAMPLER: { auto* sampler_data = writer.parent->records.VkSampler_index.at(*sptr->data.pSampler); writer.write_handle(sampler_data); } break;')
845+
z.do('case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: writer.write_uint8_t(sptr->data.pCombinedImageSampler != nullptr); if (sptr->data.pCombinedImageSampler) write_VkDescriptorImageInfo(writer, sptr->data.pCombinedImageSampler); break;')
846+
z.do('case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: writer.write_uint8_t(sptr->data.pInputAttachmentImage != nullptr); if (sptr->data.pInputAttachmentImage) write_VkDescriptorImageInfo(writer, sptr->data.pInputAttachmentImage); break;')
847+
z.do('case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: writer.write_uint8_t(sptr->data.pSampledImage != nullptr); if (sptr->data.pSampledImage) write_VkDescriptorImageInfo(writer, sptr->data.pSampledImage); break;')
848+
z.do('case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: writer.write_uint8_t(sptr->data.pStorageImage != nullptr); if (sptr->data.pStorageImage) write_VkDescriptorImageInfo(writer, sptr->data.pStorageImage); break;')
849+
z.do('case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: writer.write_uint8_t(sptr->data.pUniformTexelBuffer != nullptr); if (sptr->data.pUniformTexelBuffer) write_VkDescriptorAddressInfoEXT(writer, sptr->data.pUniformTexelBuffer); break;')
850+
z.do('case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: writer.write_uint8_t(sptr->data.pStorageTexelBuffer != nullptr); if (sptr->data.pStorageTexelBuffer) write_VkDescriptorAddressInfoEXT(writer, sptr->data.pStorageTexelBuffer); break;')
851+
z.do('case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: writer.write_uint8_t(sptr->data.pUniformBuffer != nullptr); if (sptr->data.pUniformBuffer) write_VkDescriptorAddressInfoEXT(writer, sptr->data.pUniformBuffer); break;')
852+
z.do('case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: writer.write_uint8_t(sptr->data.pStorageBuffer != nullptr); if (sptr->data.pStorageBuffer) write_VkDescriptorAddressInfoEXT(writer, sptr->data.pStorageBuffer); break;')
853+
z.do('case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: writer.write_uint64_t(sptr->data.accelerationStructure); break;')
854+
z.do('default: ABORT("Unsupported descriptor type for VkDescriptorDataEXT"); break;')
855+
z.brace_end()
819856
elif 'CaptureReplayHandle' in self.name:
820857
z.do('writer.write_uint64_t((uint64_t)%s);' % varname)
821858
elif self.funcname in ['VkDebugUtilsObjectNameInfoEXT', 'VkDebugUtilsObjectTagInfoEXT', 'vkSetPrivateData', 'vkSetPrivateDataEXT', 'vkGetPrivateData', 'vkGetPrivateDataEXT'] and self.name == 'objectHandle':

src/write.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ class lava_file_writer : public file_writer
165165

166166
inline void write_api_command(uint16_t id);
167167

168-
inline void write_VkDescriptorDataEXT(const VkDescriptorDataEXT& val) {} // TBD
169168
inline void write_VkAccelerationStructureNV(VkAccelerationStructureNV val) {} // TBD
170169

171170
inline void write_handle(const trackable* t)

0 commit comments

Comments
 (0)