mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 20:20:18 +01:00
v3dv: expose VK_EXT_image_robustness
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18820>
This commit is contained in:
parent
c7e022abfd
commit
b6093ffbe7
7 changed files with 39 additions and 7 deletions
|
|
@ -489,7 +489,7 @@ Vulkan 1.3 -- all DONE: anv, radv, tu, lvp
|
||||||
VK_EXT_pipeline_creation_cache_control DONE (anv, lvp, radv, tu, v3dv, vn)
|
VK_EXT_pipeline_creation_cache_control DONE (anv, lvp, radv, tu, v3dv, vn)
|
||||||
VK_EXT_pipeline_creation_feedback DONE (anv, lvp, radv, tu, v3dv, vn)
|
VK_EXT_pipeline_creation_feedback DONE (anv, lvp, radv, tu, v3dv, vn)
|
||||||
VK_EXT_private_data DONE (anv, lvp, pvr, radv, tu, v3dv, vn)
|
VK_EXT_private_data DONE (anv, lvp, pvr, radv, tu, v3dv, vn)
|
||||||
VK_EXT_image_robustness DONE (anv, lvp, radv, tu, vn)
|
VK_EXT_image_robustness DONE (anv, lvp, radv, tu, v3dv, vn)
|
||||||
VK_EXT_shader_demote_to_helper_invocation DONE (anv, lvp, radv, tu, vn)
|
VK_EXT_shader_demote_to_helper_invocation DONE (anv, lvp, radv, tu, vn)
|
||||||
VK_EXT_subgroup_size_control DONE (anv, lvp, radv, tu, vn)
|
VK_EXT_subgroup_size_control DONE (anv, lvp, radv, tu, vn)
|
||||||
VK_EXT_texel_buffer_alignment DONE (anv, lvp, radv, tu, v3dv, vn)
|
VK_EXT_texel_buffer_alignment DONE (anv, lvp, radv, tu, v3dv, vn)
|
||||||
|
|
|
||||||
|
|
@ -9,3 +9,4 @@ VK_EXT_mutable_descriptor_type on RADV
|
||||||
VK_EXT_shader_atomic_float on lvp
|
VK_EXT_shader_atomic_float on lvp
|
||||||
VK_EXT_shader_atomic_float2 on lvp
|
VK_EXT_shader_atomic_float2 on lvp
|
||||||
GL_NV_shader_atomic_float on llvmpipe
|
GL_NV_shader_atomic_float on llvmpipe
|
||||||
|
VK_EXT_image_robustness on v3dv
|
||||||
|
|
|
||||||
|
|
@ -405,6 +405,7 @@ struct v3d_key {
|
||||||
uint8_t ucp_enables;
|
uint8_t ucp_enables;
|
||||||
bool is_last_geometry_stage;
|
bool is_last_geometry_stage;
|
||||||
bool robust_buffer_access;
|
bool robust_buffer_access;
|
||||||
|
bool robust_image_access;
|
||||||
|
|
||||||
enum v3d_execution_environment environment;
|
enum v3d_execution_environment environment;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1598,6 +1598,9 @@ v3d_attempt_compile(struct v3d_compile *c)
|
||||||
NIR_PASS(_, c->s, v3d_nir_lower_robust_buffer_access, c);
|
NIR_PASS(_, c->s, v3d_nir_lower_robust_buffer_access, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c->key->robust_image_access)
|
||||||
|
v3d_nir_lower_robust_image_access(c->s, c);
|
||||||
|
|
||||||
NIR_PASS(_, c->s, nir_lower_wrmasks, should_split_wrmask, c->s);
|
NIR_PASS(_, c->s, nir_lower_wrmasks, should_split_wrmask, c->s);
|
||||||
|
|
||||||
NIR_PASS(_, c->s, v3d_nir_lower_load_store_bitsize, c);
|
NIR_PASS(_, c->s, v3d_nir_lower_load_store_bitsize, c);
|
||||||
|
|
|
||||||
|
|
@ -176,6 +176,7 @@ get_device_extensions(const struct v3dv_physical_device *device,
|
||||||
.EXT_external_memory_dma_buf = true,
|
.EXT_external_memory_dma_buf = true,
|
||||||
.EXT_host_query_reset = true,
|
.EXT_host_query_reset = true,
|
||||||
.EXT_image_drm_format_modifier = true,
|
.EXT_image_drm_format_modifier = true,
|
||||||
|
.EXT_image_robustness = true,
|
||||||
.EXT_index_type_uint8 = true,
|
.EXT_index_type_uint8 = true,
|
||||||
.EXT_line_rasterization = true,
|
.EXT_line_rasterization = true,
|
||||||
.EXT_memory_budget = true,
|
.EXT_memory_budget = true,
|
||||||
|
|
@ -1165,6 +1166,7 @@ v3dv_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
|
||||||
.maintenance4 = true,
|
.maintenance4 = true,
|
||||||
.shaderZeroInitializeWorkgroupMemory = true,
|
.shaderZeroInitializeWorkgroupMemory = true,
|
||||||
.synchronization2 = true,
|
.synchronization2 = true,
|
||||||
|
.robustImageAccess = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
VkPhysicalDeviceVulkan12Features vk12 = {
|
VkPhysicalDeviceVulkan12Features vk12 = {
|
||||||
|
|
@ -2068,6 +2070,11 @@ v3dv_CreateDevice(VkPhysicalDevice physicalDevice,
|
||||||
if (features2) {
|
if (features2) {
|
||||||
memcpy(&device->features, &features2->features,
|
memcpy(&device->features, &features2->features,
|
||||||
sizeof(device->features));
|
sizeof(device->features));
|
||||||
|
|
||||||
|
const VkPhysicalDeviceImageRobustnessFeatures *irf =
|
||||||
|
vk_find_struct_const(pCreateInfo->pNext,
|
||||||
|
PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES);
|
||||||
|
device->ext_features.robustImageAccess = irf && irf->robustImageAccess;
|
||||||
} else if (pCreateInfo->pEnabledFeatures) {
|
} else if (pCreateInfo->pEnabledFeatures) {
|
||||||
memcpy(&device->features, pCreateInfo->pEnabledFeatures,
|
memcpy(&device->features, pCreateInfo->pEnabledFeatures,
|
||||||
sizeof(device->features));
|
sizeof(device->features));
|
||||||
|
|
@ -2076,6 +2083,10 @@ v3dv_CreateDevice(VkPhysicalDevice physicalDevice,
|
||||||
if (device->features.robustBufferAccess)
|
if (device->features.robustBufferAccess)
|
||||||
perf_debug("Device created with Robust Buffer Access enabled.\n");
|
perf_debug("Device created with Robust Buffer Access enabled.\n");
|
||||||
|
|
||||||
|
if (device->ext_features.robustImageAccess)
|
||||||
|
perf_debug("Device created with Robust Image Access enabled.\n");
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
v3dv_X(device, device_check_prepacked_sizes)();
|
v3dv_X(device, device_check_prepacked_sizes)();
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1036,7 +1036,8 @@ static void
|
||||||
pipeline_populate_v3d_key(struct v3d_key *key,
|
pipeline_populate_v3d_key(struct v3d_key *key,
|
||||||
const struct v3dv_pipeline_stage *p_stage,
|
const struct v3dv_pipeline_stage *p_stage,
|
||||||
uint32_t ucp_enables,
|
uint32_t ucp_enables,
|
||||||
bool robust_buffer_access)
|
bool robust_buffer_access,
|
||||||
|
bool robust_image_access)
|
||||||
{
|
{
|
||||||
assert(p_stage->pipeline->shared_data &&
|
assert(p_stage->pipeline->shared_data &&
|
||||||
p_stage->pipeline->shared_data->maps[p_stage->stage]);
|
p_stage->pipeline->shared_data->maps[p_stage->stage]);
|
||||||
|
|
@ -1100,6 +1101,7 @@ pipeline_populate_v3d_key(struct v3d_key *key,
|
||||||
key->ucp_enables = ucp_enables;
|
key->ucp_enables = ucp_enables;
|
||||||
|
|
||||||
key->robust_buffer_access = robust_buffer_access;
|
key->robust_buffer_access = robust_buffer_access;
|
||||||
|
key->robust_image_access = robust_image_access;
|
||||||
|
|
||||||
key->environment = V3D_ENVIRONMENT_VULKAN;
|
key->environment = V3D_ENVIRONMENT_VULKAN;
|
||||||
}
|
}
|
||||||
|
|
@ -1151,7 +1153,8 @@ pipeline_populate_v3d_fs_key(struct v3d_fs_key *key,
|
||||||
memset(key, 0, sizeof(*key));
|
memset(key, 0, sizeof(*key));
|
||||||
|
|
||||||
const bool rba = p_stage->pipeline->device->features.robustBufferAccess;
|
const bool rba = p_stage->pipeline->device->features.robustBufferAccess;
|
||||||
pipeline_populate_v3d_key(&key->base, p_stage, ucp_enables, rba);
|
const bool ria = p_stage->pipeline->device->ext_features.robustImageAccess;
|
||||||
|
pipeline_populate_v3d_key(&key->base, p_stage, ucp_enables, rba, ria);
|
||||||
|
|
||||||
const VkPipelineInputAssemblyStateCreateInfo *ia_info =
|
const VkPipelineInputAssemblyStateCreateInfo *ia_info =
|
||||||
pCreateInfo->pInputAssemblyState;
|
pCreateInfo->pInputAssemblyState;
|
||||||
|
|
@ -1269,7 +1272,8 @@ pipeline_populate_v3d_gs_key(struct v3d_gs_key *key,
|
||||||
memset(key, 0, sizeof(*key));
|
memset(key, 0, sizeof(*key));
|
||||||
|
|
||||||
const bool rba = p_stage->pipeline->device->features.robustBufferAccess;
|
const bool rba = p_stage->pipeline->device->features.robustBufferAccess;
|
||||||
pipeline_populate_v3d_key(&key->base, p_stage, 0, rba);
|
const bool ria = p_stage->pipeline->device->ext_features.robustImageAccess;
|
||||||
|
pipeline_populate_v3d_key(&key->base, p_stage, 0, rba, ria);
|
||||||
|
|
||||||
struct v3dv_pipeline *pipeline = p_stage->pipeline;
|
struct v3dv_pipeline *pipeline = p_stage->pipeline;
|
||||||
|
|
||||||
|
|
@ -1311,7 +1315,8 @@ pipeline_populate_v3d_vs_key(struct v3d_vs_key *key,
|
||||||
memset(key, 0, sizeof(*key));
|
memset(key, 0, sizeof(*key));
|
||||||
|
|
||||||
const bool rba = p_stage->pipeline->device->features.robustBufferAccess;
|
const bool rba = p_stage->pipeline->device->features.robustBufferAccess;
|
||||||
pipeline_populate_v3d_key(&key->base, p_stage, 0, rba);
|
const bool ria = p_stage->pipeline->device->ext_features.robustImageAccess;
|
||||||
|
pipeline_populate_v3d_key(&key->base, p_stage, 0, rba, ria);
|
||||||
|
|
||||||
struct v3dv_pipeline *pipeline = p_stage->pipeline;
|
struct v3dv_pipeline *pipeline = p_stage->pipeline;
|
||||||
|
|
||||||
|
|
@ -1944,6 +1949,9 @@ pipeline_populate_graphics_key(struct v3dv_pipeline *pipeline,
|
||||||
key->robust_buffer_access =
|
key->robust_buffer_access =
|
||||||
pipeline->device->features.robustBufferAccess;
|
pipeline->device->features.robustBufferAccess;
|
||||||
|
|
||||||
|
key->robust_image_access =
|
||||||
|
pipeline->device->ext_features.robustImageAccess;
|
||||||
|
|
||||||
const bool raster_enabled =
|
const bool raster_enabled =
|
||||||
!pCreateInfo->pRasterizationState->rasterizerDiscardEnable;
|
!pCreateInfo->pRasterizationState->rasterizerDiscardEnable;
|
||||||
|
|
||||||
|
|
@ -2035,6 +2043,8 @@ pipeline_populate_compute_key(struct v3dv_pipeline *pipeline,
|
||||||
memset(key, 0, sizeof(*key));
|
memset(key, 0, sizeof(*key));
|
||||||
key->robust_buffer_access =
|
key->robust_buffer_access =
|
||||||
pipeline->device->features.robustBufferAccess;
|
pipeline->device->features.robustBufferAccess;
|
||||||
|
key->robust_image_access =
|
||||||
|
pipeline->device->ext_features.robustImageAccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct v3dv_pipeline_shared_data *
|
static struct v3dv_pipeline_shared_data *
|
||||||
|
|
@ -3222,8 +3232,9 @@ pipeline_compile_compute(struct v3dv_pipeline *pipeline,
|
||||||
|
|
||||||
struct v3d_key key;
|
struct v3d_key key;
|
||||||
memset(&key, 0, sizeof(key));
|
memset(&key, 0, sizeof(key));
|
||||||
pipeline_populate_v3d_key(&key, p_stage, 0,
|
const bool rba = pipeline->device->features.robustBufferAccess;
|
||||||
pipeline->device->features.robustBufferAccess);
|
const bool ria = pipeline->device->ext_features.robustImageAccess;
|
||||||
|
pipeline_populate_v3d_key(&key, p_stage, 0, rba, ria);
|
||||||
pipeline->shared_data->variants[BROADCOM_SHADER_COMPUTE] =
|
pipeline->shared_data->variants[BROADCOM_SHADER_COMPUTE] =
|
||||||
pipeline_compile_shader_variant(p_stage, &key, sizeof(key),
|
pipeline_compile_shader_variant(p_stage, &key, sizeof(key),
|
||||||
alloc, &result);
|
alloc, &result);
|
||||||
|
|
|
||||||
|
|
@ -313,6 +313,7 @@ struct v3dv_meta_texel_buffer_copy_pipeline {
|
||||||
|
|
||||||
struct v3dv_pipeline_key {
|
struct v3dv_pipeline_key {
|
||||||
bool robust_buffer_access;
|
bool robust_buffer_access;
|
||||||
|
bool robust_image_access;
|
||||||
uint8_t topology;
|
uint8_t topology;
|
||||||
uint8_t logicop_func;
|
uint8_t logicop_func;
|
||||||
bool msaa;
|
bool msaa;
|
||||||
|
|
@ -518,7 +519,11 @@ struct v3dv_device {
|
||||||
* attributes will create their own BO.
|
* attributes will create their own BO.
|
||||||
*/
|
*/
|
||||||
struct v3dv_bo *default_attribute_float;
|
struct v3dv_bo *default_attribute_float;
|
||||||
|
|
||||||
VkPhysicalDeviceFeatures features;
|
VkPhysicalDeviceFeatures features;
|
||||||
|
struct {
|
||||||
|
bool robustImageAccess;
|
||||||
|
} ext_features;
|
||||||
|
|
||||||
void *device_address_mem_ctx;
|
void *device_address_mem_ctx;
|
||||||
struct util_dynarray device_address_bo_list; /* Array of struct v3dv_bo * */
|
struct util_dynarray device_address_bo_list; /* Array of struct v3dv_bo * */
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue