Skip to content
Snippets Groups Projects

hlsl: Some fixes caught by Wine tests.

Merged Elizabeth Figura requested to merge zfigura/vkd3d:pr7 into master
1 unresolved thread
1 file
+ 5
3
Compare changes
  • Side-by-side
  • Inline
+ 15
4
@@ -2034,7 +2034,12 @@ static void write_sm1_sampler_dcls(struct hlsl_ctx *ctx, struct vkd3d_bytecode_b
@@ -2034,7 +2034,12 @@ static void write_sm1_sampler_dcls(struct hlsl_ctx *ctx, struct vkd3d_bytecode_b
if (var->objects_usage[HLSL_REGSET_SAMPLERS][i].used)
if (var->objects_usage[HLSL_REGSET_SAMPLERS][i].used)
{
{
sampler_dim = var->objects_usage[HLSL_REGSET_SAMPLERS][i].sampler_dim;
sampler_dim = var->objects_usage[HLSL_REGSET_SAMPLERS][i].sampler_dim;
assert(sampler_dim != HLSL_SAMPLER_DIM_GENERIC);
if (sampler_dim == HLSL_SAMPLER_DIM_GENERIC)
 
{
 
/* These can appear in sm4-style combined sample instructions. */
 
hlsl_fixme(ctx, &var->loc, "Generic samplers need to be lowered.");
 
continue;
 
}
reg_id = var->regs[HLSL_REGSET_SAMPLERS].id + i;
reg_id = var->regs[HLSL_REGSET_SAMPLERS].id + i;
write_sm1_sampler_dcl(ctx, buffer, reg_id, sampler_dim);
write_sm1_sampler_dcl(ctx, buffer, reg_id, sampler_dim);
@@ -2437,7 +2442,6 @@ static void write_sm1_instructions(struct hlsl_ctx *ctx, struct vkd3d_bytecode_b
@@ -2437,7 +2442,6 @@ static void write_sm1_instructions(struct hlsl_ctx *ctx, struct vkd3d_bytecode_b
int hlsl_sm1_write(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry_func, struct vkd3d_shader_code *out)
int hlsl_sm1_write(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry_func, struct vkd3d_shader_code *out)
{
{
struct vkd3d_bytecode_buffer buffer = {0};
struct vkd3d_bytecode_buffer buffer = {0};
int ret;
put_u32(&buffer, sm1_version(ctx->profile->type, ctx->profile->major_version, ctx->profile->minor_version));
put_u32(&buffer, sm1_version(ctx->profile->type, ctx->profile->major_version, ctx->profile->minor_version));
@@ -2450,10 +2454,17 @@ int hlsl_sm1_write(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry_fun
@@ -2450,10 +2454,17 @@ int hlsl_sm1_write(struct hlsl_ctx *ctx, struct hlsl_ir_function_decl *entry_fun
put_u32(&buffer, D3DSIO_END);
put_u32(&buffer, D3DSIO_END);
if (!(ret = buffer.status))
if (buffer.status)
 
ctx->result = buffer.status;
 
 
if (!ctx->result)
{
{
out->code = buffer.data;
out->code = buffer.data;
out->size = buffer.size;
out->size = buffer.size;
}
}
return ret;
else
 
{
 
vkd3d_free(buffer.data);
 
}
 
return ctx->result;
    • Comment on lines -2458 to +2465

      Wouldn't we be leaking buffer.data in case ctx->result != 0, but buffer.status = 0 ?

      • Author Developer

        Wouldn't we be leaking buffer.data in case ctx->result != 0, but buffer.status = 0 ?

        Yes, in fact we're leaking it either way; if allocation fails the existing memory is not freed, so this was already a problem. I'll add a patch to fix it.

      • Please register or sign in to reply
Please register or sign in to reply
}
}
Loading