vkd3d-shader/dxil: Read immediate constant arrays.

This commit is contained in:
Conor McCarthy
2023-09-29 10:17:51 +10:00
committed by Alexandre Julliard
parent 57280673e5
commit df4e1b7393
Notes: Alexandre Julliard 2023-10-11 22:54:06 +02: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/400
6 changed files with 115 additions and 14 deletions

View File

@@ -5686,15 +5686,18 @@ static void spirv_compiler_emit_dcl_immediate_constant_buffer(struct spirv_compi
struct vkd3d_symbol reg_symbol;
unsigned int i;
if (!(elements = vkd3d_calloc(icb->vec4_count, sizeof(*elements))))
assert(icb->data_type == VKD3D_DATA_FLOAT);
assert(icb->component_count == VKD3D_VEC4_SIZE);
if (!(elements = vkd3d_calloc(icb->element_count, sizeof(*elements))))
return;
for (i = 0; i < icb->vec4_count; ++i)
for (i = 0; i < icb->element_count; ++i)
elements[i] = spirv_compiler_get_constant(compiler,
VKD3D_SHADER_COMPONENT_FLOAT, VKD3D_VEC4_SIZE, &icb->data[4 * i]);
type_id = vkd3d_spirv_get_type_id(builder, VKD3D_SHADER_COMPONENT_FLOAT, VKD3D_VEC4_SIZE);
length_id = spirv_compiler_get_constant_uint(compiler, icb->vec4_count);
length_id = spirv_compiler_get_constant_uint(compiler, icb->element_count);
type_id = vkd3d_spirv_get_op_type_array(builder, type_id, length_id);
const_id = vkd3d_spirv_build_op_constant_composite(builder, type_id, elements, icb->vec4_count);
const_id = vkd3d_spirv_build_op_constant_composite(builder, type_id, elements, icb->element_count);
ptr_type_id = vkd3d_spirv_get_op_type_pointer(builder, SpvStorageClassPrivate, type_id);
icb_id = vkd3d_spirv_build_op_variable(builder, &builder->global_stream,
ptr_type_id, SpvStorageClassPrivate, const_id);