mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/glsl: Implement support for indirect constant buffer addressing.
This commit is contained in:
Notes:
Henri Verbeet
2025-03-12 22:20:19 +01:00
Approved-by: Francisco Casas (@fcasas) Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1388
@@ -269,15 +269,15 @@ static void shader_glsl_print_register_name(struct vkd3d_string_buffer *buffer,
|
|||||||
vkd3d_string_buffer_printf(buffer, "<unhandled register %#x>", reg->type);
|
vkd3d_string_buffer_printf(buffer, "<unhandled register %#x>", reg->type);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (reg->idx[0].rel_addr || reg->idx[2].rel_addr)
|
if (reg->idx[0].rel_addr)
|
||||||
{
|
{
|
||||||
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL,
|
vkd3d_glsl_compiler_error(gen, VKD3D_SHADER_ERROR_GLSL_INTERNAL,
|
||||||
"Internal compiler error: Unhandled constant buffer register indirect addressing.");
|
"Internal compiler error: Unhandled constant buffer register indirect addressing.");
|
||||||
vkd3d_string_buffer_printf(buffer, "<unhandled register %#x>", reg->type);
|
vkd3d_string_buffer_printf(buffer, "<unhandled register %#x>", reg->type);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
vkd3d_string_buffer_printf(buffer, "%s_cb_%u[%u]",
|
vkd3d_string_buffer_printf(buffer, "%s_cb_%u", gen->prefix, reg->idx[0].offset);
|
||||||
gen->prefix, reg->idx[0].offset, reg->idx[2].offset);
|
shader_glsl_print_subscript(buffer, gen, reg->idx[2].rel_addr, reg->idx[2].offset);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VKD3DSPR_THREADID:
|
case VKD3DSPR_THREADID:
|
||||||
@@ -485,8 +485,7 @@ static void shader_glsl_print_subscript(struct vkd3d_string_buffer *buffer, stru
|
|||||||
vkd3d_string_buffer_printf(buffer, "[%s", r.str->buffer);
|
vkd3d_string_buffer_printf(buffer, "[%s", r.str->buffer);
|
||||||
if (offset)
|
if (offset)
|
||||||
vkd3d_string_buffer_printf(buffer, " + %u", offset);
|
vkd3d_string_buffer_printf(buffer, " + %u", offset);
|
||||||
else
|
vkd3d_string_buffer_printf(buffer, "]");
|
||||||
vkd3d_string_buffer_printf(buffer, "]");
|
|
||||||
glsl_src_cleanup(&r, &gen->string_buffers);
|
glsl_src_cleanup(&r, &gen->string_buffers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user