void setupDebugMarker(VkDevice device) { pfnDebugMarkerSetObjetTag = (PFN_vkDebugMarkerSetObjectTagEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectTagEXT"); pfnDebugMarkerSetObjectName = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT"); pfnCmdDebugMarkerBegin = (PFN_vkCmdDebugMarkerBeginEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT"); pfnCmdDebugMarkerEnd = (PFN_vkCmdDebugMarkerEndEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT"); pfnCmdDebugMarkerInsert = (PFN_vkCmdDebugMarkerInsertEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT"); }
void setup(VkDevice device) { pfnDebugMarkerSetObjectTag = (PFN_vkDebugMarkerSetObjectTagEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectTagEXT"); pfnDebugMarkerSetObjectName = (PFN_vkDebugMarkerSetObjectNameEXT)vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT"); pfnCmdDebugMarkerBegin = (PFN_vkCmdDebugMarkerBeginEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT"); pfnCmdDebugMarkerEnd = (PFN_vkCmdDebugMarkerEndEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT"); pfnCmdDebugMarkerInsert = (PFN_vkCmdDebugMarkerInsertEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT"); // Set flag if at least one function pointer is present active = (pfnDebugMarkerSetObjectName != VK_NULL_HANDLE); }
Buffer::Buffer(const FunctionCallbackInfo<Value>& args) { Isolate* isolate = args.GetIsolate(); HandleScope handle_scope(isolate); Wrap(args.This()); parent_device.Reset(isolate, getELitObjectFromArgN(0, parent_device)); vkCreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(vkGetDeviceProcAddr(ObjectWrap::Unwrap<Device>(parent_device.Get(isolate))->vulkan_handle,"vkCreateBuffer")); vkDestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(vkGetDeviceProcAddr(ObjectWrap::Unwrap<Device>(parent_device.Get(isolate))->vulkan_handle,"vkDestroyBuffer")); VkBufferCreateInfo pCreateInfo; memset(&pCreateInfo, 0, sizeof(VkBufferCreateInfo)); pCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; vkCreateBuffer(ObjectWrap::Unwrap<Device>(parent_device.Get(isolate))->vulkan_handle, &pCreateInfo, nullptr, &vulkan_handle); setELitPtr(args.This(), vulkan_handle, vulkan_handle); }
GraphicsPipeline::GraphicsPipeline(const FunctionCallbackInfo<Value>& args) { Isolate* isolate = args.GetIsolate(); HandleScope handle_scope(isolate); Wrap(args.This()); parent_device.Reset(isolate, getELitObjectFromArgN(0, parent_device)); vkCreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(vkGetDeviceProcAddr(ObjectWrap::Unwrap<Device>(parent_device.Get(isolate))->vulkan_handle,"vkCreateGraphicsPipelines")); vkDestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(vkGetDeviceProcAddr(ObjectWrap::Unwrap<Device>(parent_device.Get(isolate))->vulkan_handle,"vkDestroyPipeline")); VkGraphicsPipelineCreateInfo pCreateInfos; memset(&pCreateInfos, 0, sizeof(VkGraphicsPipelineCreateInfo)); pCreateInfos.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; vkCreateGraphicsPipelines(ObjectWrap::Unwrap<Device>(parent_device.Get(isolate))->vulkan_handle, nullptr, 1, &pCreateInfos, nullptr, &vulkan_handle); setELitPtr(args.This(), vulkan_handle, vulkan_handle); }
void vk_dbg_init(void) { log_entry(DBGMKR_MODULE, LOG_INFORMATION, "Initializing..."); _DebugMakerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT) vkGetDeviceProcAddr(vkgfx_device, "vkDebugMarkerSetObjectNameEXT"); _DebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT) vkGetDeviceProcAddr(vkgfx_device, "vkDebugMarkerSetObjectTagEXT"); _DebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT) vkGetDeviceProcAddr(vkgfx_device, "vkCmdDebugMarkerBeginEXT"); _DebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT) vkGetDeviceProcAddr(vkgfx_device, "vkCmdDebugMarkerInsertEXT"); _DebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT) vkGetDeviceProcAddr(vkgfx_device, "vkCmdDebugMarkerEndEXT"); if(_DebugMakerSetObjectNameEXT) log_entry(DBGMKR_MODULE, LOG_INFORMATION, "Initialized"); else log_entry(DBGMKR_MODULE, LOG_INFORMATION, "VK_EXT_debug_marker not present"); }
gpointer gst_vulkan_device_get_proc_address (GstVulkanDevice * device, const gchar * name) { g_return_val_if_fail (GST_IS_VULKAN_DEVICE (device), NULL); g_return_val_if_fail (device->device != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); GST_TRACE_OBJECT (device, "%s", name); return vkGetDeviceProcAddr (device->device, name); }
/* [POI] Extension specific setup Gets the function pointers required for conditonal rendering Sets up a dedicated conditional buffer that is used to determine visibility at draw time */ void prepareConditionalRendering() { /* The conditional rendering functions are part of an extension so they have to be loaded manually */ vkCmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)vkGetDeviceProcAddr(device, "vkCmdBeginConditionalRenderingEXT"); if (!vkCmdBeginConditionalRenderingEXT) { vks::tools::exitFatal("Could not get a valid function pointer for vkCmdBeginConditionalRenderingEXT", -1); } vkCmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)vkGetDeviceProcAddr(device, "vkCmdEndConditionalRenderingEXT"); if (!vkCmdEndConditionalRenderingEXT) { vks::tools::exitFatal("Could not get a valid function pointer for vkCmdEndConditionalRenderingEXT", -1); } /* Create the buffer that contains the conditional rendering information A single conditional value is 32 bits and if it's zero the rendering commands are discarded This sample renders multiple rows of objects conditionally, so we setup a buffer with one value per row */ conditionalVisibility.resize(scene.linearNodes.size()); VK_CHECK_RESULT(vulkanDevice->createBuffer( VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, &conditionalBuffer, sizeof(int32_t) *conditionalVisibility.size(), conditionalVisibility.data())); VK_CHECK_RESULT(conditionalBuffer.map()); // By default, all parts of the glTF are visible for (auto i = 0; i < conditionalVisibility.size(); i++) { conditionalVisibility[i] = 1; } /* Copy visibility data */ updateConditionalBuffer(); }
bool LoadVulkanDeviceFunctions(VkDevice device) { bool required_functions_missing = false; auto LoadFunction = [&](PFN_vkVoidFunction* func_ptr, const char* name, bool is_required) { *func_ptr = vkGetDeviceProcAddr(device, name); if (!(*func_ptr) && is_required) { ERROR_LOG(VIDEO, "Vulkan: Failed to load required device function %s", name); required_functions_missing = true; } }; #define VULKAN_DEVICE_ENTRY_POINT(name, required) \ LoadFunction(reinterpret_cast<PFN_vkVoidFunction*>(&name), #name, required); #include "VideoBackends/Vulkan/VulkanEntryPoints.inl" #undef VULKAN_DEVICE_ENTRY_POINT return !required_functions_missing; }
void *swapChainGetDeviceProc( struct SwapChain *swapChain, const char *name ) { return vkGetDeviceProcAddr( swapChain->device, name ); }