vkd3d-shader/glsl: Implement support for VKD3DSPR_CONSTBUFFER registers.

This commit is contained in:
Henri Verbeet 2024-02-25 00:35:48 +01:00
parent e9f0c6fef3
commit ae40184631
Notes: Henri Verbeet 2024-09-19 14:46:44 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1084
22 changed files with 254 additions and 74 deletions

View File

@ -48,6 +48,10 @@ struct vkd3d_glsl_generator
} limits;
bool interstage_input;
bool interstage_output;
const struct vkd3d_shader_interface_info *interface_info;
const struct vkd3d_shader_descriptor_offset_info *offset_info;
const struct vkd3d_shader_scan_descriptor_info1 *descriptor_info;
};
static void VKD3D_PRINTF_FUNC(3, 4) vkd3d_glsl_compiler_error(
@ -133,6 +137,25 @@ static void shader_glsl_print_register_name(struct vkd3d_string_buffer *buffer,
vkd3d_string_buffer_printf(buffer, "%s_out[%u]", gen->prefix, reg->idx[0].offset);
break;
case VKD3DSPR_CONSTBUFFER:
if (reg->idx_count != 3)
{
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL,
"Internal compiler error: Unhandled constant buffer register index count %u.", reg->idx_count);
vkd3d_string_buffer_printf(buffer, "<unhandled register %#x>", reg->type);
break;
}
if (reg->idx[0].rel_addr || reg->idx[2].rel_addr)
{
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL,
"Internal compiler error: Unhandled constant buffer register indirect addressing.");
vkd3d_string_buffer_printf(buffer, "<unhandled register %#x>", reg->type);
break;
}
vkd3d_string_buffer_printf(buffer, "%s_cb_%u[%u]",
gen->prefix, reg->idx[0].offset, reg->idx[2].offset);
break;
default:
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL,
"Internal compiler error: Unhandled register type %#x.", reg->type);
@ -425,6 +448,151 @@ static void vkd3d_glsl_handle_instruction(struct vkd3d_glsl_generator *gen,
}
}
static bool shader_glsl_check_shader_visibility(const struct vkd3d_glsl_generator *gen,
enum vkd3d_shader_visibility visibility)
{
enum vkd3d_shader_type t = gen->program->shader_version.type;
switch (visibility)
{
case VKD3D_SHADER_VISIBILITY_ALL:
return true;
case VKD3D_SHADER_VISIBILITY_VERTEX:
return t == VKD3D_SHADER_TYPE_VERTEX;
case VKD3D_SHADER_VISIBILITY_HULL:
return t == VKD3D_SHADER_TYPE_HULL;
case VKD3D_SHADER_VISIBILITY_DOMAIN:
return t == VKD3D_SHADER_TYPE_DOMAIN;
case VKD3D_SHADER_VISIBILITY_GEOMETRY:
return t == VKD3D_SHADER_TYPE_GEOMETRY;
case VKD3D_SHADER_VISIBILITY_PIXEL:
return t == VKD3D_SHADER_TYPE_PIXEL;
case VKD3D_SHADER_VISIBILITY_COMPUTE:
return t == VKD3D_SHADER_TYPE_COMPUTE;
default:
WARN("Invalid shader visibility %#x.\n", visibility);
return false;
}
}
static bool shader_glsl_get_cbv_binding(const struct vkd3d_glsl_generator *gen,
unsigned int register_space, unsigned int register_idx, unsigned int *binding_idx)
{
const struct vkd3d_shader_interface_info *interface_info = gen->interface_info;
const struct vkd3d_shader_resource_binding *binding;
unsigned int i;
if (!interface_info)
return false;
for (i = 0; i < interface_info->binding_count; ++i)
{
binding = &interface_info->bindings[i];
if (binding->type != VKD3D_SHADER_DESCRIPTOR_TYPE_CBV)
continue;
if (binding->register_space != register_space)
continue;
if (binding->register_index != register_idx)
continue;
if (!shader_glsl_check_shader_visibility(gen, binding->shader_visibility))
continue;
if (!(binding->flags & VKD3D_SHADER_BINDING_FLAG_BUFFER))
continue;
*binding_idx = i;
return true;
}
return false;
}
static void shader_glsl_generate_cbv_declaration(struct vkd3d_glsl_generator *gen,
const struct vkd3d_shader_descriptor_info1 *cbv)
{
const struct vkd3d_shader_descriptor_binding *binding;
const struct vkd3d_shader_descriptor_offset *offset;
struct vkd3d_string_buffer *buffer = gen->buffer;
const char *prefix = gen->prefix;
unsigned int binding_idx;
size_t size;
if (cbv->count != 1)
{
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_BINDING_NOT_FOUND,
"Constant buffer %u has unsupported descriptor array size %u.", cbv->register_id, cbv->count);
return;
}
if (!shader_glsl_get_cbv_binding(gen, cbv->register_space, cbv->register_index, &binding_idx))
{
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_BINDING_NOT_FOUND,
"No descriptor binding specified for constant buffer %u.", cbv->register_id);
return;
}
binding = &gen->interface_info->bindings[binding_idx].binding;
if (binding->set != 0)
{
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_BINDING_NOT_FOUND,
"Unsupported binding set %u specified for constant buffer %u.", binding->set, cbv->register_id);
return;
}
if (binding->count != 1)
{
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_BINDING_NOT_FOUND,
"Unsupported binding count %u specified for constant buffer %u.", binding->count, cbv->register_id);
return;
}
if (gen->offset_info && gen->offset_info->binding_offsets)
{
offset = &gen->offset_info->binding_offsets[binding_idx];
if (offset->static_offset || offset->dynamic_offset_index != ~0u)
{
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL,
"Internal compiler error: Unhandled descriptor offset specified for constant buffer %u.",
cbv->register_id);
return;
}
}
size = align(cbv->buffer_size, VKD3D_VEC4_SIZE * sizeof(uint32_t));
size /= VKD3D_VEC4_SIZE * sizeof(uint32_t);
vkd3d_string_buffer_printf(buffer,
"layout(std140, binding = %u) uniform block_%s_cb_%u { vec4 %s_cb_%u[%zu]; };\n",
binding->binding, prefix, cbv->register_id, prefix, cbv->register_id, size);
}
static void shader_glsl_generate_descriptor_declarations(struct vkd3d_glsl_generator *gen)
{
const struct vkd3d_shader_scan_descriptor_info1 *info = gen->descriptor_info;
const struct vkd3d_shader_descriptor_info1 *descriptor;
unsigned int i;
for (i = 0; i < info->descriptor_count; ++i)
{
descriptor = &info->descriptors[i];
switch (descriptor->type)
{
case VKD3D_SHADER_DESCRIPTOR_TYPE_CBV:
shader_glsl_generate_cbv_declaration(gen, descriptor);
break;
default:
vkd3d_string_buffer_printf(gen->buffer, "/* <unhandled descriptor type %#x> */\n", descriptor->type);
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL,
"Internal compiler error: Unhandled descriptor type %#x.", descriptor->type);
break;
}
}
if (info->descriptor_count)
vkd3d_string_buffer_printf(gen->buffer, "\n");
}
static void shader_glsl_generate_interface_block(struct vkd3d_string_buffer *buffer,
const char *type, unsigned int count)
{
@ -553,6 +721,7 @@ static void shader_glsl_generate_declarations(struct vkd3d_glsl_generator *gen)
const struct vsir_program *program = gen->program;
struct vkd3d_string_buffer *buffer = gen->buffer;
shader_glsl_generate_descriptor_declarations(gen);
shader_glsl_generate_input_declarations(gen);
shader_glsl_generate_output_declarations(gen);
@ -642,7 +811,9 @@ static void shader_glsl_init_limits(struct vkd3d_glsl_generator *gen, const stru
}
static void vkd3d_glsl_generator_init(struct vkd3d_glsl_generator *gen,
struct vsir_program *program, struct vkd3d_shader_message_context *message_context)
struct vsir_program *program, const struct vkd3d_shader_compile_info *compile_info,
const struct vkd3d_shader_scan_descriptor_info1 *descriptor_info,
struct vkd3d_shader_message_context *message_context)
{
enum vkd3d_shader_type type = program->shader_version.type;
@ -650,6 +821,7 @@ static void vkd3d_glsl_generator_init(struct vkd3d_glsl_generator *gen,
gen->program = program;
vkd3d_string_buffer_cache_init(&gen->string_buffers);
gen->buffer = vkd3d_string_buffer_get(&gen->string_buffers);
gen->location.source_name = compile_info->source_name;
gen->message_context = message_context;
if (!(gen->prefix = shader_glsl_get_prefix(type)))
{
@ -660,11 +832,16 @@ static void vkd3d_glsl_generator_init(struct vkd3d_glsl_generator *gen,
shader_glsl_init_limits(gen, &program->shader_version);
gen->interstage_input = type != VKD3D_SHADER_TYPE_VERTEX;
gen->interstage_output = type != VKD3D_SHADER_TYPE_PIXEL;
gen->interface_info = vkd3d_find_struct(compile_info->next, INTERFACE_INFO);
gen->offset_info = vkd3d_find_struct(compile_info->next, DESCRIPTOR_OFFSET_INFO);
gen->descriptor_info = descriptor_info;
}
int glsl_compile(struct vsir_program *program, uint64_t config_flags,
const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out,
struct vkd3d_shader_message_context *message_context)
const struct vkd3d_shader_scan_descriptor_info1 *descriptor_info,
const struct vkd3d_shader_compile_info *compile_info,
struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context)
{
struct vkd3d_glsl_generator generator;
int ret;
@ -672,7 +849,7 @@ int glsl_compile(struct vsir_program *program, uint64_t config_flags,
if ((ret = vsir_program_transform(program, config_flags, compile_info, message_context)) < 0)
return ret;
vkd3d_glsl_generator_init(&generator, program, message_context);
vkd3d_glsl_generator_init(&generator, program, compile_info, descriptor_info, message_context);
ret = vkd3d_glsl_generator_generate(&generator, out);
vkd3d_glsl_generator_cleanup(&generator);

View File

@ -1635,7 +1635,8 @@ int vsir_program_compile(struct vsir_program *program, uint64_t config_flags,
case VKD3D_SHADER_TARGET_GLSL:
if ((ret = vsir_program_scan(program, &scan_info, message_context, &scan_descriptor_info)) < 0)
return ret;
ret = glsl_compile(program, config_flags, compile_info, out, message_context);
ret = glsl_compile(program, config_flags, &scan_descriptor_info,
compile_info, out, message_context);
vkd3d_shader_free_scan_descriptor_info1(&scan_descriptor_info);
break;

View File

@ -168,6 +168,7 @@ enum vkd3d_shader_error
VKD3D_SHADER_WARNING_HLSL_IGNORED_DEFAULT_VALUE = 5306,
VKD3D_SHADER_ERROR_GLSL_INTERNAL = 6000,
VKD3D_SHADER_ERROR_GLSL_BINDING_NOT_FOUND = 6001,
VKD3D_SHADER_ERROR_D3DBC_UNEXPECTED_EOF = 7000,
VKD3D_SHADER_ERROR_D3DBC_INVALID_VERSION_TOKEN = 7001,
@ -1593,8 +1594,9 @@ int shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
struct vkd3d_shader_message_context *message_context, struct shader_signature *signature);
int glsl_compile(struct vsir_program *program, uint64_t config_flags,
const struct vkd3d_shader_compile_info *compile_info, struct vkd3d_shader_code *out,
struct vkd3d_shader_message_context *message_context);
const struct vkd3d_shader_scan_descriptor_info1 *descriptor_info,
const struct vkd3d_shader_compile_info *compile_info,
struct vkd3d_shader_code *out, struct vkd3d_shader_message_context *message_context);
#define SPIRV_MAX_SRC_COUNT 6

View File

@ -88,5 +88,5 @@ uniform 4 float 0.0
uniform 8 float 0.0
uniform 12 float 0.0
uniform 16 float 42.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (42, 42, 42, 42)

View File

@ -20,7 +20,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 123.0 -2.0 456 0.01
todo(glsl) draw quad
draw quad
probe (320,240) rgba (123.0, -2.0, 456.0, 0.01)
[pixel shader]

View File

@ -13,7 +13,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
[pixel shader fail(sm>=6)]
@ -61,7 +61,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
[pixel shader fail(sm>=6)]
@ -83,7 +83,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
[pixel shader]
@ -97,7 +97,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
[pixel shader fail]
@ -150,7 +150,7 @@ uniform 0 float4 0.0 1.0 2.0 3.0
uniform 4 float4 4.0 5.0 6.0 7.0
uniform 8 float4 8.0 9.0 10.0 11.0
uniform 12 float4 12.0 13.0 14.0 15.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.0, 2.0, 4.0, 8.0)
@ -171,7 +171,7 @@ float4 main() : sv_target
uniform 0 float4 0.0 1.0 2.0 3.0
uniform 4 float4 4.0 5.0 6.0 7.0
uniform 8 float4 8.0 9.0 10.0 11.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.0, 4.0, 8.0, 9.0)
@ -197,7 +197,7 @@ uniform 0 float4 0.0 1.0 2.0 3.0
uniform 4 float4 4.0 5.0 6.0 7.0
uniform 8 float4 8.0 9.0 10.0 11.0
uniform 12 float4 12.0 13.0 14.0 15.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.0, 4.0, 5.0, 6.0)
@ -299,7 +299,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (2.0, 3.0, 2.0, 3.0)
@ -435,7 +435,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (3.0, 4.0, 3.0, 4.0)
@ -775,7 +775,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
uniform 4 float4 0.0 0.0 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
[pixel shader fail(sm<6)]
@ -925,7 +925,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
[pixel shader fail todo]

