mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader: Enable DXIL support in the default configuration.
This commit is contained in:
Notes:
Henri Verbeet
2025-02-24 16:26:28 +01:00
Approved-by: Conor McCarthy (@cmccarthy) Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1371
6
README
6
README
@@ -149,12 +149,6 @@ in future versions of vkd3d.
|
|||||||
emitted; this can be useful for developers to make error conditions as
|
emitted; this can be useful for developers to make error conditions as
|
||||||
conspicuous as possible.
|
conspicuous as possible.
|
||||||
|
|
||||||
* VKD3D_SHADER_UNSUPPORTED_DXIL - enable DXIL (DirectX Intermediate Language)
|
|
||||||
support in vkd3d-shader, which is disabled by default because it is not
|
|
||||||
considered ready for release yet. Please note that this feature is not
|
|
||||||
currently supported, and it might change in a non-compatible way before it is
|
|
||||||
released.
|
|
||||||
|
|
||||||
* VKD3D_SHADER_UNSUPPORTED_GLSL - enable GLSL (GL Shading Language) support in
|
* VKD3D_SHADER_UNSUPPORTED_GLSL - enable GLSL (GL Shading Language) support in
|
||||||
vkd3d-shader, which is disabled by default because it is not considered ready
|
vkd3d-shader, which is disabled by default because it is not considered ready
|
||||||
for release yet. Please note that this feature is not currently supported,
|
for release yet. Please note that this feature is not currently supported,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ mkdir build
|
|||||||
cd build
|
cd build
|
||||||
export LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH-}"
|
export LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH-}"
|
||||||
if ../configure --enable-demos --with-spirv-tools DXCOMPILER_LIBS="-L/usr/local/lib" CFLAGS="-g -O2 -Werror" \
|
if ../configure --enable-demos --with-spirv-tools DXCOMPILER_LIBS="-L/usr/local/lib" CFLAGS="-g -O2 -Werror" \
|
||||||
CPPFLAGS="-DVKD3D_SHADER_UNSUPPORTED_DXIL -DVKD3D_SHADER_UNSUPPORTED_GLSL -DVKD3D_ABORT_ON_ERR" && \
|
CPPFLAGS="-DVKD3D_SHADER_UNSUPPORTED_GLSL -DVKD3D_ABORT_ON_ERR" && \
|
||||||
make -j$(nproc) ; then
|
make -j$(nproc) ; then
|
||||||
make -j$(nproc) AM_COLOR_TESTS=always check || \
|
make -j$(nproc) AM_COLOR_TESTS=always check || \
|
||||||
touch ../tests_failed
|
touch ../tests_failed
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ mkdir build
|
|||||||
cd build
|
cd build
|
||||||
if ../configure CFLAGS="-I/opt/homebrew/opt/vulkan-headers/include -I/opt/homebrew/opt/spirv-headers/include -g -O2 -Wno-implicit-fallthrough -Wno-ignored-attributes -Wno-unknown-attributes -Wno-unused-but-set-variable -Werror" \
|
if ../configure CFLAGS="-I/opt/homebrew/opt/vulkan-headers/include -I/opt/homebrew/opt/spirv-headers/include -g -O2 -Wno-implicit-fallthrough -Wno-ignored-attributes -Wno-unknown-attributes -Wno-unused-but-set-variable -Werror" \
|
||||||
OBJCFLAGS="-g -O2 -Wno-unknown-attributes -Wno-ignored-attributes -Werror" \
|
OBJCFLAGS="-g -O2 -Wno-unknown-attributes -Wno-ignored-attributes -Werror" \
|
||||||
CPPFLAGS="-DVKD3D_ABORT_ON_ERR -DVKD3D_SHADER_UNSUPPORTED_DXIL -DVKD3D_SHADER_UNSUPPORTED_MSL" \
|
CPPFLAGS="-DVKD3D_ABORT_ON_ERR -DVKD3D_SHADER_UNSUPPORTED_MSL" \
|
||||||
VULKAN_LIBS=-L/opt/homebrew/opt/vulkan-loader/lib --with-spirv-tools && \
|
VULKAN_LIBS=-L/opt/homebrew/opt/vulkan-loader/lib --with-spirv-tools && \
|
||||||
make -j$(sysctl -n hw.ncpu) ; then
|
make -j$(sysctl -n hw.ncpu) ; then
|
||||||
make -j$(sysctl -n hw.ncpu) AM_COLOR_TESTS=always check || \
|
make -j$(sysctl -n hw.ncpu) AM_COLOR_TESTS=always check || \
|
||||||
|
|||||||
@@ -43,16 +43,12 @@ static inline enum vkd3d_result vkd3d_shader_parse_dxbc_source_type(const struct
|
|||||||
if (tag == TAG_SHDR || tag == TAG_SHEX)
|
if (tag == TAG_SHDR || tag == TAG_SHEX)
|
||||||
{
|
{
|
||||||
*type = VKD3D_SHADER_SOURCE_DXBC_TPF;
|
*type = VKD3D_SHADER_SOURCE_DXBC_TPF;
|
||||||
#ifndef VKD3D_SHADER_UNSUPPORTED_DXIL
|
|
||||||
break;
|
|
||||||
#else
|
|
||||||
}
|
}
|
||||||
else if (tag == TAG_DXIL)
|
else if (tag == TAG_DXIL)
|
||||||
{
|
{
|
||||||
*type = VKD3D_SHADER_SOURCE_DXBC_DXIL;
|
*type = VKD3D_SHADER_SOURCE_DXBC_DXIL;
|
||||||
/* Default to DXIL if both are present. */
|
/* Default to DXIL if both are present. */
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10700,8 +10700,6 @@ int dxil_parse(const struct vkd3d_shader_compile_info *compile_info, uint64_t co
|
|||||||
uint32_t *byte_code = NULL;
|
uint32_t *byte_code = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
MESSAGE("Creating a DXIL parser. This is unsupported; you get to keep all the pieces if it breaks.\n");
|
|
||||||
|
|
||||||
dxbc_desc.is_dxil = true;
|
dxbc_desc.is_dxil = true;
|
||||||
if ((ret = shader_extract_from_dxbc(&compile_info->source, message_context, compile_info->source_name,
|
if ((ret = shader_extract_from_dxbc(&compile_info->source, message_context, compile_info->source_name,
|
||||||
&dxbc_desc)) < 0)
|
&dxbc_desc)) < 0)
|
||||||
|
|||||||
@@ -1978,9 +1978,7 @@ const enum vkd3d_shader_source_type *vkd3d_shader_get_supported_source_types(uns
|
|||||||
VKD3D_SHADER_SOURCE_DXBC_TPF,
|
VKD3D_SHADER_SOURCE_DXBC_TPF,
|
||||||
VKD3D_SHADER_SOURCE_HLSL,
|
VKD3D_SHADER_SOURCE_HLSL,
|
||||||
VKD3D_SHADER_SOURCE_D3D_BYTECODE,
|
VKD3D_SHADER_SOURCE_D3D_BYTECODE,
|
||||||
#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
|
|
||||||
VKD3D_SHADER_SOURCE_DXBC_DXIL,
|
VKD3D_SHADER_SOURCE_DXBC_DXIL,
|
||||||
#endif
|
|
||||||
VKD3D_SHADER_SOURCE_FX,
|
VKD3D_SHADER_SOURCE_FX,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2029,7 +2027,6 @@ const enum vkd3d_shader_target_type *vkd3d_shader_get_supported_target_types(
|
|||||||
VKD3D_SHADER_TARGET_D3D_ASM,
|
VKD3D_SHADER_TARGET_D3D_ASM,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
|
|
||||||
static const enum vkd3d_shader_target_type dxbc_dxil_types[] =
|
static const enum vkd3d_shader_target_type dxbc_dxil_types[] =
|
||||||
{
|
{
|
||||||
VKD3D_SHADER_TARGET_SPIRV_BINARY,
|
VKD3D_SHADER_TARGET_SPIRV_BINARY,
|
||||||
@@ -2038,7 +2035,6 @@ const enum vkd3d_shader_target_type *vkd3d_shader_get_supported_target_types(
|
|||||||
# endif
|
# endif
|
||||||
VKD3D_SHADER_TARGET_D3D_ASM,
|
VKD3D_SHADER_TARGET_D3D_ASM,
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
static const enum vkd3d_shader_target_type fx_types[] =
|
static const enum vkd3d_shader_target_type fx_types[] =
|
||||||
{
|
{
|
||||||
@@ -2061,11 +2057,9 @@ const enum vkd3d_shader_target_type *vkd3d_shader_get_supported_target_types(
|
|||||||
*count = ARRAY_SIZE(d3dbc_types);
|
*count = ARRAY_SIZE(d3dbc_types);
|
||||||
return d3dbc_types;
|
return d3dbc_types;
|
||||||
|
|
||||||
#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
|
|
||||||
case VKD3D_SHADER_SOURCE_DXBC_DXIL:
|
case VKD3D_SHADER_SOURCE_DXBC_DXIL:
|
||||||
*count = ARRAY_SIZE(dxbc_dxil_types);
|
*count = ARRAY_SIZE(dxbc_dxil_types);
|
||||||
return dxbc_dxil_types;
|
return dxbc_dxil_types;
|
||||||
#endif
|
|
||||||
|
|
||||||
case VKD3D_SHADER_SOURCE_FX:
|
case VKD3D_SHADER_SOURCE_FX:
|
||||||
*count = ARRAY_SIZE(fx_types);
|
*count = ARRAY_SIZE(fx_types);
|
||||||
|
|||||||
@@ -3610,11 +3610,7 @@ static HRESULT STDMETHODCALLTYPE d3d12_device_CheckFeatureSupport(ID3D12Device9
|
|||||||
|
|
||||||
TRACE("Request shader model %#x.\n", data->HighestShaderModel);
|
TRACE("Request shader model %#x.\n", data->HighestShaderModel);
|
||||||
|
|
||||||
#ifdef VKD3D_SHADER_UNSUPPORTED_DXIL
|
|
||||||
data->HighestShaderModel = min(data->HighestShaderModel, D3D_SHADER_MODEL_6_0);
|
data->HighestShaderModel = min(data->HighestShaderModel, D3D_SHADER_MODEL_6_0);
|
||||||
#else
|
|
||||||
data->HighestShaderModel = min(data->HighestShaderModel, D3D_SHADER_MODEL_5_1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TRACE("Shader model %#x.\n", data->HighestShaderModel);
|
TRACE("Shader model %#x.\n", data->HighestShaderModel);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|||||||
@@ -1093,12 +1093,7 @@ static void run_shader_tests_for_model_range(void *dxc_compiler,
|
|||||||
|
|
||||||
if (minimum_shader_model >= SHADER_MODEL_6_0 && !device_supports_shader_model_6_0(device))
|
if (minimum_shader_model >= SHADER_MODEL_6_0 && !device_supports_shader_model_6_0(device))
|
||||||
{
|
{
|
||||||
#ifdef VKD3D_CROSSTEST
|
|
||||||
skip("The device does not support shader model 6.0.\n");
|
skip("The device does not support shader model 6.0.\n");
|
||||||
#else
|
|
||||||
skip("DXIL support is not enabled. If this is unintentional, "
|
|
||||||
"add -DVKD3D_SHADER_UNSUPPORTED_DXIL to CPPFLAGS.\n");
|
|
||||||
#endif
|
|
||||||
destroy_test_context(&runner.test_context);
|
destroy_test_context(&runner.test_context);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,21 +29,6 @@
|
|||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
static bool check_dxil_support(void)
|
|
||||||
{
|
|
||||||
const enum vkd3d_shader_source_type *source_types;
|
|
||||||
unsigned int count, i;
|
|
||||||
|
|
||||||
source_types = vkd3d_shader_get_supported_source_types(&count);
|
|
||||||
for (i = 0; i < count; ++i)
|
|
||||||
{
|
|
||||||
if (source_types[i] == VKD3D_SHADER_SOURCE_DXBC_DXIL)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_invalid_shaders(void)
|
static void test_invalid_shaders(void)
|
||||||
{
|
{
|
||||||
struct vkd3d_shader_compile_info info;
|
struct vkd3d_shader_compile_info info;
|
||||||
@@ -949,7 +934,7 @@ static void test_scan_signatures(void)
|
|||||||
vkd3d_test_pop_context();
|
vkd3d_test_pop_context();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!check_dxil_support() || !(compiler = dxcompiler_create()))
|
if (!(compiler = dxcompiler_create()))
|
||||||
{
|
{
|
||||||
skip("DXIL tests not supported.\n");
|
skip("DXIL tests not supported.\n");
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user