Commit Graph

326 Commits

Author SHA1 Message Date
Józef Kucia 2420fdb3af libs/vkd3d-shader: Add support for vThreadGroupID register. 2017-07-18 17:32:26 +02:00
Józef Kucia 79e61d95df libs/vkd3d-shader: Fix shader input register mask handling. 2017-07-18 17:32:26 +02:00
Józef Kucia 78a085199f libs/vkd3d-shader: Use vkd3d_get_spirv_builtin() directly. 2017-07-18 17:32:26 +02:00
Józef Kucia 9d944ad96c libs/vkd3d-shader: Store info about SPIR-V built-ins in table. 2017-07-18 17:32:26 +02:00
Józef Kucia e5a4ad3385 libs/vkd3d-shader: Add support for vThreadIDInGroupFlattened register. 2017-07-18 17:32:26 +02:00
Józef Kucia caa1f4a37a libs/vkd3d-shader: Allow compute shader registers as source operands. 2017-07-18 17:32:26 +02:00
Józef Kucia 9d319bbc3d libs/vkd3d-shader: Translate swapc instructions. 2017-07-18 13:31:46 +02:00
Józef Kucia 3407702d60 libs/vkd3d-shader: Avoid duplicated OpTypeImage instructions. 2017-07-17 18:12:02 +02:00
Józef Kucia 758247de4d libs/vkd3d-shader: Avoid duplicated OpTypeSampledImage instructions. 2017-07-17 18:12:02 +02:00
Józef Kucia 42d8b97176 libs/vkd3d-shader: Avoid duplicated OpTypePointer instructions. 2017-07-17 18:12:02 +02:00
Józef Kucia e715a6d1c9 libs/vkd3d-shader: Add more general way to emit SPIR-V instructions once. 2017-07-17 18:12:02 +02:00
Józef Kucia 3dc307bfb8 libs/vkd3d-shader: Make SPIR-V builder responsible for emitting parameterless types once. 2017-07-17 18:12:02 +02:00
Józef Kucia acb683690b libs/vkd3d-shader: Make SPIR-V builder responsible for emitting OpTypeSampler once. 2017-07-17 18:12:02 +02:00
Józef Kucia cc536e72ab libs/vkd3d-shader: Translate sample instructions. 2017-07-17 16:25:29 +02:00
Józef Kucia e86f7fc82e libs/vkd3d-shader: Translate dcl_resource instructions. 2017-07-17 16:25:29 +02:00
Józef Kucia d1de972430 libs/vkd3d: Allocate Vulkan descriptors for samplers. 2017-07-17 16:25:29 +02:00
Józef Kucia 593a13402d libs/vkd3d: Add support for static samplers.
We still do not implement any reasonable mapping between D3D registers
and Vulkan bindings.
2017-07-17 16:25:29 +02:00
Józef Kucia 02506b24c4 libs/vkd3d: Partially implement d3d12_command_list_SetGraphicsRootDescriptorTable().
A very naive implementation. Mainly to unblock some shader translation
work.
2017-07-17 16:25:29 +02:00
Józef Kucia 733775fbad libs/vkd3d: Implement d3d12_descriptor_heap_GetGPUDescriptorHandleForHeapStart(). 2017-07-17 16:25:29 +02:00
Józef Kucia 091ac41f79 libs/vkd3d: Partially handle descriptor table root parameters. 2017-07-17 16:25:29 +02:00
Józef Kucia 4854b74151 libs/vkd3d-shader: Introduce vkd3d_dxbc_compiler_emit_swizzle() helper function. 2017-07-14 17:21:23 +02:00
Józef Kucia 96f5bb3936 libs/vkd3d-shader: Use vkd3d_dxbc_compiler_emit_load_src() for dot product instructions.
Fixes source modifiers for dot product instructions.
2017-07-14 17:21:23 +02:00
Józef Kucia 2dfbc88a89 libs/vkd3d: Implement copying from buffers to images. 2017-07-14 13:44:35 +02:00
Józef Kucia 7c606089f1 libs/vkd3d-shader: Add FIXME comment for local function variables. 2017-07-14 13:44:35 +02:00
Józef Kucia a47724ce3a libs/vkd3d-shader: Translate dcl_sampler instructions. 2017-07-14 13:44:35 +02:00
Józef Kucia 1c79831873 libs/vkd3d: Implement d3d12_device_CreateShaderResourceView(). 2017-07-14 13:44:35 +02:00
Józef Kucia 8bb54c17f3 libs/vkd3d: Simplify d3d12_resource_destroy(). 2017-07-14 13:44:35 +02:00
Józef Kucia f4f803c7bb libs/vkd3d: Add initial implementation for d3d12_device_GetCopyableFootprints(). 2017-07-13 11:56:30 +02:00
Józef Kucia f3d297574a libs/vkd3d: Implement d3d12_device_CreateSampler(). 2017-07-12 13:10:44 +02:00
Józef Kucia cd07a50b21 libs/vkd3d-shader: Implement relative addressing for immediate constant buffers. 2017-07-11 17:23:02 +02:00
Józef Kucia 1a8b74549a libs/vkd3d-shader: Use vkd3d_dxbc_compiler_emit_variable() in vkd3d_dxbc_compiler_emit_dcl_temps(). 2017-07-11 17:23:02 +02:00
Józef Kucia c8d713dc83 libs/vkd3d-shader: Implement immediate constant buffers. 2017-07-11 17:23:02 +02:00
Józef Kucia d8d5701409 libs/vkd3d-shader: Use appropriate message severity for invalid SPIR-V shaders. 2017-07-11 17:23:02 +02:00
Henri Verbeet d61b6a3545 include: Add the missing "values" parameter to ID3D12GraphicsCommandList::ClearUnorderedAccessViewFloat(). 2017-07-11 12:21:15 +02:00
Henri Verbeet 99d2ba411e include: Add the missing ClearUnorderedAccessViewUint() method to the ID3D12GraphicsCommandList interface. 2017-07-11 12:21:11 +02:00
Henri Verbeet 0b656c8354 build: Add a pkg-config file for libvkd3d-utils. 2017-07-10 16:32:01 +02:00
Józef Kucia 682e725d6e libs/vkd3d-shader: Add support for multiple shader outputs packed into single register. 2017-07-10 15:33:34 +02:00
Józef Kucia 7f1242888e libs/vkd3d-shader: Recognize vThreadIDInGroup register. 2017-07-10 15:33:34 +02:00
Józef Kucia 2e6f80e24c libs/vkd3d-shader: Pass buffer size to vkd3d_dxbc_compiler_get_register_name(). 2017-07-10 15:33:34 +02:00
Józef Kucia 649a814b23 libs/vkd3d-shader: Use ERR() instead of FIXME() in vkd3d_dxbc_compiler_emit_ext_glsl_instruction().
vkd3d_dxbc_compiler_emit_ext_glsl_instruction() is called only for
implemented instructions.
2017-07-10 15:33:34 +02:00
Józef Kucia 4c448f0a35 libs/vkd3d-shader: Recognize vThreadID register. 2017-07-10 15:33:34 +02:00
Józef Kucia bf3896adc4 libs/vkd3d-shader: Decorate shader inputs with Component decoration.
Needed when multiple inputs are stored in a single register.
2017-07-10 15:33:34 +02:00
Józef Kucia c6b6a9d542 libs/vkd3d-shader: Add support for multiple shader inputs packed into single register. 2017-07-10 15:33:34 +02:00
Józef Kucia 3f546c8782 libs/vkd3d: Add DXGI_FORMAT_R32_UINT. 2017-07-10 15:33:34 +02:00
Józef Kucia f5319efa4b libs/vkd3d-shader: Translate f32tof16 instruction. 2017-07-06 18:11:57 +02:00
Józef Kucia 83392c92a3 libs/vkd3d-shader: Translate f16tof32 instruction. 2017-07-06 18:11:57 +02:00
Józef Kucia 03ab3d25bc libs/vkd3d-shader: Upgrade FIXME() to ERR() in vkd3d_dxbc_compiler_emit_alu_instruction().
vkd3d_dxbc_compiler_emit_alu_instruction() is called only for
implemented instructions.
2017-07-06 18:11:57 +02:00
Józef Kucia 24134b20fd libs/vkd3d-shader: Translate xor, or and not instructions. 2017-07-06 18:11:57 +02:00
Józef Kucia cb125d0020 libs/vkd3d-shader: Fix swizzling for non floating-point result values.
Avoids incorrect bitcasts.
2017-07-06 18:11:57 +02:00
Józef Kucia fe522495aa libs/vkd3d-shader: Get rid of needless temporary variables. 2017-07-06 10:12:22 +02:00
Józef Kucia f906df13b3 libs/vkd3d-shader: Implement parsing of root signature static samplers. 2017-07-06 10:12:22 +02:00
Józef Kucia 0633cfc55d libs/vkd3d-shader: Implement "absneg" source modifiers. 2017-06-29 13:40:27 +02:00
Józef Kucia 70f5b24f92 libs/vkd3d-shader: Avoid using GLSL.std450 NMin, NMax and NClamp opcodes.
These opcodes were implemented by Mesa just few days ago. In addition
using these opcodes in a shader leads to a crash on Nvidia.