View File

@ -17,7 +17,7 @@ if(sm<4) uniform 8 float4 10 20 0 0
if(sm>=4) uniform 0 float4 10 20 0 0
if(sm>=4) uniform 4 float4 10 30 50 70
if(sm>=4) uniform 8 float4 20 40 60 80
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (10, 20, 50, 60)
@ -57,7 +57,7 @@ float4 main() : sv_target { return b; }
[test]
uniform 0 float4 10.0 20.0 30.0 40.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (10, 20, 30, 40)
@ -134,7 +134,7 @@ if(sm<4) uniform 8 float4 10 20 0 0
if(sm>=4) uniform 0 float4 10 20 0 0
if(sm>=4) uniform 4 float4 10 30 50 70
if(sm>=4) uniform 8 float4 20 40 60 80
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (10, 20, 50, 60)
@ -170,7 +170,7 @@ float4 main() : sv_target { return b; }
[test]
uniform 0 float4 10 20 30 40
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (10, 20, 30, 40)

View File

@ -8,7 +8,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 9.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (9.0, 9.0, 9.0, 9.0)
[pixel shader]
@ -21,7 +21,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
[pixel shader]
@ -49,7 +49,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
uniform 4 float4 5.0 6.0 7.0 8.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
[pixel shader]

View File

