From: Józef Kucia jkucia@codeweavers.com
Per the SPIR-V spec:
"Result Type must be a scalar of integer type or floating-point type."
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d-shader/spirv.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index e749873f663b..6fd198b4883d 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -2616,6 +2616,25 @@ static void vkd3d_dxbc_compiler_emit_store_dst_components(struct vkd3d_dxbc_comp vkd3d_dxbc_compiler_emit_store_dst(compiler, dst, val_id); }
+static void vkd3d_dxbc_compiler_emit_store_dst_scalar(struct vkd3d_dxbc_compiler *compiler, + const struct vkd3d_shader_dst_param *dst, uint32_t val_id, + enum vkd3d_component_type component_type, DWORD swizzle) +{ + unsigned int component_count = vkd3d_write_mask_component_count(dst->write_mask); + uint32_t component_ids[VKD3D_VEC4_SIZE]; + unsigned int component_idx, i; + + component_idx = vkd3d_write_mask_get_component_idx(dst->write_mask); + for (i = 0; i < component_count; ++i) + { + if (vkd3d_swizzle_get_component(swizzle, component_idx + i)) + ERR("Invalid swizzle %#x for scalar value, write mask %#x.\n", swizzle, dst->write_mask); + + component_ids[i] = val_id; + } + vkd3d_dxbc_compiler_emit_store_dst_components(compiler, dst, component_type, component_ids); +} + static void vkd3d_dxbc_compiler_decorate_builtin(struct vkd3d_dxbc_compiler *compiler, uint32_t target_id, SpvBuiltIn builtin) { @@ -4641,7 +4660,7 @@ static void vkd3d_dxbc_compiler_emit_sample_c(struct vkd3d_dxbc_compiler *compil
vkd3d_dxbc_compiler_prepare_sampled_image(compiler, &image, &src[1].reg, &src[2].reg, VKD3D_IMAGE_FLAG_DEPTH); - sampled_type_id = vkd3d_spirv_get_type_id(builder, image.sampled_type, VKD3D_VEC4_SIZE); + sampled_type_id = vkd3d_spirv_get_type_id(builder, image.sampled_type, 1); coordinate_id = vkd3d_dxbc_compiler_emit_load_src(compiler, &src[0], VKD3DSP_WRITEMASK_ALL); ref_id = vkd3d_dxbc_compiler_emit_load_src(compiler, &src[3], VKD3DSP_WRITEMASK_0); /* XXX: Nvidia is broken and expects that the D_ref is packed together with coordinates. */ @@ -4652,7 +4671,7 @@ static void vkd3d_dxbc_compiler_emit_sample_c(struct vkd3d_dxbc_compiler *compil image.sampled_image_id, coordinate_id, ref_id, operands_mask, image_operands, image_operand_count);
- vkd3d_dxbc_compiler_emit_store_dst_swizzled(compiler, + vkd3d_dxbc_compiler_emit_store_dst_scalar(compiler, dst, val_id, image.sampled_type, src[1].swizzle); }
From: Józef Kucia jkucia@codeweavers.com
Allows using vkd3d with other Win32 headers.
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- include/vkd3d.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/include/vkd3d.h b/include/vkd3d.h index 8cc9a6799375..941663fcacee 100644 --- a/include/vkd3d.h +++ b/include/vkd3d.h @@ -19,8 +19,11 @@ #ifndef __VKD3D_H #define __VKD3D_H
-#include "vkd3d_windows.h" -#include "d3d12.h" +#ifndef VKD3D_NO_WIN32_TYPES +# include "vkd3d_windows.h" +# include "d3d12.h" +#endif /* VKD3D_NO_WIN32_TYPES */ + #include <vulkan/vulkan.h> #include <stdbool.h>
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
From: Józef Kucia jkucia@codeweavers.com
Prevents possible clashes when using vkd3d with external Win32 headers.
Signed-off-by: Józef Kucia jkucia@codeweavers.com ---
Generally, I like this change. It makes very clear when our headers are used, and when potentially external headers are used (e.g. MinGW or Wine headers).
The downside is that it might be slightly annoying when using vkd3d for source ports, i.e. you have to use vkd3d_d3d12.h instead of d3d12.h. Also, vkmodelviewer needs a small fix which I am going to push if this is committed.
--- Makefile.am | 22 +++++++++++----------- demos/demo.h | 2 +- demos/demo_win32.h | 2 +- include/.gitignore | 16 ++++++++-------- include/vkd3d.h | 2 +- include/{d3d12.idl => vkd3d_d3d12.idl} | 4 ++-- include/{dxgi.idl => vkd3d_dxgi.idl} | 4 ++-- include/{dxgi1_2.idl => vkd3d_dxgi1_2.idl} | 2 +- include/{dxgi1_3.idl => vkd3d_dxgi1_3.idl} | 2 +- include/{dxgi1_4.idl => vkd3d_dxgi1_4.idl} | 2 +- include/{dxgibase.idl => vkd3d_dxgibase.idl} | 2 +- include/{dxgiformat.idl => vkd3d_dxgiformat.idl} | 0 include/{dxgitype.idl => vkd3d_dxgitype.idl} | 2 +- include/{unknown.idl => vkd3d_unknown.idl} | 0 tests/d3d12.c | 4 ++-- 15 files changed, 33 insertions(+), 33 deletions(-) rename include/{d3d12.idl => vkd3d_d3d12.idl} (99%) rename include/{dxgi.idl => vkd3d_dxgi.idl} (98%) rename include/{dxgi1_2.idl => vkd3d_dxgi1_2.idl} (99%) rename include/{dxgi1_3.idl => vkd3d_dxgi1_3.idl} (98%) rename include/{dxgi1_4.idl => vkd3d_dxgi1_4.idl} (98%) rename include/{dxgibase.idl => vkd3d_dxgibase.idl} (97%) rename include/{dxgiformat.idl => vkd3d_dxgiformat.idl} (100%) rename include/{dxgitype.idl => vkd3d_dxgitype.idl} (98%) rename include/{unknown.idl => vkd3d_unknown.idl} (100%)
diff --git a/Makefile.am b/Makefile.am index 9e1f8549e523..4d32b2fde1f0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,22 +3,22 @@ AM_CFLAGS = @VKD3D_CFLAGS@ AM_CPPFLAGS = -I$(srcdir)/include -I$(srcdir)/include/dummy -I$(srcdir)/include/private
widl_headers = \ - include/d3d12.h \ - include/dxgi.h \ - include/dxgi1_2.h \ - include/dxgi1_3.h \ - include/dxgi1_4.h \ - include/dxgibase.h \ - include/dxgiformat.h \ - include/dxgitype.h + include/vkd3d_d3d12.h \ + include/vkd3d_dxgi.h \ + include/vkd3d_dxgi1_2.h \ + include/vkd3d_dxgi1_3.h \ + include/vkd3d_dxgi1_4.h \ + include/vkd3d_dxgibase.h \ + include/vkd3d_dxgiformat.h \ + include/vkd3d_dxgitype.h
vkd3d_public_headers = \ - include/d3d12.h \ include/dummy/rpc.h \ include/dummy/rpcndr.h \ - include/dxgibase.h \ - include/dxgiformat.h \ include/vkd3d.h \ + include/vkd3d_d3d12.h \ + include/vkd3d_dxgibase.h \ + include/vkd3d_dxgiformat.h \ include/vkd3d_shader.h \ include/vkd3d_utils.h \ include/vkd3d_windows.h diff --git a/demos/demo.h b/demos/demo.h index dc36d1022723..4645bd7f5cd3 100644 --- a/demos/demo.h +++ b/demos/demo.h @@ -36,7 +36,7 @@ #include <vkd3d_windows.h> #define WIDL_C_INLINE_WRAPPERS #define COBJMACROS -#include <d3d12.h> +#include <vkd3d_d3d12.h> #include <inttypes.h>
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(*x)) diff --git a/demos/demo_win32.h b/demos/demo_win32.h index addcc9538880..3b61bcf8eeae 100644 --- a/demos/demo_win32.h +++ b/demos/demo_win32.h @@ -17,7 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include <dxgi1_4.h> +#include <vkd3d_dxgi1_4.h> #include <stdbool.h> #include <stdio.h>
diff --git a/include/.gitignore b/include/.gitignore index b7ead08aef52..17852a86c9d4 100644 --- a/include/.gitignore +++ b/include/.gitignore @@ -1,11 +1,11 @@ config.h config.h.in -d3d12.h -dxgi.h -dxgi1_2.h -dxgi1_3.h -dxgi1_4.h -dxgibase.h -dxgiformat.h -dxgitype.h stamp-h1 +vkd3d_d3d12.h +vkd3d_dxgi.h +vkd3d_dxgi1_2.h +vkd3d_dxgi1_3.h +vkd3d_dxgi1_4.h +vkd3d_dxgibase.h +vkd3d_dxgiformat.h +vkd3d_dxgitype.h diff --git a/include/vkd3d.h b/include/vkd3d.h index 941663fcacee..f6872c3b6d6f 100644 --- a/include/vkd3d.h +++ b/include/vkd3d.h @@ -21,7 +21,7 @@
#ifndef VKD3D_NO_WIN32_TYPES # include "vkd3d_windows.h" -# include "d3d12.h" +# include "vkd3d_d3d12.h" #endif /* VKD3D_NO_WIN32_TYPES */
#include <vulkan/vulkan.h> diff --git a/include/d3d12.idl b/include/vkd3d_d3d12.idl similarity index 99% rename from include/d3d12.idl rename to include/vkd3d_d3d12.idl index 07218cda083f..4242daf35df0 100644 --- a/include/d3d12.idl +++ b/include/vkd3d_d3d12.idl @@ -18,9 +18,9 @@
import "vkd3d_windows.h";
-import "dxgibase.idl"; +import "vkd3d_dxgibase.idl";
-#include "unknown.idl" +#include "vkd3d_unknown.idl"
const UINT D3D12_CS_TGSM_REGISTER_COUNT = 8192; const UINT D3D12_MAX_ROOT_COST = 64; diff --git a/include/dxgi.idl b/include/vkd3d_dxgi.idl similarity index 98% rename from include/dxgi.idl rename to include/vkd3d_dxgi.idl index 746e0008884b..5b80e1f6c3f4 100644 --- a/include/dxgi.idl +++ b/include/vkd3d_dxgi.idl @@ -17,9 +17,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-import "dxgitype.idl"; +import "vkd3d_dxgitype.idl";
-#include "unknown.idl" +#include "vkd3d_unknown.idl"
typedef enum DXGI_SWAP_EFFECT { diff --git a/include/dxgi1_2.idl b/include/vkd3d_dxgi1_2.idl similarity index 99% rename from include/dxgi1_2.idl rename to include/vkd3d_dxgi1_2.idl index dbee99447712..e7f951ac9172 100644 --- a/include/dxgi1_2.idl +++ b/include/vkd3d_dxgi1_2.idl @@ -17,7 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-import "dxgi.idl"; +import "vkd3d_dxgi.idl";
typedef enum DXGI_SCALING { diff --git a/include/dxgi1_3.idl b/include/vkd3d_dxgi1_3.idl similarity index 98% rename from include/dxgi1_3.idl rename to include/vkd3d_dxgi1_3.idl index 85a6e1ee6fd4..88ac0a34f702 100644 --- a/include/dxgi1_3.idl +++ b/include/vkd3d_dxgi1_3.idl @@ -17,7 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-import "dxgi1_2.idl"; +import "vkd3d_dxgi1_2.idl";
typedef struct DXGI_MATRIX_3X2_F DXGI_MATRIX_3X2_F;
diff --git a/include/dxgi1_4.idl b/include/vkd3d_dxgi1_4.idl similarity index 98% rename from include/dxgi1_4.idl rename to include/vkd3d_dxgi1_4.idl index 908bd9bc8ebd..ccd2224c82de 100644 --- a/include/dxgi1_4.idl +++ b/include/vkd3d_dxgi1_4.idl @@ -17,7 +17,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-import "dxgi1_3.idl"; +import "vkd3d_dxgi1_3.idl";
[ local, diff --git a/include/dxgibase.idl b/include/vkd3d_dxgibase.idl similarity index 97% rename from include/dxgibase.idl rename to include/vkd3d_dxgibase.idl index 86ba5dc9f0cd..93f931e09444 100644 --- a/include/dxgibase.idl +++ b/include/vkd3d_dxgibase.idl @@ -18,7 +18,7 @@
import "vkd3d_windows.h";
-import "dxgiformat.idl"; +import "vkd3d_dxgiformat.idl";
cpp_quote("#ifndef DXGI_ERROR_INVALID_CALL") cpp_quote("#define DXGI_ERROR_INVALID_CALL _HRESULT_TYPEDEF_(0x887a0001)") diff --git a/include/dxgiformat.idl b/include/vkd3d_dxgiformat.idl similarity index 100% rename from include/dxgiformat.idl rename to include/vkd3d_dxgiformat.idl diff --git a/include/dxgitype.idl b/include/vkd3d_dxgitype.idl similarity index 98% rename from include/dxgitype.idl rename to include/vkd3d_dxgitype.idl index aad3f4b0e909..74806c0ce41c 100644 --- a/include/dxgitype.idl +++ b/include/vkd3d_dxgitype.idl @@ -18,7 +18,7 @@ */
import "vkd3d_windows.h"; -import "dxgibase.idl"; +import "vkd3d_dxgibase.idl";
typedef enum DXGI_COLOR_SPACE_TYPE { diff --git a/include/unknown.idl b/include/vkd3d_unknown.idl similarity index 100% rename from include/unknown.idl rename to include/vkd3d_unknown.idl diff --git a/tests/d3d12.c b/tests/d3d12.c index 1d8e62537569..963ecff3a292 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -41,7 +41,7 @@ typedef int HRESULT; #include "vkd3d_test.h" #include "vkd3d_windows.h" #define WIDL_C_INLINE_WRAPPERS -#include "d3d12.h" +#include "vkd3d_d3d12.h"
#include <inttypes.h> #include <limits.h> @@ -49,7 +49,7 @@ typedef int HRESULT; #include <time.h>
#ifdef _WIN32 -# include "dxgi1_4.h" +# include "vkd3d_dxgi1_4.h" #else # include <pthread.h> # include "vkd3d_utils.h"
On 15 December 2017 at 17:46, Józef Kucia joseph.kucia@gmail.com wrote:
The downside is that it might be slightly annoying when using vkd3d for source ports, i.e. you have to use vkd3d_d3d12.h instead of d3d12.h. Also, vkmodelviewer needs a small fix which I am going to push if this is committed.
If that's something we care enough about, we could consider providing compatibility headers as part of vkd3d-utils. I.e., "vkd3d-utils/d3d12.h" would include vkd3d_d3d12.h. It may not be a bad idea to move e.g. the D3D12CreateDevice() prototype to vkd3d-utils/d3d12.h as well.
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- include/vkd3d_windows.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/include/vkd3d_windows.h b/include/vkd3d_windows.h index 09c30f69a1e8..3b1f92a13e51 100644 --- a/include/vkd3d_windows.h +++ b/include/vkd3d_windows.h @@ -18,6 +18,7 @@
#ifndef __VKD3D_WINDOWS_H #define __VKD3D_WINDOWS_H +#ifndef _INC_WINDOWS
#if !defined(_WIN32) || defined(__WIDL__)
@@ -238,4 +239,5 @@ extern "C++" \ #endif #endif /* DEFINE_ENUM_FLAG_OPERATORS */
+#endif /* _INC_WINDOWS */ #endif /* __VKD3D_WINDOWS_H */
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com