In practice this change doesn't seem to make a difference. We still want
to use NMin, NMax and NClamp for correctness. This commit is meant to be
reverted when problems with these opcodes are resolved.
2017-06-29 13:40:27 +02:00
Józef Kucia c9b271f3c7 libs/vkd3d-shader: Implement _sat destination modifier. 2017-06-29 13:40:27 +02:00
Józef Kucia cd1f9118ee libs/vkd3d-shader: Translate floating-point min/max instructions to NMin/NMax.
The semantics of NMin and NMax match special handling required for NaN.
2017-06-29 13:40:27 +02:00
Józef Kucia f8b25dcea4 libs/vkd3d-shader: Implement "neg" modifier for integers. 2017-06-29 09:02:50 +02:00
Józef Kucia 169b1e7885 libs/vkd3d-shader: Translate movc instruction. 2017-06-29 09:02:50 +02:00
Józef Kucia 0ef0b54eed libs/vkd3d-shader: Translate SM5 bit instructions. 2017-06-29 09:02:50 +02:00
Józef Kucia b2f8454a0f libs/vkd3d-shader: Translate ishl instruction. 2017-06-29 09:02:50 +02:00
Józef Kucia 1e7fc384fc libs/vkd3d-shader: Translate ishr instruction. 2017-06-29 09:02:50 +02:00
Józef Kucia 4de9405a7b libs/vkd3d-shader: Allow input declarations with no write mask. 2017-06-29 09:02:50 +02:00
Józef Kucia c708c56d7b libs/vkd3d-shader: Translate ushr instruction. 2017-06-28 12:28:09 +02:00
Józef Kucia 32cc44150d libs/vkd3d-shader: Translate bitfield instructions. 2017-06-28 12:28:09 +02:00
Józef Kucia dffa2ad80f libs/vkd3d-shader: Use signed integer format when masking bitfield instruction operands.
This shouldn't be strictly needed, but it fixes bfi on Nvidia.
2017-06-28 12:28:09 +02:00
Józef Kucia 2c139bdf81 libs/vkd3d-shader: Mask immediate constant operands for bitfield instructions. 2017-06-28 12:28:09 +02:00
Józef Kucia e623583048 libs/vkd3d-shader: Translate value preserving conversion instructions. 2017-06-28 12:28:09 +02:00
Józef Kucia 7e71b86031 libs/vkd3d-shader: Track current block for control flow instructions. 2017-06-28 12:28:09 +02:00
Józef Kucia 170168c9cb libs/vkd3d-shader: Implement more floating-point comparison instructions. 2017-06-28 12:28:09 +02:00
Józef Kucia 3190fbffb7 libs/vkd3d-shader: Translate iadd instruction. 2017-06-27 22:21:43 +02:00
Józef Kucia 6eb2d9cee4 libs/vkd3d-shader: Translate ieq instruction. 2017-06-27 22:21:43 +02:00
Józef Kucia 6fa98eb77c libs/vkd3d-shader: Implement absolute value source modifier. 2017-06-27 22:21:43 +02:00
Józef Kucia 30018181e0 libs/vkd3d-shader: Translate sqrt instruction. 2017-06-27 22:21:43 +02:00
Józef Kucia 8f6af1125d libs/vkd3d-shader: Get rid of VKD3D_SHADER_FLIP_Y compiler option.
We use negative viewport height to flip Y.
2017-06-27 22:21:43 +02:00
Józef Kucia 0afe0032b0 libs/vkd3d-shader: Add VKD3D_SHADER_STRIP_DEBUG compiler option. 2017-06-27 22:21:43 +02:00
Józef Kucia dbfa823b42 libs/vkd3d-shader: Translate min/max instructions. 2017-06-27 22:21:43 +02:00
Józef Kucia 3f03cd1ec8 libs/vkd3d-shader: Implement root signature parsing. 2017-06-27 13:16:47 +02:00
Józef Kucia d220ae4bfb libs/vkd3d: Add ID3D12RootSignatureDeserializer interface stub. 2017-06-27 13:16:47 +02:00
Józef Kucia d998cb88c5 libs/vkd3d-shader: Implement constant interpolation mode.
For gears demo.
2017-06-27 13:16:47 +02:00
Józef Kucia 00b1a83ef5 libs/vkd3d-shader: Translate if/else/endif instructions. 2017-06-26 17:03:31 +02:00
Józef Kucia 7f4f305225 libs/vkd3d-shader: Introduce vkd3d_spirv_alloc_id() helper function. 2017-06-26 17:03:31 +02:00
Józef Kucia 77b3c5858f libs/vkd3d-shader: Pass format string to vkd3d_spirv_build_op_name(). 2017-06-26 17:03:31 +02:00
Józef Kucia cb79f2ec65 libs/vkd3d-shader: Implement floating-point comparison instructions. 2017-06-26 17:03:31 +02:00
Józef Kucia cd8eb358e9 libs/vkd3d-shader: Refactor immediate constants handling. 2017-06-26 17:03:31 +02:00
Józef Kucia be9849ace4 libs/vkd3d: Avoid race condition when destroying fences. 2017-06-26 17:03:31 +02:00
Józef Kucia ae8d869013 libs/vkd3d: Use VK_NULL_HANDLE instead of NULL.
Fixes a compiler warning for 32-bit builds.
2017-06-26 17:03:31 +02:00
Józef Kucia becd93c8bd libs/vkd3d-shader: Emit Offset decoration for uniform buffer struct members.
The SPIR-V spec says:

  "Composite objects in the UniformConstant, Uniform, and PushConstant Storage
  Classes must be explicitly laid out."

