[Mesa-dev] [PATCH 2/2] [RFC] radv: use separate bindings for graphics and compute descriptors
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Tue Jan 23 21:07:29 UTC 2018
On Tue, Jan 23, 2018 at 2:27 PM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> The Vulkan spec says:
>
> "pipelineBindPoint is a VkPipelineBindPoint indicating whether
> the descriptors will be used by graphics pipelines or compute
> pipelines. There is a separate set of bind points for each of
> graphics and compute, so binding one does not disturb the other."
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104732
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/amd/vulkan/radv_cmd_buffer.c | 138 ++++++++++++++++++++++++++-------------
> src/amd/vulkan/radv_meta.c | 21 +++++-
> src/amd/vulkan/radv_private.h | 53 +++++++++++++--
> 3 files changed, 159 insertions(+), 53 deletions(-)
>
> diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
> index 1143aa085f..540dc8a057 100644
> --- a/src/amd/vulkan/radv_cmd_buffer.c
> +++ b/src/amd/vulkan/radv_cmd_buffer.c
> @@ -261,7 +261,8 @@ radv_cmd_buffer_destroy(struct radv_cmd_buffer *cmd_buffer)
> if (cmd_buffer->upload.upload_bo)
> cmd_buffer->device->ws->buffer_destroy(cmd_buffer->upload.upload_bo);
> cmd_buffer->device->ws->cs_destroy(cmd_buffer->cs);
> - free(cmd_buffer->push_descriptors.set.mapped_ptr);
> + free(cmd_buffer->graphics_push_descriptors.set.mapped_ptr);
> + free(cmd_buffer->compute_push_descriptors.set.mapped_ptr);
> vk_free(&cmd_buffer->pool->alloc, cmd_buffer);
> }
>
> @@ -482,21 +483,31 @@ radv_save_pipeline(struct radv_cmd_buffer *cmd_buffer,
> }
>
> void radv_set_descriptor_set(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point,
> struct radv_descriptor_set *set,
> unsigned idx)
> {
> - cmd_buffer->descriptors[idx] = set;
> + struct radv_descriptor_state *descriptors_state =
> + radv_get_descriptors_state(cmd_buffer, bind_point);
> + struct radv_descriptor_set **descriptors =
> + radv_get_descriptors_set(cmd_buffer, bind_point);
> +
> + descriptors[idx] = set;
> if (set)
> - cmd_buffer->state.valid_descriptors |= (1u << idx);
> + descriptors_state->valid |= (1u << idx);
> else
> - cmd_buffer->state.valid_descriptors &= ~(1u << idx);
> - cmd_buffer->state.descriptors_dirty |= (1u << idx);
> -
> + descriptors_state->valid &= ~(1u << idx);
> + descriptors_state->dirty |= (1u << idx);
> }
>
> static void
> -radv_save_descriptors(struct radv_cmd_buffer *cmd_buffer)
> +radv_save_descriptors(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point)
> {
> + struct radv_descriptor_state *descriptors_state =
> + radv_get_descriptors_state(cmd_buffer, bind_point);
> + struct radv_descriptor_set **descriptors =
> + radv_get_descriptors_set(cmd_buffer, bind_point);
> struct radv_device *device = cmd_buffer->device;
> struct radeon_winsys_cs *cs = cmd_buffer->cs;
> uint32_t data[MAX_SETS * 2] = {};
> @@ -507,8 +518,8 @@ radv_save_descriptors(struct radv_cmd_buffer *cmd_buffer)
> MAYBE_UNUSED unsigned cdw_max = radeon_check_space(device->ws,
> cmd_buffer->cs, 4 + MAX_SETS * 2);
>
> - for_each_bit(i, cmd_buffer->state.valid_descriptors) {
> - struct radv_descriptor_set *set = cmd_buffer->descriptors[i];
> + for_each_bit(i, descriptors_state->valid) {
> + struct radv_descriptor_set *set = descriptors[i];
> data[i * 2] = (uintptr_t)set;
> data[i * 2 + 1] = (uintptr_t)set >> 32;
> }
> @@ -1705,9 +1716,12 @@ radv_emit_descriptor_set_userdata(struct radv_cmd_buffer *cmd_buffer,
> }
>
> static void
> -radv_flush_push_descriptors(struct radv_cmd_buffer *cmd_buffer)
> +radv_flush_push_descriptors(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point)
> {
> - struct radv_descriptor_set *set = &cmd_buffer->push_descriptors.set;
> + struct radv_push_descriptor_set *push_descriptors =
> + radv_get_push_descriptors(cmd_buffer, bind_point);
> + struct radv_descriptor_set *set = &push_descriptors->set;
> unsigned bo_offset;
>
> if (!radv_cmd_buffer_upload_data(cmd_buffer, set->size, 32,
> @@ -1720,8 +1734,13 @@ radv_flush_push_descriptors(struct radv_cmd_buffer *cmd_buffer)
> }
>
> static void
> -radv_flush_indirect_descriptor_sets(struct radv_cmd_buffer *cmd_buffer)
> +radv_flush_indirect_descriptor_sets(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point)
> {
> + struct radv_descriptor_set **descriptors =
> + radv_get_descriptors_set(cmd_buffer, bind_point);
> + struct radv_descriptor_state *descriptors_state =
> + radv_get_descriptors_state(cmd_buffer, bind_point);
> uint32_t size = MAX_SETS * 2 * 4;
> uint32_t offset;
> void *ptr;
> @@ -1733,8 +1752,8 @@ radv_flush_indirect_descriptor_sets(struct radv_cmd_buffer *cmd_buffer)
> for (unsigned i = 0; i < MAX_SETS; i++) {
> uint32_t *uptr = ((uint32_t *)ptr) + i * 2;
> uint64_t set_va = 0;
> - struct radv_descriptor_set *set = cmd_buffer->descriptors[i];
> - if (cmd_buffer->state.valid_descriptors & (1u << i))
> + struct radv_descriptor_set *set = descriptors[i];
> + if (descriptors_state->valid & (1u << i))
> set_va = set->va;
> uptr[0] = set_va & 0xffffffff;
> uptr[1] = set_va >> 32;
> @@ -1774,35 +1793,42 @@ static void
> radv_flush_descriptors(struct radv_cmd_buffer *cmd_buffer,
> VkShaderStageFlags stages)
> {
> + VkPipelineBindPoint bind_point = stages & VK_SHADER_STAGE_COMPUTE_BIT ?
> + VK_PIPELINE_BIND_POINT_COMPUTE :
> + VK_PIPELINE_BIND_POINT_GRAPHICS;
> + struct radv_descriptor_set **descriptors =
> + radv_get_descriptors_set(cmd_buffer, bind_point);
> + struct radv_descriptor_state *descriptors_state =
> + radv_get_descriptors_state(cmd_buffer, bind_point);
> unsigned i;
>
> - if (!cmd_buffer->state.descriptors_dirty)
> + if (!descriptors_state->dirty)
> return;
>
> - if (cmd_buffer->state.push_descriptors_dirty)
> - radv_flush_push_descriptors(cmd_buffer);
> + if (descriptors_state->push_dirty)
> + radv_flush_push_descriptors(cmd_buffer, bind_point);
>
> if ((cmd_buffer->state.pipeline && cmd_buffer->state.pipeline->need_indirect_descriptor_sets) ||
> (cmd_buffer->state.compute_pipeline && cmd_buffer->state.compute_pipeline->need_indirect_descriptor_sets)) {
> - radv_flush_indirect_descriptor_sets(cmd_buffer);
> + radv_flush_indirect_descriptor_sets(cmd_buffer, bind_point);
> }
>
> MAYBE_UNUSED unsigned cdw_max = radeon_check_space(cmd_buffer->device->ws,
> cmd_buffer->cs,
> MAX_SETS * MESA_SHADER_STAGES * 4);
>
> - for_each_bit(i, cmd_buffer->state.descriptors_dirty) {
> - struct radv_descriptor_set *set = cmd_buffer->descriptors[i];
> - if (!(cmd_buffer->state.valid_descriptors & (1u << i)))
> + for_each_bit(i, descriptors_state->dirty) {
> + struct radv_descriptor_set *set = descriptors[i];
> + if (!(descriptors_state->valid & (1u << i)))
> continue;
>
> radv_emit_descriptor_set_userdata(cmd_buffer, stages, set, i);
> }
> - cmd_buffer->state.descriptors_dirty = 0;
> - cmd_buffer->state.push_descriptors_dirty = false;
> + descriptors_state->dirty = 0;
> + descriptors_state->push_dirty = false;
>
> if (unlikely(cmd_buffer->device->trace_bo))
> - radv_save_descriptors(cmd_buffer);
> + radv_save_descriptors(cmd_buffer, bind_point);
>
> assert(cmd_buffer->cs->cdw <= cdw_max);
> }
> @@ -2425,11 +2451,12 @@ void radv_CmdBindIndexBuffer(
>
> static void
> radv_bind_descriptor_set(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point,
> struct radv_descriptor_set *set, unsigned idx)
> {
> struct radeon_winsys *ws = cmd_buffer->device->ws;
>
> - radv_set_descriptor_set(cmd_buffer, set, idx);
> + radv_set_descriptor_set(cmd_buffer, bind_point, set, idx);
> if (!set)
> return;
>
> @@ -2460,7 +2487,7 @@ void radv_CmdBindDescriptorSets(
> for (unsigned i = 0; i < descriptorSetCount; ++i) {
> unsigned idx = i + firstSet;
> RADV_FROM_HANDLE(radv_descriptor_set, set, pDescriptorSets[i]);
> - radv_bind_descriptor_set(cmd_buffer, set, idx);
> + radv_bind_descriptor_set(cmd_buffer, pipelineBindPoint, set, idx);
>
> for(unsigned j = 0; j < set->layout->dynamic_offset_count; ++j, ++dyn_idx) {
> unsigned idx = j + layout->set[i + firstSet].dynamic_offset_start;
> @@ -2486,26 +2513,29 @@ void radv_CmdBindDescriptorSets(
>
> static bool radv_init_push_descriptor_set(struct radv_cmd_buffer *cmd_buffer,
> struct radv_descriptor_set *set,
> - struct radv_descriptor_set_layout *layout)
> + struct radv_descriptor_set_layout *layout,
> + VkPipelineBindPoint bind_point)
> {
> + struct radv_push_descriptor_set *push_descriptors =
> + radv_get_push_descriptors(cmd_buffer, bind_point);
> set->size = layout->size;
> set->layout = layout;
>
> - if (cmd_buffer->push_descriptors.capacity < set->size) {
> + if (push_descriptors->capacity < set->size) {
> size_t new_size = MAX2(set->size, 1024);
> - new_size = MAX2(new_size, 2 * cmd_buffer->push_descriptors.capacity);
> + new_size = MAX2(new_size, 2 * push_descriptors->capacity);
> new_size = MIN2(new_size, 96 * MAX_PUSH_DESCRIPTORS);
>
> free(set->mapped_ptr);
> set->mapped_ptr = malloc(new_size);
>
> if (!set->mapped_ptr) {
> - cmd_buffer->push_descriptors.capacity = 0;
> + push_descriptors->capacity = 0;
> cmd_buffer->record_result = VK_ERROR_OUT_OF_HOST_MEMORY;
> return false;
> }
>
> - cmd_buffer->push_descriptors.capacity = new_size;
> + push_descriptors->capacity = new_size;
> }
>
> return true;
> @@ -2541,7 +2571,7 @@ void radv_meta_push_descriptor_set(
> radv_descriptor_set_to_handle(push_set),
> descriptorWriteCount, pDescriptorWrites, 0, NULL);
>
> - radv_set_descriptor_set(cmd_buffer, push_set, set);
> + radv_set_descriptor_set(cmd_buffer, pipelineBindPoint, push_set, set);
> }
>
> void radv_CmdPushDescriptorSetKHR(
> @@ -2554,19 +2584,25 @@ void radv_CmdPushDescriptorSetKHR(
> {
> RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
> RADV_FROM_HANDLE(radv_pipeline_layout, layout, _layout);
> - struct radv_descriptor_set *push_set = &cmd_buffer->push_descriptors.set;
> + struct radv_descriptor_state *descriptors_state =
> + radv_get_descriptors_state(cmd_buffer, pipelineBindPoint);
> + struct radv_push_descriptor_set *push_descriptors =
> + radv_get_push_descriptors(cmd_buffer, pipelineBindPoint);
> + struct radv_descriptor_set *push_set = &push_descriptors->set;
>
> assert(layout->set[set].layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR);
>
> - if (!radv_init_push_descriptor_set(cmd_buffer, push_set, layout->set[set].layout))
> + if (!radv_init_push_descriptor_set(cmd_buffer, push_set,
> + layout->set[set].layout,
> + pipelineBindPoint))
> return;
>
> radv_update_descriptor_sets(cmd_buffer->device, cmd_buffer,
> radv_descriptor_set_to_handle(push_set),
> descriptorWriteCount, pDescriptorWrites, 0, NULL);
>
> - radv_set_descriptor_set(cmd_buffer, push_set, set);
> - cmd_buffer->state.push_descriptors_dirty = true;
> + radv_set_descriptor_set(cmd_buffer, pipelineBindPoint, push_set, set);
> + descriptors_state->push_dirty = true;
> }
>
> void radv_CmdPushDescriptorSetWithTemplateKHR(
> @@ -2578,18 +2614,25 @@ void radv_CmdPushDescriptorSetWithTemplateKHR(
> {
> RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
> RADV_FROM_HANDLE(radv_pipeline_layout, layout, _layout);
> - struct radv_descriptor_set *push_set = &cmd_buffer->push_descriptors.set;
> + RADV_FROM_HANDLE(radv_descriptor_update_template, templ, descriptorUpdateTemplate);
> + struct radv_descriptor_state *descriptors_state =
> + radv_get_descriptors_state(cmd_buffer, templ->bind_point);
> + struct radv_push_descriptor_set *push_descriptors =
> + radv_get_push_descriptors(cmd_buffer, templ->bind_point);
> + struct radv_descriptor_set *push_set = &push_descriptors->set;
>
> assert(layout->set[set].layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR);
>
> - if (!radv_init_push_descriptor_set(cmd_buffer, push_set, layout->set[set].layout))
> + if (!radv_init_push_descriptor_set(cmd_buffer, push_set,
> + layout->set[set].layout,
> + templ->bind_point))
> return;
>
> radv_update_descriptor_set_with_template(cmd_buffer->device, cmd_buffer, push_set,
> descriptorUpdateTemplate, pData);
>
> - radv_set_descriptor_set(cmd_buffer, push_set, set);
> - cmd_buffer->state.push_descriptors_dirty = true;
> + radv_set_descriptor_set(cmd_buffer, templ->bind_point, push_set, set);
> + descriptors_state->push_dirty = true;
> }
>
> void radv_CmdPushConstants(VkCommandBuffer commandBuffer,
> @@ -2702,9 +2745,13 @@ radv_emit_compute_pipeline(struct radv_cmd_buffer *cmd_buffer)
> radv_save_pipeline(cmd_buffer, pipeline, RING_COMPUTE);
> }
>
> -static void radv_mark_descriptor_sets_dirty(struct radv_cmd_buffer *cmd_buffer)
> +static void radv_mark_descriptor_sets_dirty(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point)
> {
> - cmd_buffer->state.descriptors_dirty |= cmd_buffer->state.valid_descriptors;
> + struct radv_descriptor_state *descriptors_state =
> + radv_get_descriptors_state(cmd_buffer, bind_point);
> +
> + descriptors_state->dirty |= descriptors_state->valid;
> }
>
> void radv_CmdBindPipeline(
> @@ -2719,7 +2766,7 @@ void radv_CmdBindPipeline(
> case VK_PIPELINE_BIND_POINT_COMPUTE:
> if (cmd_buffer->state.compute_pipeline == pipeline)
> return;
> - radv_mark_descriptor_sets_dirty(cmd_buffer);
> + radv_mark_descriptor_sets_dirty(cmd_buffer, pipelineBindPoint);
>
> cmd_buffer->state.compute_pipeline = pipeline;
> cmd_buffer->push_constant_stages |= VK_SHADER_STAGE_COMPUTE_BIT;
> @@ -2727,7 +2774,7 @@ void radv_CmdBindPipeline(
> case VK_PIPELINE_BIND_POINT_GRAPHICS:
> if (cmd_buffer->state.pipeline == pipeline)
> return;
> - radv_mark_descriptor_sets_dirty(cmd_buffer);
> + radv_mark_descriptor_sets_dirty(cmd_buffer, pipelineBindPoint);
>
> cmd_buffer->state.pipeline = pipeline;
> if (!pipeline)
> @@ -3037,7 +3084,8 @@ void radv_CmdExecuteCommands(
> primary->state.dirty |= RADV_CMD_DIRTY_PIPELINE |
> RADV_CMD_DIRTY_INDEX_BUFFER |
> RADV_CMD_DIRTY_DYNAMIC_ALL;
> - radv_mark_descriptor_sets_dirty(primary);
> + radv_mark_descriptor_sets_dirty(primary, VK_PIPELINE_BIND_POINT_GRAPHICS);
> + radv_mark_descriptor_sets_dirty(primary, VK_PIPELINE_BIND_POINT_COMPUTE);
> }
>
> VkResult radv_CreateCommandPool(
> diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c
> index f022247097..4ca6e11770 100644
> --- a/src/amd/vulkan/radv_meta.c
> +++ b/src/amd/vulkan/radv_meta.c
> @@ -34,6 +34,15 @@ void
> radv_meta_save(struct radv_meta_saved_state *state,
> struct radv_cmd_buffer *cmd_buffer, uint32_t flags)
> {
> + VkPipelineBindPoint bind_point =
> + flags & RADV_META_SAVE_GRAPHICS_PIPELINE ?
> + VK_PIPELINE_BIND_POINT_GRAPHICS :
> + VK_PIPELINE_BIND_POINT_COMPUTE;
> + struct radv_descriptor_state *descriptors_state =
> + radv_get_descriptors_state(cmd_buffer, bind_point);
> + struct radv_descriptor_set **descriptors =
> + radv_get_descriptors_set(cmd_buffer, bind_point);
> +
> assert(flags & (RADV_META_SAVE_GRAPHICS_PIPELINE |
> RADV_META_SAVE_COMPUTE_PIPELINE));
>
> @@ -73,8 +82,8 @@ radv_meta_save(struct radv_meta_saved_state *state,
> }
>
> if (state->flags & RADV_META_SAVE_DESCRIPTORS) {
> - if (cmd_buffer->state.valid_descriptors & (1 << 0))
> - state->old_descriptor_set0 = cmd_buffer->descriptors[0];
> + if (descriptors_state->valid & (1 << 0))
> + state->old_descriptor_set0 = descriptors[0];
> else
> state->old_descriptor_set0 = NULL;
> }
> @@ -97,6 +106,11 @@ void
> radv_meta_restore(const struct radv_meta_saved_state *state,
> struct radv_cmd_buffer *cmd_buffer)
> {
> + VkPipelineBindPoint bind_point =
> + state->flags & RADV_META_SAVE_GRAPHICS_PIPELINE ?
> + VK_PIPELINE_BIND_POINT_GRAPHICS :
> + VK_PIPELINE_BIND_POINT_COMPUTE;
> +
> if (state->flags & RADV_META_SAVE_GRAPHICS_PIPELINE) {
> radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
> VK_PIPELINE_BIND_POINT_GRAPHICS,
> @@ -127,7 +141,8 @@ radv_meta_restore(const struct radv_meta_saved_state *state,
> }
>
> if (state->flags & RADV_META_SAVE_DESCRIPTORS) {
> - radv_set_descriptor_set(cmd_buffer, state->old_descriptor_set0, 0);
> + radv_set_descriptor_set(cmd_buffer, bind_point,
> + state->old_descriptor_set0, 0);
> }
>
> if (state->flags & RADV_META_SAVE_CONSTANTS) {
> diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
> index 963a28d10c..a4547a5116 100644
> --- a/src/amd/vulkan/radv_private.h
> +++ b/src/amd/vulkan/radv_private.h
> @@ -881,13 +881,18 @@ struct radv_attachment_state {
> VkImageLayout current_layout;
> };
>
> +struct radv_descriptor_state {
> + uint32_t dirty;
> + uint32_t valid;
> + bool push_dirty;
> +};
> +
> struct radv_cmd_state {
> /* Vertex descriptors */
> bool vb_prefetch_dirty;
> uint64_t vb_va;
> unsigned vb_size;
>
> - bool push_descriptors_dirty;
> bool predicating;
> uint32_t dirty;
>
> @@ -915,11 +920,13 @@ struct radv_cmd_state {
> enum radv_cmd_flush_bits flush_bits;
> unsigned active_occlusion_queries;
> float offset_scale;
> - uint32_t descriptors_dirty;
> - uint32_t valid_descriptors;
> uint32_t trace_id;
> uint32_t last_ia_multi_vgt_param;
>
> + /* Descriptors */
> + struct radv_descriptor_state graphics_descriptors;
> + struct radv_descriptor_state compute_descriptors;
I think I'd prefer if we move the push descriptors and the descriptor
set arrays also into these, and then move this outside radv_cmd_state
as an array
struct radv_descriptor_state bind_points[K_PIPELINE_BIND_POINT_RANGE_SIZE]
> +
> uint32_t last_num_instances;
> uint32_t last_first_instance;
> uint32_t last_vertex_offset;
> @@ -967,9 +974,12 @@ struct radv_cmd_buffer {
> uint8_t push_constants[MAX_PUSH_CONSTANTS_SIZE];
> uint32_t dynamic_buffers[4 * MAX_DYNAMIC_BUFFERS];
> VkShaderStageFlags push_constant_stages;
You'll also need to move the dynamic_buffers to the bind points, as
well as mess with the logic for the push_constant_stages (and probably
having some split masks for the dynamic buffers & different push
constant size per PipelineLayout?)
> - struct radv_push_descriptor_set push_descriptors;
> + struct radv_push_descriptor_set graphics_push_descriptors;
> + struct radv_push_descriptor_set compute_push_descriptors;
> struct radv_descriptor_set meta_push_descriptors;
> - struct radv_descriptor_set *descriptors[MAX_SETS];
> +
> + struct radv_descriptor_set *graphics_descriptors[MAX_SETS];
> + struct radv_descriptor_set *compute_descriptors[MAX_SETS];
>
> struct radv_cmd_buffer_upload upload;
>
> @@ -1076,6 +1086,38 @@ bool radv_get_memory_fd(struct radv_device *device,
> struct radv_device_memory *memory,
> int *pFD);
>
> +static inline struct radv_descriptor_state *
> +radv_get_descriptors_state(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point)
> +{
> + if (bind_point == VK_PIPELINE_BIND_POINT_GRAPHICS)
> + return &cmd_buffer->state.graphics_descriptors;
> +
> + assert(bind_point == VK_PIPELINE_BIND_POINT_COMPUTE);
> + return &cmd_buffer->state.compute_descriptors;
> +}
> +
> +static inline struct radv_descriptor_set **
> +radv_get_descriptors_set(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point)
> +{
> + if (bind_point == VK_PIPELINE_BIND_POINT_GRAPHICS)
> + return cmd_buffer->graphics_descriptors;
> +
> + assert(bind_point == VK_PIPELINE_BIND_POINT_COMPUTE);
> + return cmd_buffer->compute_descriptors;
> +}
> +
> +static inline struct radv_push_descriptor_set *
> +radv_get_push_descriptors(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point)
> +{
> + if (bind_point == VK_PIPELINE_BIND_POINT_GRAPHICS)
> + return &cmd_buffer->graphics_push_descriptors;
> +
> + assert(bind_point == VK_PIPELINE_BIND_POINT_COMPUTE);
> + return &cmd_buffer->compute_push_descriptors;
> +}
> /*
> * Takes x,y,z as exact numbers of invocations, instead of blocks.
> *
> @@ -1663,6 +1705,7 @@ VkResult radv_alloc_sem_info(struct radv_winsys_sem_info *sem_info,
> void radv_free_sem_info(struct radv_winsys_sem_info *sem_info);
>
> void radv_set_descriptor_set(struct radv_cmd_buffer *cmd_buffer,
> + VkPipelineBindPoint bind_point,
> struct radv_descriptor_set *set,
> unsigned idx);
>
> --
> 2.16.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list