mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 08:50:13 +01:00
radv: Implement VK_KHR_draw_indirect_count.
Literally the same as the AMD ext. Passes *indirect_draw_count* CTS tests. Reviewed-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
This commit is contained in:
parent
b0002e4e05
commit
a29bc043ae
2 changed files with 50 additions and 0 deletions
|
|
@ -3398,6 +3398,55 @@ void radv_CmdDrawIndexedIndirectCountAMD(
|
|||
radv_draw(cmd_buffer, &info);
|
||||
}
|
||||
|
||||
void radv_CmdDrawIndirectCountKHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer _buffer,
|
||||
VkDeviceSize offset,
|
||||
VkBuffer _countBuffer,
|
||||
VkDeviceSize countBufferOffset,
|
||||
uint32_t maxDrawCount,
|
||||
uint32_t stride)
|
||||
{
|
||||
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
RADV_FROM_HANDLE(radv_buffer, buffer, _buffer);
|
||||
RADV_FROM_HANDLE(radv_buffer, count_buffer, _countBuffer);
|
||||
struct radv_draw_info info = {};
|
||||
|
||||
info.count = maxDrawCount;
|
||||
info.indirect = buffer;
|
||||
info.indirect_offset = offset;
|
||||
info.count_buffer = count_buffer;
|
||||
info.count_buffer_offset = countBufferOffset;
|
||||
info.stride = stride;
|
||||
|
||||
radv_draw(cmd_buffer, &info);
|
||||
}
|
||||
|
||||
void radv_CmdDrawIndexedIndirectCountKHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
VkBuffer _buffer,
|
||||
VkDeviceSize offset,
|
||||
VkBuffer _countBuffer,
|
||||
VkDeviceSize countBufferOffset,
|
||||
uint32_t maxDrawCount,
|
||||
uint32_t stride)
|
||||
{
|
||||
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
RADV_FROM_HANDLE(radv_buffer, buffer, _buffer);
|
||||
RADV_FROM_HANDLE(radv_buffer, count_buffer, _countBuffer);
|
||||
struct radv_draw_info info = {};
|
||||
|
||||
info.indexed = true;
|
||||
info.count = maxDrawCount;
|
||||
info.indirect = buffer;
|
||||
info.indirect_offset = offset;
|
||||
info.count_buffer = count_buffer;
|
||||
info.count_buffer_offset = countBufferOffset;
|
||||
info.stride = stride;
|
||||
|
||||
radv_draw(cmd_buffer, &info);
|
||||
}
|
||||
|
||||
struct radv_dispatch_info {
|
||||
/**
|
||||
* Determine the layout of the grid (in block units) to be used.
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ EXTENSIONS = [
|
|||
Extension('VK_KHR_descriptor_update_template', 1, True),
|
||||
Extension('VK_KHR_device_group', 1, True),
|
||||
Extension('VK_KHR_device_group_creation', 1, True),
|
||||
Extension('VK_KHR_draw_indirect_count', 1, True),
|
||||
Extension('VK_KHR_external_fence', 1, 'device->rad_info.has_syncobj_wait_for_submit'),
|
||||
Extension('VK_KHR_external_fence_capabilities', 1, True),
|
||||
Extension('VK_KHR_external_fence_fd', 1, 'device->rad_info.has_syncobj_wait_for_submit'),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue