aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorryana <ryanamayque@gmail.com>2026-05-04 18:15:55 +0200
committercrueter <crueter@eden-emu.dev>2026-05-04 18:15:55 +0200
commita76c76d122129da7399cd9b6a5d9d6695a95e8cf (patch)
tree382b542c8fc1526dc5842a4685a3ec7b2ff7d0ec /src/video_core
parent44fa2805d6c6d2b1a7e838d27d7d6eafb9c57420 (diff)
[shader_recompiler] handle dynamic texture descriptor strides (#3898)
this fixes dynamic texture descriptors that are not laid out as simple 8-byte entries tested on steam deck/amd notes - DynamicDescriptorSizeShift called twice because i moved it away from the struct but doing it this way keeps the patch just in this single file than adding a new derived field in the shared struct (i also think its just a cheap recomputation anyways) - removed cbuf scanning because i figured out how to do a bounds check statically credits: - Mythrax <mythrax@mytrax-rs.org> (identified the 1024 descriptor cap fix in #3897) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3898 Reviewed-by: crueter <crueter@eden-emu.dev>
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pipeline.cpp5
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp3
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h12
3 files changed, 17 insertions, 3 deletions
diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
index 1a62324c95..490dd7acfe 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
+++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
@@ -127,9 +127,8 @@ void ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute,
texture_cache.SynchronizeComputeDescriptors();
- static constexpr size_t max_elements = 64;
- boost::container::static_vector<VideoCommon::ImageViewInOut, max_elements> views;
- boost::container::static_vector<VideoCommon::SamplerId, max_elements> samplers;
+ boost::container::small_vector<VideoCommon::ImageViewInOut, 64> views;
+ boost::container::small_vector<VideoCommon::SamplerId, 64> samplers;
const auto& qmd{kepler_compute.launch_description};
const auto& cbufs{qmd.const_buffer_config};
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
index adfe1614b1..087e985892 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
@@ -447,6 +447,9 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_,
.support_snorm_render_buffer = true,
.support_viewport_index_layer = device.IsExtShaderViewportIndexLayerSupported(),
.min_ssbo_alignment = static_cast<u32>(device.GetStorageBufferAlignment()),
+ .max_per_stage_descriptor_sampled_images = device.GetMaxPerStageDescriptorSampledImages(),
+ .max_per_stage_resources = device.GetMaxPerStageResources(),
+ .max_descriptor_set_sampled_images = device.GetMaxDescriptorSetSampledImages(),
.support_geometry_shader_passthrough = device.IsNvGeometryShaderPassthroughSupported(),
.support_conditional_barrier = device.SupportsConditionalBarriers(),
};
diff --git a/src/video_core/vulkan_common/vulkan_device.h b/src/video_core/vulkan_common/vulkan_device.h
index a8a89aee89..a5ffd08eac 100644
--- a/src/video_core/vulkan_common/vulkan_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -335,6 +335,18 @@ public:
return properties.properties.limits.maxDescriptorSetUniformBuffersDynamic;
}
+ u32 GetMaxPerStageDescriptorSampledImages() const {
+ return properties.properties.limits.maxPerStageDescriptorSampledImages;
+ }
+
+ u32 GetMaxPerStageResources() const {
+ return properties.properties.limits.maxPerStageResources;
+ }
+
+ u32 GetMaxDescriptorSetSampledImages() const {
+ return properties.properties.limits.maxDescriptorSetSampledImages;
+ }
+
/// Returns float control properties of the device.
const VkPhysicalDeviceFloatControlsPropertiesKHR& FloatControlProperties() const {
return properties.float_controls;