mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d-shader/fx: Add support for writing RasterizerState objects.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
parent
f03cb7e911
commit
94130c2394
Notes:
Henri Verbeet
2024-07-08 18:20:04 +02:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/913
@ -95,6 +95,7 @@ struct fx_write_context
|
|||||||
uint32_t uav_count;
|
uint32_t uav_count;
|
||||||
uint32_t sampler_state_count;
|
uint32_t sampler_state_count;
|
||||||
uint32_t depth_stencil_state_count;
|
uint32_t depth_stencil_state_count;
|
||||||
|
uint32_t rasterizer_state_count;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
bool child_effect;
|
bool child_effect;
|
||||||
@ -563,6 +564,10 @@ static uint32_t write_fx_4_type(const struct hlsl_type *type, struct fx_write_co
|
|||||||
{
|
{
|
||||||
put_u32_unaligned(buffer, 6);
|
put_u32_unaligned(buffer, 6);
|
||||||
}
|
}
|
||||||
|
else if (type->class == HLSL_CLASS_RASTERIZER_STATE)
|
||||||
|
{
|
||||||
|
put_u32_unaligned(buffer, 4);
|
||||||
|
}
|
||||||
else if (type->class == HLSL_CLASS_DEPTH_STENCIL_STATE)
|
else if (type->class == HLSL_CLASS_DEPTH_STENCIL_STATE)
|
||||||
{
|
{
|
||||||
put_u32_unaligned(buffer, 3);
|
put_u32_unaligned(buffer, 3);
|
||||||
@ -1295,6 +1300,21 @@ static void resolve_fx_4_state_block_values(struct hlsl_ir_var *var, struct hlsl
|
|||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct rhs_named_value fill_values[] =
|
||||||
|
{
|
||||||
|
{ "WIREFRAME", 2 },
|
||||||
|
{ "SOLID", 3 },
|
||||||
|
{ NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct rhs_named_value cull_values[] =
|
||||||
|
{
|
||||||
|
{ "NONE", 1 },
|
||||||
|
{ "FRONT", 2 },
|
||||||
|
{ "BACK", 3 },
|
||||||
|
{ NULL }
|
||||||
|
};
|
||||||
|
|
||||||
static const struct state
|
static const struct state
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
@ -1307,6 +1327,17 @@ static void resolve_fx_4_state_block_values(struct hlsl_ir_var *var, struct hlsl
|
|||||||
}
|
}
|
||||||
states[] =
|
states[] =
|
||||||
{
|
{
|
||||||
|
{ "FillMode", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 12, fill_values },
|
||||||
|
{ "CullMode", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 13, cull_values },
|
||||||
|
{ "FrontCounterClockwise", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 14 },
|
||||||
|
{ "DepthBias", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 15 },
|
||||||
|
{ "DepthBiasClamp", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_FLOAT, 1, 16 },
|
||||||
|
{ "SlopeScaledDepthBias", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_FLOAT, 1, 17 },
|
||||||
|
{ "DepthClipEnable", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 18 },
|
||||||
|
{ "ScissorEnable", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 19 },
|
||||||
|
{ "MultisampleEnable", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 20 },
|
||||||
|
{ "AntializedLineEnable", HLSL_CLASS_RASTERIZER_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 21 },
|
||||||
|
|
||||||
{ "DepthEnable", HLSL_CLASS_DEPTH_STENCIL_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 22 },
|
{ "DepthEnable", HLSL_CLASS_DEPTH_STENCIL_STATE, HLSL_CLASS_SCALAR, FX_BOOL, 1, 22 },
|
||||||
{ "DepthWriteMask", HLSL_CLASS_DEPTH_STENCIL_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 23, depth_write_mask_values },
|
{ "DepthWriteMask", HLSL_CLASS_DEPTH_STENCIL_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 23, depth_write_mask_values },
|
||||||
{ "DepthFunc", HLSL_CLASS_DEPTH_STENCIL_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 24, comparison_values },
|
{ "DepthFunc", HLSL_CLASS_DEPTH_STENCIL_STATE, HLSL_CLASS_SCALAR, FX_UINT, 1, 24, comparison_values },
|
||||||
@ -1521,6 +1552,11 @@ static void write_fx_4_object_variable(struct hlsl_ir_var *var, struct fx_write_
|
|||||||
fx->sampler_state_count += elements_count;
|
fx->sampler_state_count += elements_count;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case HLSL_CLASS_RASTERIZER_STATE:
|
||||||
|
write_fx_4_state_object_initializer(var, fx);
|
||||||
|
fx->rasterizer_state_count += elements_count;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
hlsl_fixme(ctx, &ctx->location, "Writing initializer for object type %u is not implemented.",
|
hlsl_fixme(ctx, &ctx->location, "Writing initializer for object type %u is not implemented.",
|
||||||
type->e.numeric.type);
|
type->e.numeric.type);
|
||||||
@ -1691,7 +1727,7 @@ static int hlsl_fx_4_write(struct hlsl_ctx *ctx, struct vkd3d_shader_code *out)
|
|||||||
put_u32(&buffer, fx.texture_count);
|
put_u32(&buffer, fx.texture_count);
|
||||||
put_u32(&buffer, fx.depth_stencil_state_count);
|
put_u32(&buffer, fx.depth_stencil_state_count);
|
||||||
put_u32(&buffer, 0); /* Blend state count. */
|
put_u32(&buffer, 0); /* Blend state count. */
|
||||||
put_u32(&buffer, 0); /* Rasterizer state count. */
|
put_u32(&buffer, fx.rasterizer_state_count);
|
||||||
put_u32(&buffer, fx.sampler_state_count);
|
put_u32(&buffer, fx.sampler_state_count);
|
||||||
put_u32(&buffer, fx.rtv_count);
|
put_u32(&buffer, fx.rtv_count);
|
||||||
put_u32(&buffer, fx.dsv_count);
|
put_u32(&buffer, fx.dsv_count);
|
||||||
@ -1749,7 +1785,7 @@ static int hlsl_fx_5_write(struct hlsl_ctx *ctx, struct vkd3d_shader_code *out)
|
|||||||
put_u32(&buffer, fx.texture_count);
|
put_u32(&buffer, fx.texture_count);
|
||||||
put_u32(&buffer, fx.depth_stencil_state_count);
|
put_u32(&buffer, fx.depth_stencil_state_count);
|
||||||
put_u32(&buffer, 0); /* Blend state count. */
|
put_u32(&buffer, 0); /* Blend state count. */
|
||||||
put_u32(&buffer, 0); /* Rasterizer state count. */
|
put_u32(&buffer, fx.rasterizer_state_count);
|
||||||
put_u32(&buffer, fx.sampler_state_count);
|
put_u32(&buffer, fx.sampler_state_count);
|
||||||
put_u32(&buffer, fx.rtv_count);
|
put_u32(&buffer, fx.rtv_count);
|
||||||
put_u32(&buffer, fx.dsv_count);
|
put_u32(&buffer, fx.dsv_count);
|
||||||
|
Loading…
Reference in New Issue
Block a user