From 5a37a1cd744608bffc7b2301799cafed627660db Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Mon, 12 Apr 2021 17:47:25 +0200 Subject: [PATCH] lavapipe: do not subtract 8 from enum This seems arbitrary, and makes us check for PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS instead of PIPE_SHADER_CAP_MAX_SHADER_IMAGES, which isn't what we want. The end result is that we accidentally exposed 128 shader images, instead of 16. This can lead to us writing outside of the array of shader images in llvmpipe_set_shader_images, among other bad things. Fixes: b38879f8c5f ("vallium: initial import of the vulkan frontend") Reviewed-By: Mike Blumenkrantz Reviewed-by: Eric Anholt Part-of: (cherry picked from commit 83de54f6a60502b9adfba4194de36616da49a2ad) --- .pick_status.json | 2 +- src/gallium/frontends/lavapipe/lvp_device.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 6b77ca1086f..295be8555da 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -580,7 +580,7 @@ "description": "lavapipe: do not subtract 8 from enum", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "b38879f8c5f57b7f1802e433e33181bdf5e72aef" }, diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 63f44a7fc6e..98032341e80 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -485,7 +485,7 @@ void lvp_GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, .maxPerStageDescriptorUniformBuffers = pdevice->pscreen->get_shader_param(pdevice->pscreen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_CONST_BUFFERS), .maxPerStageDescriptorStorageBuffers = pdevice->pscreen->get_shader_param(pdevice->pscreen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_SHADER_BUFFERS), .maxPerStageDescriptorSampledImages = pdevice->pscreen->get_shader_param(pdevice->pscreen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS), - .maxPerStageDescriptorStorageImages = pdevice->pscreen->get_shader_param(pdevice->pscreen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_SHADER_IMAGES - 8), + .maxPerStageDescriptorStorageImages = pdevice->pscreen->get_shader_param(pdevice->pscreen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_MAX_SHADER_IMAGES), .maxPerStageDescriptorInputAttachments = 8, .maxPerStageResources = 128, .maxDescriptorSetSamplers = 32 * 1024,