diff options
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.cpp | 74 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.h | 2 |
3 files changed, 43 insertions, 39 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm.cpp b/src/shader_recompiler/backend/glasm/emit_glasm.cpp index 0c2bbf284..8718cc7ec 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm.cpp +++ b/src/shader_recompiler/backend/glasm/emit_glasm.cpp | |||
| @@ -271,8 +271,7 @@ void SetupOptions(const IR::Program& program, const Profile& profile, | |||
| 271 | "OPTION NV_shader_storage_buffer;" | 271 | "OPTION NV_shader_storage_buffer;" |
| 272 | "OPTION NV_gpu_program_fp64;" | 272 | "OPTION NV_gpu_program_fp64;" |
| 273 | "OPTION NV_bindless_texture;" | 273 | "OPTION NV_bindless_texture;" |
| 274 | "OPTION ARB_derivative_control;" | 274 | "OPTION ARB_derivative_control;"; |
| 275 | "OPTION EXT_shader_image_load_formatted;"; | ||
| 276 | if (info.uses_int64_bit_atomics) { | 275 | if (info.uses_int64_bit_atomics) { |
| 277 | header += "OPTION NV_shader_atomic_int64;"; | 276 | header += "OPTION NV_shader_atomic_int64;"; |
| 278 | } | 277 | } |
| @@ -297,6 +296,9 @@ void SetupOptions(const IR::Program& program, const Profile& profile, | |||
| 297 | header += "OPTION NV_viewport_array2;"; | 296 | header += "OPTION NV_viewport_array2;"; |
| 298 | } | 297 | } |
| 299 | } | 298 | } |
| 299 | if (info.uses_typeless_image_reads && profile.support_typeless_image_loads) { | ||
| 300 | header += "OPTION EXT_shader_image_load_formatted;"; | ||
| 301 | } | ||
| 300 | if (stage == Stage::Fragment && runtime_info.force_early_z != 0) { | 302 | if (stage == Stage::Fragment && runtime_info.force_early_z != 0) { |
| 301 | header += "OPTION NV_early_fragment_tests;"; | 303 | header += "OPTION NV_early_fragment_tests;"; |
| 302 | } | 304 | } |
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 747a133fb..2c0510f11 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -36,42 +36,6 @@ | |||
| 36 | 36 | ||
| 37 | namespace OpenGL { | 37 | namespace OpenGL { |
| 38 | namespace { | 38 | namespace { |
| 39 | // FIXME: Move this somewhere else | ||
| 40 | const Shader::Profile profile{ | ||
| 41 | .supported_spirv = 0x00010000, | ||
| 42 | |||
| 43 | .unified_descriptor_binding = false, | ||
| 44 | .support_descriptor_aliasing = false, | ||
| 45 | .support_int8 = false, | ||
| 46 | .support_int16 = false, | ||
| 47 | .support_vertex_instance_id = true, | ||
| 48 | .support_float_controls = false, | ||
| 49 | .support_separate_denorm_behavior = false, | ||
| 50 | .support_separate_rounding_mode = false, | ||
| 51 | .support_fp16_denorm_preserve = false, | ||
| 52 | .support_fp32_denorm_preserve = false, | ||
| 53 | .support_fp16_denorm_flush = false, | ||
| 54 | .support_fp32_denorm_flush = false, | ||
| 55 | .support_fp16_signed_zero_nan_preserve = false, | ||
| 56 | .support_fp32_signed_zero_nan_preserve = false, | ||
| 57 | .support_fp64_signed_zero_nan_preserve = false, | ||
| 58 | .support_explicit_workgroup_layout = false, | ||
| 59 | .support_vote = true, | ||
| 60 | .support_viewport_index_layer_non_geometry = true, | ||
| 61 | .support_viewport_mask = true, | ||
| 62 | .support_typeless_image_loads = true, | ||
| 63 | .support_demote_to_helper_invocation = false, | ||
| 64 | .support_int64_atomics = false, | ||
| 65 | |||
| 66 | .warp_size_potentially_larger_than_guest = true, | ||
| 67 | .lower_left_origin_mode = true, | ||
| 68 | |||
| 69 | .has_broken_spirv_clamp = true, | ||
| 70 | .has_broken_unsigned_image_offsets = true, | ||
| 71 | .has_broken_signed_operations = true, | ||
| 72 | .ignore_nan_fp_comparisons = true, | ||
| 73 | }; | ||
| 74 | |||
| 75 | using Shader::Backend::GLASM::EmitGLASM; | 39 | using Shader::Backend::GLASM::EmitGLASM; |
| 76 | using Shader::Backend::SPIRV::EmitSPIRV; | 40 | using Shader::Backend::SPIRV::EmitSPIRV; |
| 77 | using Shader::Maxwell::TranslateProgram; | 41 | using Shader::Maxwell::TranslateProgram; |
| @@ -279,7 +243,43 @@ ShaderCache::ShaderCache(RasterizerOpenGL& rasterizer_, Core::Frontend::EmuWindo | |||
| 279 | : VideoCommon::ShaderCache{rasterizer_, gpu_memory_, maxwell3d_, kepler_compute_}, | 243 | : VideoCommon::ShaderCache{rasterizer_, gpu_memory_, maxwell3d_, kepler_compute_}, |
| 280 | emu_window{emu_window_}, device{device_}, texture_cache{texture_cache_}, | 244 | emu_window{emu_window_}, device{device_}, texture_cache{texture_cache_}, |
| 281 | buffer_cache{buffer_cache_}, program_manager{program_manager_}, state_tracker{ | 245 | buffer_cache{buffer_cache_}, program_manager{program_manager_}, state_tracker{ |
| 282 | state_tracker_} {} | 246 | state_tracker_} { |
| 247 | profile = Shader::Profile{ | ||
| 248 | .supported_spirv = 0x00010000, | ||
| 249 | |||
| 250 | .unified_descriptor_binding = false, | ||
| 251 | .support_descriptor_aliasing = false, | ||
| 252 | .support_int8 = false, | ||
| 253 | .support_int16 = false, | ||
| 254 | .support_vertex_instance_id = true, | ||
| 255 | .support_float_controls = false, | ||
| 256 | .support_separate_denorm_behavior = false, | ||
| 257 | .support_separate_rounding_mode = false, | ||
| 258 | .support_fp16_denorm_preserve = false, | ||
| 259 | .support_fp32_denorm_preserve = false, | ||
| 260 | .support_fp16_denorm_flush = false, | ||
| 261 | .support_fp32_denorm_flush = false, | ||
| 262 | .support_fp16_signed_zero_nan_preserve = false, | ||
| 263 | .support_fp32_signed_zero_nan_preserve = false, | ||
| 264 | .support_fp64_signed_zero_nan_preserve = false, | ||
| 265 | .support_explicit_workgroup_layout = false, | ||
| 266 | .support_vote = true, | ||
| 267 | .support_viewport_index_layer_non_geometry = | ||
| 268 | device.HasNvViewportArray2() || device.HasVertexViewportLayer(), | ||
| 269 | .support_viewport_mask = true, | ||
| 270 | .support_typeless_image_loads = device.HasImageLoadFormatted(), | ||
| 271 | .support_demote_to_helper_invocation = false, | ||
| 272 | .support_int64_atomics = false, | ||
| 273 | |||
| 274 | .warp_size_potentially_larger_than_guest = true, | ||
| 275 | .lower_left_origin_mode = true, | ||
| 276 | |||
| 277 | .has_broken_spirv_clamp = true, | ||
| 278 | .has_broken_unsigned_image_offsets = true, | ||
| 279 | .has_broken_signed_operations = true, | ||
| 280 | .ignore_nan_fp_comparisons = true, | ||
| 281 | }; | ||
| 282 | } | ||
| 283 | 283 | ||
| 284 | ShaderCache::~ShaderCache() = default; | 284 | ShaderCache::~ShaderCache() = default; |
| 285 | 285 | ||
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.h b/src/video_core/renderer_opengl/gl_shader_cache.h index b479d073a..b49cd0ac7 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.h +++ b/src/video_core/renderer_opengl/gl_shader_cache.h | |||
| @@ -86,6 +86,8 @@ private: | |||
| 86 | ShaderPools main_pools; | 86 | ShaderPools main_pools; |
| 87 | std::unordered_map<GraphicsProgramKey, std::unique_ptr<GraphicsProgram>> graphics_cache; | 87 | std::unordered_map<GraphicsProgramKey, std::unique_ptr<GraphicsProgram>> graphics_cache; |
| 88 | std::unordered_map<ComputeProgramKey, std::unique_ptr<ComputeProgram>> compute_cache; | 88 | std::unordered_map<ComputeProgramKey, std::unique_ptr<ComputeProgram>> compute_cache; |
| 89 | |||
| 90 | Shader::Profile profile; | ||
| 89 | }; | 91 | }; |
| 90 | 92 | ||
| 91 | } // namespace OpenGL | 93 | } // namespace OpenGL |