mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/hlsl: Add support for ConstantBuffer<> type.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
committed by
Henri Verbeet
parent
44725a651b
commit
48ff7de8ef
Notes:
Henri Verbeet
2024-07-08 18:18:40 +02:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/906
@@ -2376,6 +2376,7 @@ static void declare_var(struct hlsl_ctx *ctx, struct parse_variable_def *v)
|
||||
struct hlsl_semantic new_semantic;
|
||||
uint32_t modifiers = v->modifiers;
|
||||
bool unbounded_res_array = false;
|
||||
bool constant_buffer = false;
|
||||
struct hlsl_ir_var *var;
|
||||
struct hlsl_type *type;
|
||||
bool local = true;
|
||||
@@ -2395,6 +2396,12 @@ static void declare_var(struct hlsl_ctx *ctx, struct parse_variable_def *v)
|
||||
unbounded_res_array |= (v->arrays.sizes[i] == HLSL_ARRAY_ELEMENTS_COUNT_IMPLICIT);
|
||||
}
|
||||
|
||||
if (type->class == HLSL_CLASS_CONSTANT_BUFFER)
|
||||
{
|
||||
type = type->e.resource.format;
|
||||
constant_buffer = true;
|
||||
}
|
||||
|
||||
if (unbounded_res_array)
|
||||
{
|
||||
if (v->arrays.count == 1)
|
||||
@@ -2476,7 +2483,16 @@ static void declare_var(struct hlsl_ctx *ctx, struct parse_variable_def *v)
|
||||
return;
|
||||
}
|
||||
|
||||
var->buffer = ctx->cur_buffer;
|
||||
if (constant_buffer && ctx->cur_scope == ctx->globals)
|
||||
{
|
||||
if (!(var_name = vkd3d_strdup(v->name)))
|
||||
return;
|
||||
var->buffer = hlsl_new_buffer(ctx, HLSL_BUFFER_CONSTANT, var_name, modifiers, &v->reg_reservation, NULL, &v->loc);
|
||||
}
|
||||
else
|
||||
{
|
||||
var->buffer = ctx->cur_buffer;
|
||||
}
|
||||
|
||||
if (var->buffer == ctx->globals_buffer)
|
||||
{
|
||||
@@ -5723,6 +5739,7 @@ static bool state_block_add_entry(struct hlsl_state_block *state_block, struct h
|
||||
%token KW_BREAK
|
||||
%token KW_BUFFER
|
||||
%token KW_CASE
|
||||
%token KW_CONSTANTBUFFER
|
||||
%token KW_CBUFFER
|
||||
%token KW_CENTROID
|
||||
%token KW_COLUMN_MAJOR
|
||||
@@ -7069,6 +7086,13 @@ type_no_void:
|
||||
{
|
||||
$$ = hlsl_get_type(ctx->cur_scope, "PixelShader", true, true);
|
||||
}
|
||||
| KW_CONSTANTBUFFER '<' type '>'
|
||||
{
|
||||
if ($3->class != HLSL_CLASS_STRUCT)
|
||||
hlsl_error(ctx, &@1, VKD3D_SHADER_ERROR_HLSL_INVALID_TYPE,
|
||||
"ConstantBuffer<...> requires user-defined structure type.");
|
||||
$$ = hlsl_new_cb_type(ctx, $3);
|
||||
}
|
||||
|
||||
type:
|
||||
type_no_void
|
||||
|
||||
Reference in New Issue
Block a user