@ -40,7 +40,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (3.0, 3.0, 3.0, 3.0)
@ -78,7 +78,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (4.0, 4.0, 4.0, 4.0)

View File

@ -19,5 +19,5 @@ float4 main() : sv_target
[test]
uniform 0 float 10.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (10.0, 10.0, 10.0, 10.0)

View File

@ -40,7 +40,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.1 0.2 0.0 0.0
uniform 4 float4 0.3 0.4 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4)
@ -61,7 +61,7 @@ uniform 0 float4 0.0 0.0 0.0 0.0
uniform 4 float4 0.0 0.0 0.0 0.0
uniform 8 float4 0.5 0.6 0.0 0.0
uniform 12 float4 0.7 0.8 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.5, 0.6, 0.7, 0.8)
@ -112,7 +112,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.1 0.2 0.0 0.0
uniform 4 float4 0.3 0.4 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4)
@ -150,7 +150,7 @@ uniform 0 float4 0.3 0.4 0.0 0.0
uniform 4 float4 0.0 0.0 0.0 0.0
uniform 8 float4 0.0 0.0 0.0 0.0
uniform 12 float4 0.5 0.6 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.3, 0.4, 0.5, 0.6)
@ -174,7 +174,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.1 0.2 0.0 0.0
uniform 4 float4 0.3 0.4 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4)
@ -202,7 +202,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.2 0.4 0.0 0.0
uniform 4 float4 0.3 0.5 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.2, 0.3, 0.4, 0.5)
@ -222,7 +222,7 @@ uniform 0 float4 0.3 0.0 0.0 0.0
uniform 4 float4 0.4 0.0 0.0 0.0
uniform 8 float4 0.0 0.5 0.0 0.0
uniform 12 float4 0.0 0.6 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.3, 0.4, 0.5, 0.6)
% Compiler options
@ -246,7 +246,7 @@ uniform 0 float4 0.1 0.5 0.9 1.3
uniform 4 float4 0.2 0.6 1.0 1.4
uniform 8 float4 0.3 0.7 1.1 1.5
uniform 12 float4 0.4 0.8 1.2 1.6
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.2, 0.3, 0.6, 0.7) 1
[require]
@ -268,7 +268,7 @@ uniform 0 float4 0.1 0.5 0.9 1.3
uniform 4 float4 0.2 0.6 1.0 1.4
uniform 8 float4 0.3 0.7 1.1 1.5
uniform 12 float4 0.4 0.8 1.2 1.6
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.2, 0.3, 0.6, 0.7) 1
[require]
@ -290,7 +290,7 @@ uniform 0 float4 0.1 0.5 0.9 1.3
uniform 4 float4 0.2 0.6 1.0 1.4
uniform 8 float4 0.3 0.7 1.1 1.5
uniform 12 float4 0.4 0.8 1.2 1.6
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.5, 0.9, 0.6, 1.0) 1
[require]
@ -318,7 +318,7 @@ uniform 16 float4 1.7 2.1 2.5 2.9
uniform 20 float4 1.8 2.2 2.6 3.0
uniform 24 float4 1.9 2.3 2.7 3.1
uniform 28 float4 2.0 2.4 2.8 3.2
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.3, 0.4, 2.5, 2.9) 1
[require]
@ -346,7 +346,7 @@ uniform 16 float4 1.7 2.1 2.5 2.9
uniform 20 float4 1.8 2.2 2.6 3.0
uniform 24 float4 1.9 2.3 2.7 3.1
uniform 28 float4 2.0 2.4 2.8 3.2
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.2, 1.6, 3.1, 3.2) 1
[require]
@ -366,5 +366,5 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.1 0.2 0.0 0.0
uniform 4 float4 0.3 0.4 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.1, 0.3, 0.2, 0.4) 1

