mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
tests/shader_runner: Get rid of the "dxbc_ptr" parameter to create_shader_stage().
This commit is contained in:
parent
d39e840c14
commit
ccdac48923
Notes:
Henri Verbeet
2024-10-28 18:11:45 +01:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1216
@ -264,8 +264,8 @@ static void vulkan_runner_destroy_resource(struct shader_runner *r, struct resou
|
|||||||
free(resource);
|
free(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool compile_shader(struct vulkan_shader_runner *runner, const char *source, const char *type,
|
static bool compile_shader(struct vulkan_shader_runner *runner,
|
||||||
struct vkd3d_shader_code *dxbc, struct vkd3d_shader_code *spirv)
|
const char *source, const char *type, struct vkd3d_shader_code *spirv)
|
||||||
{
|
{
|
||||||
struct vkd3d_shader_spirv_target_info spirv_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO};
|
struct vkd3d_shader_spirv_target_info spirv_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_SPIRV_TARGET_INFO};
|
||||||
struct vkd3d_shader_interface_info interface_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO};
|
struct vkd3d_shader_interface_info interface_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_INTERFACE_INFO};
|
||||||
@ -280,6 +280,7 @@ static bool compile_shader(struct vulkan_shader_runner *runner, const char *sour
|
|||||||
struct vkd3d_shader_parameter1 parameters[17];
|
struct vkd3d_shader_parameter1 parameters[17];
|
||||||
struct vkd3d_shader_compile_option *option;
|
struct vkd3d_shader_compile_option *option;
|
||||||
unsigned int i, compile_options;
|
unsigned int i, compile_options;
|
||||||
|
struct vkd3d_shader_code dxbc;
|
||||||
char profile[7];
|
char profile[7];
|
||||||
char *messages;
|
char *messages;
|
||||||
int ret;
|
int ret;
|
||||||
@ -341,7 +342,7 @@ static bool compile_shader(struct vulkan_shader_runner *runner, const char *sour
|
|||||||
sprintf(profile, "%s_%s", type, shader_models[runner->r.minimum_shader_model]);
|
sprintf(profile, "%s_%s", type, shader_models[runner->r.minimum_shader_model]);
|
||||||
hlsl_info.profile = profile;
|
hlsl_info.profile = profile;
|
||||||
|
|
||||||
ret = vkd3d_shader_compile(&info, dxbc, &messages);
|
ret = vkd3d_shader_compile(&info, &dxbc, &messages);
|
||||||
if (messages && vkd3d_test_state.debug_level)
|
if (messages && vkd3d_test_state.debug_level)
|
||||||
trace("%s\n", messages);
|
trace("%s\n", messages);
|
||||||
vkd3d_shader_free_messages(messages);
|
vkd3d_shader_free_messages(messages);
|
||||||
@ -349,7 +350,7 @@ static bool compile_shader(struct vulkan_shader_runner *runner, const char *sour
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
info.next = &spirv_info;
|
info.next = &spirv_info;
|
||||||
info.source = *dxbc;
|
info.source = dxbc;
|
||||||
if (runner->r.minimum_shader_model < SHADER_MODEL_4_0)
|
if (runner->r.minimum_shader_model < SHADER_MODEL_4_0)
|
||||||
info.source_type = VKD3D_SHADER_SOURCE_D3D_BYTECODE;
|
info.source_type = VKD3D_SHADER_SOURCE_D3D_BYTECODE;
|
||||||
else
|
else
|
||||||
@ -495,29 +496,23 @@ static bool compile_shader(struct vulkan_shader_runner *runner, const char *sour
|
|||||||
if (messages && vkd3d_test_state.debug_level)
|
if (messages && vkd3d_test_state.debug_level)
|
||||||
trace("%s\n", messages);
|
trace("%s\n", messages);
|
||||||
vkd3d_shader_free_messages(messages);
|
vkd3d_shader_free_messages(messages);
|
||||||
|
vkd3d_shader_free_shader_code(&dxbc);
|
||||||
if (ret)
|
if (ret)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool create_shader_stage(struct vulkan_shader_runner *runner,
|
static bool create_shader_stage(struct vulkan_shader_runner *runner, VkPipelineShaderStageCreateInfo *stage_info,
|
||||||
VkPipelineShaderStageCreateInfo *stage_info, const char *type, enum VkShaderStageFlagBits stage,
|
const char *type, enum VkShaderStageFlagBits stage, const char *source)
|
||||||
const char *source, struct vkd3d_shader_code *dxbc_ptr)
|
|
||||||
{
|
{
|
||||||
VkShaderModuleCreateInfo module_info = {.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO};
|
VkShaderModuleCreateInfo module_info = {.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO};
|
||||||
const struct vulkan_test_context *context = &runner->context;
|
const struct vulkan_test_context *context = &runner->context;
|
||||||
struct vkd3d_shader_code spirv, dxbc;
|
struct vkd3d_shader_code spirv;
|
||||||
|
|
||||||
if (!dxbc_ptr)
|
if (!compile_shader(runner, source, type, &spirv))
|
||||||
dxbc_ptr = &dxbc;
|
|
||||||
|
|
||||||
if (!compile_shader(runner, source, type, dxbc_ptr, &spirv))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (dxbc_ptr == &dxbc)
|
|
||||||
vkd3d_shader_free_shader_code(&dxbc);
|
|
||||||
|
|
||||||
memset(stage_info, 0, sizeof(*stage_info));
|
memset(stage_info, 0, sizeof(*stage_info));
|
||||||
stage_info->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
stage_info->sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
||||||
stage_info->stage = stage;
|
stage_info->stage = stage;
|
||||||
@ -619,7 +614,6 @@ static VkPipeline create_graphics_pipeline(struct vulkan_shader_runner *runner,
|
|||||||
VkVertexInputBindingDescription input_bindings[32];
|
VkVertexInputBindingDescription input_bindings[32];
|
||||||
VkPipelineShaderStageCreateInfo stage_desc[5];
|
VkPipelineShaderStageCreateInfo stage_desc[5];
|
||||||
VkDevice device = context->device;
|
VkDevice device = context->device;
|
||||||
struct vkd3d_shader_code vs_dxbc;
|
|
||||||
unsigned int stage_count = 0;
|
unsigned int stage_count = 0;
|
||||||
VkPipeline pipeline;
|
VkPipeline pipeline;
|
||||||
unsigned int i, j;
|
unsigned int i, j;
|
||||||
@ -627,22 +621,22 @@ static VkPipeline create_graphics_pipeline(struct vulkan_shader_runner *runner,
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
memset(stage_desc, 0, sizeof(stage_desc));
|
memset(stage_desc, 0, sizeof(stage_desc));
|
||||||
ret = create_shader_stage(runner, &stage_desc[stage_count++], "vs",
|
ret = create_shader_stage(runner, &stage_desc[stage_count++],
|
||||||
VK_SHADER_STAGE_VERTEX_BIT, runner->r.vs_source, &vs_dxbc);
|
"vs", VK_SHADER_STAGE_VERTEX_BIT, runner->r.vs_source);
|
||||||
ret &= create_shader_stage(runner, &stage_desc[stage_count++], "ps",
|
ret &= create_shader_stage(runner, &stage_desc[stage_count++],
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, runner->r.ps_source, NULL);
|
"ps", VK_SHADER_STAGE_FRAGMENT_BIT, runner->r.ps_source);
|
||||||
|
|
||||||
if (runner->r.hs_source)
|
if (runner->r.hs_source)
|
||||||
{
|
{
|
||||||
ret &= create_shader_stage(runner, &stage_desc[stage_count++], "hs",
|
ret &= create_shader_stage(runner, &stage_desc[stage_count++], "hs",
|
||||||
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, runner->r.hs_source, NULL);
|
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, runner->r.hs_source);
|
||||||
ret &= create_shader_stage(runner, &stage_desc[stage_count++], "ds",
|
ret &= create_shader_stage(runner, &stage_desc[stage_count++], "ds",
|
||||||
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, runner->r.ds_source, NULL);
|
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, runner->r.ds_source);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (runner->r.gs_source)
|
if (runner->r.gs_source)
|
||||||
ret &= create_shader_stage(runner, &stage_desc[stage_count++], "gs",
|
ret &= create_shader_stage(runner, &stage_desc[stage_count++],
|
||||||
VK_SHADER_STAGE_GEOMETRY_BIT, runner->r.gs_source, NULL);
|
"gs", VK_SHADER_STAGE_GEOMETRY_BIT, runner->r.gs_source);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
{
|
{
|
||||||
@ -778,7 +772,6 @@ static VkPipeline create_graphics_pipeline(struct vulkan_shader_runner *runner,
|
|||||||
for (i = 0; i < ARRAY_SIZE(stage_desc); ++i)
|
for (i = 0; i < ARRAY_SIZE(stage_desc); ++i)
|
||||||
VK_CALL(vkDestroyShaderModule(device, stage_desc[i].module, NULL));
|
VK_CALL(vkDestroyShaderModule(device, stage_desc[i].module, NULL));
|
||||||
vkd3d_shader_free_scan_signature_info(&runner->vs_signatures);
|
vkd3d_shader_free_scan_signature_info(&runner->vs_signatures);
|
||||||
vkd3d_shader_free_shader_code(&vs_dxbc);
|
|
||||||
|
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
@ -790,8 +783,7 @@ static VkPipeline create_compute_pipeline(struct vulkan_shader_runner *runner, V
|
|||||||
VkPipeline pipeline;
|
VkPipeline pipeline;
|
||||||
bool ret;
|
bool ret;
|
||||||
|
|
||||||
ret = create_shader_stage(runner, &pipeline_desc.stage, "cs",
|
ret = create_shader_stage(runner, &pipeline_desc.stage, "cs", VK_SHADER_STAGE_COMPUTE_BIT, runner->r.cs_source);
|
||||||
VK_SHADER_STAGE_COMPUTE_BIT, runner->r.cs_source, NULL);
|
|
||||||
todo_if (runner->r.is_todo) ok(ret, "Failed to compile shader.\n");
|
todo_if (runner->r.is_todo) ok(ret, "Failed to compile shader.\n");
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return VK_NULL_HANDLE;
|
return VK_NULL_HANDLE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user