ref_vk/README.md
Denis Pauk def5407ae0 Use first found optimal flags in select memory
Should fix #34, when NVIDIA card provides memory type with several
addional flags more than code has asked but retuns error on allocate.
Code has be changed to use first memory type with minimal prefered
properties.

E.g. if code needs VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, a first block should be used
instead a fourth as before:
```
Memory blocks:
   1: VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
   2: VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
   3: VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT VK_MEMORY_PROPERTY_HOST_COHERENT_BIT VK_MEMORY_PROPERTY_HOST_CACHED_BIT
   4: VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
```
2022-12-11 00:35:05 +02:00

127 lines
4.1 KiB
Markdown

# Vulkan Renderer Library for Yamagi Quake II
This is the vkQuake2 vulkan renderer library ported to Yamagi Quake II.
## Compilation
You'll need:
* clang or gcc,
* GNU Make,
* SDL2 with `sdl2-config`,
* vulkan-headers,
* vulkan-validationlayers if you like to debug issues.
Type `make` to compile the library. If the compilation is successfull,
the library can be found under *release/ref_vk.dll* (Windows) or
*release/ref_vk.so* (unixoid systems).
## Usage
Copy the library next to your Yamagi Quake II executable. You can select
Vulkan through the video menu or by cvar with `vid_renderer vk` followed
by a `vid_restart`.
If you have run into issues, please attach output logs with OS/driver version
and device name to the bug report. [List](https://openbenchmarking.org/test/pts/yquake2)
of currently tested devices for the reference.
Note: Game saves outputs to `Documents\YamagiQ2\stdout.txt` under
windows.
## Console Variables
* **r_validation**: Toggle validation layers:
* `0` - disabled (default in Release)
* `1` - only errors and warnings, show image load issues
* `2` - best-practices validation
* **vk_strings**: Print some basic Vulkan/GPU information.
* **vk_mem**: Print dynamic vertex/index/uniform/triangle fan buffer
memory usage statistics.
* **vk_device**: Specify index of the preferred Vulkan device on systems
with multiple GPUs:
* `-1` - prefer first DISCRETE\_GPU (default)
* `0..n` - use device #n (full list of devices is returned by
`vk_strings` command)
* **vk_sampleshading**: Toggle sample shading for MSAA. (default: `1`)
* **vk_flashblend**: Toggle the blending of lights onto the environment.
(default: `0`)
* **vk_polyblend**: Blend fullscreen effects: blood, powerups etc.
(default: `1`)
* **vk_skymip**: Toggle the usage of mipmap information for the sky
graphics. (default: `0`)
* **vk_finish**: Inserts a `vkDeviceWaitIdle()` call on frame render
start (default: `0`). Don't use this, it's there just for the sake of
having a `gl_finish` equivalent!
* **vk_custom_particles**: Toggle particles type:
* `0` - textured triangles for particle rendering
* `1` - between using POINT\_LIST (default)
* `2` - textured square for particle rendering
* **vk_particle_size**: Rendered particle size. (default: `40`)
* **vk_particle_att_a**: Intensity of the particle A attribute.
(default: `0.01`)
* **vk_particle_att_b**: Intensity of the particle B attribute.
(default: `0`)
* **vk_particle_att_c**: Intensity of the particle C attribute.
(default: `0.01`)
* **vk_particle_min_size**: The minimum size of a rendered particle.
(default: `2`)
* **vk_particle_max_size**: The maximum size of a rendered particle.
(default: `40`)
* **vk_picmip**: Shrink factor for the textures. (default: `0`)
* **vk_pixel_size**: Pixel size when rendering the world, used to simulate
lower screen resolutions. The value represents the length, in pixels, of the
side of each pixel block. For example, with size 2 pixels are 2x2 squares,
and at 1600x1200 the image is effectively an upscaled 800x600 image.
(default: `1`)
* **vk_dynamic**: Use dynamic lighting. (default: `1`)
* **vk_showtris**: Display mesh triangles. (default: `0`)
* **vk_lightmap**: Display lightmaps. (default: `0`)
* **vk_postprocess**: Toggle additional color/gamma correction.
(default: `1`)
* **vk_mip_nearfilter**: Use nearest-neighbor filtering for mipmaps.
(default: `0`)
* **vk_texturemode**: Change current texture filtering mode:
* `VK_NEAREST` - nearest-neighbor interpolation, no mipmaps
* `VK_LINEAR` - linear interpolation, no mipmaps
* `VK_MIPMAP_NEAREST` - nearest-neighbor interpolation with mipmaps
* `VK_MIPMAP_LINEAR` - linear interpolation with mipmaps (default)
* **vk_lmaptexturemode**: Same as `vk_texturemode` but applied to
lightmap textures.
* **vk_underwater**: Warp the scene if underwater. Set to `0` to disable
the effect. Defaults to `1`.
## Console Variables (MacOS)
* **vk_molten_metalbuffers**: enable/disable Metal buffers to bind textures
more efficiently (>= Big Sur). (default: `0`)
* **vk_molten_fastmath**: enable/disable float point op optimisations.
(default: `0`)