This fixes us using the incorrect memory allocation type for
GPU downloads. It also adds support for creating staging
buffers specifically in GPU memory for GPU<->GPU transfers.
Some games use shaders that reference textures, samplers and
buffers which are selectively used. When they invoke the shader
they disable those uses, and don't bind anything, but Vulkan
needs something bound to execute at all. We bind blank objects
into these slots.
This fixes an issue where the buffers were not blitted to the
scan-buffers at the correct scaling. This is closer, though
still not completely accurate.
Just convert VkResult into vk::Result using Vulkan-Hpp library.
It will throw exception, if not a success.
Construct a message by using filename and line number.
Do not take address of temporaries.
Use proper casts when casting from Vulkan-Hpp to Vulkan.
Fix use of implicit conversions that make gcc not like it
due to overload ambiguity.
Remove unused bool cast operator, that called non existing
bool operator in other class.
Tested with vulkan 1.1.82 and 1.1.73, and gcc 8.2.
This is neccessary for many games, which render with an
incorrect gamma otherwise. This change does however break
other games which are not using SRGB surfaces. Seeing
things a bit more bright rather than quite a bit darker
is probably for the best. Must implement gamma correction!
Sometimes, games will incorrectly bind a color buffer as both
the active framebuffer as well as a texture in that draw. This
is illegal in Vulkan, but happens nevertheless.
There are a few changes here. Mainly related to avoiding
the INT8 type (which is not directly supported yet), as well
as correctly handling packed float types.
This is required as sometimes we are not sure if a value is used
as a float or an integer. In the case of an integer, the storage
and compilation by the drivers could cause the data to change.
-Added better support for 3D and CUBEMAP textures.
-Improved debug naming of surface/surfaceview objects.
-Added regeneration for framebuffers and views on surface update.
When the a surface gets upgraded internally, the framebuffer and
imageview objects still pointed to the old images rather than the
new ones.