mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/tpf: Get rid of the output map.
Map output registers in the backend instead, as needed.
This commit is contained in:
parent
31ce7c3a38
commit
98d158d004
Notes:
Alexandre Julliard
2023-10-09 23:09:10 +02:00
Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/392
@ -880,9 +880,7 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const
|
||||
break;
|
||||
|
||||
case VKD3DSPR_COLOROUT:
|
||||
shader_addline(buffer, "o");
|
||||
if (!shader_ver_ge(&compiler->shader_version, 4, 0))
|
||||
shader_addline(buffer, "C");
|
||||
shader_addline(buffer, "oC");
|
||||
break;
|
||||
|
||||
case VKD3DSPR_DEPTHOUT:
|
||||
|
@ -3003,9 +3003,11 @@ static bool spirv_compiler_get_register_name(char *buffer, unsigned int buffer_s
|
||||
snprintf(buffer, buffer_size, "vicp%u", idx);
|
||||
break;
|
||||
case VKD3DSPR_OUTPUT:
|
||||
case VKD3DSPR_COLOROUT:
|
||||
snprintf(buffer, buffer_size, "o%u", idx);
|
||||
break;
|
||||
case VKD3DSPR_COLOROUT:
|
||||
snprintf(buffer, buffer_size, "oC%u", idx);
|
||||
break;
|
||||
case VKD3DSPR_DEPTHOUT:
|
||||
case VKD3DSPR_DEPTHOUTGE:
|
||||
case VKD3DSPR_DEPTHOUTLE:
|
||||
@ -5061,6 +5063,9 @@ static void spirv_compiler_emit_output(struct spirv_compiler *compiler,
|
||||
|
||||
if (is_patch_constant)
|
||||
location += shader_signature_next_location(&compiler->output_signature);
|
||||
else if (compiler->shader_type == VKD3D_SHADER_TYPE_PIXEL
|
||||
&& signature_element->sysval_semantic == VKD3D_SHADER_SV_TARGET)
|
||||
location = signature_element->semantic_index;
|
||||
|
||||
id = spirv_compiler_emit_array_variable(compiler, &builder->global_stream,
|
||||
storage_class, component_type, output_component_count, array_sizes, 2);
|
||||
|
@ -618,8 +618,6 @@ struct vkd3d_shader_sm4_parser
|
||||
{
|
||||
const uint32_t *start, *end, *ptr;
|
||||
|
||||
unsigned int output_map[MAX_REG_OUTPUT];
|
||||
|
||||
enum vkd3d_shader_opcode phase;
|
||||
bool has_control_point_phase;
|
||||
unsigned int input_register_masks[MAX_REG_OUTPUT];
|
||||
@ -1656,31 +1654,6 @@ static enum vkd3d_sm4_swizzle_type vkd3d_sm4_get_default_swizzle_type(
|
||||
return register_type_info->default_src_swizzle_type;
|
||||
}
|
||||
|
||||
static void map_register(const struct vkd3d_shader_sm4_parser *sm4, struct vkd3d_shader_register *reg)
|
||||
{
|
||||
switch (sm4->p.shader_version.type)
|
||||
{
|
||||
case VKD3D_SHADER_TYPE_PIXEL:
|
||||
if (reg->type == VKD3DSPR_OUTPUT)
|
||||
{
|
||||
unsigned int reg_idx = reg->idx[0].offset;
|
||||
|
||||
if (reg_idx >= ARRAY_SIZE(sm4->output_map))
|
||||
{
|
||||
/* Validated later */
|
||||
break;
|
||||
}
|
||||
|
||||
reg->type = VKD3DSPR_COLOROUT;
|
||||
reg->idx[0].offset = sm4->output_map[reg_idx];
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static enum vkd3d_data_type map_data_type(char t)
|
||||
{
|
||||
switch (t)
|
||||
@ -1944,8 +1917,6 @@ static bool shader_sm4_read_param(struct vkd3d_shader_sm4_parser *priv, const ui
|
||||
++param->idx_count;
|
||||
}
|
||||
|
||||
map_register(priv, param);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2476,7 +2447,6 @@ static bool shader_sm4_init(struct vkd3d_shader_sm4_parser *sm4, const uint32_t
|
||||
{
|
||||
struct vkd3d_shader_version version;
|
||||
uint32_t version_token, token_count;
|
||||
unsigned int i;
|
||||
|
||||
if (byte_code_size / sizeof(*byte_code) < 2)
|
||||
{
|
||||
@ -2536,23 +2506,6 @@ static bool shader_sm4_init(struct vkd3d_shader_sm4_parser *sm4, const uint32_t
|
||||
return false;
|
||||
sm4->ptr = sm4->start;
|
||||
|
||||
memset(sm4->output_map, 0xff, sizeof(sm4->output_map));
|
||||
for (i = 0; i < output_signature->element_count; ++i)
|
||||
{
|
||||
struct signature_element *e = &output_signature->elements[i];
|
||||
|
||||
if (version.type == VKD3D_SHADER_TYPE_PIXEL
|
||||
&& ascii_strcasecmp(e->semantic_name, "SV_Target"))
|
||||
continue;
|
||||
if (e->register_index >= ARRAY_SIZE(sm4->output_map))
|
||||
{
|
||||
WARN("Invalid output index %u.\n", e->register_index);
|
||||
continue;
|
||||
}
|
||||
|
||||
sm4->output_map[e->register_index] = e->semantic_index;
|
||||
}
|
||||
|
||||
init_sm4_lookup_tables(&sm4->lookup);
|
||||
|
||||
return true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user