View File

@ -11,7 +11,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.1 0.3 0.0 0.0
uniform 4 float4 0.2 0.4 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.1, 0.3, 0.2, 0.4)
[pixel shader fail(sm<6)]

View File

@ -11,7 +11,7 @@ uniform 0 float4 1.0 2.0 3.0 4.0
uniform 4 float4 5.0 6.0 7.0 8.0
uniform 8 float4 9.0 10.0 11.0 12.0
uniform 12 float4 13.0 14.0 15.0 16.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 10.0, 15.0)
[pixel shader]
@ -27,7 +27,7 @@ uniform 0 float4 1.0 2.0 3.0 4.0
uniform 4 float4 5.0 6.0 7.0 8.0
uniform 8 float4 9.0 10.0 11.0 12.0
uniform 12 float4 13.0 14.0 15.0 16.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 10.0, 15.0)
[pixel shader]
@ -43,7 +43,7 @@ uniform 0 float4 1.0 2.0 3.0 4.0
uniform 4 float4 5.0 6.0 7.0 8.0
uniform 8 float4 9.0 10.0 11.0 12.0
uniform 12 float4 13.0 14.0 15.0 16.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 5.0, 7.0, 12.0)
[pixel shader]
@ -58,7 +58,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 1.0 2.0 3.0 0.0
uniform 4 float4 5.0 6.0 7.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 3.0, 6.0, 7.0)
[pixel shader]

