Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- libs/vkd3d-shader/dxbc.c | 48 ++++++++++------------------------------ 1 file changed, 12 insertions(+), 36 deletions(-)
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c index 5bd91d68..08eb50f3 100644 --- a/libs/vkd3d-shader/dxbc.c +++ b/libs/vkd3d-shader/dxbc.c @@ -2963,43 +2963,23 @@ static size_t get_chunk_offset(struct root_signature_writer_context *context) return bytecode_get_size(&context->buffer) - context->chunk_position; }
-static int shader_write_root_signature_header(struct root_signature_writer_context *context) +static void shader_write_root_signature_header(struct root_signature_writer_context *context) { struct vkd3d_bytecode_buffer *buffer = &context->buffer; + unsigned int i;
- if (!write_dword(context, TAG_DXBC)) - goto fail; + put_u32(buffer, TAG_DXBC);
/* The checksum is computed when all data is generated. */ - if (!write_dwords(context, 4, 0x00000000)) - goto fail; - - if (!write_dword(context, 0x00000001)) - goto fail; - - context->total_size_position = bytecode_get_size(buffer); - if (!write_dword(context, 0xffffffff)) /* total size */ - goto fail; - - if (!write_dword(context, 1)) /* chunk count */ - goto fail; - - /* chunk offset */ - if (!write_dword(context, bytecode_get_size(buffer) + sizeof(uint32_t))) - goto fail; - - if (!write_dword(context, TAG_RTS0)) - goto fail; - if (!write_dword(context, 0xffffffff)) /* chunk size */ - goto fail; + for (i = 0; i < 4; ++i) + put_u32(buffer, 0); + put_u32(buffer, 1); + context->total_size_position = put_u32(buffer, 0xffffffff); + put_u32(buffer, 1); /* chunk count */ + put_u32(buffer, bytecode_get_size(buffer) + sizeof(uint32_t)); /* chunk offset */ + put_u32(buffer, TAG_RTS0); + put_u32(buffer, 0xffffffff); context->chunk_position = bytecode_get_size(buffer); - - return VKD3D_OK; - -fail: - vkd3d_shader_error(&context->message_context, NULL, VKD3D_SHADER_ERROR_RS_OUT_OF_MEMORY, - "Out of memory while writing root signature header."); - return VKD3D_ERROR_OUT_OF_MEMORY; }
static int shader_write_descriptor_ranges(struct root_signature_writer_context *context, @@ -3426,11 +3406,7 @@ int vkd3d_shader_serialize_root_signature(const struct vkd3d_shader_versioned_ro goto done;
memset(dxbc, 0, sizeof(*dxbc)); - if ((ret = shader_write_root_signature_header(&context)) < 0) - { - vkd3d_free(context.buffer.data); - goto done; - } + shader_write_root_signature_header(&context);
if ((ret = shader_write_root_signature(&context, root_signature)) < 0) {
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- libs/vkd3d-shader/dxbc.c | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-)
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c index 08eb50f3..5795cc8a 100644 --- a/libs/vkd3d-shader/dxbc.c +++ b/libs/vkd3d-shader/dxbc.c @@ -2982,7 +2982,7 @@ static void shader_write_root_signature_header(struct root_signature_writer_cont context->chunk_position = bytecode_get_size(buffer); }
-static int shader_write_descriptor_ranges(struct root_signature_writer_context *context, +static void shader_write_descriptor_ranges(struct vkd3d_bytecode_buffer *buffer, const struct vkd3d_shader_root_descriptor_table *table) { const struct vkd3d_shader_descriptor_range *ranges = table->descriptor_ranges; @@ -2990,24 +2990,12 @@ static int shader_write_descriptor_ranges(struct root_signature_writer_context *
for (i = 0; i < table->descriptor_range_count; ++i) { - if (!write_dword(context, ranges[i].range_type)) - goto fail; - if (!write_dword(context, ranges[i].descriptor_count)) - goto fail; - if (!write_dword(context, ranges[i].base_shader_register)) - goto fail; - if (!write_dword(context, ranges[i].register_space)) - goto fail; - if (!write_dword(context, ranges[i].descriptor_table_offset)) - goto fail; + put_u32(buffer, ranges[i].range_type); + put_u32(buffer, ranges[i].descriptor_count); + put_u32(buffer, ranges[i].base_shader_register); + put_u32(buffer, ranges[i].register_space); + put_u32(buffer, ranges[i].descriptor_table_offset); } - - return VKD3D_OK; - -fail: - vkd3d_shader_error(&context->message_context, NULL, VKD3D_SHADER_ERROR_RS_OUT_OF_MEMORY, - "Out of memory while writing root signature descriptor ranges."); - return VKD3D_ERROR_OUT_OF_MEMORY; }
static int shader_write_descriptor_ranges1(struct root_signature_writer_context *context, @@ -3043,12 +3031,15 @@ fail: static int shader_write_descriptor_table(struct root_signature_writer_context *context, const struct vkd3d_shader_root_descriptor_table *table) { + struct vkd3d_bytecode_buffer *buffer = &context->buffer; + if (!write_dword(context, table->descriptor_range_count)) goto fail; if (!write_dword(context, get_chunk_offset(context) + sizeof(DWORD))) /* offset */ goto fail;
- return shader_write_descriptor_ranges(context, table); + shader_write_descriptor_ranges(buffer, table); + return VKD3D_OK;
fail: vkd3d_shader_error(&context->message_context, NULL, VKD3D_SHADER_ERROR_RS_OUT_OF_MEMORY,
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- libs/vkd3d-shader/dxbc.c | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-)
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c index 5795cc8a..071b7eac 100644 --- a/libs/vkd3d-shader/dxbc.c +++ b/libs/vkd3d-shader/dxbc.c @@ -2998,7 +2998,7 @@ static void shader_write_descriptor_ranges(struct vkd3d_bytecode_buffer *buffer, } }
-static int shader_write_descriptor_ranges1(struct root_signature_writer_context *context, +static void shader_write_descriptor_ranges1(struct vkd3d_bytecode_buffer *buffer, const struct vkd3d_shader_root_descriptor_table1 *table) { const struct vkd3d_shader_descriptor_range1 *ranges = table->descriptor_ranges; @@ -3006,26 +3006,13 @@ static int shader_write_descriptor_ranges1(struct root_signature_writer_context
for (i = 0; i < table->descriptor_range_count; ++i) { - if (!write_dword(context, ranges[i].range_type)) - goto fail; - if (!write_dword(context, ranges[i].descriptor_count)) - goto fail; - if (!write_dword(context, ranges[i].base_shader_register)) - goto fail; - if (!write_dword(context, ranges[i].register_space)) - goto fail; - if (!write_dword(context, ranges[i].flags)) - goto fail; - if (!write_dword(context, ranges[i].descriptor_table_offset)) - goto fail; + put_u32(buffer, ranges[i].range_type); + put_u32(buffer, ranges[i].descriptor_count); + put_u32(buffer, ranges[i].base_shader_register); + put_u32(buffer, ranges[i].register_space); + put_u32(buffer, ranges[i].flags); + put_u32(buffer, ranges[i].descriptor_table_offset); } - - return VKD3D_OK; - -fail: - vkd3d_shader_error(&context->message_context, NULL, VKD3D_SHADER_ERROR_RS_OUT_OF_MEMORY, - "Out of memory while writing root signature descriptor ranges."); - return VKD3D_ERROR_OUT_OF_MEMORY; }
static int shader_write_descriptor_table(struct root_signature_writer_context *context, @@ -3050,12 +3037,15 @@ fail: static int shader_write_descriptor_table1(struct root_signature_writer_context *context, const struct vkd3d_shader_root_descriptor_table1 *table) { + struct vkd3d_bytecode_buffer *buffer = &context->buffer; + if (!write_dword(context, table->descriptor_range_count)) goto fail; if (!write_dword(context, get_chunk_offset(context) + sizeof(DWORD))) /* offset */ goto fail;
- return shader_write_descriptor_ranges1(context, table); + shader_write_descriptor_ranges1(buffer, table); + return VKD3D_OK;
fail: vkd3d_shader_error(&context->message_context, NULL, VKD3D_SHADER_ERROR_RS_OUT_OF_MEMORY,
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- libs/vkd3d-shader/dxbc.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c index 071b7eac..21b43697 100644 --- a/libs/vkd3d-shader/dxbc.c +++ b/libs/vkd3d-shader/dxbc.c @@ -3015,23 +3015,15 @@ static void shader_write_descriptor_ranges1(struct vkd3d_bytecode_buffer *buffer } }
-static int shader_write_descriptor_table(struct root_signature_writer_context *context, +static void shader_write_descriptor_table(struct root_signature_writer_context *context, const struct vkd3d_shader_root_descriptor_table *table) { struct vkd3d_bytecode_buffer *buffer = &context->buffer;
- if (!write_dword(context, table->descriptor_range_count)) - goto fail; - if (!write_dword(context, get_chunk_offset(context) + sizeof(DWORD))) /* offset */ - goto fail; + put_u32(buffer, table->descriptor_range_count); + put_u32(buffer, get_chunk_offset(context) + sizeof(uint32_t)); /* offset */
shader_write_descriptor_ranges(buffer, table); - return VKD3D_OK; - -fail: - vkd3d_shader_error(&context->message_context, NULL, VKD3D_SHADER_ERROR_RS_OUT_OF_MEMORY, - "Out of memory while writing root signature root descriptor table."); - return VKD3D_ERROR_OUT_OF_MEMORY; }
static int shader_write_descriptor_table1(struct root_signature_writer_context *context, @@ -3127,13 +3119,15 @@ static int shader_write_root_parameters(struct root_signature_writer_context *co
for (i = 0; i < parameter_count; ++i) { + ret = VKD3D_OK; + set_u32(buffer, parameters_position + ((3 * i + 2) * sizeof(uint32_t)), get_chunk_offset(context));
switch (versioned_root_signature_get_parameter_type(desc, i)) { case VKD3D_SHADER_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: if (desc->version == VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0) - ret = shader_write_descriptor_table(context, &desc->u.v_1_0.parameters[i].u.descriptor_table); + shader_write_descriptor_table(context, &desc->u.v_1_0.parameters[i].u.descriptor_table); else ret = shader_write_descriptor_table1(context, &desc->u.v_1_1.parameters[i].u.descriptor_table); break;
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Zebediah Figura zfigura@codeweavers.com --- libs/vkd3d-shader/dxbc.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/libs/vkd3d-shader/dxbc.c b/libs/vkd3d-shader/dxbc.c index 21b43697..e45b3901 100644 --- a/libs/vkd3d-shader/dxbc.c +++ b/libs/vkd3d-shader/dxbc.c @@ -3026,23 +3026,15 @@ static void shader_write_descriptor_table(struct root_signature_writer_context * shader_write_descriptor_ranges(buffer, table); }
-static int shader_write_descriptor_table1(struct root_signature_writer_context *context, +static void shader_write_descriptor_table1(struct root_signature_writer_context *context, const struct vkd3d_shader_root_descriptor_table1 *table) { struct vkd3d_bytecode_buffer *buffer = &context->buffer;
- if (!write_dword(context, table->descriptor_range_count)) - goto fail; - if (!write_dword(context, get_chunk_offset(context) + sizeof(DWORD))) /* offset */ - goto fail; + put_u32(buffer, table->descriptor_range_count); + put_u32(buffer, get_chunk_offset(context) + sizeof(uint32_t)); /* offset */
shader_write_descriptor_ranges1(buffer, table); - return VKD3D_OK; - -fail: - vkd3d_shader_error(&context->message_context, NULL, VKD3D_SHADER_ERROR_RS_OUT_OF_MEMORY, - "Out of memory while writing root signature root descriptor table."); - return VKD3D_ERROR_OUT_OF_MEMORY; }
static int shader_write_root_constants(struct root_signature_writer_context *context, @@ -3129,7 +3121,7 @@ static int shader_write_root_parameters(struct root_signature_writer_context *co if (desc->version == VKD3D_SHADER_ROOT_SIGNATURE_VERSION_1_0) shader_write_descriptor_table(context, &desc->u.v_1_0.parameters[i].u.descriptor_table); else - ret = shader_write_descriptor_table1(context, &desc->u.v_1_1.parameters[i].u.descriptor_table); + shader_write_descriptor_table1(context, &desc->u.v_1_1.parameters[i].u.descriptor_table); break; case VKD3D_SHADER_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: ret = shader_write_root_constants(context, versioned_root_signature_get_root_constants(desc, i));
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com