mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/hlsl: Implement the ByteAddressBuffer.Load*() methods.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
This commit is contained in:
committed by
Henri Verbeet
parent
1a28e7d9c6
commit
e5ba79b4f1
Notes:
Henri Verbeet
2024-11-06 23:01:27 +01:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1245
56
tests/hlsl/srv-byteaddressbuffer.shader_test
Normal file
56
tests/hlsl/srv-byteaddressbuffer.shader_test
Normal file
@@ -0,0 +1,56 @@
|
||||
[require]
|
||||
shader model >= 4.0
|
||||
|
||||
[rtv 0]
|
||||
format r32g32b32a32-uint
|
||||
size (2d, 32, 32)
|
||||
|
||||
[srv 0]
|
||||
format r32-typeless
|
||||
size (raw_buffer, 4)
|
||||
|
||||
1 2 3 4
|
||||
|
||||
[pixel shader]
|
||||
ByteAddressBuffer t;
|
||||
uint offset;
|
||||
uint count;
|
||||
|
||||
uint4 main() : sv_target
|
||||
{
|
||||
if (count == 1)
|
||||
return uint4(t.Load(offset), 0xa, 0xb, 0xc);
|
||||
if (count == 2)
|
||||
return uint4(t.Load2(offset), 0xd, 0xe);
|
||||
if (count == 3)
|
||||
return uint4(t.Load3(offset), 0xf);
|
||||
if (count == 4)
|
||||
return t.Load4(offset);
|
||||
return 0;
|
||||
}
|
||||
|
||||
[test]
|
||||
uniform 0 uint4 0 1 0 0
|
||||
todo(msl | glsl) draw quad
|
||||
probe (0, 0) rgbaui(0x1, 0xa, 0xb, 0xc)
|
||||
uniform 0 uint4 4 1 0 0
|
||||
todo(msl | glsl) draw quad
|
||||
probe (0, 0) rgbaui(0x2, 0xa, 0xb, 0xc)
|
||||
uniform 0 uint4 0 2 0 0
|
||||
todo(msl | glsl) draw quad
|
||||
probe (0, 0) rgbaui(0x1, 0x2, 0xd, 0xe)
|
||||
uniform 0 uint4 4 2 0 0
|
||||
todo(msl | glsl) draw quad
|
||||
probe (0, 0) rgbaui(0x2, 0x3, 0xd, 0xe)
|
||||
uniform 0 uint4 0 3 0 0
|
||||
todo(msl | glsl) draw quad
|
||||
probe (0, 0) rgbaui(0x1, 0x2, 0x3, 0xf)
|
||||
uniform 0 uint4 4 3 0 0
|
||||
todo(msl | glsl) draw quad
|
||||
probe (0, 0) rgbaui(0x2, 0x3, 0x4, 0xf)
|
||||
uniform 0 uint4 0 4 0 0
|
||||
todo(msl | glsl) draw quad
|
||||
probe (0, 0) rgbaui(0x1, 0x2, 0x3, 0x4)
|
||||
uniform 0 uint4 4 4 0 0
|
||||
todo(msl | glsl) draw quad
|
||||
probe (0, 0) rgbaui(0x2, 0x3, 0x4, 0x0)
|
@@ -478,9 +478,19 @@ static void init_resource_srv_buffer(struct d3d11_shader_runner *runner, struct
|
||||
resource->resource = (ID3D11Resource *)resource->buffer;
|
||||
|
||||
srv_desc.Format = params->desc.format;
|
||||
srv_desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
|
||||
srv_desc.Buffer.FirstElement = 0;
|
||||
srv_desc.Buffer.NumElements = params->data_size / params->desc.texel_size;
|
||||
if (params->is_raw)
|
||||
{
|
||||
srv_desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFEREX;
|
||||
srv_desc.BufferEx.FirstElement = 0;
|
||||
srv_desc.BufferEx.NumElements = params->data_size / params->desc.texel_size;
|
||||
srv_desc.BufferEx.Flags = D3D11_BUFFEREX_SRV_FLAG_RAW;
|
||||
}
|
||||
else
|
||||
{
|
||||
srv_desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
|
||||
srv_desc.Buffer.FirstElement = 0;
|
||||
srv_desc.Buffer.NumElements = params->data_size / params->desc.texel_size;
|
||||
}
|
||||
hr = ID3D11Device_CreateShaderResourceView(device, resource->resource, &srv_desc, &resource->srv);
|
||||
ok(hr == S_OK, "Failed to create view, hr %#lx.\n", hr);
|
||||
}
|
||||
|
@@ -159,6 +159,7 @@ static struct resource *d3d12_runner_create_resource(struct shader_runner *r, co
|
||||
srv_desc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER;
|
||||
srv_desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srv_desc.Buffer.NumElements = params->desc.width * params->desc.height;
|
||||
srv_desc.Buffer.Flags = params->is_raw ? D3D12_BUFFER_SRV_FLAG_RAW : 0;
|
||||
|
||||
ID3D12Device_CreateShaderResourceView(device, resource->resource,
|
||||
&srv_desc, get_cpu_descriptor_handle(test_context, runner->heap, resource->r.desc.slot));
|
||||
|
Reference in New Issue
Block a user