mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
libs/vkd3d-shader: Translate dcl_resource_structured instructions.
This commit is contained in:
@ -1720,6 +1720,7 @@ struct vkd3d_dxbc_compiler
|
|||||||
uint32_t output_setup_function_id;
|
uint32_t output_setup_function_id;
|
||||||
uint32_t default_sampler_id;
|
uint32_t default_sampler_id;
|
||||||
unsigned int uav_stride[MAX_UNORDERED_ACCESS_VIEWS];
|
unsigned int uav_stride[MAX_UNORDERED_ACCESS_VIEWS];
|
||||||
|
unsigned int resource_stride[MAX_SHADER_RESOURCE_VIEWS];
|
||||||
|
|
||||||
const struct vkd3d_shader_scan_info *scan_info;
|
const struct vkd3d_shader_scan_info *scan_info;
|
||||||
};
|
};
|
||||||
@ -3095,19 +3096,36 @@ static void vkd3d_dxbc_compiler_emit_dcl_uav_raw(struct vkd3d_dxbc_compiler *com
|
|||||||
VKD3D_SHADER_RESOURCE_BUFFER, VKD3D_DATA_UINT);
|
VKD3D_SHADER_RESOURCE_BUFFER, VKD3D_DATA_UINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void vkd3d_dxbc_compiler_emit_dcl_resource_structured(struct vkd3d_dxbc_compiler *compiler,
|
||||||
|
const struct vkd3d_shader_instruction *instruction)
|
||||||
|
{
|
||||||
|
const struct vkd3d_shader_register *reg = &instruction->declaration.structured_resource.reg.reg;
|
||||||
|
unsigned int stride = instruction->declaration.structured_resource.byte_stride;
|
||||||
|
unsigned int resource_index = reg->idx[0].offset;
|
||||||
|
|
||||||
|
if (resource_index < ARRAY_SIZE(compiler->resource_stride))
|
||||||
|
compiler->resource_stride[resource_index] = stride / 4;
|
||||||
|
else
|
||||||
|
FIXME("Unexpected resource register index %u.\n", resource_index);
|
||||||
|
|
||||||
|
vkd3d_dxbc_compiler_emit_resource_declaration(compiler, reg,
|
||||||
|
VKD3D_SHADER_RESOURCE_BUFFER, VKD3D_DATA_UINT);
|
||||||
|
}
|
||||||
|
|
||||||
static void vkd3d_dxbc_compiler_emit_dcl_uav_structured(struct vkd3d_dxbc_compiler *compiler,
|
static void vkd3d_dxbc_compiler_emit_dcl_uav_structured(struct vkd3d_dxbc_compiler *compiler,
|
||||||
const struct vkd3d_shader_instruction *instruction)
|
const struct vkd3d_shader_instruction *instruction)
|
||||||
{
|
{
|
||||||
const struct vkd3d_shader_register *reg = &instruction->declaration.structured_resource.reg.reg;
|
const struct vkd3d_shader_register *reg = &instruction->declaration.structured_resource.reg.reg;
|
||||||
|
unsigned int stride = instruction->declaration.structured_resource.byte_stride;
|
||||||
unsigned int uav_index = reg->idx[0].offset;
|
unsigned int uav_index = reg->idx[0].offset;
|
||||||
|
|
||||||
if (instruction->flags)
|
if (instruction->flags)
|
||||||
FIXME("Unhandled UAV flags %#x.\n", instruction->flags);
|
FIXME("Unhandled UAV flags %#x.\n", instruction->flags);
|
||||||
|
|
||||||
if (uav_index < ARRAY_SIZE(compiler->uav_stride))
|
if (uav_index < ARRAY_SIZE(compiler->uav_stride))
|
||||||
compiler->uav_stride[uav_index] = instruction->declaration.structured_resource.byte_stride / 4;
|
compiler->uav_stride[uav_index] = stride / 4;
|
||||||
else
|
else
|
||||||
FIXME("Unexpected UAV register index %u.\n", reg->idx[0].offset);
|
FIXME("Unexpected UAV register index %u.\n", uav_index);
|
||||||
|
|
||||||
vkd3d_dxbc_compiler_emit_resource_declaration(compiler, reg,
|
vkd3d_dxbc_compiler_emit_resource_declaration(compiler, reg,
|
||||||
VKD3D_SHADER_RESOURCE_BUFFER, VKD3D_DATA_UINT);
|
VKD3D_SHADER_RESOURCE_BUFFER, VKD3D_DATA_UINT);
|
||||||
@ -4556,6 +4574,9 @@ void vkd3d_dxbc_compiler_handle_instruction(struct vkd3d_dxbc_compiler *compiler
|
|||||||
case VKD3DSIH_DCL_UAV_RAW:
|
case VKD3DSIH_DCL_UAV_RAW:
|
||||||
vkd3d_dxbc_compiler_emit_dcl_uav_raw(compiler, instruction);
|
vkd3d_dxbc_compiler_emit_dcl_uav_raw(compiler, instruction);
|
||||||
break;
|
break;
|
||||||
|
case VKD3DSIH_DCL_RESOURCE_STRUCTURED:
|
||||||
|
vkd3d_dxbc_compiler_emit_dcl_resource_structured(compiler, instruction);
|
||||||
|
break;
|
||||||
case VKD3DSIH_DCL_UAV_STRUCTURED:
|
case VKD3DSIH_DCL_UAV_STRUCTURED:
|
||||||
vkd3d_dxbc_compiler_emit_dcl_uav_structured(compiler, instruction);
|
vkd3d_dxbc_compiler_emit_dcl_uav_structured(compiler, instruction);
|
||||||
break;
|
break;
|
||||||
|
@ -819,6 +819,7 @@ struct vkd3d_shader_signature_element *shader_find_signature_element(const struc
|
|||||||
const char *semantic_name, unsigned int semantic_idx, unsigned int stream_idx) DECLSPEC_HIDDEN;
|
const char *semantic_name, unsigned int semantic_idx, unsigned int stream_idx) DECLSPEC_HIDDEN;
|
||||||
void free_shader_desc(struct vkd3d_shader_desc *desc) DECLSPEC_HIDDEN;
|
void free_shader_desc(struct vkd3d_shader_desc *desc) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
#define MAX_SHADER_RESOURCE_VIEWS 128
|
||||||
#define MAX_UNORDERED_ACCESS_VIEWS 8
|
#define MAX_UNORDERED_ACCESS_VIEWS 8
|
||||||
|
|
||||||
struct vkd3d_shader_scan_info
|
struct vkd3d_shader_scan_info
|
||||||
|
Reference in New Issue
Block a user