mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
vkd3d-shader/d3d-asm: Refactor dumping a write mask to a dedicated function.
This commit is contained in:
parent
9d99389663
commit
01a687a7fc
Notes:
Alexandre Julliard
2024-03-07 23:21:49 +01:00
Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/553
@ -1383,31 +1383,39 @@ static void shader_dump_reg_type(struct vkd3d_d3d_asm_compiler *compiler,
|
||||
shader_addline(buffer, ">");
|
||||
}
|
||||
|
||||
static void shader_print_write_mask(struct vkd3d_d3d_asm_compiler *compiler,
|
||||
const char *prefix, uint32_t mask, const char *suffix)
|
||||
{
|
||||
unsigned int i = 0;
|
||||
char buffer[5];
|
||||
|
||||
if (mask & VKD3DSP_WRITEMASK_0)
|
||||
buffer[i++] = 'x';
|
||||
if (mask & VKD3DSP_WRITEMASK_1)
|
||||
buffer[i++] = 'y';
|
||||
if (mask & VKD3DSP_WRITEMASK_2)
|
||||
buffer[i++] = 'z';
|
||||
if (mask & VKD3DSP_WRITEMASK_3)
|
||||
buffer[i++] = 'w';
|
||||
buffer[i++] = '\0';
|
||||
|
||||
vkd3d_string_buffer_printf(&compiler->buffer, "%s.%s%s%s%s", prefix,
|
||||
compiler->colours.write_mask, buffer, compiler->colours.reset, suffix);
|
||||
}
|
||||
|
||||
static void shader_dump_dst_param(struct vkd3d_d3d_asm_compiler *compiler,
|
||||
const struct vkd3d_shader_dst_param *param, bool is_declaration)
|
||||
{
|
||||
struct vkd3d_string_buffer *buffer = &compiler->buffer;
|
||||
uint32_t write_mask = param->write_mask;
|
||||
|
||||
shader_dump_register(compiler, ¶m->reg, is_declaration);
|
||||
|
||||
if (write_mask && param->reg.dimension == VSIR_DIMENSION_VEC4)
|
||||
{
|
||||
static const char write_mask_chars[] = "xyzw";
|
||||
|
||||
if (data_type_is_64_bit(param->reg.data_type))
|
||||
write_mask = vsir_write_mask_32_from_64(write_mask);
|
||||
|
||||
shader_addline(buffer, ".%s", compiler->colours.write_mask);
|
||||
if (write_mask & VKD3DSP_WRITEMASK_0)
|
||||
shader_addline(buffer, "%c", write_mask_chars[0]);
|
||||
if (write_mask & VKD3DSP_WRITEMASK_1)
|
||||
shader_addline(buffer, "%c", write_mask_chars[1]);
|
||||
if (write_mask & VKD3DSP_WRITEMASK_2)
|
||||
shader_addline(buffer, "%c", write_mask_chars[2]);
|
||||
if (write_mask & VKD3DSP_WRITEMASK_3)
|
||||
shader_addline(buffer, "%c", write_mask_chars[3]);
|
||||
shader_addline(buffer, "%s", compiler->colours.reset);
|
||||
shader_print_write_mask(compiler, "", write_mask, "");
|
||||
}
|
||||
|
||||
shader_print_precision(compiler, ¶m->reg);
|
||||
|
Loading…
x
Reference in New Issue
Block a user