mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 05:18:08 +02:00
tu: Plumb CHIP thru descriptor set building
The descriptor format changes in gen8, which is mostly abstracted by the fdl helpers. But to utilize that we need to plumb the CHIP thru 12 layers for different ways of vk doing the same thing. Signed-off-by: Rob Clark <rob.clark@oss.qualcomm.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39141>
This commit is contained in:
parent
6f6880bcac
commit
199d5568d5
4 changed files with 97 additions and 63 deletions
|
|
@ -1066,6 +1066,7 @@ r3d_clear_value(struct tu_cmd_buffer *cmd, struct tu_cs *cs, enum pipe_format fo
|
|||
tu6_emit_blit_consts_load(cmd, cs, CP_LOAD_STATE6_FRAG, SB6_FS_SHADER, 0, coords, 1);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
r3d_src_common(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
|
|
@ -1126,6 +1127,7 @@ r3d_src_common(struct tu_cmd_buffer *cmd,
|
|||
tu_cs_emit_regs(cs, A6XX_SP_PS_TSIZE(1));
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
r3d_src(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
|
|
@ -1143,10 +1145,10 @@ r3d_src(struct tu_cmd_buffer *cmd,
|
|||
fixup_src_format(&src_format, dst_format, &fmt);
|
||||
desc[0] = pkt_field_set(A6XX_TEX_CONST_0_FMT, desc[0], fmt);
|
||||
|
||||
r3d_src_common(cmd, cs, desc,
|
||||
iview->layer_size * layer,
|
||||
iview->ubwc_layer_size * layer,
|
||||
filter);
|
||||
r3d_src_common<CHIP>(cmd, cs, desc,
|
||||
iview->layer_size * layer,
|
||||
iview->ubwc_layer_size * layer,
|
||||
filter);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
|
|
@ -1182,9 +1184,10 @@ r3d_src_buffer(struct tu_cmd_buffer *cmd,
|
|||
for (uint32_t i = 6; i < FDL6_TEX_CONST_DWORDS; i++)
|
||||
desc[i] = 0;
|
||||
|
||||
r3d_src_common(cmd, cs, desc, 0, 0, VK_FILTER_NEAREST);
|
||||
r3d_src_common<CHIP>(cmd, cs, desc, 0, 0, VK_FILTER_NEAREST);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
r3d_src_depth(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
|
|
@ -1215,12 +1218,13 @@ r3d_src_depth(struct tu_cmd_buffer *cmd,
|
|||
desc[4] = va;
|
||||
desc[5] = va >> 32;
|
||||
|
||||
r3d_src_common(cmd, cs, desc,
|
||||
iview->depth_layer_size * layer,
|
||||
iview->view.ubwc_layer_size * layer,
|
||||
VK_FILTER_NEAREST);
|
||||
r3d_src_common<CHIP>(cmd, cs, desc,
|
||||
iview->depth_layer_size * layer,
|
||||
iview->view.ubwc_layer_size * layer,
|
||||
VK_FILTER_NEAREST);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
r3d_src_stencil(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
|
|
@ -1251,10 +1255,11 @@ r3d_src_stencil(struct tu_cmd_buffer *cmd,
|
|||
for (unsigned i = 6; i < FDL6_TEX_CONST_DWORDS; i++)
|
||||
desc[i] = 0;
|
||||
|
||||
r3d_src_common(cmd, cs, desc, iview->stencil_layer_size * layer, 0,
|
||||
VK_FILTER_NEAREST);
|
||||
r3d_src_common<CHIP>(cmd, cs, desc, iview->stencil_layer_size * layer, 0,
|
||||
VK_FILTER_NEAREST);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
r3d_src_load(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
|
|
@ -1293,28 +1298,30 @@ r3d_src_load(struct tu_cmd_buffer *cmd,
|
|||
A6XX_TEX_CONST_0_SWIZ_Z(A6XX_TEX_Z) |
|
||||
A6XX_TEX_CONST_0_SWIZ_W(A6XX_TEX_W);
|
||||
|
||||
r3d_src_common(cmd, cs, desc,
|
||||
iview->view.layer_size * layer,
|
||||
iview->view.ubwc_layer_size * layer,
|
||||
VK_FILTER_NEAREST);
|
||||
r3d_src_common<CHIP>(cmd, cs, desc,
|
||||
iview->view.layer_size * layer,
|
||||
iview->view.ubwc_layer_size * layer,
|
||||
VK_FILTER_NEAREST);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
r3d_src_gmem_load(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
const struct tu_image_view *iview,
|
||||
uint32_t layer)
|
||||
{
|
||||
r3d_src_load(cmd, cs, iview, layer, true);
|
||||
r3d_src_load<CHIP>(cmd, cs, iview, layer, true);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
r3d_src_sysmem_load(struct tu_cmd_buffer *cmd,
|
||||
struct tu_cs *cs,
|
||||
const struct tu_image_view *iview,
|
||||
uint32_t layer)
|
||||
{
|
||||
r3d_src_load(cmd, cs, iview, layer, false);
|
||||
r3d_src_load<CHIP>(cmd, cs, iview, layer, false);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
|
|
@ -1372,7 +1379,7 @@ r3d_src_gmem(struct tu_cmd_buffer *cmd,
|
|||
for (unsigned i = 6; i < FDL6_TEX_CONST_DWORDS; i++)
|
||||
desc[i] = 0;
|
||||
|
||||
r3d_src_common(cmd, cs, desc, 0, 0, VK_FILTER_NEAREST);
|
||||
r3d_src_common<CHIP>(cmd, cs, desc, 0, 0, VK_FILTER_NEAREST);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
|
|
@ -1792,10 +1799,10 @@ template <chip CHIP>
|
|||
static const struct blit_ops r3d_ops = {
|
||||
.coords = r3d_coords,
|
||||
.clear_value = r3d_clear_value,
|
||||
.src = r3d_src,
|
||||
.src = r3d_src<CHIP>,
|
||||
.src_buffer = r3d_src_buffer<CHIP>,
|
||||
.src_depth = r3d_src_depth,
|
||||
.src_stencil = r3d_src_stencil,
|
||||
.src_depth = r3d_src_depth<CHIP>,
|
||||
.src_stencil = r3d_src_stencil<CHIP>,
|
||||
.dst = r3d_dst<CHIP>,
|
||||
.dst_depth = r3d_dst_depth<CHIP>,
|
||||
.dst_stencil = r3d_dst_stencil<CHIP>,
|
||||
|
|
@ -3630,7 +3637,7 @@ resolve_sysmem(struct tu_cmd_buffer *cmd,
|
|||
}
|
||||
} else {
|
||||
if (ops == &r3d_ops<CHIP>) {
|
||||
r3d_src_sysmem_load(cmd, cs, src, i);
|
||||
r3d_src_sysmem_load<CHIP>(cmd, cs, src, i);
|
||||
} else {
|
||||
ops->src(cmd, cs, &src->view, i, VK_FILTER_NEAREST, dst_format);
|
||||
}
|
||||
|
|
@ -5069,11 +5076,11 @@ load_3d_blit(struct tu_cmd_buffer *cmd,
|
|||
|
||||
if (iview->image->vk.format == VK_FORMAT_D32_SFLOAT_S8_UINT) {
|
||||
if (separate_stencil)
|
||||
r3d_src_stencil(cmd, cs, iview, i, VK_FILTER_NEAREST);
|
||||
r3d_src_stencil<CHIP>(cmd, cs, iview, i, VK_FILTER_NEAREST);
|
||||
else
|
||||
r3d_src_depth(cmd, cs, iview, i, VK_FILTER_NEAREST);
|
||||
r3d_src_depth<CHIP>(cmd, cs, iview, i, VK_FILTER_NEAREST);
|
||||
} else {
|
||||
r3d_src_gmem_load(cmd, cs, iview, i);
|
||||
r3d_src_gmem_load<CHIP>(cmd, cs, iview, i);
|
||||
}
|
||||
|
||||
r3d_run(cmd, cs);
|
||||
|
|
|
|||
|
|
@ -2597,6 +2597,7 @@ tu6_emit_binning_pass(struct tu_cmd_buffer *cmd, struct tu_cs *cs,
|
|||
tu_cs_emit(cs, 0x0);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static struct tu_draw_state
|
||||
tu_emit_input_attachments(struct tu_cmd_buffer *cmd,
|
||||
const struct tu_subpass *subpass,
|
||||
|
|
@ -2763,6 +2764,7 @@ tu_emit_input_attachments(struct tu_cmd_buffer *cmd,
|
|||
return ds;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu_set_input_attachments(struct tu_cmd_buffer *cmd, const struct tu_subpass *subpass)
|
||||
{
|
||||
|
|
@ -2770,9 +2772,9 @@ tu_set_input_attachments(struct tu_cmd_buffer *cmd, const struct tu_subpass *sub
|
|||
|
||||
tu_cs_emit_pkt7(cs, CP_SET_DRAW_STATE, 6);
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_INPUT_ATTACHMENTS_GMEM,
|
||||
tu_emit_input_attachments(cmd, subpass, true));
|
||||
tu_emit_input_attachments<CHIP>(cmd, subpass, true));
|
||||
tu_cs_emit_draw_state(cs, TU_DRAW_STATE_INPUT_ATTACHMENTS_SYSMEM,
|
||||
tu_emit_input_attachments(cmd, subpass, false));
|
||||
tu_emit_input_attachments<CHIP>(cmd, subpass, false));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -4693,6 +4695,7 @@ tu_dirty_desc_sets(struct tu_cmd_buffer *cmd,
|
|||
}
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu_bind_descriptor_sets(struct tu_cmd_buffer *cmd,
|
||||
const VkBindDescriptorSetsInfoKHR *info,
|
||||
|
|
@ -4829,6 +4832,7 @@ tu_bind_descriptor_sets(struct tu_cmd_buffer *cmd,
|
|||
tu_dirty_desc_sets(cmd, bind_point);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdBindDescriptorSets2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
|
|
@ -4837,15 +4841,16 @@ tu_CmdBindDescriptorSets2KHR(
|
|||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
|
||||
if (pBindDescriptorSetsInfo->stageFlags & VK_SHADER_STAGE_COMPUTE_BIT) {
|
||||
tu_bind_descriptor_sets(cmd, pBindDescriptorSetsInfo,
|
||||
VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
tu_bind_descriptor_sets<CHIP>(cmd, pBindDescriptorSetsInfo,
|
||||
VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
}
|
||||
|
||||
if (pBindDescriptorSetsInfo->stageFlags & VK_SHADER_STAGE_ALL_GRAPHICS) {
|
||||
tu_bind_descriptor_sets(cmd, pBindDescriptorSetsInfo,
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS);
|
||||
tu_bind_descriptor_sets<CHIP>(cmd, pBindDescriptorSetsInfo,
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS);
|
||||
}
|
||||
}
|
||||
TU_GENX(tu_CmdBindDescriptorSets2KHR);
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdBindDescriptorBuffersEXT(
|
||||
|
|
@ -4980,6 +4985,7 @@ tu_push_descriptor_set_update_layout(struct tu_device *device,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu_push_descriptor_set(struct tu_cmd_buffer *cmd,
|
||||
const VkPushDescriptorSetInfoKHR *info,
|
||||
|
|
@ -5006,9 +5012,9 @@ tu_push_descriptor_set(struct tu_cmd_buffer *cmd,
|
|||
return;
|
||||
}
|
||||
|
||||
tu_update_descriptor_sets(cmd->device, tu_descriptor_set_to_handle(set),
|
||||
info->descriptorWriteCount,
|
||||
info->pDescriptorWrites, 0, NULL);
|
||||
tu_update_descriptor_sets<CHIP>(cmd->device, tu_descriptor_set_to_handle(set),
|
||||
info->descriptorWriteCount,
|
||||
info->pDescriptorWrites, 0, NULL);
|
||||
|
||||
memcpy(set_mem.map, set->mapped_ptr, layout->size);
|
||||
set->va = set_mem.iova;
|
||||
|
|
@ -5019,6 +5025,7 @@ tu_push_descriptor_set(struct tu_cmd_buffer *cmd,
|
|||
NULL);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdPushDescriptorSet2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
|
|
@ -5027,16 +5034,18 @@ tu_CmdPushDescriptorSet2KHR(
|
|||
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
|
||||
|
||||
if (pPushDescriptorSetInfo->stageFlags & VK_SHADER_STAGE_COMPUTE_BIT) {
|
||||
tu_push_descriptor_set(cmd, pPushDescriptorSetInfo,
|
||||
VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
tu_push_descriptor_set<CHIP>(cmd, pPushDescriptorSetInfo,
|
||||
VK_PIPELINE_BIND_POINT_COMPUTE);
|
||||
}
|
||||
|
||||
if (pPushDescriptorSetInfo->stageFlags & VK_SHADER_STAGE_ALL_GRAPHICS) {
|
||||
tu_push_descriptor_set(cmd, pPushDescriptorSetInfo,
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS);
|
||||
tu_push_descriptor_set<CHIP>(cmd, pPushDescriptorSetInfo,
|
||||
VK_PIPELINE_BIND_POINT_GRAPHICS);
|
||||
}
|
||||
}
|
||||
TU_GENX(tu_CmdPushDescriptorSet2KHR);
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdPushDescriptorSetWithTemplate2KHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
|
|
@ -5069,7 +5078,7 @@ tu_CmdPushDescriptorSetWithTemplate2KHR(
|
|||
return;
|
||||
}
|
||||
|
||||
tu_update_descriptor_set_with_template(
|
||||
tu_update_descriptor_set_with_template<CHIP>(
|
||||
cmd->device, set,
|
||||
pPushDescriptorSetWithTemplateInfo->descriptorUpdateTemplate,
|
||||
pPushDescriptorSetWithTemplateInfo->pData);
|
||||
|
|
@ -5083,6 +5092,7 @@ tu_CmdPushDescriptorSetWithTemplate2KHR(
|
|||
pPushDescriptorSetWithTemplateInfo->layout,
|
||||
pPushDescriptorSetWithTemplateInfo->set, 1, desc_set, 0, NULL);
|
||||
}
|
||||
TU_GENX(tu_CmdPushDescriptorSetWithTemplate2KHR);
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
|
|
@ -6775,7 +6785,7 @@ tu_emit_subpass_begin(struct tu_cmd_buffer *cmd)
|
|||
tu7_emit_subpass_shading_rate<CHIP>(cmd, cmd->state.subpass, &cmd->draw_cs);
|
||||
}
|
||||
|
||||
tu_set_input_attachments(cmd, cmd->state.subpass);
|
||||
tu_set_input_attachments<CHIP>(cmd, cmd->state.subpass);
|
||||
|
||||
vk_cmd_set_cb_attachment_count(&cmd->vk, cmd->state.subpass->color_count);
|
||||
|
||||
|
|
@ -7121,6 +7131,7 @@ tu_CmdSetRenderingAttachmentLocationsKHR(
|
|||
}
|
||||
TU_GENX(tu_CmdSetRenderingAttachmentLocationsKHR);
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_CmdSetRenderingInputAttachmentIndicesKHR(
|
||||
VkCommandBuffer commandBuffer,
|
||||
|
|
@ -7174,8 +7185,9 @@ tu_CmdSetRenderingInputAttachmentIndicesKHR(
|
|||
|
||||
subpass->input_count = input_count;
|
||||
|
||||
tu_set_input_attachments(cmd, subpass);
|
||||
tu_set_input_attachments<CHIP>(cmd, subpass);
|
||||
}
|
||||
TU_GENX(tu_CmdSetRenderingInputAttachmentIndicesKHR);
|
||||
|
||||
static void
|
||||
tu_next_subpass_lrz(struct tu_cmd_buffer *cmd,
|
||||
|
|
|
|||
|
|
@ -979,6 +979,7 @@ buffer_info_to_address(const VkDescriptorBufferInfo *buffer_info)
|
|||
};
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
write_buffer_descriptor_addr(const struct tu_device *device,
|
||||
uint32_t *dst,
|
||||
|
|
@ -1049,13 +1050,14 @@ write_buffer_descriptor_addr(const struct tu_device *device,
|
|||
}
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
write_buffer_descriptor(const struct tu_device *device,
|
||||
uint32_t *dst,
|
||||
const VkDescriptorBufferInfo *buffer_info)
|
||||
{
|
||||
VkDescriptorAddressInfoEXT addr = buffer_info_to_address(buffer_info);
|
||||
write_buffer_descriptor_addr(device, dst, &addr);
|
||||
write_buffer_descriptor_addr<CHIP>(device, dst, &addr);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1123,6 +1125,7 @@ write_sampler_descriptor(uint32_t *dst, VkSampler _sampler)
|
|||
memcpy(dst, sampler->descriptor, sizeof(sampler->descriptor));
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
write_accel_struct(uint32_t *dst, uint64_t va)
|
||||
{
|
||||
|
|
@ -1152,6 +1155,7 @@ write_sampler_push(uint32_t *dst, const struct tu_sampler *sampler)
|
|||
memcpy(dst, sampler->descriptor, sizeof(sampler->descriptor));
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_GetDescriptorEXT(
|
||||
VkDevice _device,
|
||||
|
|
@ -1167,13 +1171,13 @@ tu_GetDescriptorEXT(
|
|||
write_ubo_descriptor_addr(dest, pDescriptorInfo->data.pUniformBuffer);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
write_buffer_descriptor_addr(device, dest, pDescriptorInfo->data.pStorageBuffer);
|
||||
write_buffer_descriptor_addr<CHIP>(device, dest, pDescriptorInfo->data.pStorageBuffer);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
TU_CALLX(device, write_texel_buffer_descriptor_addr)(dest, pDescriptorInfo->data.pUniformTexelBuffer);
|
||||
write_texel_buffer_descriptor_addr<CHIP>(dest, pDescriptorInfo->data.pUniformTexelBuffer);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
TU_CALLX(device, write_texel_buffer_descriptor_addr)(dest, pDescriptorInfo->data.pStorageTexelBuffer);
|
||||
write_texel_buffer_descriptor_addr<CHIP>(dest, pDescriptorInfo->data.pStorageTexelBuffer);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
|
||||
write_image_descriptor(dest, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
|
||||
|
|
@ -1194,9 +1198,9 @@ tu_GetDescriptorEXT(
|
|||
break;
|
||||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: {
|
||||
if (pDescriptorInfo->data.accelerationStructure == 0) {
|
||||
write_accel_struct(dest, device->null_accel_struct_bo->iova);
|
||||
write_accel_struct<CHIP>(dest, device->null_accel_struct_bo->iova);
|
||||
} else {
|
||||
write_accel_struct(dest, pDescriptorInfo->data.accelerationStructure);
|
||||
write_accel_struct<CHIP>(dest, pDescriptorInfo->data.accelerationStructure);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -1209,7 +1213,9 @@ tu_GetDescriptorEXT(
|
|||
break;
|
||||
}
|
||||
}
|
||||
TU_GENX(tu_GetDescriptorEXT);
|
||||
|
||||
template <chip CHIP>
|
||||
void
|
||||
tu_update_descriptor_sets(const struct tu_device *device,
|
||||
VkDescriptorSet dstSetOverride,
|
||||
|
|
@ -1293,7 +1299,7 @@ tu_update_descriptor_sets(const struct tu_device *device,
|
|||
break;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
write_buffer_descriptor(device, ptr, writeset->pBufferInfo + j);
|
||||
write_buffer_descriptor<CHIP>(device, ptr, writeset->pBufferInfo + j);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
|
|
@ -1322,10 +1328,10 @@ tu_update_descriptor_sets(const struct tu_device *device,
|
|||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: {
|
||||
VK_FROM_HANDLE(vk_acceleration_structure, accel_struct, accel_structs->pAccelerationStructures[j]);
|
||||
if (accel_struct) {
|
||||
write_accel_struct(ptr,
|
||||
vk_acceleration_structure_get_va(accel_struct));
|
||||
write_accel_struct<CHIP>(ptr,
|
||||
vk_acceleration_structure_get_va(accel_struct));
|
||||
} else {
|
||||
write_accel_struct(ptr, device->null_accel_struct_bo->iova);
|
||||
write_accel_struct<CHIP>(ptr, device->null_accel_struct_bo->iova);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -1417,7 +1423,9 @@ tu_update_descriptor_sets(const struct tu_device *device,
|
|||
}
|
||||
}
|
||||
}
|
||||
TU_GENX(tu_update_descriptor_sets);
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_UpdateDescriptorSets(VkDevice _device,
|
||||
uint32_t descriptorWriteCount,
|
||||
|
|
@ -1426,10 +1434,11 @@ tu_UpdateDescriptorSets(VkDevice _device,
|
|||
const VkCopyDescriptorSet *pDescriptorCopies)
|
||||
{
|
||||
VK_FROM_HANDLE(tu_device, device, _device);
|
||||
tu_update_descriptor_sets(device, VK_NULL_HANDLE,
|
||||
descriptorWriteCount, pDescriptorWrites,
|
||||
descriptorCopyCount, pDescriptorCopies);
|
||||
tu_update_descriptor_sets<CHIP>(device, VK_NULL_HANDLE,
|
||||
descriptorWriteCount, pDescriptorWrites,
|
||||
descriptorCopyCount, pDescriptorCopies);
|
||||
}
|
||||
TU_GENX(tu_UpdateDescriptorSets);
|
||||
|
||||
VKAPI_ATTR VkResult VKAPI_CALL
|
||||
tu_CreateDescriptorUpdateTemplate(
|
||||
|
|
@ -1591,6 +1600,7 @@ tu_DestroyDescriptorUpdateTemplate(
|
|||
vk_object_free(&device->vk, pAllocator, templ);
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
void
|
||||
tu_update_descriptor_set_with_template(
|
||||
const struct tu_device *device,
|
||||
|
|
@ -1627,14 +1637,14 @@ tu_update_descriptor_set_with_template(
|
|||
break;
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
|
||||
assert(!(set->layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR));
|
||||
write_buffer_descriptor(device,
|
||||
set->dynamic_descriptors + dst_offset,
|
||||
(const VkDescriptorBufferInfo *) src);
|
||||
write_buffer_descriptor<CHIP>(device,
|
||||
set->dynamic_descriptors + dst_offset,
|
||||
(const VkDescriptorBufferInfo *) src);
|
||||
break;
|
||||
}
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
|
||||
write_buffer_descriptor(device, ptr,
|
||||
(const VkDescriptorBufferInfo *) src);
|
||||
write_buffer_descriptor<CHIP>(device, ptr,
|
||||
(const VkDescriptorBufferInfo *) src);
|
||||
break;
|
||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
|
||||
|
|
@ -1664,10 +1674,10 @@ tu_update_descriptor_set_with_template(
|
|||
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: {
|
||||
VK_FROM_HANDLE(vk_acceleration_structure, accel_struct, *(const VkAccelerationStructureKHR *)src);
|
||||
if (accel_struct) {
|
||||
write_accel_struct(ptr,
|
||||
vk_acceleration_structure_get_va(accel_struct));
|
||||
write_accel_struct<CHIP>(ptr,
|
||||
vk_acceleration_structure_get_va(accel_struct));
|
||||
} else {
|
||||
write_accel_struct(ptr, device->null_accel_struct_bo->iova);
|
||||
write_accel_struct<CHIP>(ptr, device->null_accel_struct_bo->iova);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -1681,7 +1691,9 @@ tu_update_descriptor_set_with_template(
|
|||
}
|
||||
}
|
||||
}
|
||||
TU_GENX(tu_update_descriptor_set_with_template);
|
||||
|
||||
template <chip CHIP>
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
tu_UpdateDescriptorSetWithTemplate(
|
||||
VkDevice _device,
|
||||
|
|
@ -1692,5 +1704,6 @@ tu_UpdateDescriptorSetWithTemplate(
|
|||
VK_FROM_HANDLE(tu_device, device, _device);
|
||||
VK_FROM_HANDLE(tu_descriptor_set, set, descriptorSet);
|
||||
|
||||
tu_update_descriptor_set_with_template(device, set, descriptorUpdateTemplate, pData);
|
||||
tu_update_descriptor_set_with_template<CHIP>(device, set, descriptorUpdateTemplate, pData);
|
||||
}
|
||||
TU_GENX(tu_UpdateDescriptorSetWithTemplate);
|
||||
|
|
|
|||
|
|
@ -202,6 +202,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(tu_descriptor_update_template, base,
|
|||
VkDescriptorUpdateTemplate,
|
||||
VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE)
|
||||
|
||||
template <chip CHIP>
|
||||
void
|
||||
tu_update_descriptor_sets(const struct tu_device *device,
|
||||
VkDescriptorSet overrideSet,
|
||||
|
|
@ -210,6 +211,7 @@ tu_update_descriptor_sets(const struct tu_device *device,
|
|||
uint32_t descriptorCopyCount,
|
||||
const VkCopyDescriptorSet *pDescriptorCopies);
|
||||
|
||||
template <chip CHIP>
|
||||
void
|
||||
tu_update_descriptor_set_with_template(
|
||||
const struct tu_device *device,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue