def endFile(self): """Method override.""" for cmd, info in self.command_info.items(): params = info[2] if params and params[0].base_type == 'VkCommandBuffer': # Check for parameters with handle types, ignoring the first VkCommandBuffer parameter. handles = self.get_param_list_handles(params[1:]) if (handles): # Generate a function to build a list of handle types and values. cmddef = '\n' cmddef += 'void Track{}Handles(CommandBufferWrapper* wrapper, {})\n'.format( cmd[2:], self.get_arg_list(handles)) cmddef += '{\n' indent = self.INDENT_SIZE * ' ' cmddef += indent + 'assert(wrapper != nullptr);\n' cmddef += '\n' for index, handle in enumerate(handles): cmddef += self.insert_command_handle(index, handle, indent=indent) cmddef += '}' write(cmddef, file=self.outFile) self.newline() write('GFXRECON_END_NAMESPACE(encode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" for cmd, info in self.command_info.items(): return_type = info[0] params = info[2] if params and params[0].base_type == 'VkCommandBuffer': # Check for parameters with resource handle types. handles = self.get_param_list_handles(params[1:]) if (handles): # Generate a function to build a list of handle types and values. cmddef = '\n' # Temporarily remove resource only matching restriction from is_handle() when generating the function signature. self.restrict_handles = False decl = self.make_consumer_func_decl( return_type, 'Process_' + cmd, params) cmddef += self.indent('virtual ' + decl + ' override;', self.INDENT_SIZE) self.restrict_handles = True write(cmddef, file=self.outFile) write('};', file=self.outFile) self.newline() write('GFXRECON_END_NAMESPACE(decode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" write(' }', file=self.outFile) write(' }', file=self.outFile) write(' }', file=self.outFile) self.newline() write(' if ((bytes_read == 0) && (attrib != 0))', file=self.outFile) write(' {', file=self.outFile) write( ' // The encoded pointer attribute mask included kIsNull, or the sType was unrecognized.', file=self.outFile) write( ' // We will report that we read the attribute mask, but nothing else was decoded.', file=self.outFile) write(' bytes_read = sizeof(attrib);', file=self.outFile) write(' }', file=self.outFile) self.newline() write(' return bytes_read;', file=self.outFile) write('}', file=self.outFile) self.newline() write('GFXRECON_END_NAMESPACE(decode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" self.newline() write('GFXRECON_END_NAMESPACE(encode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" body = inspect.cleandoc(''' GFXRECON_END_NAMESPACE(decode) GFXRECON_END_NAMESPACE(gfxrecon) ''') write(body, file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" self.newline() write(self.make_feature_helper(), file=self.outFile) self.newline() write('GFXRECON_END_NAMESPACE(feature_util)', file=self.outFile) write('GFXRECON_END_NAMESPACE(decode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" self.newline() # Generate the VulkanDecoder::DecodeFunctionCall method for all of the commands processed by the generator. self.generate_decode_cases() self.newline() write('GFXRECON_END_NAMESPACE(decode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" for cmd, info in self.command_info.items(): return_type = info[0] params = info[2] if params and params[0].base_type == 'VkCommandBuffer': # Check for parameters with resource handle types. handles = self.get_param_list_handles(params[1:]) if (handles): # Generate a function to add handles to the command buffer's referenced handle list. cmddef = '\n' # Temporarily remove resource only matching restriction from is_handle() when generating the function signature. self.restrict_handles = False cmddef += self.make_consumer_func_decl( return_type, 'VulkanReferencedResourceConsumer::Process_' + cmd, params ) + '\n' self.restrict_handles = True cmddef += '{\n' indent = self.INDENT_SIZE * ' ' # Add unreferenced parameter macros. unref_count = 0 for param in params[1:]: if param not in handles: cmddef += indent + 'GFXRECON_UNREFERENCED_PARAMETER({});\n'.format( param.name ) unref_count += 1 if unref_count > 0: cmddef += '\n' for index, handle in enumerate(handles): cmddef += self.track_command_handle( index, params[0].name, handle, indent=indent ) cmddef += '}' write(cmddef, file=self.outFile) self.newline() write('GFXRECON_END_NAMESPACE(decode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" write(' }', file=self.outFile) write(' }', file=self.outFile) write(' else', file=self.outFile) write(' {', file=self.outFile) write( ' // pNext was either NULL or an ignored loader specific struct. Write an encoding for a NULL pointer.', file=self.outFile) write(' encoder->EncodeStructPtrPreamble(nullptr);', file=self.outFile) write(' }', file=self.outFile) write('}', file=self.outFile) self.newline() write('GFXRECON_END_NAMESPACE(encode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" BaseStructHandleMappersHeaderGenerator.endFile(self) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" # Generate the pNext shallow copy code, for pNext structs that don't have handles, but need to be preserved in the overall copy for handle wrapping. self.newline() write( 'static VkBaseInStructure* CopyPNextStruct(const VkBaseInStructure* base, HandleUnwrapMemory* unwrap_memory)', file=self.outFile ) write('{', file=self.outFile) write(' assert(base != nullptr);', file=self.outFile) self.newline() write(' VkBaseInStructure* copy = nullptr;', file=self.outFile) write(' switch (base->sType)', file=self.outFile) write(' {', file=self.outFile) write(' default:', file=self.outFile) write( ' GFXRECON_LOG_WARNING("Failed to copy entire pNext chain when unwrapping handles due to unrecognized sType %d", base->sType);', file=self.outFile ) write(' break;', file=self.outFile) write( ' case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO:', file=self.outFile ) write( ' copy = reinterpret_cast<VkBaseInStructure*>(MakeUnwrapStructs(reinterpret_cast<const VkLayerInstanceCreateInfo*>(base), 1, unwrap_memory));', file=self.outFile ) write(' break;', file=self.outFile) write( ' case VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO:', file=self.outFile ) write( ' copy = reinterpret_cast<VkBaseInStructure*>(MakeUnwrapStructs(reinterpret_cast<const VkLayerDeviceCreateInfo*>(base), 1, unwrap_memory));', file=self.outFile ) write(' break;', file=self.outFile) for base_type in self.pnext_structs_without_handles: write( ' case {}:'.format( self.pnext_structs_without_handles[base_type] ), file=self.outFile ) write( ' copy = reinterpret_cast<VkBaseInStructure*>(MakeUnwrapStructs(reinterpret_cast<const {}*>(base), 1, unwrap_memory));' .format(base_type), file=self.outFile ) write(' break;', file=self.outFile) write(' }', file=self.outFile) self.newline() write(' return copy;', file=self.outFile) write('}', file=self.outFile) # Generate the pNext handle wrapping code. self.newline() write( 'const void* UnwrapPNextStructHandles(const void* value, HandleUnwrapMemory* unwrap_memory)', file=self.outFile ) write('{', file=self.outFile) write(' if (value != nullptr)', file=self.outFile) write(' {', file=self.outFile) write( ' const VkBaseInStructure* base = reinterpret_cast<const VkBaseInStructure*>(value);', file=self.outFile ) self.newline() write(' switch (base->sType)', file=self.outFile) write(' {', file=self.outFile) write(' default:', file=self.outFile) write(' {', file=self.outFile) write( ' // This structure does not contain handles, but may point to a structure that does.', file=self.outFile ) write( ' VkBaseInStructure* copy = CopyPNextStruct(base, unwrap_memory);', file=self.outFile ) write(' if (copy != nullptr)', file=self.outFile) write(' {', file=self.outFile) write( ' copy->pNext = reinterpret_cast<const VkBaseInStructure*>(UnwrapPNextStructHandles(base->pNext, unwrap_memory));', file=self.outFile ) write(' }', file=self.outFile) write(' return copy;', file=self.outFile) write(' }', file=self.outFile) for base_type in self.pnext_structs_with_handles: write( ' case {}:'.format( self.pnext_structs_with_handles[base_type] ), file=self.outFile ) write( ' return UnwrapStructPtrHandles(reinterpret_cast<const {}*>(base), unwrap_memory);' .format(base_type), file=self.outFile ) write(' }', file=self.outFile) write(' }', file=self.outFile) self.newline() write(' return nullptr;', file=self.outFile) write('}', file=self.outFile) self.newline() write('GFXRECON_END_NAMESPACE(encode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" self.newline() write('typedef const void* DispatchKey;', file=self.outFile) self.newline() write( '// Retrieve a dispatch key from a dispatchable handle', file=self.outFile ) write( 'static DispatchKey GetDispatchKey(const void* handle)', file=self.outFile ) write('{', file=self.outFile) write( ' const DispatchKey* dispatch_key = reinterpret_cast<const DispatchKey*>(handle);', file=self.outFile ) write(' return (*dispatch_key);', file=self.outFile) write('}', file=self.outFile) self.newline() self.generate_no_op_funcs() self.newline() write('struct LayerTable', file=self.outFile) write('{', file=self.outFile) write( ' PFN_vkCreateInstance CreateInstance{ nullptr };', file=self.outFile ) write( ' PFN_vkCreateDevice CreateDevice{ nullptr };', file=self.outFile ) write('};', file=self.outFile) self.newline() self.generate_instance_cmd_table() self.newline() self.generate_device_cmd_table() self.newline() write( 'template <typename GetProcAddr, typename Handle, typename FuncP>', file=self.outFile ) write( 'static void LoadFunction(GetProcAddr gpa, Handle handle, const char* name, FuncP* funcp)', file=self.outFile ) write('{', file=self.outFile) write( ' FuncP result = reinterpret_cast<FuncP>(gpa(handle, name));', file=self.outFile ) write(' if (result != nullptr)', file=self.outFile) write(' {', file=self.outFile) write(' (*funcp) = result;', file=self.outFile) write(' }', file=self.outFile) write('}', file=self.outFile) self.newline() self.generate_load_instance_table_func() self.newline() self.generate_load_device_table_func() self.newline() write('GFXRECON_END_NAMESPACE(encode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)
def endFile(self): """Method override.""" self.newline() write( 'const void* UnwrapPNextStructHandles(const void* value, HandleUnwrapMemory* unwrap_memory);', file=self.outFile ) self.newline() self.generate_create_wrapper_funcs() write( 'template <typename ParentWrapper, typename CoParentWrapper, typename T>', file=self.outFile ) write( 'void CreateWrappedStructArrayHandles(typename ParentWrapper::HandleType parent, typename CoParentWrapper::HandleType co_parent, T* value, size_t len, PFN_GetHandleId get_id)', file=self.outFile ) write('{', file=self.outFile) write(' if (value != nullptr)', file=self.outFile) write(' {', file=self.outFile) write(' for (size_t i = 0; i < len; ++i)', file=self.outFile) write(' {', file=self.outFile) write( ' CreateWrappedStructHandles<ParentWrapper, CoParentWrapper>(parent, co_parent, &value[i], get_id);', file=self.outFile ) write(' }', file=self.outFile) write(' }', file=self.outFile) write('}', file=self.outFile) self.newline() write('template <typename T>', file=self.outFile) write( 'T* MakeUnwrapStructs(const T* values, size_t len, HandleUnwrapMemory* unwrap_memory)', file=self.outFile ) write('{', file=self.outFile) write( ' assert((values != nullptr) && (len > 0) && (unwrap_memory != nullptr));', file=self.outFile ) self.newline() write( ' const uint8_t* bytes = reinterpret_cast<const uint8_t*>(values);', file=self.outFile ) write( ' size_t num_bytes = len * sizeof(T);', file=self.outFile ) self.newline() write( ' return reinterpret_cast<T*>(unwrap_memory->GetFilledBuffer(bytes, num_bytes));', file=self.outFile ) write('}', file=self.outFile) self.newline() write('template <typename T>', file=self.outFile) write( 'const T* UnwrapStructPtrHandles(const T* value, HandleUnwrapMemory* unwrap_memory)', file=self.outFile ) write('{', file=self.outFile) write(' T* unwrapped_struct = nullptr;', file=self.outFile) self.newline() write(' if (value != nullptr)', file=self.outFile) write(' {', file=self.outFile) write( ' unwrapped_struct = MakeUnwrapStructs(value, 1, unwrap_memory);', file=self.outFile ) write( ' UnwrapStructHandles(unwrapped_struct, unwrap_memory);', file=self.outFile ) write(' }', file=self.outFile) self.newline() write(' return unwrapped_struct;', file=self.outFile) write('}', file=self.outFile) self.newline() write('template <typename T>', file=self.outFile) write( 'const T* UnwrapStructArrayHandles(const T* values, size_t len, HandleUnwrapMemory* unwrap_memory)', file=self.outFile ) write('{', file=self.outFile) write(' if ((values != nullptr) && (len > 0))', file=self.outFile) write(' {', file=self.outFile) write( ' auto unwrapped_structs = MakeUnwrapStructs(values, len, unwrap_memory);', file=self.outFile ) self.newline() write(' for (size_t i = 0; i < len; ++i)', file=self.outFile) write(' {', file=self.outFile) write( ' UnwrapStructHandles(&unwrapped_structs[i], unwrap_memory);', file=self.outFile ) write(' }', file=self.outFile) self.newline() write(' return unwrapped_structs;', file=self.outFile) write(' }', file=self.outFile) self.newline() write( ' // Leave the original memory in place when the pointer is not null, but size is zero.', file=self.outFile ) write(' return values;', file=self.outFile) write('}', file=self.outFile) self.newline() write('GFXRECON_END_NAMESPACE(encode)', file=self.outFile) write('GFXRECON_END_NAMESPACE(gfxrecon)', file=self.outFile) # Finish processing in superclass BaseGenerator.endFile(self)