Skip to content
Snippets Groups Projects

vkd3d-shader/hlsl: Improve constant handling in copy prop, and extend the use of aoffimmi modifiers.

Merged Francisco Casas requested to merge fcasas/vkd3d:aoffimmi into master

If a hlsl_ir_load loads a variable whose components are stored from different instructions, copy propagation doesn't replace it.

But if all these instructions are constants (which currently is the case for value constructors), the load can be replaced with a constant value, which is what the first patch of this series does.

For instance, this shader:

sampler s;
Texture2D t;

float4 main() : sv_target
{
    return t.Gather(s, float2(0.6, 0.6), int2(0, 0));
}

results in the following IR before applying the patch:

  float | 6.00000024e-01
  float | 6.00000024e-01
   uint | 0
        | = (<constructor-2>[@4].x @2)
   uint | 1
        | = (<constructor-2>[@6].x @3)
 float2 | <constructor-2>
    int | 0
    int | 0
   uint | 0
        | = (<constructor-5>[@11].x @9)
   uint | 1
        | = (<constructor-5>[@13].x @10)
   int2 | <constructor-5>
 float4 | gather_red(resource = t, sampler = s, coords = @8, offset = @15)
        | return
        | = (<output-sv_target0> @16)

and this IR afterwards:

 float2 | {6.00000024e-01 6.00000024e-01 }
   int2 | {0 0 }
 float4 | gather_red(resource = t, sampler = s, coords = @2, offset = @3)
        | return
        | = (<output-sv_target0> @4)

This is required to write texel_offsets as aoffimmi modifiers in the sm4 backend, since it expects the texel_offset arguments to be hlsl_ir_constant.

This series also:

  • Allows Gather() methods to use aoffimmi modifiers instead of an additional source register (which is the only way allowed for shader model 4.1), when possible.
  • Adds support to texel_offsets in the Load() method via aoffimmi modifiers (the only allowed method).

Merge request reports

Merge request pipeline #6699 skipped

Merge request pipeline skipped for 6b82ba94

Merged by Alexandre JulliardAlexandre Julliard 2 years ago (Jan 24, 2023 9:27pm UTC)

Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
  • Loading
Please register or sign in to reply
Loading