View File

@ -21,5 +21,5 @@ uniform 8 float4 0.3 0.0 0.0 0.0
uniform 12 float4 0.4 0.0 0.0 0.0
uniform 16 float4 0.5 0.0 0.0 0.0
uniform 20 float4 0.6 0.0 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.4, 0.1, 0.6, 0.3)

View File

@ -9,7 +9,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.1 0.2 0.3 0.4
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4)
[pixel shader fail(sm>=6)]
@ -23,7 +23,7 @@ precise main() : sv_target
[test]
uniform 0 float4 0.1 0.2 0.3 0.4
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4)
[pixel shader]
@ -37,5 +37,5 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.1 0.2 0.3 0.4
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.1, 0.2, 0.3, 0.4)

View File

@ -56,7 +56,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 0.1 0.2 0.3 0.4
uniform 4 float4 1.1 1.2 1.3 1.4
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.1, 1.4, 0.2, 0.3)
@ -75,7 +75,7 @@ uniform 4 float4 1.1 1.2 1.3 1.4
uniform 8 float4 2.1 2.2 2.3 2.4
uniform 12 float4 3.1 3.2 3.3 3.4
uniform 16 float4 4.1 4.2 4.3 4.4
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (4.1, 4.2, 1.3, 1.4)
@ -207,7 +207,7 @@ float4 main() : sv_target
[test]
uniform 0 float 100
uniform 4 float 101
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (100, 100, 100, 100)
@ -221,7 +221,7 @@ float4 main(uniform float a : register(c1)) : sv_target
[test]
uniform 0 float 100
uniform 4 float 101
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (100, 100, 100, 100)
[pixel shader todo]
@ -326,7 +326,7 @@ float4 main() : sv_target
[test]
uniform 0 float 1.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
[pixel shader]
@ -341,7 +341,7 @@ float4 main() : sv_target
[test]
uniform 0 float 1.0
uniform 4 float 2.0
todo(glsl) draw quad
draw quad
if(sm<6) probe (0, 0) rgba (2.0, 2.0, 2.0, 2.0)
if(sm>=6) probe (0, 0) rgba(1.0, 1.0, 1.0, 1.0)
@ -357,7 +357,7 @@ float4 main() : sv_target
[test]
uniform 0 float 0.0
uniform 4 float 1.0
todo(glsl) draw quad
draw quad
if(sm<6) probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
if(sm>=6) probe (0, 0) rgba (0.0, 0.0, 0.0, 0.0)
@ -373,7 +373,7 @@ float4 main() : sv_target
[test]
uniform 0 float 0.0
uniform 4 float 1.0
todo(glsl) draw quad
draw quad
if(sm<6) probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
if(sm>=6) probe (0, 0) rgba (0.0, 0.0, 0.0, 0.0)
@ -389,7 +389,7 @@ float4 main() : sv_target
[test]
uniform 0 float 0.0
uniform 4 float 1.0
todo(glsl) draw quad
draw quad
if(sm<6) probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
if(sm>=6) probe (0, 0) rgba (0.0, 0.0, 0.0, 0.0)
@ -404,7 +404,7 @@ float4 main() : sv_target
[test]
uniform 4 float 1.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 1.0, 1.0, 1.0)
% Weird FXC behavior.
@ -420,7 +420,7 @@ float4 main() : sv_target
[test]
uniform 0 float 1.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba(1.0, 1.0, 1.0, 1.0)
% Testing other reservation types. This is a parse failure, i.e "X3530: register sa not valid"
@ -460,7 +460,7 @@ float4 main() : sv_target
[test]
uniform 0 float 0.0
uniform 4 float 2.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba(2.0, 2.0, 2.0, 2.0)
[require]

