mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 11:28:05 +02:00
radv: implement vkCmdBind{Resource,Sampler}HeapEXT()
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39483>
This commit is contained in:
parent
7e63a2050b
commit
86e8d171fc
3 changed files with 53 additions and 0 deletions
|
|
@ -149,6 +149,7 @@ radv_meta_save(struct radv_cmd_buffer *cmd_buffer, uint32_t flags)
|
|||
state->graphics_descriptors.old_descriptor_set0 = descriptors_state->sets[0];
|
||||
state->graphics_descriptors.old_descriptor_set0_valid = !!(descriptors_state->valid & 0x1);
|
||||
state->graphics_descriptors.old_descriptor_buffer0 = descriptors_state->descriptor_buffers[0];
|
||||
state->graphics_descriptors.old_descriptor_heaps_dirty = descriptors_state->dirty_heaps;
|
||||
}
|
||||
|
||||
if (save_flags & RADV_META_SAVE_COMPUTE_DESCRIPTORS) {
|
||||
|
|
@ -158,6 +159,7 @@ radv_meta_save(struct radv_cmd_buffer *cmd_buffer, uint32_t flags)
|
|||
state->compute_descriptors.old_descriptor_set0 = descriptors_state->sets[0];
|
||||
state->compute_descriptors.old_descriptor_set0_valid = !!(descriptors_state->valid & 0x1);
|
||||
state->compute_descriptors.old_descriptor_buffer0 = descriptors_state->descriptor_buffers[0];
|
||||
state->compute_descriptors.old_descriptor_heaps_dirty = descriptors_state->dirty_heaps;
|
||||
}
|
||||
|
||||
if (save_flags & RADV_META_SAVE_CONSTANTS)
|
||||
|
|
@ -220,6 +222,7 @@ radv_meta_end(struct radv_cmd_buffer *cmd_buffer)
|
|||
state->graphics_descriptors.old_descriptor_set0, 0);
|
||||
}
|
||||
descriptors_state->descriptor_buffers[0] = state->graphics_descriptors.old_descriptor_buffer0;
|
||||
descriptors_state->dirty_heaps = state->graphics_descriptors.old_descriptor_heaps_dirty;
|
||||
}
|
||||
|
||||
if (state->flags & RADV_META_SAVE_COMPUTE_DESCRIPTORS) {
|
||||
|
|
@ -230,6 +233,7 @@ radv_meta_end(struct radv_cmd_buffer *cmd_buffer)
|
|||
state->compute_descriptors.old_descriptor_set0, 0);
|
||||
}
|
||||
descriptors_state->descriptor_buffers[0] = state->compute_descriptors.old_descriptor_buffer0;
|
||||
descriptors_state->dirty_heaps = state->compute_descriptors.old_descriptor_heaps_dirty;
|
||||
}
|
||||
|
||||
if (state->flags & RADV_META_SAVE_CONSTANTS) {
|
||||
|
|
|
|||
|
|
@ -1307,6 +1307,9 @@ radv_reset_cmd_buffer(struct vk_command_buffer *vk_cmd_buffer, UNUSED VkCommandB
|
|||
cmd_buffer->descriptors[i].dirty = 0;
|
||||
cmd_buffer->descriptors[i].valid = 0;
|
||||
cmd_buffer->descriptors[i].dirty_dynamic = false;
|
||||
|
||||
cmd_buffer->descriptors[i].dirty_heaps = 0;
|
||||
cmd_buffer->descriptors[i].valid_heaps = 0;
|
||||
}
|
||||
|
||||
radv_cmd_buffer_reset_rendering(cmd_buffer);
|
||||
|
|
@ -8440,6 +8443,8 @@ radv_mark_descriptors_dirty(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPo
|
|||
descriptors_state->dirty |= descriptors_state->valid;
|
||||
if (descriptors_state->dynamic_offset_count)
|
||||
descriptors_state->dirty_dynamic = true;
|
||||
|
||||
descriptors_state->dirty_heaps |= descriptors_state->valid_heaps;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -16272,3 +16277,42 @@ radv_CmdSetDepthClampRangeEXT(VkCommandBuffer commandBuffer, VkDepthClampModeEXT
|
|||
VK_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
radv_cmd_set_depth_clamp_range(cmd_buffer, depthClampMode, pDepthClampRange);
|
||||
}
|
||||
|
||||
/* VK_EXT_descriptor_heap */
|
||||
static void
|
||||
radv_bind_descriptor_heap(struct radv_cmd_buffer *cmd_buffer, uint32_t idx, uint64_t addr,
|
||||
VkPipelineBindPoint bind_point)
|
||||
{
|
||||
struct radv_descriptor_state *descriptors_state = radv_get_descriptors_state(cmd_buffer, bind_point);
|
||||
|
||||
cmd_buffer->descriptor_heaps[idx] = addr;
|
||||
|
||||
descriptors_state->valid_heaps |= (1u << idx); /* active heaps */
|
||||
descriptors_state->dirty_heaps |= (1u << idx);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_CmdBindSamplerHeapEXT(VkCommandBuffer commandBuffer, const VkBindHeapInfoEXT *pBindInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
radv_bind_descriptor_heap(cmd_buffer, RADV_HEAP_SAMPLER, pBindInfo->heapRange.address,
|
||||
VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
radv_bind_descriptor_heap(cmd_buffer, RADV_HEAP_SAMPLER, pBindInfo->heapRange.address,
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS);
|
||||
radv_bind_descriptor_heap(cmd_buffer, RADV_HEAP_SAMPLER, pBindInfo->heapRange.address,
|
||||
VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
radv_CmdBindResourceHeapEXT(VkCommandBuffer commandBuffer, const VkBindHeapInfoEXT *pBindInfo)
|
||||
{
|
||||
VK_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
radv_bind_descriptor_heap(cmd_buffer, RADV_HEAP_RESOURCE, pBindInfo->heapRange.address,
|
||||
VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
radv_bind_descriptor_heap(cmd_buffer, RADV_HEAP_RESOURCE, pBindInfo->heapRange.address,
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS);
|
||||
radv_bind_descriptor_heap(cmd_buffer, RADV_HEAP_RESOURCE, pBindInfo->heapRange.address,
|
||||
VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -253,6 +253,9 @@ struct radv_descriptor_state {
|
|||
uint64_t descriptor_buffers[MAX_SETS];
|
||||
bool need_indirect_descriptors;
|
||||
uint64_t indirect_descriptor_sets_va;
|
||||
|
||||
uint8_t dirty_heaps;
|
||||
uint8_t valid_heaps;
|
||||
};
|
||||
|
||||
struct radv_push_constant_state {
|
||||
|
|
@ -290,6 +293,7 @@ struct radv_meta_saved_descriptor_state {
|
|||
struct radv_descriptor_set *old_descriptor_set0;
|
||||
bool old_descriptor_set0_valid;
|
||||
uint64_t old_descriptor_buffer0;
|
||||
uint8_t old_descriptor_heaps_dirty;
|
||||
};
|
||||
|
||||
struct radv_meta_saved_state {
|
||||
|
|
@ -525,6 +529,7 @@ struct radv_cmd_buffer {
|
|||
struct radv_push_constant_state push_constant_state[MAX_BIND_POINTS];
|
||||
|
||||
uint64_t descriptor_buffers[MAX_SETS];
|
||||
uint64_t descriptor_heaps[RADV_MAX_HEAPS];
|
||||
|
||||
struct radv_cmd_buffer_upload upload;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue