mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
vkd3d-shader: Introduce an interface to specify 1.x texture dimensions.
This commit is contained in:
committed by
Henri Verbeet
parent
937b80f3f2
commit
539a5be370
Notes:
Henri Verbeet
2025-10-13 19:31:51 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1769
@@ -43,6 +43,58 @@ probe (480, 240) f32(1, 0, 1, 0)
|
||||
probe (320, 360) f32(1, 1, 0, 0)
|
||||
probe (480, 360) f32(1, 0, 0, 0)
|
||||
|
||||
[srv 0]
|
||||
size (3d, 2, 2, 2)
|
||||
1.0 0.0 0.0 0.0 1.0 1.0 0.0 0.0
|
||||
1.0 0.0 1.0 0.0 1.0 1.0 1.0 0.0
|
||||
|
||||
1.0 0.0 0.0 1.0 1.0 1.0 0.0 1.0
|
||||
1.0 0.0 1.0 1.0 1.0 1.0 1.0 1.0
|
||||
|
||||
[test]
|
||||
draw quad
|
||||
probe (320, 240) f32(1, 1, 1, 1)
|
||||
probe (480, 240) f32(1, 0, 1, 1)
|
||||
probe (320, 360) f32(1, 1, 0, 1)
|
||||
probe (480, 360) f32(1, 0, 0, 1)
|
||||
|
||||
[srv 0]
|
||||
size (cube, 1)
|
||||
1.0 0.0 0.0 0.0
|
||||
1.0 0.0 0.1 0.0
|
||||
1.0 0.0 0.2 0.0
|
||||
1.0 0.0 0.3 0.0
|
||||
1.0 0.0 0.4 0.0
|
||||
1.0 0.0 0.5 0.0
|
||||
|
||||
[vertex shader]
|
||||
float4 coord;
|
||||
|
||||
void main(inout float4 pos : position, out float4 tex : texcoord)
|
||||
{
|
||||
tex = coord;
|
||||
}
|
||||
|
||||
[test]
|
||||
uniform 0 float4 1 0 0 0
|
||||
draw quad
|
||||
probe (0, 0) f32(1.0, 0.0, 0.0, 0)
|
||||
uniform 0 float4 -1 0 0 0
|
||||
draw quad
|
||||
probe (0, 0) f32(1.0, 0.0, 0.1, 0)
|
||||
uniform 0 float4 0 1 0 0
|
||||
draw quad
|
||||
probe (0, 0) f32(1.0, 0.0, 0.2, 0)
|
||||
uniform 0 float4 0 -1 0 0
|
||||
draw quad
|
||||
probe (0, 0) f32(1.0, 0.0, 0.3, 0)
|
||||
uniform 0 float4 0 0 1 0
|
||||
draw quad
|
||||
probe (0, 0) f32(1.0, 0.0, 0.4, 0)
|
||||
uniform 0 float4 0 0 -1 0
|
||||
draw quad
|
||||
probe (0, 0) f32(1.0, 0.0, 0.5, 0)
|
||||
|
||||
[vertex shader]
|
||||
void main(inout float4 pos : position, out float4 tex : texcoord)
|
||||
{
|
||||
|
||||
@@ -354,6 +354,7 @@ static bool compile_hlsl_and_scan(struct vulkan_shader_runner *runner, enum shad
|
||||
static bool compile_d3d_code(struct vulkan_shader_runner *runner,
|
||||
enum shader_type type, struct vkd3d_shader_code *spirv)
|
||||
{
|
||||
struct vkd3d_shader_d3dbc_source_info d3dbc_source_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_D3DBC_SOURCE_INFO};
|
||||
struct vkd3d_shader_varying_map_info varying_map_info = {.type = VKD3D_SHADER_STRUCTURE_TYPE_VARYING_MAP_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};
|
||||
@@ -398,6 +399,28 @@ static bool compile_d3d_code(struct vulkan_shader_runner *runner,
|
||||
ok(varying_map_info.varying_count <= ARRAY_SIZE(varying_map),
|
||||
"Got unexpected count %u.\n", varying_map_info.varying_count);
|
||||
}
|
||||
else if (type == SHADER_TYPE_PS && info.source_type == VKD3D_SHADER_SOURCE_D3D_BYTECODE)
|
||||
{
|
||||
info.next = &d3dbc_source_info;
|
||||
|
||||
d3dbc_source_info.next = &spirv_info;
|
||||
|
||||
for (i = 0; i < runner->r.resource_count; ++i)
|
||||
{
|
||||
const struct resource *resource = runner->r.resources[i];
|
||||
|
||||
if (resource->desc.type != RESOURCE_TYPE_TEXTURE
|
||||
|| resource->desc.slot > ARRAY_SIZE(d3dbc_source_info.texture_dimensions))
|
||||
continue;
|
||||
|
||||
if (resource->desc.dimension == RESOURCE_DIMENSION_3D)
|
||||
d3dbc_source_info.texture_dimensions[resource->desc.slot] = VKD3D_SHADER_RESOURCE_TEXTURE_3D;
|
||||
else if (resource->desc.dimension == RESOURCE_DIMENSION_CUBE)
|
||||
d3dbc_source_info.texture_dimensions[resource->desc.slot] = VKD3D_SHADER_RESOURCE_TEXTURE_CUBE;
|
||||
else
|
||||
d3dbc_source_info.texture_dimensions[resource->desc.slot] = VKD3D_SHADER_RESOURCE_TEXTURE_2D;
|
||||
}
|
||||
}
|
||||
|
||||
spirv_info.next = &interface_info;
|
||||
spirv_info.environment = VKD3D_SHADER_SPIRV_ENVIRONMENT_VULKAN_1_0;
|
||||
|
||||
Reference in New Issue
Block a user