mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d-shader/hlsl: Check texture dimension type on method calls.
Signed-off-by: Francisco Casas <fcasas@codeweavers.com> Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Matteo Bruni <mbruni@codeweavers.com> Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
68b9422470
commit
75afa731df
@ -1871,12 +1871,21 @@ static bool add_method_call(struct hlsl_ctx *ctx, struct list *instrs, struct hl
|
||||
/* Only HLSL_IR_LOAD can return an object. */
|
||||
object_load = hlsl_ir_load(object);
|
||||
|
||||
if (!strcmp(name, "Load"))
|
||||
if (!strcmp(name, "Load")
|
||||
&& object_type->sampler_dim != HLSL_SAMPLER_DIM_CUBE
|
||||
&& object_type->sampler_dim != HLSL_SAMPLER_DIM_CUBEARRAY)
|
||||
{
|
||||
const unsigned int sampler_dim = hlsl_sampler_dim_count(object_type->sampler_dim);
|
||||
struct hlsl_ir_resource_load *load;
|
||||
struct hlsl_ir_node *coords;
|
||||
|
||||
if (object_type->sampler_dim == HLSL_SAMPLER_DIM_2DMS
|
||||
|| object_type->sampler_dim == HLSL_SAMPLER_DIM_2DMSARRAY)
|
||||
{
|
||||
FIXME("'Load' method for multi-sample textures.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (params->args_count < 1 || params->args_count > 3)
|
||||
{
|
||||
hlsl_error(ctx, loc, VKD3D_SHADER_ERROR_HLSL_WRONG_PARAMETER_COUNT,
|
||||
@ -1884,7 +1893,9 @@ static bool add_method_call(struct hlsl_ctx *ctx, struct list *instrs, struct hl
|
||||
return false;
|
||||
}
|
||||
if (params->args_count >= 2)
|
||||
FIXME("Ignoring index and/or offset parameter(s).\n");
|
||||
hlsl_fixme(ctx, loc, "Offset parameter.");
|
||||
if (params->args_count == 3)
|
||||
hlsl_fixme(ctx, loc, "Tiled resource status argument.");
|
||||
|
||||
/* +1 for the mipmap level */
|
||||
if (!(coords = add_implicit_conversion(ctx, instrs, params->args[0],
|
||||
@ -1897,7 +1908,9 @@ static bool add_method_call(struct hlsl_ctx *ctx, struct list *instrs, struct hl
|
||||
list_add_tail(instrs, &load->node.entry);
|
||||
return true;
|
||||
}
|
||||
else if (!strcmp(name, "Sample"))
|
||||
else if (!strcmp(name, "Sample")
|
||||
&& object_type->sampler_dim != HLSL_SAMPLER_DIM_2DMS
|
||||
&& object_type->sampler_dim != HLSL_SAMPLER_DIM_2DMSARRAY)
|
||||
{
|
||||
const unsigned int sampler_dim = hlsl_sampler_dim_count(object_type->sampler_dim);
|
||||
const struct hlsl_type *sampler_type;
|
||||
@ -1947,8 +1960,12 @@ static bool add_method_call(struct hlsl_ctx *ctx, struct list *instrs, struct hl
|
||||
list_add_tail(instrs, &load->node.entry);
|
||||
return true;
|
||||
}
|
||||
else if (!strcmp(name, "Gather") || !strcmp(name, "GatherRed") || !strcmp(name, "GatherBlue")
|
||||
else if ((!strcmp(name, "Gather") || !strcmp(name, "GatherRed") || !strcmp(name, "GatherBlue")
|
||||
|| !strcmp(name, "GatherGreen") || !strcmp(name, "GatherAlpha"))
|
||||
&& (object_type->sampler_dim == HLSL_SAMPLER_DIM_2D
|
||||
|| object_type->sampler_dim == HLSL_SAMPLER_DIM_2DARRAY
|
||||
|| object_type->sampler_dim == HLSL_SAMPLER_DIM_CUBE
|
||||
|| object_type->sampler_dim == HLSL_SAMPLER_DIM_CUBEARRAY))
|
||||
{
|
||||
const unsigned int sampler_dim = hlsl_sampler_dim_count(object_type->sampler_dim);
|
||||
enum hlsl_resource_load_type load_type;
|
||||
|
Loading…
Reference in New Issue
Block a user