mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
libs/vkd3d-shader: Make SPIR-V builder responsible for emitting parameterless types once.
This commit is contained in:
parent
acb683690b
commit
3dc307bfb8
@ -136,6 +136,8 @@ struct vkd3d_spirv_builder
|
|||||||
uint32_t main_function_id;
|
uint32_t main_function_id;
|
||||||
uint32_t type_id[VKD3D_TYPE_COUNT][VKD3D_VEC4_SIZE];
|
uint32_t type_id[VKD3D_TYPE_COUNT][VKD3D_VEC4_SIZE];
|
||||||
uint32_t type_sampler_id;
|
uint32_t type_sampler_id;
|
||||||
|
uint32_t type_bool_id;
|
||||||
|
uint32_t type_void_id;
|
||||||
|
|
||||||
struct vkd3d_spirv_stream debug_stream; /* debug instructions */
|
struct vkd3d_spirv_stream debug_stream; /* debug instructions */
|
||||||
struct vkd3d_spirv_stream annotation_stream; /* decoration instructions */
|
struct vkd3d_spirv_stream annotation_stream; /* decoration instructions */
|
||||||
@ -526,11 +528,21 @@ static uint32_t vkd3d_spirv_build_op_type_void(struct vkd3d_spirv_builder *build
|
|||||||
return vkd3d_spirv_build_op_r(builder, &builder->global_stream, SpvOpTypeVoid);
|
return vkd3d_spirv_build_op_r(builder, &builder->global_stream, SpvOpTypeVoid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint32_t vkd3d_spirv_get_op_type_void(struct vkd3d_spirv_builder *builder)
|
||||||
|
{
|
||||||
|
return vkd3d_spirv_build_once(builder, &builder->type_void_id, vkd3d_spirv_build_op_type_void);
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t vkd3d_spirv_build_op_type_bool(struct vkd3d_spirv_builder *builder)
|
static uint32_t vkd3d_spirv_build_op_type_bool(struct vkd3d_spirv_builder *builder)
|
||||||
{
|
{
|
||||||
return vkd3d_spirv_build_op_r(builder, &builder->global_stream, SpvOpTypeBool);
|
return vkd3d_spirv_build_op_r(builder, &builder->global_stream, SpvOpTypeBool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint32_t vkd3d_spirv_get_op_type_bool(struct vkd3d_spirv_builder *builder)
|
||||||
|
{
|
||||||
|
return vkd3d_spirv_build_once(builder, &builder->type_bool_id, vkd3d_spirv_build_op_type_bool);
|
||||||
|
}
|
||||||
|
|
||||||
static uint32_t vkd3d_spirv_build_op_type_float(struct vkd3d_spirv_builder *builder,
|
static uint32_t vkd3d_spirv_build_op_type_float(struct vkd3d_spirv_builder *builder,
|
||||||
uint32_t width)
|
uint32_t width)
|
||||||
{
|
{
|
||||||
@ -858,7 +870,7 @@ static uint32_t vkd3d_spirv_get_type_id(struct vkd3d_spirv_builder *builder,
|
|||||||
switch (component_type)
|
switch (component_type)
|
||||||
{
|
{
|
||||||
case VKD3D_TYPE_VOID:
|
case VKD3D_TYPE_VOID:
|
||||||
id = vkd3d_spirv_build_op_type_void(builder);
|
id = vkd3d_spirv_get_op_type_void(builder);
|
||||||
break;
|
break;
|
||||||
case VKD3D_TYPE_FLOAT:
|
case VKD3D_TYPE_FLOAT:
|
||||||
id = vkd3d_spirv_build_op_type_float(builder, 32);
|
id = vkd3d_spirv_build_op_type_float(builder, 32);
|
||||||
@ -868,7 +880,7 @@ static uint32_t vkd3d_spirv_get_type_id(struct vkd3d_spirv_builder *builder,
|
|||||||
id = vkd3d_spirv_build_op_type_int(builder, 32, component_type == VKD3D_TYPE_INT);
|
id = vkd3d_spirv_build_op_type_int(builder, 32, component_type == VKD3D_TYPE_INT);
|
||||||
break;
|
break;
|
||||||
case VKD3D_TYPE_BOOL:
|
case VKD3D_TYPE_BOOL:
|
||||||
id = vkd3d_spirv_build_op_type_bool(builder);
|
id = vkd3d_spirv_get_op_type_bool(builder);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("Unhandled component type %#x.\n", component_type);
|
FIXME("Unhandled component type %#x.\n", component_type);
|
||||||
@ -899,7 +911,7 @@ static void vkd3d_spirv_builder_init(struct vkd3d_spirv_builder *builder)
|
|||||||
|
|
||||||
builder->current_id = 1;
|
builder->current_id = 1;
|
||||||
|
|
||||||
void_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_VOID, 1);
|
void_id = vkd3d_spirv_get_op_type_void(builder);
|
||||||
function_type_id = vkd3d_spirv_build_op_type_function(builder, void_id, NULL, 0);
|
function_type_id = vkd3d_spirv_build_op_type_function(builder, void_id, NULL, 0);
|
||||||
|
|
||||||
builder->main_function_id = vkd3d_spirv_build_op_function(builder, void_id,
|
builder->main_function_id = vkd3d_spirv_build_op_function(builder, void_id,
|
||||||
@ -2724,7 +2736,7 @@ static void vkd3d_dxbc_compiler_emit_return(struct vkd3d_dxbc_compiler *compiler
|
|||||||
|
|
||||||
if ((function_id = compiler->output_setup_function_id))
|
if ((function_id = compiler->output_setup_function_id))
|
||||||
{
|
{
|
||||||
void_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_VOID, 1);
|
void_id = vkd3d_spirv_get_op_type_void(builder);
|
||||||
for (i = 0, count = 0; i < ARRAY_SIZE(compiler->private_output_variable); ++i)
|
for (i = 0, count = 0; i < ARRAY_SIZE(compiler->private_output_variable); ++i)
|
||||||
{
|
{
|
||||||
if (compiler->private_output_variable[i])
|
if (compiler->private_output_variable[i])
|
||||||
@ -3005,7 +3017,7 @@ static void vkd3d_dxbc_compiler_emit_output_setup_function(struct vkd3d_dxbc_com
|
|||||||
|
|
||||||
function_id = compiler->output_setup_function_id;
|
function_id = compiler->output_setup_function_id;
|
||||||
|
|
||||||
void_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_VOID, 1);
|
void_id = vkd3d_spirv_get_op_type_void(builder);
|
||||||
type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_FLOAT, 4);
|
type_id = vkd3d_spirv_get_type_id(builder, VKD3D_TYPE_FLOAT, 4);
|
||||||
ptr_type_id = vkd3d_dxbc_compiler_get_pointer_type(compiler, type_id, SpvStorageClassPrivate);
|
ptr_type_id = vkd3d_dxbc_compiler_get_pointer_type(compiler, type_id, SpvStorageClassPrivate);
|
||||||
for (i = 0, count = 0; i < ARRAY_SIZE(compiler->private_output_variable); ++i)
|
for (i = 0, count = 0; i < ARRAY_SIZE(compiler->private_output_variable); ++i)
|
||||||
|
Loading…
Reference in New Issue
Block a user