我正在寻找一个代码片段来在桌面 NVidia 上创建 EGL 上下文。
我知道在 Windows 上,NVidia 通过扩展WGL_EXT_create_context_es_profile和WGL_EXT_create_context_es2_profile公开 EGL 。
在 Linux 上,NVidia 允许通过GLX_EXT_create_context_es_profile和 GLX_EXT_create_context_es2_profile扩展进行 EGL。
但我无法找到示例或示例代码来让它运行。
在Vulkan specs 1.0.9(第180页)中,我们有以下内容:
typedef struct VkMemoryHeap {
VkDeviceSize size;
VkMemoryHeapFlags flags;
} VkMemoryHeap;
Run Code Online (Sandbox Code Playgroud)
而这个描述:
•size是堆中的总内存大小(以字节为单位).
•flags是堆的属性标志的位掩码.flags中指定的位是:
typedef enum VkMemoryHeapFlagBits {
VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001,
} VkMemoryHeapFlagBits;
Run Code Online (Sandbox Code Playgroud)
但是当我查询时,我的VkPhysicalDeviceMemoryProperties 标志零值.我的代码与Vulkan SDK vkjson_info.exe工具的输出相匹配,后者从我的GPU输出一个带有属性的JSON文件.
这里缺少什么?
我正在阅读Vulkan内存分配 - 内存主机,似乎可以使用天真的malloc/realloc/free函数实现VkAllocationCallbacks.
typedef struct VkAllocationCallbacks {
void* pUserData;
PFN_vkAllocationFunction pfnAllocation;
PFN_vkReallocationFunction pfnReallocation;
PFN_vkFreeFunction pfnFree;
PFN_vkInternalAllocationNotification pfnInternalAllocation;
PFN_vkInternalFreeNotification pfnInternalFree;
} VkAllocationCallbacks;
Run Code Online (Sandbox Code Playgroud)
但我发现实现自己的vkAllocationCallback只有两个可能的原因:
我在这里错过了什么吗?什么样的应用程序值得实现vkAllocationCallbacks?
与其他Vulkan的结构不同,其中所有结构都type pArrayName*;具有uint32_t arrayNameCount数组长度的伴随,struct VkPipelineMultisampleStateCreateInfo不定义任何sampleMaskCountfor字段const VkSampleMask* pSampleMask;.
该福尔康文档说,关于有效使用下列内容:
"如果pSampleMask不是NULL,则pSampleMask必须是指向⌈rasterizationSamples/32⌉VkSampleMask值数组的指针."
但是 VkSampleCountFlagBits rasterizationSamples;有点价值:
rasterizationSamples是一个VkSampleCountFlagBits,指定光栅化中使用的每个像素的样本数.
到现在为止还挺好.
但是VkSampleCountFlagBits是2个幂的枚举,范围从0x01到0x40(或01到64十进制).可能的ANDed值的范围可以是01到127.所以我想从1到31的按位值将导致a pSampleMask 长度为0; 从32到63的值将给出长度2,依此类推.
那是对的吗 ?我真的很笨!