mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d-shader/spirv: Support declared component type and count in indexable temps.
This commit is contained in:
parent
0c33f82f72
commit
69c3946c85
Notes:
Alexandre Julliard
2023-12-07 22:47:09 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/477
@ -5493,14 +5493,12 @@ static void spirv_compiler_emit_dcl_indexable_temp(struct spirv_compiler *compil
|
|||||||
{
|
{
|
||||||
const struct vkd3d_shader_indexable_temp *temp = &instruction->declaration.indexable_temp;
|
const struct vkd3d_shader_indexable_temp *temp = &instruction->declaration.indexable_temp;
|
||||||
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
|
struct vkd3d_spirv_builder *builder = &compiler->spirv_builder;
|
||||||
|
enum vkd3d_shader_component_type component_type;
|
||||||
struct vkd3d_shader_register reg;
|
struct vkd3d_shader_register reg;
|
||||||
struct vkd3d_symbol reg_symbol;
|
struct vkd3d_symbol reg_symbol;
|
||||||
size_t function_location;
|
size_t function_location;
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
|
|
||||||
if (temp->component_count != 4)
|
|
||||||
FIXME("Unhandled component count %u.\n", temp->component_count);
|
|
||||||
|
|
||||||
vsir_register_init(®, VKD3DSPR_IDXTEMP, VKD3D_DATA_FLOAT, 1);
|
vsir_register_init(®, VKD3DSPR_IDXTEMP, VKD3D_DATA_FLOAT, 1);
|
||||||
reg.idx[0].offset = temp->register_idx;
|
reg.idx[0].offset = temp->register_idx;
|
||||||
|
|
||||||
@ -5516,16 +5514,17 @@ static void spirv_compiler_emit_dcl_indexable_temp(struct spirv_compiler *compil
|
|||||||
function_location = spirv_compiler_get_current_function_location(compiler);
|
function_location = spirv_compiler_get_current_function_location(compiler);
|
||||||
vkd3d_spirv_begin_function_stream_insertion(builder, function_location);
|
vkd3d_spirv_begin_function_stream_insertion(builder, function_location);
|
||||||
|
|
||||||
|
component_type = vkd3d_component_type_from_data_type(temp->data_type);
|
||||||
id = spirv_compiler_emit_array_variable(compiler, &builder->function_stream,
|
id = spirv_compiler_emit_array_variable(compiler, &builder->function_stream,
|
||||||
SpvStorageClassFunction, VKD3D_SHADER_COMPONENT_FLOAT, VKD3D_VEC4_SIZE, &temp->register_size, 1);
|
SpvStorageClassFunction, component_type, temp->component_count, &temp->register_size, 1);
|
||||||
|
|
||||||
spirv_compiler_emit_register_debug_name(builder, id, ®);
|
spirv_compiler_emit_register_debug_name(builder, id, ®);
|
||||||
|
|
||||||
vkd3d_spirv_end_function_stream_insertion(builder);
|
vkd3d_spirv_end_function_stream_insertion(builder);
|
||||||
|
|
||||||
vkd3d_symbol_make_register(®_symbol, ®);
|
vkd3d_symbol_make_register(®_symbol, ®);
|
||||||
vkd3d_symbol_set_register_info(®_symbol, id,
|
vkd3d_symbol_set_register_info(®_symbol, id, SpvStorageClassFunction,
|
||||||
SpvStorageClassFunction, VKD3D_SHADER_COMPONENT_FLOAT, VKD3DSP_WRITEMASK_ALL);
|
component_type, vkd3d_write_mask_from_component_count(temp->component_count));
|
||||||
spirv_compiler_put_symbol(compiler, ®_symbol);
|
spirv_compiler_put_symbol(compiler, ®_symbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user