From 4acf5985a4c6b305cd179fdccab0c24cac2b201e Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Thu, 27 Aug 2020 10:48:29 +0200 Subject: [PATCH] v3dv: hook up robust buffer access Part-of: --- src/broadcom/vulkan/v3dv_device.c | 5 +++++ src/broadcom/vulkan/v3dv_pipeline.c | 14 ++++++++++---- src/broadcom/vulkan/v3dv_private.h | 2 ++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 6a47254891f..ebe260062d1 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -1306,6 +1306,11 @@ v3dv_CreateDevice(VkPhysicalDevice physicalDevice, device->devinfo = physical_device->devinfo; device->enabled_extensions = enabled_extensions; + if (pCreateInfo->pEnabledFeatures) { + memcpy(&device->features, pCreateInfo->pEnabledFeatures, + sizeof(device->features)); + } + int ret = drmSyncobjCreate(device->render_fd, DRM_SYNCOBJ_CREATE_SIGNALED, &device->last_job_sync); diff --git a/src/broadcom/vulkan/v3dv_pipeline.c b/src/broadcom/vulkan/v3dv_pipeline.c index 7389bbbcdb3..0589a93627e 100644 --- a/src/broadcom/vulkan/v3dv_pipeline.c +++ b/src/broadcom/vulkan/v3dv_pipeline.c @@ -1008,7 +1008,8 @@ shader_debug_output(const char *message, void *data) static void pipeline_populate_v3d_key(struct v3d_key *key, const struct v3dv_pipeline_stage *p_stage, - uint32_t ucp_enables) + uint32_t ucp_enables, + bool robust_buffer_access) { /* The following values are default values used at pipeline create. We use * there 16 bit as default return size. @@ -1054,6 +1055,8 @@ pipeline_populate_v3d_key(struct v3d_key *key, */ key->ucp_enables = ucp_enables; + key->robust_buffer_access = robust_buffer_access; + key->environment = V3D_ENVIRONMENT_VULKAN; } @@ -1100,7 +1103,8 @@ pipeline_populate_v3d_fs_key(struct v3d_fs_key *key, { memset(key, 0, sizeof(*key)); - pipeline_populate_v3d_key(&key->base, p_stage, ucp_enables); + const bool rba = p_stage->pipeline->device->features.robustBufferAccess; + pipeline_populate_v3d_key(&key->base, p_stage, ucp_enables, rba); const VkPipelineInputAssemblyStateCreateInfo *ia_info = pCreateInfo->pInputAssemblyState; @@ -1222,7 +1226,8 @@ pipeline_populate_v3d_vs_key(struct v3d_vs_key *key, { memset(key, 0, sizeof(*key)); - pipeline_populate_v3d_key(&key->base, p_stage, 0); + const bool rba = p_stage->pipeline->device->features.robustBufferAccess; + pipeline_populate_v3d_key(&key->base, p_stage, 0, rba); /* Vulkan doesn't appear to specify (anv does the same) */ key->clamp_color = false; @@ -3098,7 +3103,8 @@ pipeline_compile_compute(struct v3dv_pipeline *pipeline, struct v3d_key *key = &p_stage->key.base; memset(key, 0, sizeof(*key)); - pipeline_populate_v3d_key(key, p_stage, 0); + pipeline_populate_v3d_key(key, p_stage, 0, + pipeline->device->features.robustBufferAccess); VkResult result; p_stage->current_variant = diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h index 8c259b5ce9a..c6b378544b4 100644 --- a/src/broadcom/vulkan/v3dv_private.h +++ b/src/broadcom/vulkan/v3dv_private.h @@ -330,6 +330,8 @@ struct v3dv_device { uint32_t bo_count; struct v3dv_pipeline_cache default_pipeline_cache; + + VkPhysicalDeviceFeatures features; }; struct v3dv_device_memory {