4e35177e23
Implement VOTE using Nvidia's intrinsics. Documentation about these can be found here https://developer.nvidia.com/reading-between-threads-shader-intrinsics Instead of using portable ARB instructions I opted to use Nvidia intrinsics because these are the closest we have to how Tegra X1 hardware renders. To stub VOTE on non-Nvidia drivers (including nouveau) this commit simulates a GPU with a warp size of one, returning what is meaningful for the instruction being emulated: * anyThreadNV(value) -> value * allThreadsNV(value) -> value * allThreadsEqualNV(value) -> true ballotARB, also known as "uint64_t(activeThreadsNV())", emits VOTE.ANY Rd, PT, PT; on nouveau's compiler. This doesn't match exactly to Nvidia's code VOTE.ALL Rd, PT, PT; Which is emulated with activeThreadsNV() by this commit. In theory this shouldn't really matter since .ANY, .ALL and .EQ affect the predicates (set to PT on those cases) and not the registers.
170 lines
5.2 KiB
CMake
170 lines
5.2 KiB
CMake
add_library(video_core STATIC
|
|
buffer_cache.h
|
|
dma_pusher.cpp
|
|
dma_pusher.h
|
|
debug_utils/debug_utils.cpp
|
|
debug_utils/debug_utils.h
|
|
engines/const_buffer_info.h
|
|
engines/engine_upload.cpp
|
|
engines/engine_upload.h
|
|
engines/fermi_2d.cpp
|
|
engines/fermi_2d.h
|
|
engines/kepler_compute.cpp
|
|
engines/kepler_compute.h
|
|
engines/kepler_memory.cpp
|
|
engines/kepler_memory.h
|
|
engines/maxwell_3d.cpp
|
|
engines/maxwell_3d.h
|
|
engines/maxwell_dma.cpp
|
|
engines/maxwell_dma.h
|
|
engines/shader_bytecode.h
|
|
engines/shader_header.h
|
|
gpu.cpp
|
|
gpu.h
|
|
gpu_asynch.cpp
|
|
gpu_asynch.h
|
|
gpu_synch.cpp
|
|
gpu_synch.h
|
|
gpu_thread.cpp
|
|
gpu_thread.h
|
|
macro_interpreter.cpp
|
|
macro_interpreter.h
|
|
memory_manager.cpp
|
|
memory_manager.h
|
|
morton.cpp
|
|
morton.h
|
|
rasterizer_cache.cpp
|
|
rasterizer_cache.h
|
|
rasterizer_interface.h
|
|
renderer_base.cpp
|
|
renderer_base.h
|
|
renderer_opengl/gl_buffer_cache.cpp
|
|
renderer_opengl/gl_buffer_cache.h
|
|
renderer_opengl/gl_device.cpp
|
|
renderer_opengl/gl_device.h
|
|
renderer_opengl/gl_framebuffer_cache.cpp
|
|
renderer_opengl/gl_framebuffer_cache.h
|
|
renderer_opengl/gl_rasterizer.cpp
|
|
renderer_opengl/gl_rasterizer.h
|
|
renderer_opengl/gl_resource_manager.cpp
|
|
renderer_opengl/gl_resource_manager.h
|
|
renderer_opengl/gl_sampler_cache.cpp
|
|
renderer_opengl/gl_sampler_cache.h
|
|
renderer_opengl/gl_shader_cache.cpp
|
|
renderer_opengl/gl_shader_cache.h
|
|
renderer_opengl/gl_shader_decompiler.cpp
|
|
renderer_opengl/gl_shader_decompiler.h
|
|
renderer_opengl/gl_shader_disk_cache.cpp
|
|
renderer_opengl/gl_shader_disk_cache.h
|
|
renderer_opengl/gl_shader_gen.cpp
|
|
renderer_opengl/gl_shader_gen.h
|
|
renderer_opengl/gl_shader_manager.cpp
|
|
renderer_opengl/gl_shader_manager.h
|
|
renderer_opengl/gl_shader_util.cpp
|
|
renderer_opengl/gl_shader_util.h
|
|
renderer_opengl/gl_state.cpp
|
|
renderer_opengl/gl_state.h
|
|
renderer_opengl/gl_stream_buffer.cpp
|
|
renderer_opengl/gl_stream_buffer.h
|
|
renderer_opengl/gl_texture_cache.cpp
|
|
renderer_opengl/gl_texture_cache.h
|
|
renderer_opengl/maxwell_to_gl.h
|
|
renderer_opengl/renderer_opengl.cpp
|
|
renderer_opengl/renderer_opengl.h
|
|
renderer_opengl/utils.cpp
|
|
renderer_opengl/utils.h
|
|
sampler_cache.cpp
|
|
sampler_cache.h
|
|
shader/decode/arithmetic.cpp
|
|
shader/decode/arithmetic_immediate.cpp
|
|
shader/decode/bfe.cpp
|
|
shader/decode/bfi.cpp
|
|
shader/decode/shift.cpp
|
|
shader/decode/arithmetic_integer.cpp
|
|
shader/decode/arithmetic_integer_immediate.cpp
|
|
shader/decode/arithmetic_half.cpp
|
|
shader/decode/arithmetic_half_immediate.cpp
|
|
shader/decode/ffma.cpp
|
|
shader/decode/hfma2.cpp
|
|
shader/decode/conversion.cpp
|
|
shader/decode/memory.cpp
|
|
shader/decode/texture.cpp
|
|
shader/decode/image.cpp
|
|
shader/decode/float_set_predicate.cpp
|
|
shader/decode/integer_set_predicate.cpp
|
|
shader/decode/half_set_predicate.cpp
|
|
shader/decode/predicate_set_register.cpp
|
|
shader/decode/predicate_set_predicate.cpp
|
|
shader/decode/register_set_predicate.cpp
|
|
shader/decode/float_set.cpp
|
|
shader/decode/integer_set.cpp
|
|
shader/decode/half_set.cpp
|
|
shader/decode/video.cpp
|
|
shader/decode/warp.cpp
|
|
shader/decode/xmad.cpp
|
|
shader/decode/other.cpp
|
|
shader/control_flow.cpp
|
|
shader/control_flow.h
|
|
shader/decode.cpp
|
|
shader/node_helper.cpp
|
|
shader/node_helper.h
|
|
shader/node.h
|
|
shader/shader_ir.cpp
|
|
shader/shader_ir.h
|
|
shader/track.cpp
|
|
surface.cpp
|
|
surface.h
|
|
texture_cache/surface_base.cpp
|
|
texture_cache/surface_base.h
|
|
texture_cache/surface_params.cpp
|
|
texture_cache/surface_params.h
|
|
texture_cache/surface_view.cpp
|
|
texture_cache/surface_view.h
|
|
texture_cache/texture_cache.h
|
|
textures/astc.cpp
|
|
textures/astc.h
|
|
textures/convert.cpp
|
|
textures/convert.h
|
|
textures/decoders.cpp
|
|
textures/decoders.h
|
|
textures/texture.h
|
|
video_core.cpp
|
|
video_core.h
|
|
)
|
|
|
|
if (ENABLE_VULKAN)
|
|
target_sources(video_core PRIVATE
|
|
renderer_vulkan/declarations.h
|
|
renderer_vulkan/maxwell_to_vk.cpp
|
|
renderer_vulkan/maxwell_to_vk.h
|
|
renderer_vulkan/vk_buffer_cache.cpp
|
|
renderer_vulkan/vk_buffer_cache.h
|
|
renderer_vulkan/vk_device.cpp
|
|
renderer_vulkan/vk_device.h
|
|
renderer_vulkan/vk_memory_manager.cpp
|
|
renderer_vulkan/vk_memory_manager.h
|
|
renderer_vulkan/vk_resource_manager.cpp
|
|
renderer_vulkan/vk_resource_manager.h
|
|
renderer_vulkan/vk_sampler_cache.cpp
|
|
renderer_vulkan/vk_sampler_cache.h
|
|
renderer_vulkan/vk_scheduler.cpp
|
|
renderer_vulkan/vk_scheduler.h
|
|
renderer_vulkan/vk_shader_decompiler.cpp
|
|
renderer_vulkan/vk_shader_decompiler.h
|
|
renderer_vulkan/vk_stream_buffer.cpp
|
|
renderer_vulkan/vk_stream_buffer.h
|
|
renderer_vulkan/vk_swapchain.cpp
|
|
renderer_vulkan/vk_swapchain.h)
|
|
|
|
target_include_directories(video_core PRIVATE sirit ../../externals/Vulkan-Headers/include)
|
|
target_compile_definitions(video_core PRIVATE HAS_VULKAN)
|
|
endif()
|
|
|
|
create_target_directory_groups(video_core)
|
|
|
|
target_link_libraries(video_core PUBLIC common core)
|
|
target_link_libraries(video_core PRIVATE glad)
|
|
if (ENABLE_VULKAN)
|
|
target_link_libraries(video_core PRIVATE sirit)
|
|
endif()
|