nvk: Split SSBO and UBO address formats
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29591>
This commit is contained in:

committed by
Marge Bot

parent
dc7b08c41a
commit
6387ae7dfb
@@ -1238,6 +1238,7 @@ lower_ssbo_descriptor_instr(nir_builder *b, nir_instr *instr,
|
|||||||
|
|
||||||
bool
|
bool
|
||||||
nvk_nir_lower_descriptors(nir_shader *nir,
|
nvk_nir_lower_descriptors(nir_shader *nir,
|
||||||
|
const struct nvk_physical_device *pdev,
|
||||||
const struct vk_pipeline_robustness_state *rs,
|
const struct vk_pipeline_robustness_state *rs,
|
||||||
uint32_t set_layout_count,
|
uint32_t set_layout_count,
|
||||||
struct vk_descriptor_set_layout * const *set_layouts,
|
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->storage_buffers != VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT ||
|
||||||
rs->uniform_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,
|
rs->images != VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT,
|
||||||
.ssbo_addr_format = nvk_buffer_addr_format(rs->storage_buffers),
|
.ssbo_addr_format = nvk_ssbo_addr_format(pdev, rs->storage_buffers),
|
||||||
.ubo_addr_format = nvk_buffer_addr_format(rs->uniform_buffers),
|
.ubo_addr_format = nvk_ubo_addr_format(pdev, rs->uniform_buffers),
|
||||||
};
|
};
|
||||||
|
|
||||||
assert(set_layout_count <= NVK_MAX_SETS);
|
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);
|
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
|
static struct spirv_to_nir_options
|
||||||
nvk_get_spirv_options(struct vk_physical_device *vk_pdev,
|
nvk_get_spirv_options(struct vk_physical_device *vk_pdev,
|
||||||
UNUSED gl_shader_stage stage,
|
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);
|
container_of(vk_pdev, struct nvk_physical_device, vk);
|
||||||
|
|
||||||
return (struct spirv_to_nir_options) {
|
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,
|
.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,
|
.shared_addr_format = nir_address_format_32bit_offset,
|
||||||
.min_ssbo_alignment = NVK_MIN_SSBO_ALIGNMENT,
|
.min_ssbo_alignment = NVK_MIN_SSBO_ALIGNMENT,
|
||||||
.min_ubo_alignment = nvk_min_cbuf_alignment(&pdev->info),
|
.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);
|
set_layout_count, set_layouts, cbuf_map);
|
||||||
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_global,
|
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_global,
|
||||||
nir_address_format_64bit_global);
|
nir_address_format_64bit_global);
|
||||||
NIR_PASS(_, nir, nir_lower_explicit_io, nir_var_mem_ssbo,
|
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,
|
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,
|
NIR_PASS(_, nir, nir_shader_intrinsics_pass,
|
||||||
lower_load_intrinsic, nir_metadata_none, NULL);
|
lower_load_intrinsic, nir_metadata_none, NULL);
|
||||||
|
|
||||||
|
@@ -101,22 +101,16 @@ VkShaderStageFlags nvk_nak_stages(const struct nv_device_info *info);
|
|||||||
uint64_t
|
uint64_t
|
||||||
nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev);
|
nvk_physical_device_compiler_flags(const struct nvk_physical_device *pdev);
|
||||||
|
|
||||||
static inline nir_address_format
|
nir_address_format
|
||||||
nvk_buffer_addr_format(VkPipelineRobustnessBufferBehaviorEXT robustness)
|
nvk_ubo_addr_format(const struct nvk_physical_device *pdev,
|
||||||
{
|
VkPipelineRobustnessBufferBehaviorEXT robustness);
|
||||||
switch (robustness) {
|
nir_address_format
|
||||||
case VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT:
|
nvk_ssbo_addr_format(const struct nvk_physical_device *pdev,
|
||||||
return nir_address_format_64bit_global_32bit_offset;
|
VkPipelineRobustnessBufferBehaviorEXT robustness);
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
nvk_nir_lower_descriptors(nir_shader *nir,
|
nvk_nir_lower_descriptors(nir_shader *nir,
|
||||||
|
const struct nvk_physical_device *pdev,
|
||||||
const struct vk_pipeline_robustness_state *rs,
|
const struct vk_pipeline_robustness_state *rs,
|
||||||
uint32_t set_layout_count,
|
uint32_t set_layout_count,
|
||||||
struct vk_descriptor_set_layout * const *set_layouts,
|
struct vk_descriptor_set_layout * const *set_layouts,
|
||||||
|
Reference in New Issue
Block a user