gl_shader_cache,glasm: Conditionally use typeless image reads extension
This commit is contained in:
		@@ -36,42 +36,6 @@
 | 
			
		||||
 | 
			
		||||
namespace OpenGL {
 | 
			
		||||
namespace {
 | 
			
		||||
// FIXME: Move this somewhere else
 | 
			
		||||
const Shader::Profile profile{
 | 
			
		||||
    .supported_spirv = 0x00010000,
 | 
			
		||||
 | 
			
		||||
    .unified_descriptor_binding = false,
 | 
			
		||||
    .support_descriptor_aliasing = false,
 | 
			
		||||
    .support_int8 = false,
 | 
			
		||||
    .support_int16 = false,
 | 
			
		||||
    .support_vertex_instance_id = true,
 | 
			
		||||
    .support_float_controls = false,
 | 
			
		||||
    .support_separate_denorm_behavior = false,
 | 
			
		||||
    .support_separate_rounding_mode = false,
 | 
			
		||||
    .support_fp16_denorm_preserve = false,
 | 
			
		||||
    .support_fp32_denorm_preserve = false,
 | 
			
		||||
    .support_fp16_denorm_flush = false,
 | 
			
		||||
    .support_fp32_denorm_flush = false,
 | 
			
		||||
    .support_fp16_signed_zero_nan_preserve = false,
 | 
			
		||||
    .support_fp32_signed_zero_nan_preserve = false,
 | 
			
		||||
    .support_fp64_signed_zero_nan_preserve = false,
 | 
			
		||||
    .support_explicit_workgroup_layout = false,
 | 
			
		||||
    .support_vote = true,
 | 
			
		||||
    .support_viewport_index_layer_non_geometry = true,
 | 
			
		||||
    .support_viewport_mask = true,
 | 
			
		||||
    .support_typeless_image_loads = true,
 | 
			
		||||
    .support_demote_to_helper_invocation = false,
 | 
			
		||||
    .support_int64_atomics = false,
 | 
			
		||||
 | 
			
		||||
    .warp_size_potentially_larger_than_guest = true,
 | 
			
		||||
    .lower_left_origin_mode = true,
 | 
			
		||||
 | 
			
		||||
    .has_broken_spirv_clamp = true,
 | 
			
		||||
    .has_broken_unsigned_image_offsets = true,
 | 
			
		||||
    .has_broken_signed_operations = true,
 | 
			
		||||
    .ignore_nan_fp_comparisons = true,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
using Shader::Backend::GLASM::EmitGLASM;
 | 
			
		||||
using Shader::Backend::SPIRV::EmitSPIRV;
 | 
			
		||||
using Shader::Maxwell::TranslateProgram;
 | 
			
		||||
@@ -279,7 +243,43 @@ ShaderCache::ShaderCache(RasterizerOpenGL& rasterizer_, Core::Frontend::EmuWindo
 | 
			
		||||
    : VideoCommon::ShaderCache{rasterizer_, gpu_memory_, maxwell3d_, kepler_compute_},
 | 
			
		||||
      emu_window{emu_window_}, device{device_}, texture_cache{texture_cache_},
 | 
			
		||||
      buffer_cache{buffer_cache_}, program_manager{program_manager_}, state_tracker{
 | 
			
		||||
                                                                          state_tracker_} {}
 | 
			
		||||
                                                                          state_tracker_} {
 | 
			
		||||
    profile = Shader::Profile{
 | 
			
		||||
        .supported_spirv = 0x00010000,
 | 
			
		||||
 | 
			
		||||
        .unified_descriptor_binding = false,
 | 
			
		||||
        .support_descriptor_aliasing = false,
 | 
			
		||||
        .support_int8 = false,
 | 
			
		||||
        .support_int16 = false,
 | 
			
		||||
        .support_vertex_instance_id = true,
 | 
			
		||||
        .support_float_controls = false,
 | 
			
		||||
        .support_separate_denorm_behavior = false,
 | 
			
		||||
        .support_separate_rounding_mode = false,
 | 
			
		||||
        .support_fp16_denorm_preserve = false,
 | 
			
		||||
        .support_fp32_denorm_preserve = false,
 | 
			
		||||
        .support_fp16_denorm_flush = false,
 | 
			
		||||
        .support_fp32_denorm_flush = false,
 | 
			
		||||
        .support_fp16_signed_zero_nan_preserve = false,
 | 
			
		||||
        .support_fp32_signed_zero_nan_preserve = false,
 | 
			
		||||
        .support_fp64_signed_zero_nan_preserve = false,
 | 
			
		||||
        .support_explicit_workgroup_layout = false,
 | 
			
		||||
        .support_vote = true,
 | 
			
		||||
        .support_viewport_index_layer_non_geometry =
 | 
			
		||||
            device.HasNvViewportArray2() || device.HasVertexViewportLayer(),
 | 
			
		||||
        .support_viewport_mask = true,
 | 
			
		||||
        .support_typeless_image_loads = device.HasImageLoadFormatted(),
 | 
			
		||||
        .support_demote_to_helper_invocation = false,
 | 
			
		||||
        .support_int64_atomics = false,
 | 
			
		||||
 | 
			
		||||
        .warp_size_potentially_larger_than_guest = true,
 | 
			
		||||
        .lower_left_origin_mode = true,
 | 
			
		||||
 | 
			
		||||
        .has_broken_spirv_clamp = true,
 | 
			
		||||
        .has_broken_unsigned_image_offsets = true,
 | 
			
		||||
        .has_broken_signed_operations = true,
 | 
			
		||||
        .ignore_nan_fp_comparisons = true,
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ShaderCache::~ShaderCache() = default;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -86,6 +86,8 @@ private:
 | 
			
		||||
    ShaderPools main_pools;
 | 
			
		||||
    std::unordered_map<GraphicsProgramKey, std::unique_ptr<GraphicsProgram>> graphics_cache;
 | 
			
		||||
    std::unordered_map<ComputeProgramKey, std::unique_ptr<ComputeProgram>> compute_cache;
 | 
			
		||||
 | 
			
		||||
    Shader::Profile profile;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace OpenGL
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user