mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-17 17:10:38 +01:00
lavapipe: use gallium buffer descriptor types directly
this cleans up a bit of code Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com> Acked-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17740>
This commit is contained in:
parent
b7b7da9769
commit
6212cff00a
3 changed files with 63 additions and 45 deletions
|
|
@ -495,18 +495,32 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSets(
|
|||
break;
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
|
||||
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
||||
LVP_FROM_HANDLE(lvp_buffer, buffer, write->pBufferInfo[j].buffer);
|
||||
desc[j] = (struct lvp_descriptor) {
|
||||
.type = write->descriptorType,
|
||||
.info.ubo.buffer_offset = buffer ? write->pBufferInfo[j].offset : 0,
|
||||
.info.ubo.buffer = buffer ? buffer->bo : NULL,
|
||||
.info.ubo.buffer_size = buffer ? write->pBufferInfo[j].range : 0,
|
||||
};
|
||||
if (buffer && write->pBufferInfo[j].range == VK_WHOLE_SIZE)
|
||||
desc[j].info.ubo.buffer_size = buffer->bo->width0 - desc[j].info.ubo.buffer_offset;
|
||||
}
|
||||
break;
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
|
||||
for (uint32_t j = 0; j < write->descriptorCount; j++) {
|
||||
LVP_FROM_HANDLE(lvp_buffer, buffer, write->pBufferInfo[j].buffer);
|
||||
desc[j] = (struct lvp_descriptor) {
|
||||
.type = write->descriptorType,
|
||||
.info.offset = write->pBufferInfo[j].offset,
|
||||
.info.buffer = buffer,
|
||||
.info.range = write->pBufferInfo[j].range,
|
||||
.info.ssbo.buffer_offset = buffer ? write->pBufferInfo[j].offset : 0,
|
||||
.info.ssbo.buffer = buffer ? buffer->bo : NULL,
|
||||
.info.ssbo.buffer_size = buffer ? write->pBufferInfo[j].range : 0,
|
||||
};
|
||||
|
||||
if (buffer && write->pBufferInfo[j].range == VK_WHOLE_SIZE)
|
||||
desc[j].info.ssbo.buffer_size = buffer->bo->width0 - desc[j].info.ssbo.buffer_offset;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
@ -736,16 +750,32 @@ VKAPI_ATTR void VKAPI_CALL lvp_UpdateDescriptorSetWithTemplate(VkDevice _device,
|
|||
}
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: {
|
||||
VkDescriptorBufferInfo *info = (VkDescriptorBufferInfo *)pSrc;
|
||||
LVP_FROM_HANDLE(lvp_buffer, buffer, info->buffer);
|
||||
desc[idx] = (struct lvp_descriptor) {
|
||||
.type = entry->descriptorType,
|
||||
.info.offset = info->offset,
|
||||
.info.buffer = lvp_buffer_from_handle(info->buffer),
|
||||
.info.range = info->range,
|
||||
.info.ubo.buffer_offset = buffer ? info->offset : 0,
|
||||
.info.ubo.buffer = buffer ? buffer->bo : NULL,
|
||||
.info.ubo.buffer_size = buffer ? info->range : 0,
|
||||
};
|
||||
if (buffer && info->range == VK_WHOLE_SIZE)
|
||||
desc[idx].info.ubo.buffer_size = buffer->bo->width0 - desc[idx].info.ubo.buffer_offset;
|
||||
break;
|
||||
}
|
||||
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
|
||||
VkDescriptorBufferInfo *info = (VkDescriptorBufferInfo *)pSrc;
|
||||
LVP_FROM_HANDLE(lvp_buffer, buffer, info->buffer);
|
||||
desc[idx] = (struct lvp_descriptor) {
|
||||
.type = entry->descriptorType,
|
||||
.info.ssbo.buffer_offset = buffer ? info->offset : 0,
|
||||
.info.ssbo.buffer = buffer ? buffer->bo : NULL,
|
||||
.info.ssbo.buffer_size = buffer ? info->range : 0,
|
||||
};
|
||||
if (buffer && info->range == VK_WHOLE_SIZE)
|
||||
desc[idx].info.ssbo.buffer_size = buffer->bo->width0 - desc[idx].info.ssbo.buffer_offset;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -1291,18 +1291,7 @@ static void handle_descriptor(struct rendering_state *state,
|
|||
return;
|
||||
idx += array_idx;
|
||||
idx += dyn_info->stage[stage].const_buffer_count;
|
||||
if (!descriptor->buffer) {
|
||||
state->const_buffer[p_stage][idx].buffer = NULL;
|
||||
state->const_buffer[p_stage][idx].buffer_offset = 0;
|
||||
state->const_buffer[p_stage][idx].buffer_size = 0;
|
||||
} else {
|
||||
state->const_buffer[p_stage][idx].buffer = descriptor->buffer->bo;
|
||||
state->const_buffer[p_stage][idx].buffer_offset = descriptor->offset;
|
||||
if (descriptor->range == VK_WHOLE_SIZE)
|
||||
state->const_buffer[p_stage][idx].buffer_size = descriptor->buffer->bo->width0 - state->const_buffer[p_stage][idx].buffer_offset;
|
||||
else
|
||||
state->const_buffer[p_stage][idx].buffer_size = descriptor->range;
|
||||
}
|
||||
state->const_buffer[p_stage][idx] = descriptor->ubo;
|
||||
if (is_dynamic) {
|
||||
uint32_t offset = dyn_info->dynamic_offsets[dyn_info->dyn_index + binding->dynamic_index + array_idx];
|
||||
state->const_buffer[p_stage][idx].buffer_offset += offset;
|
||||
|
|
@ -1320,18 +1309,7 @@ static void handle_descriptor(struct rendering_state *state,
|
|||
return;
|
||||
idx += array_idx;
|
||||
idx += dyn_info->stage[stage].shader_buffer_count;
|
||||
if (!descriptor->buffer) {
|
||||
state->sb[p_stage][idx].buffer = NULL;
|
||||
state->sb[p_stage][idx].buffer_offset = 0;
|
||||
state->sb[p_stage][idx].buffer_size = 0;
|
||||
} else {
|
||||
state->sb[p_stage][idx].buffer = descriptor->buffer->bo;
|
||||
state->sb[p_stage][idx].buffer_offset = descriptor->offset;
|
||||
if (descriptor->range == VK_WHOLE_SIZE)
|
||||
state->sb[p_stage][idx].buffer_size = descriptor->buffer->bo->width0 - state->sb[p_stage][idx].buffer_offset;
|
||||
else
|
||||
state->sb[p_stage][idx].buffer_size = descriptor->range;
|
||||
}
|
||||
state->sb[p_stage][idx] = descriptor->ssbo;
|
||||
if (is_dynamic) {
|
||||
uint32_t offset = dyn_info->dynamic_offsets[dyn_info->dyn_index + binding->dynamic_index + array_idx];
|
||||
state->sb[p_stage][idx].buffer_offset += offset;
|
||||
|
|
@ -3314,13 +3292,26 @@ static struct lvp_cmd_push_descriptor_set *create_push_descriptor_set(struct vk_
|
|||
info->buffer_view = lvp_buffer_view_from_handle(in_cmd->descriptor_writes[i].pTexelBufferView[j]);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC: {
|
||||
LVP_FROM_HANDLE(lvp_buffer, buffer, in_cmd->descriptor_writes[i].pBufferInfo[j].buffer);
|
||||
info->ubo.buffer = buffer ? buffer->bo : NULL;
|
||||
info->ubo.buffer_offset = buffer ? in_cmd->descriptor_writes[i].pBufferInfo[j].offset : 0;
|
||||
info->ubo.buffer_size = buffer ? in_cmd->descriptor_writes[i].pBufferInfo[j].range : 0;
|
||||
if (buffer && in_cmd->descriptor_writes[i].pBufferInfo[j].range == VK_WHOLE_SIZE)
|
||||
info->ubo.buffer_size = info->ubo.buffer->width0 - info->ubo.buffer_offset;
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
|
||||
LVP_FROM_HANDLE(lvp_buffer, buffer, in_cmd->descriptor_writes[i].pBufferInfo[j].buffer);
|
||||
info->ssbo.buffer = buffer ? buffer->bo : NULL;
|
||||
info->ssbo.buffer_offset = buffer ? in_cmd->descriptor_writes[i].pBufferInfo[j].offset : 0;
|
||||
info->ssbo.buffer_size = buffer ? in_cmd->descriptor_writes[i].pBufferInfo[j].range : 0;
|
||||
if (buffer && in_cmd->descriptor_writes[i].pBufferInfo[j].range == VK_WHOLE_SIZE)
|
||||
info->ssbo.buffer_size = info->ssbo.buffer->width0 - info->ssbo.buffer_offset;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
info->buffer = lvp_buffer_from_handle(in_cmd->descriptor_writes[i].pBufferInfo[j].buffer);
|
||||
info->offset = in_cmd->descriptor_writes[i].pBufferInfo[j].offset;
|
||||
info->range = in_cmd->descriptor_writes[i].pBufferInfo[j].range;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -331,11 +331,8 @@ union lvp_descriptor_info {
|
|||
struct pipe_sampler_state *sampler;
|
||||
struct lvp_image_view *iview;
|
||||
};
|
||||
struct {
|
||||
struct lvp_buffer *buffer;
|
||||
VkDeviceSize offset;
|
||||
VkDeviceSize range;
|
||||
};
|
||||
struct pipe_shader_buffer ssbo;
|
||||
struct pipe_constant_buffer ubo;
|
||||
struct lvp_buffer_view *buffer_view;
|
||||
uint8_t *uniform;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue