mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/fx: Move state decomposition to the fx_4_0-specific writing path.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
committed by
Henri Verbeet
parent
9f9cf59b6e
commit
43a29044d6
Notes:
Henri Verbeet
2025-06-23 20:19:30 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1585
@@ -502,6 +502,8 @@ static uint32_t write_fx_4_string(const char *string, struct fx_write_context *f
|
|||||||
return string_entry->offset;
|
return string_entry->offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void fx_4_decompose_state_blocks(struct hlsl_ir_var *var, struct fx_write_context *fx);
|
||||||
|
|
||||||
static void write_fx_4_pass(struct hlsl_ir_var *var, struct fx_write_context *fx)
|
static void write_fx_4_pass(struct hlsl_ir_var *var, struct fx_write_context *fx)
|
||||||
{
|
{
|
||||||
struct vkd3d_bytecode_buffer *buffer = &fx->structured;
|
struct vkd3d_bytecode_buffer *buffer = &fx->structured;
|
||||||
@@ -511,6 +513,8 @@ static void write_fx_4_pass(struct hlsl_ir_var *var, struct fx_write_context *fx
|
|||||||
put_u32(buffer, name_offset);
|
put_u32(buffer, name_offset);
|
||||||
count_offset = put_u32(buffer, 0);
|
count_offset = put_u32(buffer, 0);
|
||||||
|
|
||||||
|
fx_4_decompose_state_blocks(var, fx);
|
||||||
|
|
||||||
write_fx_4_annotations(var->annotations, fx);
|
write_fx_4_annotations(var->annotations, fx);
|
||||||
write_fx_4_state_block(var, 0, count_offset, fx);
|
write_fx_4_state_block(var, 0, count_offset, fx);
|
||||||
}
|
}
|
||||||
@@ -3082,6 +3086,25 @@ static unsigned int decompose_fx_4_state_block(struct hlsl_ir_var *var, struct h
|
|||||||
return decompose_fx_4_state_block_expand_array(var, block, entry_index, fx);
|
return decompose_fx_4_state_block_expand_array(var, block, entry_index, fx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void fx_4_decompose_state_blocks(struct hlsl_ir_var *var, struct fx_write_context *fx)
|
||||||
|
{
|
||||||
|
unsigned int block_count = hlsl_get_multiarray_size(var->data_type);
|
||||||
|
struct hlsl_state_block *block;
|
||||||
|
|
||||||
|
if (!var->state_blocks)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < block_count; ++i)
|
||||||
|
{
|
||||||
|
block = var->state_blocks[i];
|
||||||
|
|
||||||
|
for (unsigned int j = 0; j < block->count;)
|
||||||
|
{
|
||||||
|
j += decompose_fx_4_state_block(var, block, j, fx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void write_fx_4_state_block(struct hlsl_ir_var *var, unsigned int block_index,
|
static void write_fx_4_state_block(struct hlsl_ir_var *var, unsigned int block_index,
|
||||||
uint32_t count_offset, struct fx_write_context *fx)
|
uint32_t count_offset, struct fx_write_context *fx)
|
||||||
{
|
{
|
||||||
@@ -3093,11 +3116,6 @@ static void write_fx_4_state_block(struct hlsl_ir_var *var, unsigned int block_i
|
|||||||
{
|
{
|
||||||
block = var->state_blocks[block_index];
|
block = var->state_blocks[block_index];
|
||||||
|
|
||||||
for (i = 0; i < block->count;)
|
|
||||||
{
|
|
||||||
i += decompose_fx_4_state_block(var, block, i, fx);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < block->count; ++i)
|
for (i = 0; i < block->count; ++i)
|
||||||
{
|
{
|
||||||
struct hlsl_state_block_entry *entry = block->entries[i];
|
struct hlsl_state_block_entry *entry = block->entries[i];
|
||||||
@@ -3123,6 +3141,8 @@ static void write_fx_4_state_object_initializer(struct hlsl_ir_var *var, struct
|
|||||||
struct vkd3d_bytecode_buffer *buffer = &fx->structured;
|
struct vkd3d_bytecode_buffer *buffer = &fx->structured;
|
||||||
uint32_t count_offset;
|
uint32_t count_offset;
|
||||||
|
|
||||||
|
fx_4_decompose_state_blocks(var, fx);
|
||||||
|
|
||||||
for (i = 0; i < elements_count; ++i)
|
for (i = 0; i < elements_count; ++i)
|
||||||
{
|
{
|
||||||
count_offset = put_u32(buffer, 0);
|
count_offset = put_u32(buffer, 0);
|
||||||
|
Reference in New Issue
Block a user