summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-05-21 20:46:40 -0300
committerGravatar ameerj2021-07-22 21:51:33 -0400
commitc31521512fd49603ea42c93e2a6eac5d7985cd78 (patch)
treefdbf1009f76f543f11e3fd41df18f3a5b752637a /src/video_core
parentgl_shader_cache: Improve GLASM error print logic (diff)
downloadyuzu-c31521512fd49603ea42c93e2a6eac5d7985cd78.tar.gz
yuzu-c31521512fd49603ea42c93e2a6eac5d7985cd78.tar.xz
yuzu-c31521512fd49603ea42c93e2a6eac5d7985cd78.zip
gl_shader_cache,glasm: Conditionally use typeless image reads extension
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.cpp74
-rw-r--r--src/video_core/renderer_opengl/gl_shader_cache.h2
2 files changed, 39 insertions, 37 deletions
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
37namespace OpenGL { 37namespace OpenGL {
38namespace { 38namespace {
39// FIXME: Move this somewhere else
40const 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
75using Shader::Backend::GLASM::EmitGLASM; 39using Shader::Backend::GLASM::EmitGLASM;
76using Shader::Backend::SPIRV::EmitSPIRV; 40using Shader::Backend::SPIRV::EmitSPIRV;
77using Shader::Maxwell::TranslateProgram; 41using 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
284ShaderCache::~ShaderCache() = default; 284ShaderCache::~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