lavapipe: Use the common vk_enqueue_CmdBindDescriptorSets
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15329>
This commit is contained in:
parent
ac58e93633
commit
f7175bf416
|
@ -344,48 +344,6 @@ VKAPI_ATTR void VKAPI_CALL lvp_CmdPushDescriptorSetWithTemplateKHR(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VKAPI_ATTR void VKAPI_CALL lvp_CmdBindDescriptorSets(
|
|
||||||
VkCommandBuffer commandBuffer,
|
|
||||||
VkPipelineBindPoint pipelineBindPoint,
|
|
||||||
VkPipelineLayout _layout,
|
|
||||||
uint32_t firstSet,
|
|
||||||
uint32_t descriptorSetCount,
|
|
||||||
const VkDescriptorSet* pDescriptorSets,
|
|
||||||
uint32_t dynamicOffsetCount,
|
|
||||||
const uint32_t* pDynamicOffsets)
|
|
||||||
{
|
|
||||||
LVP_FROM_HANDLE(lvp_cmd_buffer, cmd_buffer, commandBuffer);
|
|
||||||
LVP_FROM_HANDLE(lvp_pipeline_layout, layout, _layout);
|
|
||||||
struct vk_cmd_queue_entry *cmd = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc,
|
|
||||||
sizeof(*cmd), 8,
|
|
||||||
VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
|
|
||||||
if (!cmd)
|
|
||||||
return;
|
|
||||||
|
|
||||||
cmd->type = VK_CMD_BIND_DESCRIPTOR_SETS;
|
|
||||||
list_addtail(&cmd->cmd_link, &cmd_buffer->vk.cmd_queue.cmds);
|
|
||||||
|
|
||||||
/* _layout could have been destroyed by when this command executes */
|
|
||||||
struct lvp_descriptor_set_layout **set_layout = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, sizeof(*set_layout) * layout->num_sets, 8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
|
|
||||||
cmd->driver_data = set_layout;
|
|
||||||
for (unsigned i = 0; i < layout->num_sets; i++)
|
|
||||||
set_layout[i] = layout->set[i].layout;
|
|
||||||
|
|
||||||
cmd->u.bind_descriptor_sets.pipeline_bind_point = pipelineBindPoint;
|
|
||||||
cmd->u.bind_descriptor_sets.first_set = firstSet;
|
|
||||||
cmd->u.bind_descriptor_sets.descriptor_set_count = descriptorSetCount;
|
|
||||||
if (pDescriptorSets) {
|
|
||||||
cmd->u.bind_descriptor_sets.descriptor_sets = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, sizeof(*cmd->u.bind_descriptor_sets.descriptor_sets) * descriptorSetCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
|
|
||||||
memcpy(( VkDescriptorSet* )cmd->u.bind_descriptor_sets.descriptor_sets, pDescriptorSets, sizeof(*cmd->u.bind_descriptor_sets.descriptor_sets) * descriptorSetCount);
|
|
||||||
}
|
|
||||||
cmd->u.bind_descriptor_sets.dynamic_offset_count = dynamicOffsetCount;
|
|
||||||
if (pDynamicOffsets) {
|
|
||||||
cmd->u.bind_descriptor_sets.dynamic_offsets = vk_zalloc(cmd_buffer->vk.cmd_queue.alloc, sizeof(*cmd->u.bind_descriptor_sets.dynamic_offsets) * dynamicOffsetCount, 8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
|
|
||||||
memcpy(( uint32_t* )cmd->u.bind_descriptor_sets.dynamic_offsets, pDynamicOffsets, sizeof(*cmd->u.bind_descriptor_sets.dynamic_offsets) * dynamicOffsetCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VKAPI_ATTR void VKAPI_CALL lvp_CmdBeginRendering(VkCommandBuffer commandBuffer,
|
VKAPI_ATTR void VKAPI_CALL lvp_CmdBeginRendering(VkCommandBuffer commandBuffer,
|
||||||
const VkRenderingInfoKHR* pRenderingInfo
|
const VkRenderingInfoKHR* pRenderingInfo
|
||||||
)
|
)
|
||||||
|
|
|
@ -1447,6 +1447,23 @@ lvp_queue_finish(struct lvp_queue *queue)
|
||||||
vk_queue_finish(&queue->vk);
|
vk_queue_finish(&queue->vk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ref_pipeline_layout(struct vk_device *vk_device, VkPipelineLayout _layout)
|
||||||
|
{
|
||||||
|
LVP_FROM_HANDLE(lvp_pipeline_layout, layout, _layout);
|
||||||
|
|
||||||
|
lvp_pipeline_layout_ref(layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
unref_pipeline_layout(struct vk_device *vk_device, VkPipelineLayout _layout)
|
||||||
|
{
|
||||||
|
struct lvp_device *device = container_of(vk_device, struct lvp_device, vk);
|
||||||
|
LVP_FROM_HANDLE(lvp_pipeline_layout, layout, _layout);
|
||||||
|
|
||||||
|
lvp_pipeline_layout_unref(device, layout);
|
||||||
|
}
|
||||||
|
|
||||||
VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
|
VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
|
||||||
VkPhysicalDevice physicalDevice,
|
VkPhysicalDevice physicalDevice,
|
||||||
const VkDeviceCreateInfo* pCreateInfo,
|
const VkDeviceCreateInfo* pCreateInfo,
|
||||||
|
@ -1488,6 +1505,9 @@ VKAPI_ATTR VkResult VKAPI_CALL lvp_CreateDevice(
|
||||||
device->instance = (struct lvp_instance *)physical_device->vk.instance;
|
device->instance = (struct lvp_instance *)physical_device->vk.instance;
|
||||||
device->physical_device = physical_device;
|
device->physical_device = physical_device;
|
||||||
|
|
||||||
|
device->vk.ref_pipeline_layout = ref_pipeline_layout;
|
||||||
|
device->vk.unref_pipeline_layout = unref_pipeline_layout;
|
||||||
|
|
||||||
device->pscreen = physical_device->pscreen;
|
device->pscreen = physical_device->pscreen;
|
||||||
|
|
||||||
assert(pCreateInfo->queueCreateInfoCount == 1);
|
assert(pCreateInfo->queueCreateInfoCount == 1);
|
||||||
|
|
|
@ -1292,18 +1292,18 @@ static void handle_compute_descriptor_sets(struct vk_cmd_queue_entry *cmd,
|
||||||
struct rendering_state *state)
|
struct rendering_state *state)
|
||||||
{
|
{
|
||||||
struct vk_cmd_bind_descriptor_sets *bds = &cmd->u.bind_descriptor_sets;
|
struct vk_cmd_bind_descriptor_sets *bds = &cmd->u.bind_descriptor_sets;
|
||||||
struct lvp_descriptor_set_layout **set_layout = cmd->driver_data;
|
LVP_FROM_HANDLE(lvp_pipeline_layout, layout, bds->layout);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < bds->first_set; i++) {
|
for (i = 0; i < bds->first_set; i++) {
|
||||||
increment_dyn_info(dyn_info, set_layout[i], false);
|
increment_dyn_info(dyn_info, layout->set[i].layout, false);
|
||||||
}
|
}
|
||||||
for (i = 0; i < bds->descriptor_set_count; i++) {
|
for (i = 0; i < bds->descriptor_set_count; i++) {
|
||||||
const struct lvp_descriptor_set *set = lvp_descriptor_set_from_handle(bds->descriptor_sets[i]);
|
const struct lvp_descriptor_set *set = lvp_descriptor_set_from_handle(bds->descriptor_sets[i]);
|
||||||
|
|
||||||
if (set->layout->shader_stages & VK_SHADER_STAGE_COMPUTE_BIT)
|
if (set->layout->shader_stages & VK_SHADER_STAGE_COMPUTE_BIT)
|
||||||
handle_set_stage(state, dyn_info, set, MESA_SHADER_COMPUTE, PIPE_SHADER_COMPUTE);
|
handle_set_stage(state, dyn_info, set, MESA_SHADER_COMPUTE, PIPE_SHADER_COMPUTE);
|
||||||
increment_dyn_info(dyn_info, set_layout[bds->first_set + i], true);
|
increment_dyn_info(dyn_info, layout->set[bds->first_set + i].layout, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1311,7 +1311,7 @@ static void handle_descriptor_sets(struct vk_cmd_queue_entry *cmd,
|
||||||
struct rendering_state *state)
|
struct rendering_state *state)
|
||||||
{
|
{
|
||||||
struct vk_cmd_bind_descriptor_sets *bds = &cmd->u.bind_descriptor_sets;
|
struct vk_cmd_bind_descriptor_sets *bds = &cmd->u.bind_descriptor_sets;
|
||||||
struct lvp_descriptor_set_layout **set_layout = cmd->driver_data;
|
LVP_FROM_HANDLE(lvp_pipeline_layout, layout, bds->layout);
|
||||||
int i;
|
int i;
|
||||||
struct dyn_info dyn_info;
|
struct dyn_info dyn_info;
|
||||||
|
|
||||||
|
@ -1326,7 +1326,7 @@ static void handle_descriptor_sets(struct vk_cmd_queue_entry *cmd,
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < bds->first_set; i++) {
|
for (i = 0; i < bds->first_set; i++) {
|
||||||
increment_dyn_info(&dyn_info, set_layout[i], false);
|
increment_dyn_info(&dyn_info, layout->set[i].layout, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < bds->descriptor_set_count; i++) {
|
for (i = 0; i < bds->descriptor_set_count; i++) {
|
||||||
|
@ -1353,7 +1353,7 @@ static void handle_descriptor_sets(struct vk_cmd_queue_entry *cmd,
|
||||||
if (set->layout->shader_stages & VK_SHADER_STAGE_FRAGMENT_BIT)
|
if (set->layout->shader_stages & VK_SHADER_STAGE_FRAGMENT_BIT)
|
||||||
handle_set_stage(state, &dyn_info, set, MESA_SHADER_FRAGMENT, PIPE_SHADER_FRAGMENT);
|
handle_set_stage(state, &dyn_info, set, MESA_SHADER_FRAGMENT, PIPE_SHADER_FRAGMENT);
|
||||||
|
|
||||||
increment_dyn_info(&dyn_info, set_layout[bds->first_set + i], true);
|
increment_dyn_info(&dyn_info, layout->set[bds->first_set + i].layout, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3872,7 +3872,7 @@ void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp)
|
||||||
ENQUEUE_CMD(CmdSetStencilCompareMask)
|
ENQUEUE_CMD(CmdSetStencilCompareMask)
|
||||||
ENQUEUE_CMD(CmdSetStencilWriteMask)
|
ENQUEUE_CMD(CmdSetStencilWriteMask)
|
||||||
ENQUEUE_CMD(CmdSetStencilReference)
|
ENQUEUE_CMD(CmdSetStencilReference)
|
||||||
// ENQUEUE_CMD(CmdBindDescriptorSets)
|
ENQUEUE_CMD(CmdBindDescriptorSets)
|
||||||
ENQUEUE_CMD(CmdBindIndexBuffer)
|
ENQUEUE_CMD(CmdBindIndexBuffer)
|
||||||
ENQUEUE_CMD(CmdBindVertexBuffers)
|
ENQUEUE_CMD(CmdBindVertexBuffers)
|
||||||
ENQUEUE_CMD(CmdBindVertexBuffers2)
|
ENQUEUE_CMD(CmdBindVertexBuffers2)
|
||||||
|
|
Loading…
Reference in New Issue