View File

@ -18,5 +18,5 @@ float4 main() : sv_target
uniform 0 float4 0.1 0.2 0.0 0.0
uniform 4 float4 0.3 0.4 0.0 0.0
uniform 8 float4 0.5 0.6 0.0 0.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (0.2, 0.3, 0.6, 0.5)

View File

@ -9,7 +9,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 11 21 31 -1
uniform 4 float4 12 22 32 -1
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (21.0, 31.0, 11.0, 12.0)
@ -24,7 +24,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 11 21 31 -1
uniform 4 float4 12 22 32 -1
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (11.0, 31.0, 12.0, 32.0)
@ -40,7 +40,7 @@ float4 main() : sv_target
uniform 0 float4 11 12 -1 -1
uniform 4 float4 21 22 -1 -1
uniform 8 float4 31 32 -1 -1
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (11.0, 31.0, 12.0, 32.0)

View File

@ -149,7 +149,7 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 3.0, 4.0)
@ -166,5 +166,5 @@ float4 main() : sv_target
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 4.0, 2.0, 3.0)

View File

@ -18,7 +18,7 @@ float4 main(uniform float f, uniform int i, uniform uint u, uniform half h) : sv
[test]
uniform 0 float4 123.0 -2.0 456 0.01
todo(glsl) draw quad
draw quad
probe (320,240) rgba (123.0, -2.0, 456.0, 0.01)
[pixel shader]

View File

@ -10,7 +10,7 @@ float4 main() : sv_target
[test]
uniform 0 float 3.5
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (3.5, 3.5, 3.5, 3.5)
@ -24,5 +24,5 @@ float4 main() : sv_target
[test]
uniform 0 float4 4.0 5.0 6.0 7.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (4.0, 5.0, 4.0, 5.0)

View File

@ -23,7 +23,7 @@ float4 main() : SV_TARGET
[test]
uniform 0 float4 1.0 2.0 3.0 4.0
todo(glsl) draw quad
draw quad
probe (0, 0) rgba (1.0, 2.0, 2.0, 3.0)