Intel Anvil driver uses uninitialized memory for offsets when Offset
decorations are missing.
2017-06-23 22:24:33 +02:00
Józef Kucia 9a59184e9f libs/vkd3d: Reset current root signature in d3d12_command_list_Reset(). 2017-06-23 22:24:33 +02:00
Józef Kucia 532da7d4e1 libs/vkd3d: Clear current descriptor set when descriptor pool is destroyed. 2017-06-23 22:24:33 +02:00
Józef Kucia fa52702774 libs/vkd3d: Always update current root signature in d3d12_command_list_SetGraphicsRootSignature(). 2017-06-23 22:24:33 +02:00
Józef Kucia c0b5cf3df6 libs/vkd3d: Avoid updating descriptor sets bound to recording command buffer.
Fixes GPU memory page faults in gears demo on Nvidia.

The Vulkan spec says:

  "The descriptor set contents bound by a call to
  vkCmdBindDescriptorSets may be consumed during host execution of the
  command, or during shader execution of the resulting draws, or any
  time in between. Thus, the contents must not be altered (overwritten
  by an update command, or freed) between when the command is recorded
  and when the command completes executing on the queue."
2017-06-23 22:24:33 +02:00
Józef Kucia 99d82668a0 libs/vkd3d-shader: Avoid generating 2 OpVectorShuffles per mov instruction. 2017-06-22 13:36:18 +02:00
Józef Kucia 05842705b4 libs/vkd3d-shader: Enforce required component count for builtin shader inputs. 2017-06-22 13:36:18 +02:00
Józef Kucia 4e5fcb5141 libs/vkd3d: Use negative viewport height to flip along y-axis.
Requires VK_KHR_maintenance1.
2017-06-21 22:00:19 +02:00
Józef Kucia d515e3d047 libs/vkd3d: Require VK_KHR_maintenance1 device extension. 2017-06-21 22:00:19 +02:00
Józef Kucia 4ced2e7789 libs/vkd3d-shader: Translate "neg" source modifier. 2017-06-21 22:00:19 +02:00
Józef Kucia f5e3b248df libs/vkd3d-shader: Fix SV_Position in pixel shaders. 2017-06-21 22:00:19 +02:00
Józef Kucia 9880d78058 libs/vkd3d-shader: Translate dcl_input_ps_siv instruction. 2017-06-21 22:00:19 +02:00
Józef Kucia 9948abda96 libs/vkd3d: Flip SV_Position.y in last vertex processing shader stage.
The handwritten GLSL shaders do this.
2017-06-21 12:22:20 +02:00
Józef Kucia 67a8200933 libs/vkd3d-shader: Implement VKD3D_SHADER_FLIP_Y option. 2017-06-21 12:22:20 +02:00
Józef Kucia 989a80fef7 libs/vkd3d-shader: Fix TRACE() message in vkd3d_spirv_dump(). 2017-06-21 12:22:20 +02:00