38
38
radv_descriptor_type_buffer_count(VkDescriptorType type)
41
case VK_DESCRIPTOR_TYPE_SAMPLER:
42
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK:
43
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
45
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
46
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
47
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
48
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
49
case VK_DESCRIPTOR_TYPE_MUTABLE_EXT:
41
case VK_DESCRIPTOR_TYPE_SAMPLER:
42
case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK:
43
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR:
45
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
46
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
47
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
48
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
49
case VK_DESCRIPTOR_TYPE_MUTABLE_EXT:
193
190
ycbcr_sampler_offsets = samplers + 4 * immutable_sampler_count;
194
191
set_layout->ycbcr_sampler_offsets_offset = (char *)ycbcr_sampler_offsets - (char *)set_layout;
196
uintptr_t first_ycbcr_sampler_offset =
197
(uintptr_t)ycbcr_sampler_offsets + sizeof(uint32_t) * num_bindings;
198
first_ycbcr_sampler_offset =
199
ALIGN(first_ycbcr_sampler_offset, alignof(struct vk_ycbcr_conversion_state));
193
uintptr_t first_ycbcr_sampler_offset = (uintptr_t)ycbcr_sampler_offsets + sizeof(uint32_t) * num_bindings;
194
first_ycbcr_sampler_offset = ALIGN(first_ycbcr_sampler_offset, alignof(struct vk_ycbcr_conversion_state));
200
195
ycbcr_samplers = (struct vk_ycbcr_conversion_state *)first_ycbcr_sampler_offset;
202
197
set_layout->ycbcr_sampler_offsets_offset = 0;
204
199
VkDescriptorSetLayoutBinding *bindings = NULL;
206
vk_create_sorted_bindings(pCreateInfo->pBindings, pCreateInfo->bindingCount, &bindings);
200
VkResult result = vk_create_sorted_bindings(pCreateInfo->pBindings, pCreateInfo->bindingCount, &bindings);
207
201
if (result != VK_SUCCESS) {
208
202
vk_descriptor_set_layout_unref(&device->vk, &set_layout->vk);
209
203
return vk_error(device, result);
221
215
uint32_t first_alignment = 32;
222
216
if (pCreateInfo->bindingCount > 0) {
223
uint32_t last_alignment =
224
radv_descriptor_alignment(bindings[pCreateInfo->bindingCount - 1].descriptorType);
225
if (bindings[pCreateInfo->bindingCount - 1].descriptorType ==
226
VK_DESCRIPTOR_TYPE_MUTABLE_EXT) {
217
uint32_t last_alignment = radv_descriptor_alignment(bindings[pCreateInfo->bindingCount - 1].descriptorType);
218
if (bindings[pCreateInfo->bindingCount - 1].descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) {
227
219
uint64_t mutable_size = 0, mutable_align = 0;
228
220
radv_mutable_descriptor_type_size_alignment(
229
&mutable_info->pMutableDescriptorTypeLists[pCreateInfo->bindingCount - 1],
230
&mutable_size, &mutable_align);
221
&mutable_info->pMutableDescriptorTypeLists[pCreateInfo->bindingCount - 1], &mutable_size, &mutable_align);
231
222
last_alignment = mutable_align;
342
328
/* Do not optimize space for descriptor buffers and embedded samplers, otherwise the set
343
329
* layout size/offset are incorrect.
345
if (!(pCreateInfo->flags &
346
(VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT |
347
VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT))) {
348
set_layout->binding[b].immutable_samplers_equal = has_equal_immutable_samplers(
349
binding->pImmutableSamplers, binding->descriptorCount);
331
if (!(pCreateInfo->flags & (VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT |
332
VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT))) {
333
set_layout->binding[b].immutable_samplers_equal =
334
has_equal_immutable_samplers(binding->pImmutableSamplers, binding->descriptorCount);
352
337
for (uint32_t i = 0; i < binding->descriptorCount; i++)
353
memcpy(samplers + 4 * i,
354
&radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16);
338
memcpy(samplers + 4 * i, &radv_sampler_from_handle(binding->pImmutableSamplers[i])->state, 16);
356
340
/* Don't reserve space for the samplers if they're not accessed. */
357
341
if (set_layout->binding[b].immutable_samplers_equal) {
428
408
uint32_t first_alignment = 32;
429
409
if (pCreateInfo->bindingCount > 0) {
430
uint32_t last_alignment =
431
radv_descriptor_alignment(bindings[pCreateInfo->bindingCount - 1].descriptorType);
432
if (bindings[pCreateInfo->bindingCount - 1].descriptorType ==
433
VK_DESCRIPTOR_TYPE_MUTABLE_EXT) {
410
uint32_t last_alignment = radv_descriptor_alignment(bindings[pCreateInfo->bindingCount - 1].descriptorType);
411
if (bindings[pCreateInfo->bindingCount - 1].descriptorType == VK_DESCRIPTOR_TYPE_MUTABLE_EXT) {
434
412
uint64_t mutable_size = 0, mutable_align = 0;
435
413
radv_mutable_descriptor_type_size_alignment(
436
&mutable_info->pMutableDescriptorTypeLists[pCreateInfo->bindingCount - 1],
437
&mutable_size, &mutable_align);
414
&mutable_info->pMutableDescriptorTypeLists[pCreateInfo->bindingCount - 1], &mutable_size, &mutable_align);
438
415
last_alignment = mutable_align;
596
570
VKAPI_ATTR VkResult VKAPI_CALL
597
571
radv_CreatePipelineLayout(VkDevice _device, const VkPipelineLayoutCreateInfo *pCreateInfo,
598
const VkAllocationCallbacks *pAllocator,
599
VkPipelineLayout *pPipelineLayout)
572
const VkAllocationCallbacks *pAllocator, VkPipelineLayout *pPipelineLayout)
601
574
RADV_FROM_HANDLE(radv_device, device, _device);
602
575
struct radv_pipeline_layout *layout;
604
577
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO);
606
layout = vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*layout), 8,
607
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
579
layout = vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*layout), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
608
580
if (layout == NULL)
609
581
return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
611
radv_pipeline_layout_init(device, layout,
612
pCreateInfo->flags & VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT);
583
radv_pipeline_layout_init(device, layout, pCreateInfo->flags & VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT);
614
585
layout->num_sets = pCreateInfo->setLayoutCount;
953
911
if (!(pCreateInfo->flags & VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE)) {
954
enum radeon_bo_flag flags = RADEON_FLAG_NO_INTERPROCESS_SHARING | RADEON_FLAG_READ_ONLY |
912
enum radeon_bo_flag flags = RADEON_FLAG_NO_INTERPROCESS_SHARING | RADEON_FLAG_READ_ONLY | RADEON_FLAG_32BIT;
957
914
if (device->instance->zero_vram)
958
915
flags |= RADEON_FLAG_ZERO_VRAM;
960
VkResult result = device->ws->buffer_create(
961
device->ws, bo_size, 32, RADEON_DOMAIN_VRAM, flags, RADV_BO_PRIORITY_DESCRIPTOR, 0,
917
VkResult result = device->ws->buffer_create(device->ws, bo_size, 32, RADEON_DOMAIN_VRAM, flags,
918
RADV_BO_PRIORITY_DESCRIPTOR, 0, &pool->bo);
963
919
if (result != VK_SUCCESS) {
964
920
radv_destroy_descriptor_pool(device, pAllocator, pool);
965
921
return vk_error(device, result);
990
945
VKAPI_ATTR VkResult VKAPI_CALL
991
946
radv_CreateDescriptorPool(VkDevice _device, const VkDescriptorPoolCreateInfo *pCreateInfo,
992
const VkAllocationCallbacks *pAllocator,
993
VkDescriptorPool *pDescriptorPool)
947
const VkAllocationCallbacks *pAllocator, VkDescriptorPool *pDescriptorPool)
995
949
RADV_FROM_HANDLE(radv_device, device, _device);
996
950
return radv_create_descriptor_pool(device, pCreateInfo, pAllocator, pDescriptorPool, false);
999
953
VKAPI_ATTR void VKAPI_CALL
1000
radv_DestroyDescriptorPool(VkDevice _device, VkDescriptorPool _pool,
1001
const VkAllocationCallbacks *pAllocator)
954
radv_DestroyDescriptorPool(VkDevice _device, VkDescriptorPool _pool, const VkAllocationCallbacks *pAllocator)
1003
956
RADV_FROM_HANDLE(radv_device, device, _device);
1004
957
RADV_FROM_HANDLE(radv_descriptor_pool, pool, _pool);
1131
uint32_t rsrc_word3 =
1132
S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) | S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
1133
S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) | S_008F0C_DST_SEL_W(V_008F0C_SQ_SEL_W);
1082
uint32_t rsrc_word3 = S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) | S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
1083
S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) | S_008F0C_DST_SEL_W(V_008F0C_SQ_SEL_W);
1135
1085
if (device->physical_device->rad_info.gfx_level >= GFX11) {
1136
rsrc_word3 |= S_008F0C_FORMAT(V_008F0C_GFX11_FORMAT_32_FLOAT) |
1137
S_008F0C_OOB_SELECT(V_008F0C_OOB_SELECT_RAW);
1086
rsrc_word3 |= S_008F0C_FORMAT(V_008F0C_GFX11_FORMAT_32_FLOAT) | S_008F0C_OOB_SELECT(V_008F0C_OOB_SELECT_RAW);
1138
1087
} else if (device->physical_device->rad_info.gfx_level >= GFX10) {
1139
rsrc_word3 |= S_008F0C_FORMAT(V_008F0C_GFX10_FORMAT_32_FLOAT) |
1140
S_008F0C_OOB_SELECT(V_008F0C_OOB_SELECT_RAW) | S_008F0C_RESOURCE_LEVEL(1);
1088
rsrc_word3 |= S_008F0C_FORMAT(V_008F0C_GFX10_FORMAT_32_FLOAT) | S_008F0C_OOB_SELECT(V_008F0C_OOB_SELECT_RAW) |
1089
S_008F0C_RESOURCE_LEVEL(1);
1142
rsrc_word3 |= S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
1143
S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32);
1092
S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) | S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32);
1289
1235
static ALWAYS_INLINE void
1290
write_combined_image_sampler_descriptor(struct radv_device *device,
1291
struct radv_cmd_buffer *cmd_buffer, unsigned sampler_offset,
1292
unsigned *dst, struct radeon_winsys_bo **buffer_list,
1293
VkDescriptorType descriptor_type,
1294
const VkDescriptorImageInfo *image_info, bool has_sampler)
1236
write_combined_image_sampler_descriptor(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
1237
unsigned sampler_offset, unsigned *dst, struct radeon_winsys_bo **buffer_list,
1238
VkDescriptorType descriptor_type, const VkDescriptorImageInfo *image_info,
1296
write_image_descriptor_impl(device, cmd_buffer, sampler_offset, dst, buffer_list, descriptor_type,
1241
write_image_descriptor_impl(device, cmd_buffer, sampler_offset, dst, buffer_list, descriptor_type, image_info);
1298
1242
/* copy over sampler state */
1299
1243
if (has_sampler) {
1300
1244
RADV_FROM_HANDLE(radv_sampler, sampler, image_info->sampler);
1324
1268
static ALWAYS_INLINE void
1325
1269
radv_update_descriptor_sets_impl(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
1326
1270
VkDescriptorSet dstSetOverride, uint32_t descriptorWriteCount,
1327
const VkWriteDescriptorSet *pDescriptorWrites,
1328
uint32_t descriptorCopyCount,
1271
const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount,
1329
1272
const VkCopyDescriptorSet *pDescriptorCopies)
1332
1275
for (i = 0; i < descriptorWriteCount; i++) {
1333
1276
const VkWriteDescriptorSet *writeset = &pDescriptorWrites[i];
1334
RADV_FROM_HANDLE(radv_descriptor_set, set,
1335
dstSetOverride ? dstSetOverride : writeset->dstSet);
1277
RADV_FROM_HANDLE(radv_descriptor_set, set, dstSetOverride ? dstSetOverride : writeset->dstSet);
1336
1278
const struct radv_descriptor_set_binding_layout *binding_layout =
1337
1279
set->header.layout->binding + writeset->dstBinding;
1338
1280
uint32_t *ptr = set->header.mapped_ptr;
1341
1283
* allocated, so if we are writing push descriptors we have to copy the
1342
1284
* immutable samplers into them now.
1344
const bool copy_immutable_samplers = cmd_buffer &&
1345
binding_layout->immutable_samplers_offset &&
1346
!binding_layout->immutable_samplers_equal;
1286
const bool copy_immutable_samplers =
1287
cmd_buffer && binding_layout->immutable_samplers_offset && !binding_layout->immutable_samplers_equal;
1347
1288
const uint32_t *samplers = radv_immutable_samplers(set->header.layout, binding_layout);
1348
1289
const VkWriteDescriptorSetAccelerationStructureKHR *accel_structs = NULL;
1350
1291
ptr += binding_layout->offset / 4;
1352
1293
if (writeset->descriptorType == VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK) {
1353
write_block_descriptor(device, cmd_buffer, (uint8_t *)ptr + writeset->dstArrayElement,
1294
write_block_descriptor(device, cmd_buffer, (uint8_t *)ptr + writeset->dstArrayElement, writeset);
1356
1296
} else if (writeset->descriptorType == VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR) {
1358
vk_find_struct_const(writeset->pNext, WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR);
1297
accel_structs = vk_find_struct_const(writeset->pNext, WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR);
1361
1300
ptr += binding_layout->size * writeset->dstArrayElement / 4;
1367
1306
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
1368
1307
unsigned idx = writeset->dstArrayElement + j;
1369
1308
idx += binding_layout->dynamic_offset_offset;
1370
assert(!(set->header.layout->flags &
1371
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR));
1372
write_dynamic_buffer_descriptor(device, set->header.dynamic_descriptors + idx,
1373
buffer_list, writeset->pBufferInfo + j);
1309
assert(!(set->header.layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR));
1310
write_dynamic_buffer_descriptor(device, set->header.dynamic_descriptors + idx, buffer_list,
1311
writeset->pBufferInfo + j);
1376
1314
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
1377
1315
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
1378
write_buffer_descriptor_impl(device, cmd_buffer, ptr, buffer_list,
1379
writeset->pBufferInfo + j);
1316
write_buffer_descriptor_impl(device, cmd_buffer, ptr, buffer_list, writeset->pBufferInfo + j);
1381
1318
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
1382
1319
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
1383
write_texel_buffer_descriptor(device, cmd_buffer, ptr, buffer_list,
1384
writeset->pTexelBufferView[j]);
1320
write_texel_buffer_descriptor(device, cmd_buffer, ptr, buffer_list, writeset->pTexelBufferView[j]);
1386
1322
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
1387
write_image_descriptor_impl(device, cmd_buffer, 32, ptr, buffer_list,
1388
writeset->descriptorType, writeset->pImageInfo + j);
1323
write_image_descriptor_impl(device, cmd_buffer, 32, ptr, buffer_list, writeset->descriptorType,
1324
writeset->pImageInfo + j);
1390
1326
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
1391
1327
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
1392
write_image_descriptor_impl(device, cmd_buffer, 64, ptr, buffer_list,
1393
writeset->descriptorType, writeset->pImageInfo + j);
1328
write_image_descriptor_impl(device, cmd_buffer, 64, ptr, buffer_list, writeset->descriptorType,
1329
writeset->pImageInfo + j);
1395
1331
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER: {
1396
1332
unsigned sampler_offset = radv_combined_image_descriptor_sampler_offset(binding_layout);
1397
write_combined_image_sampler_descriptor(
1398
device, cmd_buffer, sampler_offset, ptr, buffer_list, writeset->descriptorType,
1399
writeset->pImageInfo + j, !binding_layout->immutable_samplers_offset);
1333
write_combined_image_sampler_descriptor(device, cmd_buffer, sampler_offset, ptr, buffer_list,
1334
writeset->descriptorType, writeset->pImageInfo + j,
1335
!binding_layout->immutable_samplers_offset);
1400
1336
if (copy_immutable_samplers) {
1401
1337
const unsigned idx = writeset->dstArrayElement + j;
1402
1338
memcpy((char *)ptr + sampler_offset, samplers + 4 * idx, 16);
1504
1438
VKAPI_ATTR void VKAPI_CALL
1505
1439
radv_UpdateDescriptorSets(VkDevice _device, uint32_t descriptorWriteCount,
1506
const VkWriteDescriptorSet *pDescriptorWrites,
1507
uint32_t descriptorCopyCount,
1440
const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount,
1508
1441
const VkCopyDescriptorSet *pDescriptorCopies)
1510
1443
RADV_FROM_HANDLE(radv_device, device, _device);
1512
radv_update_descriptor_sets_impl(device, NULL, VK_NULL_HANDLE, descriptorWriteCount,
1513
pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
1445
radv_update_descriptor_sets_impl(device, NULL, VK_NULL_HANDLE, descriptorWriteCount, pDescriptorWrites,
1446
descriptorCopyCount, pDescriptorCopies);
1517
1450
radv_cmd_update_descriptor_sets(struct radv_device *device, struct radv_cmd_buffer *cmd_buffer,
1518
1451
VkDescriptorSet dstSetOverride, uint32_t descriptorWriteCount,
1519
const VkWriteDescriptorSet *pDescriptorWrites,
1520
uint32_t descriptorCopyCount,
1452
const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount,
1521
1453
const VkCopyDescriptorSet *pDescriptorCopies)
1523
1455
/* Assume cmd_buffer != NULL to optimize out cmd_buffer checks in generic code above. */
1524
1456
assume(cmd_buffer != NULL);
1525
radv_update_descriptor_sets_impl(device, cmd_buffer, dstSetOverride, descriptorWriteCount,
1526
pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
1457
radv_update_descriptor_sets_impl(device, cmd_buffer, dstSetOverride, descriptorWriteCount, pDescriptorWrites,
1458
descriptorCopyCount, pDescriptorCopies);
1529
1461
VKAPI_ATTR VkResult VKAPI_CALL
1530
radv_CreateDescriptorUpdateTemplate(VkDevice _device,
1531
const VkDescriptorUpdateTemplateCreateInfo *pCreateInfo,
1462
radv_CreateDescriptorUpdateTemplate(VkDevice _device, const VkDescriptorUpdateTemplateCreateInfo *pCreateInfo,
1532
1463
const VkAllocationCallbacks *pAllocator,
1533
1464
VkDescriptorUpdateTemplate *pDescriptorUpdateTemplate)
1665
1589
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
1666
1590
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC: {
1667
1591
const unsigned idx = templ->entry[i].dst_offset + j;
1668
assert(!(set->header.layout->flags &
1669
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR));
1670
write_dynamic_buffer_descriptor(device, set->header.dynamic_descriptors + idx,
1671
buffer_list, (struct VkDescriptorBufferInfo *)pSrc);
1592
assert(!(set->header.layout->flags & VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR));
1593
write_dynamic_buffer_descriptor(device, set->header.dynamic_descriptors + idx, buffer_list,
1594
(struct VkDescriptorBufferInfo *)pSrc);
1674
1597
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
1675
1598
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER:
1676
write_buffer_descriptor_impl(device, cmd_buffer, pDst, buffer_list,
1677
(struct VkDescriptorBufferInfo *)pSrc);
1599
write_buffer_descriptor_impl(device, cmd_buffer, pDst, buffer_list, (struct VkDescriptorBufferInfo *)pSrc);
1679
1601
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
1680
1602
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
1681
write_texel_buffer_descriptor(device, cmd_buffer, pDst, buffer_list,
1682
*(VkBufferView *)pSrc);
1603
write_texel_buffer_descriptor(device, cmd_buffer, pDst, buffer_list, *(VkBufferView *)pSrc);
1684
1605
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
1685
write_image_descriptor_impl(device, cmd_buffer, 32, pDst, buffer_list,
1686
templ->entry[i].descriptor_type,
1606
write_image_descriptor_impl(device, cmd_buffer, 32, pDst, buffer_list, templ->entry[i].descriptor_type,
1687
1607
(struct VkDescriptorImageInfo *)pSrc);
1689
1609
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
1690
1610
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
1691
write_image_descriptor_impl(device, cmd_buffer, 64, pDst, buffer_list,
1692
templ->entry[i].descriptor_type,
1611
write_image_descriptor_impl(device, cmd_buffer, 64, pDst, buffer_list, templ->entry[i].descriptor_type,
1693
1612
(struct VkDescriptorImageInfo *)pSrc);
1695
1614
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
1696
write_combined_image_sampler_descriptor(
1697
device, cmd_buffer, templ->entry[i].sampler_offset, pDst, buffer_list,
1698
templ->entry[i].descriptor_type, (struct VkDescriptorImageInfo *)pSrc,
1699
templ->entry[i].has_sampler);
1615
write_combined_image_sampler_descriptor(device, cmd_buffer, templ->entry[i].sampler_offset, pDst,
1616
buffer_list, templ->entry[i].descriptor_type,
1617
(struct VkDescriptorImageInfo *)pSrc, templ->entry[i].has_sampler);
1700
1618
if (cmd_buffer && templ->entry[i].immutable_samplers) {
1701
memcpy((char *)pDst + templ->entry[i].sampler_offset,
1702
templ->entry[i].immutable_samplers + 4 * j, 16);
1619
memcpy((char *)pDst + templ->entry[i].sampler_offset, templ->entry[i].immutable_samplers + 4 * j, 16);
1705
1622
case VK_DESCRIPTOR_TYPE_SAMPLER:
1706
1623
if (templ->entry[i].has_sampler) {
1707
1624
const VkDescriptorImageInfo *pImageInfo = (struct VkDescriptorImageInfo *)pSrc;
1708
1625
write_sampler_descriptor(pDst, pImageInfo->sampler);
1710
else if (cmd_buffer && templ->entry[i].immutable_samplers)
1626
} else if (cmd_buffer && templ->entry[i].immutable_samplers)
1711
1627
memcpy(pDst, templ->entry[i].immutable_samplers + 4 * j, 16);
1713
1629
case VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR: {
1714
RADV_FROM_HANDLE(vk_acceleration_structure, accel_struct,
1715
*(const VkAccelerationStructureKHR *)pSrc);
1716
write_accel_struct(device, pDst,
1717
accel_struct ? vk_acceleration_structure_get_va(accel_struct) : 0);
1630
RADV_FROM_HANDLE(vk_acceleration_structure, accel_struct, *(const VkAccelerationStructureKHR *)pSrc);
1631
write_accel_struct(device, pDst, accel_struct ? vk_acceleration_structure_get_va(accel_struct) : 0);
1753
1664
VKAPI_ATTR void VKAPI_CALL
1754
radv_GetDescriptorSetLayoutHostMappingInfoVALVE(
1755
VkDevice _device, const VkDescriptorSetBindingReferenceVALVE *pBindingReference,
1756
VkDescriptorSetLayoutHostMappingInfoVALVE *pHostMapping)
1665
radv_GetDescriptorSetLayoutHostMappingInfoVALVE(VkDevice _device,
1666
const VkDescriptorSetBindingReferenceVALVE *pBindingReference,
1667
VkDescriptorSetLayoutHostMappingInfoVALVE *pHostMapping)
1758
1669
struct radv_descriptor_set_layout *set_layout =
1759
1670
radv_descriptor_set_layout_from_handle(pBindingReference->descriptorSetLayout);
1761
const struct radv_descriptor_set_binding_layout *binding_layout =
1762
set_layout->binding + pBindingReference->binding;
1672
const struct radv_descriptor_set_binding_layout *binding_layout = set_layout->binding + pBindingReference->binding;
1764
1674
pHostMapping->descriptorOffset = binding_layout->offset;
1765
1675
pHostMapping->descriptorSize = binding_layout->size;
1768
1678
VKAPI_ATTR void VKAPI_CALL
1769
radv_GetDescriptorSetHostMappingVALVE(VkDevice _device, VkDescriptorSet descriptorSet,
1679
radv_GetDescriptorSetHostMappingVALVE(VkDevice _device, VkDescriptorSet descriptorSet, void **ppData)
1772
1681
RADV_FROM_HANDLE(radv_descriptor_set, set, descriptorSet);
1773
1682
*ppData = set->header.mapped_ptr;
1776
1685
/* VK_EXT_descriptor_buffer */
1777
1686
VKAPI_ATTR void VKAPI_CALL
1778
radv_GetDescriptorSetLayoutSizeEXT(VkDevice device, VkDescriptorSetLayout layout,
1779
VkDeviceSize *pLayoutSizeInBytes)
1687
radv_GetDescriptorSetLayoutSizeEXT(VkDevice device, VkDescriptorSetLayout layout, VkDeviceSize *pLayoutSizeInBytes)
1781
1689
RADV_FROM_HANDLE(radv_descriptor_set_layout, set_layout, layout);
1782
1690
*pLayoutSizeInBytes = set_layout->size;
1785
1693
VKAPI_ATTR void VKAPI_CALL
1786
radv_GetDescriptorSetLayoutBindingOffsetEXT(VkDevice device, VkDescriptorSetLayout layout,
1787
uint32_t binding, VkDeviceSize *pOffset)
1694
radv_GetDescriptorSetLayoutBindingOffsetEXT(VkDevice device, VkDescriptorSetLayout layout, uint32_t binding,
1695
VkDeviceSize *pOffset)
1789
1697
RADV_FROM_HANDLE(radv_descriptor_set_layout, set_layout, layout);
1790
1698
*pOffset = set_layout->binding[binding].offset;
1793
1701
VKAPI_ATTR void VKAPI_CALL
1794
radv_GetDescriptorEXT(VkDevice _device, const VkDescriptorGetInfoEXT *pDescriptorInfo,
1795
size_t dataSize, void *pDescriptor)
1702
radv_GetDescriptorEXT(VkDevice _device, const VkDescriptorGetInfoEXT *pDescriptorInfo, size_t dataSize,
1797
1705
RADV_FROM_HANDLE(radv_device, device, _device);
1801
1709
write_sampler_descriptor(pDescriptor, *pDescriptorInfo->data.pSampler);
1803
1711
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
1804
write_image_descriptor(pDescriptor, 64, pDescriptorInfo->type,
1805
pDescriptorInfo->data.pCombinedImageSampler);
1712
write_image_descriptor(pDescriptor, 64, pDescriptorInfo->type, pDescriptorInfo->data.pCombinedImageSampler);
1806
1713
if (pDescriptorInfo->data.pCombinedImageSampler) {
1807
write_sampler_descriptor((uint32_t *)pDescriptor + 20,
1808
pDescriptorInfo->data.pCombinedImageSampler->sampler);
1714
write_sampler_descriptor((uint32_t *)pDescriptor + 20, pDescriptorInfo->data.pCombinedImageSampler->sampler);
1811
1717
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
1812
write_image_descriptor(pDescriptor, 64, pDescriptorInfo->type,
1813
pDescriptorInfo->data.pInputAttachmentImage);
1718
write_image_descriptor(pDescriptor, 64, pDescriptorInfo->type, pDescriptorInfo->data.pInputAttachmentImage);
1815
1720
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE:
1816
write_image_descriptor(pDescriptor, 64, pDescriptorInfo->type,
1817
pDescriptorInfo->data.pSampledImage);
1721
write_image_descriptor(pDescriptor, 64, pDescriptorInfo->type, pDescriptorInfo->data.pSampledImage);
1819
1723
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
1820
write_image_descriptor(pDescriptor, 32, pDescriptorInfo->type,
1821
pDescriptorInfo->data.pStorageImage);
1724
write_image_descriptor(pDescriptor, 32, pDescriptorInfo->type, pDescriptorInfo->data.pStorageImage);
1823
1726
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: {
1824
1727
const VkDescriptorAddressInfoEXT *addr_info = pDescriptorInfo->data.pUniformBuffer;