vkd3d-shader/hlsl: Write SM4 dcl_thread_group instructions.

This commit is contained in:
Zebediah Figura
2021-08-16 17:49:09 -05:00
committed by Alexandre Julliard
parent 718c79b823
commit 3857ca06fa
Notes: Alexandre Julliard 2022-11-08 23:05:16 +01:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Francisco Casas (@fcasas)
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/43
5 changed files with 36 additions and 27 deletions

View File

@@ -2587,13 +2587,6 @@ int hlsl_compile_shader(const struct vkd3d_shader_code *hlsl, const struct vkd3d
return VKD3D_ERROR_INVALID_SHADER;
}
if (profile->type == VKD3D_SHADER_TYPE_COMPUTE)
{
const struct vkd3d_shader_location loc = {.source_name = compile_info->source_name};
hlsl_fixme(&ctx, &loc, "Compute shader thread count.\n");
}
ret = hlsl_emit_bytecode(&ctx, entry_func, compile_info->target_type, out);
hlsl_ctx_cleanup(&ctx);

View File

@@ -833,7 +833,7 @@ struct sm4_instruction
} srcs[4];
unsigned int src_count;
uint32_t idx[2];
uint32_t idx[3];
unsigned int idx_count;
};
@@ -1278,6 +1278,19 @@ static void write_sm4_dcl_temps(struct vkd3d_bytecode_buffer *buffer, uint32_t t
write_sm4_instruction(buffer, &instr);
}
static void write_sm4_dcl_thread_group(struct vkd3d_bytecode_buffer *buffer, const uint32_t thread_count[3])
{
struct sm4_instruction instr =
{
.opcode = VKD3D_SM5_OP_DCL_THREAD_GROUP,
.idx = {thread_count[0], thread_count[1], thread_count[2]},
.idx_count = 3,
};
write_sm4_instruction(buffer, &instr);
}
static void write_sm4_ret(struct vkd3d_bytecode_buffer *buffer)
{
struct sm4_instruction instr =
@@ -2370,6 +2383,9 @@ static void write_sm4_shdr(struct hlsl_ctx *ctx,
write_sm4_dcl_semantic(ctx, &buffer, var);
}
if (profile->type == VKD3D_SHADER_TYPE_COMPUTE)
write_sm4_dcl_thread_group(&buffer, ctx->thread_count);
if (ctx->temp_count)
write_sm4_dcl_temps(&buffer, ctx->temp_count);