mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
tests: Use struct vkd3d_shader_scan_signature_info to retrieve the VS input signature.
In order to allow retrieving it from d3dbc shaders.
This commit is contained in:
committed by
Alexandre Julliard
parent
2bc40385d9
commit
aa44f9b390
Notes:
Alexandre Julliard
2023-12-14 23:31:52 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/518
@ -64,6 +64,8 @@ struct vulkan_shader_runner
|
|||||||
VkCommandBuffer cmd_buffer;
|
VkCommandBuffer cmd_buffer;
|
||||||
VkDescriptorPool descriptor_pool;
|
VkDescriptorPool descriptor_pool;
|
||||||
|
|
||||||
|
struct vkd3d_shader_scan_signature_info vs_signatures;
|
||||||
|
|
||||||
struct vulkan_sampler
|
struct vulkan_sampler
|
||||||
{
|
{
|
||||||
VkSampler vk_sampler;
|
VkSampler vk_sampler;
|
||||||
@ -392,7 +394,7 @@ static void vulkan_runner_destroy_resource(struct shader_runner *r, struct resou
|
|||||||
free(resource);
|
free(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool compile_shader(const struct vulkan_shader_runner *runner, const char *source, const char *type,
|
static bool compile_shader(struct vulkan_shader_runner *runner, const char *source, const char *type,
|
||||||
struct vkd3d_shader_code *dxbc, struct vkd3d_shader_code *spirv)
|
struct vkd3d_shader_code *dxbc, 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};
|
||||||
@ -528,6 +530,14 @@ static bool compile_shader(const struct vulkan_shader_runner *runner, const char
|
|||||||
interface_info.push_constant_buffer_count = 1;
|
interface_info.push_constant_buffer_count = 1;
|
||||||
interface_info.push_constant_buffers = &push_constants;
|
interface_info.push_constant_buffers = &push_constants;
|
||||||
|
|
||||||
|
if (!strcmp(type, "vs"))
|
||||||
|
{
|
||||||
|
interface_info.next = &runner->vs_signatures;
|
||||||
|
|
||||||
|
runner->vs_signatures.type = VKD3D_SHADER_STRUCTURE_TYPE_SCAN_SIGNATURE_INFO;
|
||||||
|
runner->vs_signatures.next = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
ret = vkd3d_shader_compile(&info, spirv, &messages);
|
ret = vkd3d_shader_compile(&info, spirv, &messages);
|
||||||
if (messages && vkd3d_test_state.debug_level)
|
if (messages && vkd3d_test_state.debug_level)
|
||||||
trace("%s\n", messages);
|
trace("%s\n", messages);
|
||||||
@ -538,7 +548,7 @@ static bool compile_shader(const struct vulkan_shader_runner *runner, const char
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool create_shader_stage(const struct vulkan_shader_runner *runner,
|
static bool create_shader_stage(struct vulkan_shader_runner *runner,
|
||||||
VkPipelineShaderStageCreateInfo *stage_info, const char *type, enum VkShaderStageFlagBits stage,
|
VkPipelineShaderStageCreateInfo *stage_info, const char *type, enum VkShaderStageFlagBits stage,
|
||||||
const char *source, struct vkd3d_shader_code *dxbc_ptr)
|
const char *source, struct vkd3d_shader_code *dxbc_ptr)
|
||||||
{
|
{
|
||||||
@ -606,7 +616,7 @@ static VkPipelineLayout create_pipeline_layout(const struct vulkan_shader_runner
|
|||||||
return pipeline_layout;
|
return pipeline_layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkPipeline create_graphics_pipeline(const struct vulkan_shader_runner *runner, VkRenderPass render_pass,
|
static VkPipeline create_graphics_pipeline(struct vulkan_shader_runner *runner, VkRenderPass render_pass,
|
||||||
VkPipelineLayout pipeline_layout, D3D_PRIMITIVE_TOPOLOGY primitive_topology)
|
VkPipelineLayout pipeline_layout, D3D_PRIMITIVE_TOPOLOGY primitive_topology)
|
||||||
{
|
{
|
||||||
VkPipelineInputAssemblyStateCreateInfo ia_desc = {.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO};
|
VkPipelineInputAssemblyStateCreateInfo ia_desc = {.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO};
|
||||||
@ -622,7 +632,6 @@ static VkPipeline create_graphics_pipeline(const struct vulkan_shader_runner *ru
|
|||||||
VkPipelineColorBlendAttachmentState attachment_desc[MAX_RESOURCES] = {0};
|
VkPipelineColorBlendAttachmentState attachment_desc[MAX_RESOURCES] = {0};
|
||||||
VkVertexInputAttributeDescription input_attributes[32];
|
VkVertexInputAttributeDescription input_attributes[32];
|
||||||
VkVertexInputBindingDescription input_bindings[32];
|
VkVertexInputBindingDescription input_bindings[32];
|
||||||
struct vkd3d_shader_signature vs_input_signature;
|
|
||||||
VkPipelineShaderStageCreateInfo stage_desc[2];
|
VkPipelineShaderStageCreateInfo stage_desc[2];
|
||||||
struct vkd3d_shader_code vs_dxbc;
|
struct vkd3d_shader_code vs_dxbc;
|
||||||
VkDevice device = runner->device;
|
VkDevice device = runner->device;
|
||||||
@ -642,9 +651,6 @@ static VkPipeline create_graphics_pipeline(const struct vulkan_shader_runner *ru
|
|||||||
return VK_NULL_HANDLE;
|
return VK_NULL_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = vkd3d_shader_parse_input_signature(&vs_dxbc, &vs_input_signature, NULL);
|
|
||||||
ok(!ret, "Failed to parse input signature, error %d.\n", ret);
|
|
||||||
|
|
||||||
if (runner->r.input_element_count > ARRAY_SIZE(input_attributes))
|
if (runner->r.input_element_count > ARRAY_SIZE(input_attributes))
|
||||||
fatal_error("Input element count %zu is too high.\n", runner->r.input_element_count);
|
fatal_error("Input element count %zu is too high.\n", runner->r.input_element_count);
|
||||||
|
|
||||||
@ -654,7 +660,8 @@ static VkPipeline create_graphics_pipeline(const struct vulkan_shader_runner *ru
|
|||||||
const struct input_element *element = &runner->r.input_elements[i];
|
const struct input_element *element = &runner->r.input_elements[i];
|
||||||
const struct vkd3d_shader_signature_element *signature_element;
|
const struct vkd3d_shader_signature_element *signature_element;
|
||||||
|
|
||||||
signature_element = vkd3d_shader_find_signature_element(&vs_input_signature, element->name, element->index, 0);
|
signature_element = vkd3d_shader_find_signature_element(&runner->vs_signatures.input, element->name, element->index, 0);
|
||||||
|
ok(signature_element, "Cannot find signature element %s%u.\n", element->name, element->index);
|
||||||
|
|
||||||
attribute->location = signature_element->register_index;
|
attribute->location = signature_element->register_index;
|
||||||
attribute->binding = element->slot;
|
attribute->binding = element->slot;
|
||||||
@ -737,13 +744,13 @@ static VkPipeline create_graphics_pipeline(const struct vulkan_shader_runner *ru
|
|||||||
|
|
||||||
VK_CALL(vkDestroyShaderModule(device, stage_desc[0].module, NULL));
|
VK_CALL(vkDestroyShaderModule(device, stage_desc[0].module, NULL));
|
||||||
VK_CALL(vkDestroyShaderModule(device, stage_desc[1].module, NULL));
|
VK_CALL(vkDestroyShaderModule(device, stage_desc[1].module, NULL));
|
||||||
vkd3d_shader_free_shader_signature(&vs_input_signature);
|
vkd3d_shader_free_scan_signature_info(&runner->vs_signatures);
|
||||||
vkd3d_shader_free_shader_code(&vs_dxbc);
|
vkd3d_shader_free_shader_code(&vs_dxbc);
|
||||||
|
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkPipeline create_compute_pipeline(const struct vulkan_shader_runner *runner, VkPipelineLayout pipeline_layout)
|
static VkPipeline create_compute_pipeline(struct vulkan_shader_runner *runner, VkPipelineLayout pipeline_layout)
|
||||||
{
|
{
|
||||||
VkComputePipelineCreateInfo pipeline_desc = {.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO};
|
VkComputePipelineCreateInfo pipeline_desc = {.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO};
|
||||||
VkPipeline pipeline;
|
VkPipeline pipeline;
|
||||||
|
Reference in New Issue
Block a user