* Fix variable naming
* Check if VK_KHR_get_physical_device_properties2 is actually supported
* Fix extension detection logic
Device extension data wasn't cleared after enumerating each physical device, essentially checking if ANY device supports that extensions, not just the selected device
* Vulkan: add conservative rasterization
* Vulkan: check device features for caps and state
* Vulkan: add line AA
* Don't assert in init()
* Vulkan: fix swapchain reset logic and handle lost surface
* Vulkan: report dedicated memory info in Stats
* Vulkan: fix sRGB backbuffer pipeline hash
* Vulkan: check BGFX_RESET_SUSPEND
* Fix typo in SPIR-V id
* Use backend-agnostic shaderc output
...as opposed to directly storing and comparing against Vulkan and WebGPU enums. This is backwards-compatible with existing code and shaders.
* Remove comments and Undefined value
* Vulkan: query max anisotropy
...instead of hardcoding it to 4
* Vulkan: use BGFX_CONFIG_MIP_LOD_BIAS
* Vulkan: consider BGFX_CONFIG_PREFER_DISCRETE_GPU at device selection
* Vulkan: implement resizing for textures with backbuffer ratio size
* Vulkan: use correct framebuffer attachment layer and mip
* Vulkan: bind correct image mip
* Cleanup
* Vulkan: add indirect draw support
* Vulkan: add support for BGFX_DEBUG_WIREFRAME
* Vulkan: check all extensions and layers
... not just the first 64
* Vulkan: add support for VPRT
https://github.com/bkaradzic/bgfx/issues/2320
* Vulkan: allow setting image debug name
* Vulkan: record multiple frames ahead of the GPU
...instead of stalling on the CPU after each submit. Controllable with init.resolution.maxFrameLatency, same as the D3D11/12 backends.
* Vulkan: some additional checks at swapchain creation
* Vulkan: stall for screenshot
* Vulkan: move blit out of render pass
* Vulkan: deferred framebuffer deletion
* Vulkan: fix cubemap blit
* Cleanup
* Vulkan: storage image must have GENERAL layout and has no sampler
* Vulkan: use slightly more fine-grained barriers
* Vulkan: readTexture should stall, too
* Cleanup
* Vulkan: selective acquire
Don't acquire a swapchain image if no view renders to the backbuffer, avoiding stalls due to vsync or reaching the backbuffer limit
* Vulkan: deferred program and state cache deletion
* Vulkan: fix debug blit
* fix resize buffer with compute read/write flag error
* only update dynamic buffer with compute read flag
Co-authored-by: chenjunjie <junjie020@163.com>
* Fix out of bounds index for unknown device types
* Vulkan: Insert barrier before image host reads
* Vulkan: Make commands wait for the wait semaphore
Making commands wait at BOTTOM_OF_PIPE is a no-op, resulting in instant execution
* Vulkan: Insert barrier between views/dispatches instead of waiting on the host
* Vulkan: Fix determination of access flag from image layout
This fixes two write-after-write races with copy commands after a layout transition to VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
* Add BGFX_MAX_FRAME_LATENCY define
Affected backends either used a magic value of 3 or defined their own XX_MAX_FRAMES_IN_FLIGHT to be 3
* Vulkan: Include indirect draw in pipeline barrier
* Vulkan: honor init.resolution.numBackBuffers for swapchain size
* Make max frame latency configurable at compile time
When using this compute shader, the following validation errors appear.
This patch fixes the issue.
BUFFER_WR(cBuffer, uint, 1);
NUM_THREADS(1u, 1u, 1u)
void main()
{
cBuffer[0] = 0u;
}
../../../src/renderer_vk.cpp (628): BGFX ---E- CommandBuffer,
Validation, 0: Validation Error: [
VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359 ] Object 0: handle =
0x7fffe453ec88, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID =
0x82756c54 | vkCmdBindDescriptorSets(): Attempting to bind 1 descriptorSets
with 0 dynamic descriptors, but dynamicOffsetCount is 1. It should exactly
match the number of dynamic descriptors. The Vulkan spec states:
dynamicOffsetCount must be equal to the total number of dynamic descriptors
in pDescriptorSets
(https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/
vkspec.html#VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359)
../../../src/renderer_vk.cpp (628): BGFX ---E- Pipeline,
Validation, 0: Validation Error: [ VUID-vkCmdDispatch-None-02697 ] Object 0:
handle = 0xcd00000000cd, type = VK_OBJECT_TYPE_PIPELINE; Object 1: handle =
0x630000000063, type = VK_OBJECT_TYPE_PIPELINE_LAYOUT; Object 2:
VK_NULL_HANDLE, type = VK_OBJECT_TYPE_PIPELINE_LAYOUT; | MessageID =
0xfd9e3152 | vkCmdDispatch(): VkPipeline 0xcd00000000cd[] defined with
VkPipelineLayout 0x630000000063[] is not compatible for maximum set
statically used 0 with bound descriptor sets, last bound with
VkPipelineLayout 0x0[] The Vulkan spec states: For each set n that is
statically used by the VkPipeline bound to the pipeline bind point used by
this command, a descriptor set must have been bound to n at the same
pipeline bind point, with a VkPipelineLayout that is compatible for set n,
with the VkPipelineLayout used to create the current VkPipeline, as
described in Pipeline Layout Compatibility
(https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/
vkspec.html#VUID-vkCmdDispatch-None-02697)
../../../src/renderer_vk.cpp (628): BGFX ---E- CommandBuffer,
Validation, 0: Validation Error: [
UNASSIGNED-CoreValidation-DrawState-DescriptorSetNotBound ] Object 0: handle
= 0x7fffe453ec88, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID =
0xcde11083 | VkPipeline 0xcd00000000cd[] uses set #0 but that set is not
bound.
The default provoking vertex on OpenGL is the last of a triangle, but
on D3D and Vulkan it is the first.
This patch sets the provoking vertex to the first vertex on OpenGL.