mirror of https://gitlab.freedesktop.org/mesa/mesa
nvk: Split SSBO and UBO address formats
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29591>
This commit is contained in:
parent
dc7b08c41a
commit
6387ae7dfb
|
@ -1238,6 +1238,7 @@ lower_ssbo_descriptor_instr(nir_builder *b, nir_instr *instr,
|
|||
|
||||
bool
|
||||
nvk_nir_lower_descriptors(nir_shader *nir,
|
||||
const struct nvk_physical_device *pdev,
|
||||
const struct vk_pipeline_robustness_state *rs,
|
||||
uint32_t set_layout_count,
|
||||
struct vk_descriptor_set_layout * const *set_layouts,
|
||||
|
@ -1248,8 +1249,8 @@ nvk_nir_lower_descriptors(nir_shader *nir,
|
|||
rs->storage_buffers != VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT ||
|
||||
rs->uniform_buffers != VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT ||
|
||||
rs->images != VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT,
|
||||
.ssbo_addr_format = nvk_buffer_addr_format(rs->storage_buffers),
|
||||
.ubo_addr_format = nvk_buffer_addr_format(rs->uniform_buffers),
|
||||
.ssbo_addr_format = nvk_ssbo_addr_format(pdev, rs->storage_buffers),
|
||||
.ubo_addr_format = nvk_ubo_addr_format(pdev, rs->uniform_buffers),
|
||||
};
|
||||
|
||||
assert(set_layout_count <= NVK_MAX_SETS);
|
||||
|
|
|
@ -112,6 +112,36 @@ nvk_get_nir_options(struct vk_physical_device *vk_pdev,
|
|||
return nvk_cg_nir_options(pdev, stage);
|
||||
}
|
||||
|
||||
nir_address_format
|
||||
nvk_ubo_addr_format(const struct nvk_physical_device *pdev,
|
||||
VkPipelineRobustnessBufferBehaviorEXT robustness)
|
||||
{
|
||||
switch (robustness) {
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT:
|
||||
return nir_address_format_64bit_global_32bit_offset;
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT:
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT:
|
||||
return nir_address_format_64bit_bounded_global;
|
||||
default:
|
||||
unreachable("Invalid robust buffer access behavior");
|
||||
}
|
||||
}
|
||||
|
||||
nir_address_format
|
||||
nvk_ssbo_addr_format(const struct nvk_physical_device *pdev,
|
||||
VkPipelineRobustnessBufferBehaviorEXT robustness)
|
||||
{
|
||||
switch (robustness) {
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT:
|
||||
return nir_address_format_64bit_global_32bit_offset;
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT:
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT:
|
||||
return nir_address_format_64bit_bounded_global;
|
||||
default:
|
||||
unreachable("Invalid robust buffer access behavior");
|
||||
}
|
||||
}
|
||||
|
||||
static struct spirv_to_nir_options
|
||||
nvk_get_spirv_options(struct vk_physical_device *vk_pdev,
|
||||
UNUSED gl_shader_stage stage,
|
||||
|
@ -121,9 +151,9 @@ nvk_get_spirv_options(struct vk_physical_device *vk_pdev,
|
|||
container_of(vk_pdev, struct nvk_physical_device, vk);
|
||||
|
||||
return (struct spirv_to_nir_options) {
|
||||
.ssbo_addr_format = nvk_buffer_addr_format(rs->storage_buffers),
|
||||
.ssbo_addr_format = nvk_ssbo_addr_format(pdev, rs->storage_buffers),
|
||||
.phys_ssbo_addr_format = nir_address_format_64bit_global,
|
||||
.ubo_addr_format = nvk_buffer_addr_format(rs->uniform_buffers),
|
||||
.ubo_addr_format = nvk_ubo_addr_format(pdev, rs->uniform_buffers),
|
||||
.shared_addr_format = nir_address_format_32bit_offset,
|
||||
.min_ssbo_alignment = NVK_MIN_SSBO_ALIGNMENT,
|
||||
.min_ubo_alignment = nvk_min_cbuf_alignment(&pdev->info),
|
||||
|
@ -412,14 +442,14 @@ nvk_lower_nir(struct nvk_device *dev, nir_shader *nir,
|
|||
};
|
||||
}
|
||||
|
||||
NIR_PASS(_, nir, nvk_nir_lower_descriptors, rs,
|
||||
NIR_PASS(_, nir, nvk_nir_lower_descriptors, pdev, rs,
|
||||
set_layout_count, set_layouts, cbuf_map);
|
||||
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_global,
|
||||
nir_address_format_64bit_global);
|
||||
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_ssbo,
|
||||
nvk_buffer_addr_format(rs->storage_buffers));
|
||||
nvk_ssbo_addr_format(pdev, rs->storage_buffers));
|
||||
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_ubo,
|
||||
nvk_buffer_addr_format(rs->uniform_buffers));
|
||||
nvk_ubo_addr_format(pdev, rs->uniform_buffers));
|
||||
NIR_PASS(_, nir, nir_shader_intrinsics_pass,
|
||||
lower_load_intrinsic, nir_metadata_none, NULL);
|
||||
|
||||
|
|
|
@ -101,22 +101,16 @@ VkShaderStageFlags nvk_nak_stages(const struct nv_device_info *info);
|
|||
uint64_t
|
||||
nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev);
|
||||
|
||||
static inline nir_address_format
|
||||
nvk_buffer_addr_format(VkPipelineRobustnessBufferBehaviorEXT robustness)
|
||||
{
|
||||
switch (robustness) {
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT:
|
||||
return nir_address_format_64bit_global_32bit_offset;
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT:
|
||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT:
|
||||
return nir_address_format_64bit_bounded_global;
|
||||
default:
|
||||
unreachable("Invalid robust buffer access behavior");
|
||||
}
|
||||
}
|
||||
nir_address_format
|
||||
nvk_ubo_addr_format(const struct nvk_physical_device *pdev,
|
||||
VkPipelineRobustnessBufferBehaviorEXT robustness);
|
||||
nir_address_format
|
||||
nvk_ssbo_addr_format(const struct nvk_physical_device *pdev,
|
||||
VkPipelineRobustnessBufferBehaviorEXT robustness);
|
||||
|
||||
bool
|
||||
nvk_nir_lower_descriptors(nir_shader *nir,
|
||||
const struct nvk_physical_device *pdev,
|
||||
const struct vk_pipeline_robustness_state *rs,
|
||||
uint32_t set_layout_count,
|
||||
struct vk_descriptor_set_layout * const *set_layouts,
|
||||
|
|
Loading…
Reference in New Issue