1
0
Fork 0
forked from suyu/suyu
suyu/src/video_core/renderer_vulkan
ReinUsesLisp 5b2b6d594c shader/texture: Join separate image and sampler pairs offline
Games using D3D idioms can join images and samplers when a shader
executes, instead of baking them into a combined sampler image. This is
also possible on Vulkan.

One approach to this solution would be to use separate samplers on
Vulkan and leave this unimplemented on OpenGL, but we can't do this
because there's no consistent way of determining which constant buffer
holds a sampler and which one an image. We could in theory find the
first bit and if it's in the TIC area, it's an image; but this falls
apart when an image or sampler handle use an index of zero.

The used approach is to track for a LOP.OR operation (this is done at an
IR level, not at an ISA level), track again the constant buffers used as
source and store this pair. Then, outside of shader execution, join
the sample and image pair with a bitwise or operation.

This approach won't work on games that truly use separate samplers in a
meaningful way. For example, pooling textures in a 2D array and
determining at runtime what sampler to use.

This invalidates OpenGL's disk shader cache :)

- Used mostly by D3D ports to Switch
2020-06-05 00:24:51 -03:00
..
shaders vk_compute_pass: Implement indexed quads 2020-04-16 21:12:32 -03:00
fixed_pipeline_state.cpp fixed_pipeline_state: Remove unnecessary check for front faces flip 2020-05-26 16:32:27 -03:00
fixed_pipeline_state.h Merge pull request #3816 from ReinUsesLisp/vk-rasterizer-enable 2020-05-11 18:22:51 -04:00
maxwell_to_vk.cpp maxwell_to_vk: Add R16UI image format 2020-06-02 02:15:20 -03:00
maxwell_to_vk.h vk_graphics_pipeline: Implement viewport swizzles with NV_viewport_swizzle 2020-05-04 18:31:17 -03:00
nsight_aftermath_tracker.cpp renderer_vulkan: Integrate Nvidia Nsight Aftermath on Windows 2020-04-14 00:39:21 -03:00
nsight_aftermath_tracker.h renderer_vulkan: Integrate Nvidia Nsight Aftermath on Windows 2020-04-14 00:39:21 -03:00
renderer_vulkan.cpp vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
renderer_vulkan.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_blit_screen.cpp vk_blit_screen: Initialize all members in VkPipelineViewportStateCreateInfo 2020-04-15 03:30:08 -03:00
vk_blit_screen.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_buffer_cache.cpp buffer_cache: Use boost::intrusive::set for caching 2020-05-21 16:44:00 -03:00
vk_buffer_cache.h Merge pull request #3808 from ReinUsesLisp/wait-for-idle 2020-05-03 02:43:18 -04:00
vk_compute_pass.cpp vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_compute_pass.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_compute_pipeline.cpp vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_compute_pipeline.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_descriptor_pool.cpp vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_descriptor_pool.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_device.cpp maxwell_to_vk: Add R16UI image format 2020-06-02 02:15:20 -03:00
vk_device.h Merge pull request #3885 from ReinUsesLisp/viewport-swizzles 2020-05-08 15:16:53 -04:00
vk_fence_manager.cpp Address Feedback. 2020-04-22 11:36:24 -04:00
vk_fence_manager.h buffer_cache: Use boost::intrusive::set for caching 2020-05-21 16:44:00 -03:00
vk_graphics_pipeline.cpp Merge pull request #3816 from ReinUsesLisp/vk-rasterizer-enable 2020-05-11 18:22:51 -04:00
vk_graphics_pipeline.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_image.cpp renderer_vulkan: Drop Vulkan-Hpp 2020-04-10 22:49:02 -03:00
vk_image.h renderer_vulkan: Drop Vulkan-Hpp 2020-04-10 22:49:02 -03:00
vk_memory_manager.cpp vk_memory_manager: Remove unified memory model flag 2020-04-21 22:06:38 -03:00
vk_memory_manager.h vk_memory_manager: Remove unified memory model flag 2020-04-21 22:06:38 -03:00
vk_pipeline_cache.cpp Merge pull request #3930 from ReinUsesLisp/animal-borders 2020-05-31 18:40:17 -04:00
vk_pipeline_cache.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_query_cache.cpp vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_query_cache.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_rasterizer.cpp shader/texture: Join separate image and sampler pairs offline 2020-06-05 00:24:51 -03:00
vk_rasterizer.h Merge pull request #3808 from ReinUsesLisp/wait-for-idle 2020-05-03 02:43:18 -04:00
vk_renderpass_cache.cpp vk_renderpass_cache: Pack renderpass cache key to 12 bytes 2020-04-23 17:34:16 -03:00
vk_renderpass_cache.h vk_rasterizer: Pack texceptions and color formats on invalid formats 2020-04-24 22:21:29 -03:00
vk_resource_manager.cpp renderer_vulkan: Drop Vulkan-Hpp 2020-04-10 22:49:02 -03:00
vk_resource_manager.h renderer_vulkan: Drop Vulkan-Hpp 2020-04-10 22:49:02 -03:00
vk_sampler_cache.cpp vk_sampler_cache: Use VK_EXT_custom_border_color when available 2020-05-04 20:49:23 -03:00
vk_sampler_cache.h renderer_vulkan: Drop Vulkan-Hpp 2020-04-10 22:49:02 -03:00
vk_scheduler.cpp vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_scheduler.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_shader_decompiler.cpp Merge pull request #3930 from ReinUsesLisp/animal-borders 2020-05-31 18:40:17 -04:00
vk_shader_decompiler.h vk_rasterizer: Implement constant attributes 2020-05-13 04:36:47 -03:00
vk_shader_util.cpp vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_shader_util.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_staging_buffer_pool.cpp Merge pull request #3756 from ReinUsesLisp/integrated-devices 2020-04-27 16:04:22 -04:00
vk_staging_buffer_pool.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_state_tracker.cpp DirtyFlags: relax need to set render_targets as dirty 2020-03-14 11:47:33 -04:00
vk_state_tracker.h state_tracker: Remove type traits with named structures 2020-02-28 17:56:43 -03:00
vk_stream_buffer.cpp vk_stream_buffer: Fix out of memory on boot on recent Nvidia drivers 2020-04-17 18:12:48 -03:00
vk_stream_buffer.h vk_stream_buffer: Fix out of memory on boot on recent Nvidia drivers 2020-04-17 18:12:48 -03:00
vk_swapchain.cpp renderer_vulkan: Drop Vulkan-Hpp 2020-04-10 22:49:02 -03:00
vk_swapchain.h renderer_vulkan: Drop Vulkan-Hpp 2020-04-10 22:49:02 -03:00
vk_texture_cache.cpp texture_cache: Implement depth stencil texture swizzles 2020-05-26 17:44:50 -03:00
vk_texture_cache.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
vk_update_descriptor.cpp buffer_cache: Return handles instead of pointer to handles 2020-04-16 02:33:34 -03:00
vk_update_descriptor.h vulkan: Remove unnecessary includes 2020-04-28 21:54:46 -04:00
wrapper.cpp {maxwell_3d,buffer_cache}: Implement memory barriers using 3D registers 2020-04-28 02:18:12 -03:00
wrapper.h {maxwell_3d,buffer_cache}: Implement memory barriers using 3D registers 2020-04-28 02:18:12 -03:00