Wine-devel
Threads by month
- ----- 2026 -----
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- 2 participants
- 84520 discussions
[PATCH 1/2] wined3d: Do not accelerate NOOVERWRITE maps if we cannot map persistently.
by Zebediah Figura 31 May '22
by Zebediah Figura 31 May '22
31 May '22
I.e. if ARB_buffer_storage is not supported.
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
Somehow I had forgotten to protect against this...
dlls/wined3d/adapter_gl.c | 1 +
dlls/wined3d/adapter_vk.c | 1 +
dlls/wined3d/buffer.c | 4 +++-
dlls/wined3d/wined3d_private.h | 1 +
4 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index 0d9f6953de3..05e8c112388 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -5231,6 +5231,7 @@ static void wined3d_adapter_gl_init_d3d_info(struct wined3d_adapter_gl *adapter_
d3d_info->fences = wined3d_fence_supported(gl_info);
d3d_info->feature_level = feature_level_from_caps(gl_info, &shader_caps, &fragment_caps);
d3d_info->filling_convention_offset = gl_info->filling_convention_offset;
+ d3d_info->persistent_map = !!gl_info->supported[ARB_BUFFER_STORAGE];
if (gl_info->supported[ARB_TEXTURE_MULTISAMPLE])
d3d_info->multisample_draw_location = WINED3D_LOCATION_TEXTURE_RGB;
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c
index cd1748afe90..3b87ab63ee5 100644
--- a/dlls/wined3d/adapter_vk.c
+++ b/dlls/wined3d/adapter_vk.c
@@ -2351,6 +2351,7 @@ static void wined3d_adapter_vk_init_d3d_info(struct wined3d_adapter_vk *adapter_
d3d_info->feature_level = feature_level_from_caps(&shader_caps);
d3d_info->subpixel_viewport = true;
d3d_info->fences = true;
+ d3d_info->persistent_map = true;
/* Like GL, Vulkan doesn't explicitly specify a filling convention and only mandates that a
* shared edge of two adjacent triangles generate a fragment for exactly one of the triangles.
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 0d6550bf613..9b0d98139ce 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -1008,11 +1008,13 @@ static HRESULT buffer_resource_sub_resource_map(struct wined3d_resource *resourc
addr.buffer_object = buffer->buffer_object;
addr.addr = 0;
buffer->map_ptr = wined3d_context_map_bo_address(context, &addr, resource->size, flags);
+
/* We are accessing buffer->resource.client from the CS thread,
* but it's safe because the client thread will wait for the
* map to return, thus completely serializing this call with
* other client code. */
- buffer->resource.client.addr = addr;
+ if (context->d3d_info->persistent_map)
+ buffer->resource.client.addr = addr;
if (((DWORD_PTR)buffer->map_ptr) & (RESOURCE_ALIGNMENT - 1))
{
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index ce4d7384066..9304de4e9d6 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -243,6 +243,7 @@ struct wined3d_d3d_info
uint32_t pbo : 1;
uint32_t subpixel_viewport : 1;
uint32_t fences : 1;
+ uint32_t persistent_map : 1;
enum wined3d_feature_level feature_level;
DWORD multisample_draw_location;
--
2.35.1
2
3
[tools] testbot/orm: Don't assume that key columns don't need conversion.
by Francois Gouget 31 May '22
by Francois Gouget 31 May '22
31 May '22
This allows using booleans and timestamps in the key columns.
It also makes GetUpdateData() consistent with GetInsertData().
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/lib/ObjectModel/DBIBackEnd.pm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/testbot/lib/ObjectModel/DBIBackEnd.pm b/testbot/lib/ObjectModel/DBIBackEnd.pm
index 94e4be6b7..940d37f65 100644
--- a/testbot/lib/ObjectModel/DBIBackEnd.pm
+++ b/testbot/lib/ObjectModel/DBIBackEnd.pm
@@ -619,7 +619,7 @@ sub GetUpdateData($$$)
{
foreach my $ColName (@{$PropertyDescriptor->GetColNames()})
{
- push @Data, $Item->GetColValue($ColName);
+ push @Data, $self->ToDb($Item->GetColValue($ColName), $PropertyDescriptor);
}
}
}
@@ -663,6 +663,7 @@ sub SaveCollection($$)
die "Sequence property spans multiple columns";
}
+ # No FromDb() conversion needed for integers
$Item->PutColValue(@{$ColNames}[0], $Db->{'mysql_insertid'});
$Collection->KeyChanged($Key, $Item->GetKey());
}
--
2.30.2
1
0
31 May '22
'make buildtest' only generates the headers needed by the tests. So it's
possible for a patch to introduce a dependency on a header that was not
build by Reconfig.
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
---
testbot/bin/build/Build.pl | 4 ++--
testbot/lib/Build/Utils.pm | 6 +++---
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/testbot/bin/build/Build.pl b/testbot/bin/build/Build.pl
index 23ab68587..8502f212d 100755
--- a/testbot/bin/build/Build.pl
+++ b/testbot/bin/build/Build.pl
@@ -167,8 +167,8 @@ if ($DataDir =~ /'/)
my $Impacts = ApplyPatch("wine", $PatchFile);
if (!$Impacts or
- !BuildWine($TaskMissions, 0, "exe32", undef, "buildtests") or
- !BuildWine($TaskMissions, 0, "exe64", undef, "buildtests"))
+ !BuildWine($TaskMissions, 0, "exe32", undef, ["depend", "buildtests"]) or
+ !BuildWine($TaskMissions, 0, "exe64", undef, ["depend", "buildtests"]))
{
exit(1);
}
diff --git a/testbot/lib/Build/Utils.pm b/testbot/lib/Build/Utils.pm
index 9e73cba59..8a84f5e6a 100644
--- a/testbot/lib/Build/Utils.pm
+++ b/testbot/lib/Build/Utils.pm
@@ -330,7 +330,7 @@ our $TRY_WERROR = 2;
sub BuildWine($$$$;$)
{
my ($TaskMissions, $Flags, $Build, $Configure, $Targets) = @_;
- $Targets ||= "";
+ $Targets ||= [""];
return 1 if (!$TaskMissions->{Builds}->{$Build});
# Rebuild from scratch to make sure cruft will not accumulate
@@ -344,14 +344,14 @@ sub BuildWine($$$$;$)
{
$Rc = system("cd '$DataDir/wine-$Build' && set -x && ".
"time ../wine/configure $Configure --enable-werror && ".
- "time make -j$CPUCount $Targets");
+ join(" && ", map { "time make -j$CPUCount $_" } @$Targets));
LogMsg "With -Werror the $Build Wine build fails\n" if ($Rc);
}
if ($Rc)
{
$Rc = system("cd '$DataDir/wine-$Build' && set -x && ".
(defined $Configure ? "time ../wine/configure $Configure && " : "").
- "time make -j$CPUCount $Targets");
+ join(" && ", map { "time make -j$CPUCount $_" } @$Targets));
}
if ($Rc)
{
--
2.30.2
1
0
[PATCH 0/5] MR162: explorer: Move clipboard manager thread from display driver.
by Jacek Caban (ï¼ jacek) 31 May '22
by Jacek Caban (ï¼ jacek) 31 May '22
31 May '22
[PATCH v3 0/5] MR109: wined3d: Add a memory_colour_fill path for clearing the entire level to zero.
by Stefan Dösinger 31 May '22
by Stefan Dösinger 31 May '22
31 May '22
Signed-off-by: Stefan Dösinger <stefan(a)codeweavers.com>
--
v3: d3d9/tests: Extend color_fill_test.
wined3d: Store clear colors in subresources.
wined3d: Handle WINED3DFMT_D32_FLOAT in wined3d_format_convert_from_float.
wined3d: Prepare sysmem LOCATION_CLEARED handling for non-zero colors (v2).
wined3d: Add a memory_colour_fill path for clearing the entire level to zero.
https://gitlab.winehq.org/wine/wine/-/merge_requests/109
5
12
[PATCH vkd3d 1/6] tests: Separate generic and d3d12-specific readback fields.
by Giovanni Mascellani 31 May '22
by Giovanni Mascellani 31 May '22
31 May '22
From: Zebediah Figura <zfigura(a)codeweavers.com>
Move the "resource" field to a new "d3d12_resource_readback" structure
encapsulating struct resource_readback.
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
Signed-off-by: Giovanni Mascellani <gmascellani(a)codeweavers.com>
---
tests/d3d12.c | 602 ++++++++++++++++++------------------
tests/d3d12_test_utils.h | 45 +--
tests/shader_runner_d3d12.c | 4 +-
3 files changed, 328 insertions(+), 323 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c
index 5f83a373..3c4a91e2 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -191,29 +191,29 @@ static const DXGI_FORMAT depth_stencil_formats[] =
DXGI_FORMAT_D16_UNORM,
};
-static void init_readback(struct resource_readback *rb, ID3D12Resource *buffer,
+static void init_readback(struct d3d12_resource_readback *rb, ID3D12Resource *buffer,
uint64_t buffer_size, uint64_t width, uint64_t height, unsigned int depth, uint64_t row_pitch)
{
D3D12_RANGE read_range;
HRESULT hr;
- rb->width = width;
- rb->height = height;
- rb->depth = depth;
+ rb->rb.width = width;
+ rb->rb.height = height;
+ rb->rb.depth = depth;
rb->resource = buffer;
- rb->row_pitch = row_pitch;
- rb->data = NULL;
+ rb->rb.row_pitch = row_pitch;
+ rb->rb.data = NULL;
ID3D12Resource_AddRef(rb->resource);
read_range.Begin = 0;
read_range.End = buffer_size;
- hr = ID3D12Resource_Map(rb->resource, 0, &read_range, &rb->data);
+ hr = ID3D12Resource_Map(rb->resource, 0, &read_range, &rb->rb.data);
ok(hr == S_OK, "Failed to map readback buffer, hr %#x.\n", hr);
}
static void get_buffer_readback_with_command_list(ID3D12Resource *buffer, DXGI_FORMAT format,
- struct resource_readback *rb, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list)
+ struct d3d12_resource_readback *rb, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list)
{
D3D12_HEAP_PROPERTIES heap_properties;
D3D12_RESOURCE_DESC resource_desc;
@@ -250,16 +250,16 @@ static void get_buffer_readback_with_command_list(ID3D12Resource *buffer, DXGI_F
wait_queue_idle(device, queue);
ID3D12Device_Release(device);
- rb->width = resource_desc.Width / format_size(format);
- rb->height = 1;
- rb->depth = 1;
+ rb->rb.width = resource_desc.Width / format_size(format);
+ rb->rb.height = 1;
+ rb->rb.depth = 1;
rb->resource = rb_buffer;
- rb->row_pitch = resource_desc.Width;
- rb->data = NULL;
+ rb->rb.row_pitch = resource_desc.Width;
+ rb->rb.data = NULL;
read_range.Begin = 0;
read_range.End = resource_desc.Width;
- hr = ID3D12Resource_Map(rb_buffer, 0, &read_range, &rb->data);
+ hr = ID3D12Resource_Map(rb_buffer, 0, &read_range, &rb->rb.data);
ok(SUCCEEDED(hr), "Failed to map readback buffer, hr %#x.\n", hr);
}
@@ -322,10 +322,10 @@ static void check_sub_resource_float_(unsigned int line, ID3D12Resource *texture
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
float expected, unsigned int max_diff)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
get_texture_readback_with_command_list(texture, sub_resource_idx, &rb, queue, command_list);
- check_readback_data_float_(line, &rb, NULL, expected, max_diff);
+ check_readback_data_float_(line, &rb.rb, NULL, expected, max_diff);
release_resource_readback(&rb);
}
@@ -363,10 +363,10 @@ static void check_sub_resource_uint8_(unsigned int line, ID3D12Resource *texture
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
uint8_t expected, unsigned int max_diff)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
get_texture_readback_with_command_list(texture, sub_resource_idx, &rb, queue, command_list);
- check_readback_data_uint8_(line, &rb, NULL, expected, max_diff);
+ check_readback_data_uint8_(line, &rb.rb, NULL, expected, max_diff);
release_resource_readback(&rb);
}
@@ -404,10 +404,10 @@ static void check_sub_resource_uint16_(unsigned int line, ID3D12Resource *textur
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
uint16_t expected, unsigned int max_diff)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
get_texture_readback_with_command_list(texture, sub_resource_idx, &rb, queue, command_list);
- check_readback_data_uint16_(line, &rb, NULL, expected, max_diff);
+ check_readback_data_uint16_(line, &rb.rb, NULL, expected, max_diff);
release_resource_readback(&rb);
}
@@ -445,10 +445,10 @@ static void check_sub_resource_uint64_(unsigned int line, ID3D12Resource *textur
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
uint64_t expected, unsigned int max_diff)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
get_texture_readback_with_command_list(texture, sub_resource_idx, &rb, queue, command_list);
- check_readback_data_uint64_(line, &rb, NULL, expected, max_diff);
+ check_readback_data_uint64_(line, &rb.rb, NULL, expected, max_diff);
release_resource_readback(&rb);
}
@@ -457,17 +457,17 @@ static void check_sub_resource_uvec4_(unsigned int line, ID3D12Resource *texture
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
const struct uvec4 *expected_value)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct uvec4 value = {0};
unsigned int x = 0, y;
bool all_match = true;
get_texture_readback_with_command_list(texture, sub_resource_idx, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- value = *get_readback_uvec4(&rb, x, y);
+ value = *get_readback_uvec4(&rb.rb, x, y);
if (!compare_uvec4(&value, expected_value))
{
all_match = false;
@@ -490,10 +490,10 @@ static void check_buffer_uint_(unsigned int line, ID3D12Resource *buffer,
ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
unsigned int expected, unsigned int max_diff)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- check_readback_data_uint_(line, &rb, NULL, expected, max_diff);
+ check_readback_data_uint_(line, &rb.rb, NULL, expected, max_diff);
release_resource_readback(&rb);
}
@@ -4576,11 +4576,11 @@ static void test_clear_render_target_view(void)
D3D12_RENDER_TARGET_VIEW_DESC rtv_desc;
D3D12_HEAP_PROPERTIES heap_properties;
D3D12_RESOURCE_DESC resource_desc;
+ struct d3d12_resource_readback rb;
unsigned int rtv_increment_size;
ID3D12DescriptorHeap *rtv_heap;
D3D12_CLEAR_VALUE clear_value;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *resource;
@@ -4822,11 +4822,11 @@ static void test_clear_render_target_view(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(resource, 0, &rb, queue, command_list);
set_box(&box, 0, 0, 0, 32, 32, 2);
- check_readback_data_uint(&rb, &box, 0xbf4c7f19, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xbf4c7f19, 1);
set_box(&box, 0, 0, 2, 32, 32, 4);
- check_readback_data_uint(&rb, &box, 0xff00ff00, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xff00ff00, 1);
set_box(&box, 0, 0, 4, 32, 32, 32);
- check_readback_data_uint(&rb, &box, 0xbf4c7f19, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xbf4c7f19, 1);
release_resource_readback(&rb);
rtv_desc.Texture3D.FirstWSlice = 30;
@@ -4841,9 +4841,9 @@ static void test_clear_render_target_view(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(resource, 0, &rb, queue, command_list);
set_box(&box, 0, 0, 4, 32, 32, 30);
- check_readback_data_uint(&rb, &box, 0xbf4c7f19, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xbf4c7f19, 1);
set_box(&box, 0, 0, 30, 32, 32, 32);
- check_readback_data_uint(&rb, &box, 0xff00ff00, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xff00ff00, 1);
release_resource_readback(&rb);
ID3D12Resource_Release(resource);
@@ -4856,9 +4856,9 @@ static void test_clear_unordered_access_view_buffer(void)
D3D12_UNORDERED_ACCESS_VIEW_DESC uav_desc;
ID3D12DescriptorHeap *cpu_heap, *gpu_heap;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
D3D12_HEAP_DESC heap_desc;
ID3D12Resource *buffer;
@@ -5029,14 +5029,14 @@ static void test_clear_unordered_access_view_buffer(void)
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_TYPELESS, &rb, queue, command_list);
box.left = 0;
box.right = uav_desc.Buffer.FirstElement;
- check_readback_data_uint(&rb, &box, clear_value[0], 0);
+ check_readback_data_uint(&rb.rb, &box, clear_value[0], 0);
box.left = uav_desc.Buffer.FirstElement;
box.right = uav_desc.Buffer.FirstElement + uav_desc.Buffer.NumElements;
todo_if(tests[i].is_todo)
- check_readback_data_uint(&rb, &box, tests[i].expected, tests[i].is_float ? 1 : 0);
+ check_readback_data_uint(&rb.rb, &box, tests[i].expected, tests[i].is_float ? 1 : 0);
box.left = uav_desc.Buffer.FirstElement + uav_desc.Buffer.NumElements;
box.right = BUFFER_SIZE / format_size(uav_desc.Format);
- check_readback_data_uint(&rb, &box, clear_value[0], 0);
+ check_readback_data_uint(&rb.rb, &box, clear_value[0], 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -5060,10 +5060,10 @@ static void test_clear_unordered_access_view_image(void)
unsigned int i, j, d, p, x, y, z, layer;
D3D12_HEAP_PROPERTIES heap_properties;
unsigned int image_size, image_depth;
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
bool is_inside, success;
ID3D12Resource *texture;
@@ -5305,7 +5305,7 @@ static void test_clear_unordered_access_view_image(void)
&& layer < tests[i].first_layer + tests[i].layer_count;
expected_colour = is_inside ? tests[i].expected : clear_value[0];
- actual_colour = get_readback_uint(&rb, x, y, z);
+ actual_colour = get_readback_uint(&rb.rb, x, y, z);
success = compare_color(actual_colour, expected_colour, tests[i].is_float ? 1 : 0);
todo_if(tests[i].is_todo && expected_colour)
@@ -5964,10 +5964,10 @@ static void test_append_aligned_element(void)
{
ID3D12GraphicsCommandList *command_list;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
D3D12_VERTEX_BUFFER_VIEW vbv[6];
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
ID3D12Resource *vb[3];
unsigned int color;
@@ -6143,13 +6143,13 @@ static void test_append_aligned_element(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- color = get_readback_uint(&rb, 80, 16, 0);
+ color = get_readback_uint(&rb.rb, 80, 16, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 240, 16, 0);
+ color = get_readback_uint(&rb.rb, 240, 16, 0);
ok(compare_color(color, 0xff00ff00, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 400, 16, 0);
+ color = get_readback_uint(&rb.rb, 400, 16, 0);
ok(compare_color(color, 0xffff0000, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 560, 16, 0);
+ color = get_readback_uint(&rb.rb, 560, 16, 0);
ok(compare_color(color, 0xffff00ff, 1), "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
@@ -6291,10 +6291,10 @@ static void test_fragment_coords(void)
static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
ID3D12GraphicsCommandList *command_list;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
struct test_context context;
- struct resource_readback rb;
const struct vec4 *v = NULL;
struct vec4 expected = {0};
ID3D12CommandQueue *queue;
@@ -6422,11 +6422,11 @@ static void test_fragment_coords(void)
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
all_match = true;
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- v = get_readback_vec4(&rb, x, y);
+ v = get_readback_vec4(&rb.rb, x, y);
expected.x = x + 0.5f;
expected.y = y + 0.5f;
expected.z = vertices[4 * i].z / vertices[4 * i].w;
@@ -6459,10 +6459,10 @@ static void test_fractional_viewports(void)
static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
ID3D12GraphicsCommandList *command_list;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
D3D12_VIEWPORT viewport;
unsigned int i, x, y;
@@ -6582,11 +6582,11 @@ static void test_fractional_viewports(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *v = get_readback_vec4(&rb, x, y);
+ const struct vec4 *v = get_readback_vec4(&rb.rb, x, y);
struct vec4 expected = {x + 0.5f, y + 0.5f,
(x + 0.5f - viewport_offsets[i]) / context.render_target_desc.Width,
1.0f - (y + 0.5f - viewport_offsets[i]) / context.render_target_desc.Height};
@@ -6610,9 +6610,9 @@ static void test_fractional_viewports(void)
static void test_scissor(void)
{
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
unsigned int color;
RECT scissor_rect;
@@ -6661,15 +6661,15 @@ static void test_scissor(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- color = get_readback_uint(&rb, 320, 60, 0);
+ color = get_readback_uint(&rb.rb, 320, 60, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 80, 240, 0);
+ color = get_readback_uint(&rb.rb, 80, 240, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 320, 240, 0);
+ color = get_readback_uint(&rb.rb, 320, 240, 0);
ok(compare_color(color, 0xff00ff00, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 560, 240, 0);
+ color = get_readback_uint(&rb.rb, 560, 240, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 320, 420, 0);
+ color = get_readback_uint(&rb.rb, 320, 420, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
@@ -6779,9 +6779,9 @@ static void test_draw_depth_only(void)
{
D3D12_GRAPHICS_PIPELINE_STATE_DESC pso_desc;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
struct depth_stencil_resource ds;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
unsigned int i, j;
@@ -6903,7 +6903,7 @@ static void test_draw_depth_only(void)
{
float obtained_depth, expected_depth;
- obtained_depth = get_readback_float(&rb, 80 + j * 160, 60 + i * 120);
+ obtained_depth = get_readback_float(&rb.rb, 80 + j * 160, 60 + i * 120);
expected_depth = 1.0f / 16.0f * (j + 4 * i);
ok(compare_float(obtained_depth, expected_depth, 1),
"Got unexpected depth %.8e at (%u, %u), expected %.8e.\n",
@@ -7309,10 +7309,10 @@ static void test_map_placed_resources(void)
ID3D12GraphicsCommandList *command_list;
ID3D12Heap *upload_heap, *readback_heap;
D3D12_ROOT_PARAMETER root_parameters[2];
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
ID3D12Resource *readback_buffer;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12Resource *uav_buffer;
D3D12_HEAP_DESC heap_desc;
@@ -7475,7 +7475,7 @@ static void test_map_placed_resources(void)
get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (i = 0; i < ARRAY_SIZE(expected_values); ++i)
{
- unsigned int value = get_readback_uint(&rb, i, 0, 0);
+ unsigned int value = get_readback_uint(&rb.rb, i, 0, 0);
ok(value == expected_values[i], "Got %#x, expected %#x at %u.\n", value, expected_values[i], i);
}
release_resource_readback(&rb);
@@ -7494,8 +7494,8 @@ static void test_bundle_state_inheritance(void)
static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
ID3D12GraphicsCommandList *command_list, *bundle;
ID3D12CommandAllocator *bundle_allocator;
+ struct d3d12_resource_readback rb;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
ID3D12Device *device;
unsigned int x, y;
@@ -7547,11 +7547,11 @@ static void test_bundle_state_inheritance(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- unsigned int v = get_readback_uint(&rb, x, y, 0);
+ unsigned int v = get_readback_uint(&rb.rb, x, y, 0);
/* This works on AMD. */
ok(v == 0xffffffff || v == 0xff00ff00, "Got unexpected value 0x%08x at (%u, %u).\n", v, x, y);
}
@@ -7584,11 +7584,11 @@ static void test_bundle_state_inheritance(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- unsigned int v = get_readback_uint(&rb, x, y, 0);
+ unsigned int v = get_readback_uint(&rb.rb, x, y, 0);
/* This works on AMD, even though the debug layer says that the primitive topology is undefined. */
ok(v == 0xffffffff || v == 0xff00ff00, "Got unexpected value 0x%08x at (%u, %u).\n", v, x, y);
}
@@ -10625,7 +10625,7 @@ static void test_compute_shader_instructions(void)
const D3D12_SHADER_BYTECODE *current_cs;
ID3D12GraphicsCommandList *command_list;
D3D12_ROOT_PARAMETER root_parameters[2];
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *buffer;
@@ -10791,7 +10791,7 @@ static void test_compute_shader_instructions(void)
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (j = 0; j < ARRAY_SIZE(tests[i].expected_data); ++j)
{
- value = get_readback_uint(&rb, j, 0, 0);
+ value = get_readback_uint(&rb.rb, j, 0, 0);
ok(value == tests[i].expected_data[j], "Test %u: Got 0x%08x, expected 0x%08x at %u.\n",
i, value, tests[i].expected_data[j], j);
}
@@ -12407,9 +12407,9 @@ static void test_cs_constant_buffer(void)
D3D12_DESCRIPTOR_HEAP_DESC heap_desc;
ID3D12RootSignature *root_signature;
ID3D12PipelineState *pipeline_state;
+ struct d3d12_resource_readback rb;
ID3D12Resource *resource, *cb;
unsigned int descriptor_size;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Device *device;
@@ -12520,7 +12520,7 @@ static void test_cs_constant_buffer(void)
transition_sub_resource_state(command_list, resource, 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(resource, uav_desc.Format, &rb, queue, command_list);
- check_readback_data_float(&rb, NULL, 2.0f, 0);
+ check_readback_data_float(&rb.rb, NULL, 2.0f, 0);
release_resource_readback(&rb);
value = 6.0f;
@@ -12541,7 +12541,7 @@ static void test_cs_constant_buffer(void)
transition_sub_resource_state(command_list, resource, 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(resource, uav_desc.Format, &rb, queue, command_list);
- check_readback_data_float(&rb, NULL, 6.0f, 0);
+ check_readback_data_float(&rb.rb, NULL, 6.0f, 0);
release_resource_readback(&rb);
ID3D12Resource_Release(cb);
@@ -12557,7 +12557,7 @@ static void test_constant_buffer_relative_addressing(void)
D3D12_ROOT_SIGNATURE_DESC root_signature_desc;
D3D12_ROOT_PARAMETER root_parameters[2];
ID3D12GraphicsCommandList *command_list;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *uav, *cb;
@@ -12642,9 +12642,9 @@ static void test_constant_buffer_relative_addressing(void)
transition_sub_resource_state(command_list, uav, 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(uav, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- for (i = 0; i < rb.width; ++i)
+ for (i = 0; i < rb.rb.width; ++i)
{
- unsigned int got = get_readback_uint(&rb, i, 0, 0);
+ unsigned int got = get_readback_uint(&rb.rb, i, 0, 0);
const unsigned int *expected = &cb_data[1].x;
ok(got == expected[i], "Got %#x, expected %#x at %u.\n", got, expected[i], i);
}
@@ -13161,9 +13161,9 @@ static void test_sample_instructions(void)
ID3D12GraphicsCommandList *command_list;
D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle;
D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle;
+ struct d3d12_resource_readback rb;
D3D12_SAMPLER_DESC sampler_desc;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
unsigned int x_step, y_step;
ID3D12CommandQueue *queue;
@@ -13553,7 +13553,7 @@ static void test_sample_instructions(void)
{
for (x = 0; x < tests[i].texture->width; ++x)
{
- unsigned int color = get_readback_uint(&rb, x * x_step + x_step / 2, y * y_step + y_step / 2, 0);
+ unsigned int color = get_readback_uint(&rb.rb, x * x_step + x_step / 2, y * y_step + y_step / 2, 0);
ok(compare_color(color, tests[i].expected_data[tests[i].texture->width * y + x], 1),
"Got color 0x%08x, expected 0x%08x at (%u, %u).\n",
color, tests[i].expected_data[tests[i].texture->width * y + x], x, y);
@@ -13804,8 +13804,8 @@ static void test_gather(void)
ID3D12GraphicsCommandList *command_list;
D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle;
D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
@@ -13999,12 +13999,12 @@ static void test_gather(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *expected = &expected_gather4[y * rb.width + x];
- const struct vec4 *got = get_readback_vec4(&rb, x, y);
+ const struct vec4 *expected = &expected_gather4[y * rb.rb.width + x];
+ const struct vec4 *got = get_readback_vec4(&rb.rb, x, y);
ok(compare_vec4(got, expected, 0),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
got->x, got->y, got->z, got->w, expected->x, expected->y, expected->z, expected->w);
@@ -14037,12 +14037,12 @@ static void test_gather(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *expected = &expected_gather4_offset[y * rb.width + x];
- const struct vec4 *got = get_readback_vec4(&rb, x, y);
+ const struct vec4 *expected = &expected_gather4_offset[y * rb.rb.width + x];
+ const struct vec4 *got = get_readback_vec4(&rb.rb, x, y);
ok(compare_vec4(got, expected, 0),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
got->x, got->y, got->z, got->w, expected->x, expected->y, expected->z, expected->w);
@@ -14075,12 +14075,12 @@ static void test_gather(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *expected = &expected_gather4_green[y * rb.width + x];
- const struct vec4 *got = get_readback_vec4(&rb, x, y);
+ const struct vec4 *expected = &expected_gather4_green[y * rb.rb.width + x];
+ const struct vec4 *got = get_readback_vec4(&rb.rb, x, y);
ok(compare_vec4(got, expected, 0),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
got->x, got->y, got->z, got->w, expected->x, expected->y, expected->z, expected->w);
@@ -14113,12 +14113,12 @@ static void test_gather(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *expected = &expected_gather4_offset[y * rb.width + x];
- const struct vec4 *got = get_readback_vec4(&rb, x, y);
+ const struct vec4 *expected = &expected_gather4_offset[y * rb.rb.width + x];
+ const struct vec4 *got = get_readback_vec4(&rb.rb, x, y);
ok(compare_vec4(got, expected, 0),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
got->x, got->y, got->z, got->w, expected->x, expected->y, expected->z, expected->w);
@@ -14149,12 +14149,12 @@ static void test_gather(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *expected = &expected_gather4[y * rb.width + x];
- const struct vec4 *got = get_readback_vec4(&rb, x, y);
+ const struct vec4 *expected = &expected_gather4[y * rb.rb.width + x];
+ const struct vec4 *got = get_readback_vec4(&rb.rb, x, y);
ok(compare_vec4(got, expected, 0),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
got->x, got->y, got->z, got->w, expected->x, expected->y, expected->z, expected->w);
@@ -14180,8 +14180,8 @@ static void test_gather_c(void)
ID3D12GraphicsCommandList *command_list;
D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle;
D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
@@ -14339,12 +14339,12 @@ static void test_gather_c(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *expected = &expected_gather4_c[y * rb.width + x];
- const struct vec4 *got = get_readback_vec4(&rb, x, y);
+ const struct vec4 *expected = &expected_gather4_c[y * rb.rb.width + x];
+ const struct vec4 *got = get_readback_vec4(&rb.rb, x, y);
ok(compare_vec4(got, expected, 0),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
got->x, got->y, got->z, got->w, expected->x, expected->y, expected->z, expected->w);
@@ -14377,12 +14377,12 @@ static void test_gather_c(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *expected = &expected_gather4_po_c[y * rb.width + x];
- const struct vec4 *got = get_readback_vec4(&rb, x, y);
+ const struct vec4 *expected = &expected_gather4_po_c[y * rb.rb.width + x];
+ const struct vec4 *got = get_readback_vec4(&rb.rb, x, y);
ok(compare_vec4(got, expected, 0),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
got->x, got->y, got->z, got->w, expected->x, expected->y, expected->z, expected->w);
@@ -14413,12 +14413,12 @@ static void test_gather_c(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- for (y = 0; y < rb.height; ++y)
+ for (y = 0; y < rb.rb.height; ++y)
{
- for (x = 0; x < rb.width; ++x)
+ for (x = 0; x < rb.rb.width; ++x)
{
- const struct vec4 *expected = &expected_gather4_c[y * rb.width + x];
- const struct vec4 *got = get_readback_vec4(&rb, x, y);
+ const struct vec4 *expected = &expected_gather4_c[y * rb.rb.width + x];
+ const struct vec4 *got = get_readback_vec4(&rb.rb, x, y);
ok(compare_vec4(got, expected, 0),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
got->x, got->y, got->z, got->w, expected->x, expected->y, expected->z, expected->w);
@@ -14438,8 +14438,8 @@ static void test_sample_c_lz(void)
ID3D12GraphicsCommandList *command_list;
D3D12_DEPTH_STENCIL_VIEW_DESC dsv_desc;
D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
@@ -14847,7 +14847,7 @@ static void test_sample_c_lz(void)
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
/* Avoid testing values affected by seamless cube map filtering. */
set_rect(&rect, 100, 100, 540, 380);
- check_readback_data_float(&rb, &rect, tests[i].expected, 2);
+ check_readback_data_float(&rb.rb, &rect, tests[i].expected, 2);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -14898,7 +14898,7 @@ static void test_sample_c_lz(void)
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
/* Avoid testing values affected by seamless cube map filtering. */
set_rect(&rect, 100, 100, 540, 380);
- check_readback_data_float(&rb, &rect, tests[i].expected, 2);
+ check_readback_data_float(&rb.rb, &rect, tests[i].expected, 2);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -15230,9 +15230,9 @@ static void test_multisample_array_texture(void)
D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle;
D3D12_GPU_DESCRIPTOR_HANDLE gpu_handle;
D3D12_HEAP_PROPERTIES heap_properties;
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12Resource *uav_buffer;
@@ -15431,7 +15431,7 @@ static void test_multisample_array_texture(void)
get_buffer_readback_with_command_list(uav_buffer, DXGI_FORMAT_R32G32B32A32_UINT, &rb, queue, command_list);
for (i = 0; i < 2; ++i)
{
- const struct uvec4 *v = get_readback_uvec4(&rb, i, 0);
+ const struct uvec4 *v = get_readback_uvec4(&rb.rb, i, 0);
ok(v->x == resource_desc.Width, "Got unexpected width %u.\n", v->x);
ok(v->y == resource_desc.Height, "Got unexpected height %u.\n", v->y);
ok(v->z == resource_desc.DepthOrArraySize, "Got unexpected array size %u.\n", v->z);
@@ -16272,7 +16272,7 @@ static void test_descriptor_tables_overlapping_bindings(void)
D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc;
D3D12_ROOT_PARAMETER root_parameters[3];
ID3D12GraphicsCommandList *command_list;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
@@ -16433,7 +16433,7 @@ static void test_descriptor_tables_overlapping_bindings(void)
get_buffer_readback_with_command_list(output_buffers[0], DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
{
- unsigned int value = get_readback_uint(&rb, i, 0, 0);
+ unsigned int value = get_readback_uint(&rb.rb, i, 0, 0);
ok(value == buffer_data[i], "Got %#x, expected %#x.\n", value, buffer_data[i]);
}
release_resource_readback(&rb);
@@ -16441,7 +16441,7 @@ static void test_descriptor_tables_overlapping_bindings(void)
get_buffer_readback_with_command_list(output_buffers[1], DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (i = 0; i < ARRAY_SIZE(buffer_data2); ++i)
{
- unsigned int value = get_readback_uint(&rb, i, 0, 0);
+ unsigned int value = get_readback_uint(&rb.rb, i, 0, 0);
ok(value == buffer_data2[i], "Got %#x, expected %#x.\n", value, buffer_data2[i]);
}
release_resource_readback(&rb);
@@ -16462,8 +16462,8 @@ static void test_update_root_descriptors(void)
ID3D12GraphicsCommandList *command_list;
ID3D12RootSignature *root_signature;
ID3D12PipelineState *pipeline_state;
+ struct d3d12_resource_readback rb;
ID3D12Resource *resource, *cb;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Device *device;
@@ -16559,7 +16559,7 @@ static void test_update_root_descriptors(void)
for (i = 0; i < ARRAY_SIZE(input); ++i)
{
unsigned int offset = input[i].uav_offset + input[i].offset;
- unsigned int value = get_readback_uint(&rb, offset, 0, 0);
+ unsigned int value = get_readback_uint(&rb.rb, offset, 0, 0);
ok(value == input[i].value, "Got %#x, expected %#x.\n", value, input[i].value);
}
release_resource_readback(&rb);
@@ -16580,9 +16580,9 @@ static void test_update_descriptor_tables(void)
ID3D12DescriptorHeap *heap, *cpu_heap;
D3D12_DESCRIPTOR_HEAP_DESC heap_desc;
D3D12_ROOT_PARAMETER root_parameter;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
D3D12_SUBRESOURCE_DATA data;
- struct resource_readback rb;
struct test_context context;
ID3D12Resource *textures[3];
ID3D12CommandQueue *queue;
@@ -16730,9 +16730,9 @@ static void test_update_descriptor_tables(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
set_box(&box, 0, 0, 0, 16, 32, 1);
- check_readback_data_uint(&rb, &box, 0xff00407f, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xff00407f, 1);
set_box(&box, 16, 0, 0, 32, 32, 1);
- check_readback_data_uint(&rb, &box, 0xff007f40, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xff007f40, 1);
release_resource_readback(&rb);
for (i = 0; i < ARRAY_SIZE(textures); ++i)
@@ -16755,8 +16755,8 @@ static void test_update_descriptor_heap_after_closing_command_list(void)
D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle;
ID3D12DescriptorHeap *cpu_heap, *heap;
D3D12_SUBRESOURCE_DATA texture_data;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
unsigned int value;
@@ -16862,7 +16862,7 @@ static void test_update_descriptor_heap_after_closing_command_list(void)
transition_resource_state(command_list, context.render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- value = get_readback_uint(&rb, 0, 0, 0);
+ value = get_readback_uint(&rb.rb, 0, 0, 0);
todo_if(binding_tier < D3D12_RESOURCE_BINDING_TIER_3)
ok(value == 0xff00ff00, "Got unexpected value %#x.\n", value);
release_resource_readback(&rb);
@@ -16893,10 +16893,10 @@ static void test_update_compute_descriptor_tables(void)
D3D12_SUBRESOURCE_DATA subresource_data;
ID3D12Resource *buffer_cb, *texture_cb;
ID3D12DescriptorHeap *descriptor_heap;
+ struct d3d12_resource_readback rb;
ID3D12Resource *output_buffers[2];
ID3D12Resource *input_buffers[5];
ID3D12Resource *textures[3];
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
struct cb_data cb_data;
@@ -17382,7 +17382,7 @@ static void test_update_compute_descriptor_tables(void)
get_buffer_readback_with_command_list(output_buffers[0], DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (i = 0; i < ARRAY_SIZE(expected_output0); ++i)
{
- data = get_readback_uint(&rb, i, 0, 0);
+ data = get_readback_uint(&rb.rb, i, 0, 0);
ok(data == expected_output0[i], "Got %#x, expected %#x at %u.\n", data, expected_output0[i], i);
}
release_resource_readback(&rb);
@@ -17393,7 +17393,7 @@ static void test_update_compute_descriptor_tables(void)
get_buffer_readback_with_command_list(output_buffers[1], DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (i = 0; i < ARRAY_SIZE(expected_output1); ++i)
{
- data = get_readback_uint(&rb, i, 0, 0);
+ data = get_readback_uint(&rb.rb, i, 0, 0);
ok(data == expected_output1[i], "Got %#x, expected %#x at %u.\n", data, expected_output1[i], i);
}
release_resource_readback(&rb);
@@ -17650,13 +17650,13 @@ static void test_copy_descriptors(void)
ID3D12GraphicsCommandList *command_list;
D3D12_ROOT_PARAMETER root_parameters[4];
D3D12_CPU_DESCRIPTOR_HANDLE cpu_handle;
+ struct d3d12_resource_readback rb;
ID3D12Resource *t[7], *u[3], *cb;
struct depth_stencil_resource ds;
D3D12_SAMPLER_DESC sampler_desc;
struct test_context_desc desc;
unsigned int descriptor_size;
D3D12_SUBRESOURCE_DATA data;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
unsigned int sampler_size;
@@ -18142,7 +18142,7 @@ static void test_copy_descriptors(void)
transition_sub_resource_state(command_list, u[2], 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(u[2], DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- result = get_readback_data(&rb, 0, 0, 0, sizeof(*result));
+ result = get_readback_data(&rb.rb, 0, 0, 0, sizeof(*result));
ok(result[ 0] == cb0_data, "Got unexpected value %#x.\n", result[0]);
ok(result[ 1] == cb1_data, "Got unexpected value %#x.\n", result[1]);
ok(result[ 2] == cb2_data, "Got unexpected value %#x.\n", result[2]);
@@ -18187,7 +18187,7 @@ static void test_copy_descriptors(void)
ok(result[41] == u1_data.f, "Got unexpected value %#x.\n", result[41]);
ok(result[42] == u1_data.f, "Got unexpected value %#x.\n", result[42]);
ok(result[43] == 0xdeadbeef, "Got unexpected value %#x.\n", result[43]);
- assert(rb.width == 44);
+ assert(rb.rb.width == 44);
release_resource_readback(&rb);
ID3D12DescriptorHeap_Release(cpu_heap);
@@ -18211,10 +18211,10 @@ static void test_copy_descriptors_range_sizes(void)
ID3D12Resource *green_texture, *blue_texture;
UINT dst_range_sizes[1], src_range_sizes[1];
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
ID3D12DescriptorHeap *cpu_heap;
struct test_context_desc desc;
D3D12_SUBRESOURCE_DATA data;
- struct resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
@@ -18357,7 +18357,7 @@ static void test_copy_descriptors_range_sizes(void)
for (i = 0; i < desc.rt_width; ++i)
{
set_box(&box, i, 0, 0, i + 1, desc.rt_height, 1);
- check_readback_data_uint(&rb, &box, i % 2 ? 0xffff0000 : 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, &box, i % 2 ? 0xffff0000 : 0xff00ff00, 0);
}
release_resource_readback(&rb);
@@ -20954,7 +20954,7 @@ static void test_typed_buffer_uav(void)
ID3D12DescriptorHeap *descriptor_heap;
ID3D12RootSignature *root_signature;
ID3D12PipelineState *pipeline_state;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *resource;
@@ -21035,7 +21035,7 @@ static void test_typed_buffer_uav(void)
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(resource, uav_desc.Format, &rb, queue, command_list);
- check_readback_data_float(&rb, NULL, 0.5f, 0);
+ check_readback_data_float(&rb.rb, NULL, 0.5f, 0);
release_resource_readback(&rb);
ID3D12Resource_Release(resource);
@@ -21197,7 +21197,7 @@ static void test_compute_shader_registers(void)
D3D12_ROOT_PARAMETER root_parameters[2];
unsigned int i, x, y, group_x, group_y;
ID3D12DescriptorHeap *descriptor_heap;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *resource;
@@ -21312,7 +21312,7 @@ static void test_compute_shader_registers(void)
get_buffer_readback_with_command_list(resource, uav_desc.Format, &rb, queue, command_list);
i = 0;
- data = rb.data;
+ data = rb.rb.data;
for (y = 0; y < dimensions.y; ++y)
{
for (group_y = 0; group_y < 2; ++group_y)
@@ -21366,9 +21366,9 @@ static void test_tgsm(void)
ID3D12GraphicsCommandList *command_list;
D3D12_ROOT_PARAMETER root_parameters[1];
ID3D12DescriptorHeap *descriptor_heap;
+ struct d3d12_resource_readback rb;
ID3D12Resource *buffer, *buffer2;
unsigned int data, expected;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Device *device;
@@ -21580,7 +21580,7 @@ static void test_tgsm(void)
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (i = 0; i < 64; ++i)
{
- data = get_readback_uint(&rb, i, 0, 0);
+ data = get_readback_uint(&rb.rb, i, 0, 0);
expected = 33 * i;
ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
}
@@ -21629,7 +21629,7 @@ static void test_tgsm(void)
for (i = 0; i < 32; ++i)
{
expected = 64 * i + 32;
- data = get_readback_uint(&rb, i, 0, 0);
+ data = get_readback_uint(&rb.rb, i, 0, 0);
ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
}
release_resource_readback(&rb);
@@ -21638,7 +21638,7 @@ static void test_tgsm(void)
for (i = 0; i < 32; ++i)
{
expected = 64 * i + 32;
- data = get_readback_uint(&rb, i, 0, 0);
+ data = get_readback_uint(&rb.rb, i, 0, 0);
ok(data == expected || !data, "Got %u, expected %u (index %u).\n", data, expected, i);
}
release_resource_readback(&rb);
@@ -21678,7 +21678,7 @@ static void test_tgsm(void)
for (i = 0; i < 96; ++i)
{
expected = (i % 32 + 1) * (i / 32);
- float_data = get_readback_float(&rb, i, 0);
+ float_data = get_readback_float(&rb.rb, i, 0);
ok(float_data == expected, "Got %.8e, expected %u (index %u).\n", float_data, expected, i);
}
release_resource_readback(&rb);
@@ -21687,7 +21687,7 @@ static void test_tgsm(void)
for (i = 0; i < 96; ++i)
{
expected = (i % 32 + 1) * (i / 32);
- data = get_readback_uint(&rb, i, 0, 0);
+ data = get_readback_uint(&rb.rb, i, 0, 0);
ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
}
release_resource_readback(&rb);
@@ -21722,11 +21722,11 @@ static void test_uav_load(void)
const struct texture *current_texture;
D3D12_HEAP_PROPERTIES heap_properties;
ID3D12Resource *texture, *rt_texture;
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
D3D12_CLEAR_VALUE clear_value;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
unsigned int rtv_size;
ID3D12Device *device;
@@ -22095,7 +22095,7 @@ static void test_uav_load(void)
for (x = 0; x < 4; ++x)
{
unsigned int expected = test->expected_colors[y * 4 + x];
- unsigned int color = get_readback_uint(&rb, 80 + x * 160, 60 + y * 120, 0);
+ unsigned int color = get_readback_uint(&rb.rb, 80 + x * 160, 60 + y * 120, 0);
ok(compare_color(color, expected, 0),
"Test %u: Got 0x%08x, expected 0x%08x at (%u, %u).\n",
i, color, expected, x, y);
@@ -22129,7 +22129,7 @@ static void test_cs_uav_store(void)
ID3D12DescriptorHeap *descriptor_heap;
ID3D12RootSignature *root_signature;
ID3D12PipelineState *pipeline_state;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *resource;
@@ -22440,11 +22440,11 @@ static void test_cs_uav_store(void)
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(resource, 0, &rb, queue, command_list);
set_rect(&rect, 0, 0, 16, 32);
- check_readback_data_float(&rb, &rect, 0.5f, 2);
- set_rect(&rect, 0, 32, rb.width, rb.height);
- check_readback_data_float(&rb, &rect, 1.0f, 2);
- set_rect(&rect, 16, 0, rb.width, rb.height);
- check_readback_data_float(&rb, &rect, 1.0f, 2);
+ check_readback_data_float(&rb.rb, &rect, 0.5f, 2);
+ set_rect(&rect, 0, 32, rb.rb.width, rb.rb.height);
+ check_readback_data_float(&rb.rb, &rect, 1.0f, 2);
+ set_rect(&rect, 16, 0, rb.rb.width, rb.rb.height);
+ check_readback_data_float(&rb.rb, &rect, 1.0f, 2);
release_resource_readback(&rb);
ID3D12PipelineState_Release(pipeline_state);
@@ -22470,11 +22470,11 @@ static void test_cs_uav_store(void)
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(resource, 0, &rb, queue, command_list);
set_rect(&rect, 0, 0, 60, 60);
- check_readback_data_float(&rb, &rect, 0.6f, 2);
- set_rect(&rect, 0, 60, rb.width, rb.height);
- check_readback_data_float(&rb, &rect, 1.0f, 2);
- set_rect(&rect, 60, 0, rb.width, rb.height);
- check_readback_data_float(&rb, &rect, 1.0f, 2);
+ check_readback_data_float(&rb.rb, &rect, 0.6f, 2);
+ set_rect(&rect, 0, 60, rb.rb.width, rb.rb.height);
+ check_readback_data_float(&rb.rb, &rect, 1.0f, 2);
+ set_rect(&rect, 60, 0, rb.rb.width, rb.rb.height);
+ check_readback_data_float(&rb.rb, &rect, 1.0f, 2);
release_resource_readback(&rb);
memset(&input, 0, sizeof(input));
@@ -22509,14 +22509,14 @@ static void test_cs_uav_store(void)
static unsigned int read_uav_counter(const struct test_context *context,
ID3D12Resource *counter_buffer, size_t offset)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
uint32_t counter;
transition_sub_resource_state(context->list, counter_buffer, 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(counter_buffer, DXGI_FORMAT_R32_UINT, &rb,
context->queue, context->list);
- counter = get_readback_uint(&rb, offset / sizeof(counter), 0, 0);
+ counter = get_readback_uint(&rb.rb, offset / sizeof(counter), 0, 0);
release_resource_readback(&rb);
reset_command_list(context->list, context->allocator);
transition_sub_resource_state(context->list, counter_buffer, 0,
@@ -22538,7 +22538,7 @@ static void test_uav_counters(void)
ID3D12GraphicsCommandList *command_list;
D3D12_ROOT_PARAMETER root_parameters[1];
ID3D12DescriptorHeap *descriptor_heap;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
uint32_t data, id[128];
@@ -22665,7 +22665,7 @@ static void test_uav_counters(void)
transition_sub_resource_state(command_list, buffer, 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- memcpy(id, rb.data, 64 * sizeof(*id));
+ memcpy(id, rb.rb.data, 64 * sizeof(*id));
release_resource_readback(&rb);
qsort(id, 64, sizeof(*id), compare_id);
for (j = 0; j < 64; ++j)
@@ -22696,7 +22696,7 @@ static void test_uav_counters(void)
counter = read_uav_counter(&context, counter_buffer, uav_desc.Buffer.CounterOffsetInBytes);
ok(!counter, "Got unexpected value %u.\n", counter);
get_buffer_readback_with_command_list(out_buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- memcpy(id, rb.data, 64 * sizeof(*id));
+ memcpy(id, rb.rb.data, 64 * sizeof(*id));
release_resource_readback(&rb);
qsort(id, 64, sizeof(*id), compare_id);
for (j = 0; j < 64; ++j)
@@ -22745,7 +22745,7 @@ static void test_uav_counters(void)
get_buffer_readback_with_command_list(out_buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (j = 0; j < 8; ++j)
{
- data = get_readback_uint(&rb, j, 0, 0);
+ data = get_readback_uint(&rb.rb, j, 0, 0);
ok(data == 0xdeadbeef, "Got data %u at %u.\n", data, j);
}
release_resource_readback(&rb);
@@ -22911,9 +22911,9 @@ static void test_graphics_uav_counters(void)
ID3D12GraphicsCommandList *command_list;
ID3D12Resource *buffer, *counter_buffer;
D3D12_ROOT_PARAMETER root_parameters[1];
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
ID3D12Device *device;
uint32_t counter;
@@ -23023,7 +23023,7 @@ static void test_graphics_uav_counters(void)
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
set_box(&box, 0, 0, 0, uav_desc.Buffer.NumElements, 1, 1);
- check_readback_data_uint(&rb, &box, 1, 0);
+ check_readback_data_uint(&rb.rb, &box, 1, 0);
release_resource_readback(&rb);
ID3D12Resource_Release(buffer);
@@ -23040,8 +23040,8 @@ static void test_atomic_instructions(void)
ID3D12GraphicsCommandList *command_list;
D3D12_ROOT_PARAMETER root_parameters[3];
ID3D12PipelineState *pipeline_state;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Device *device;
@@ -23253,7 +23253,7 @@ static void test_atomic_instructions(void)
get_buffer_readback_with_command_list(ps_buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (j = 0; j < ARRAY_SIZE(instructions); ++j)
{
- unsigned int value = get_readback_uint(&rb, j, 0, 0);
+ unsigned int value = get_readback_uint(&rb.rb, j, 0, 0);
unsigned int expected = test->expected_result[j];
bool is_bug;
@@ -23277,7 +23277,7 @@ static void test_atomic_instructions(void)
{
bool bug_instruction = !strcmp(imm_instructions[j], "imm_atomic_imax")
|| !strcmp(imm_instructions[j], "imm_atomic_imin");
- unsigned int value = get_readback_uint(&rb, j, 0, 0);
+ unsigned int value = get_readback_uint(&rb.rb, j, 0, 0);
unsigned int expected = test->expected_result[j];
/* Fixed at least on radv with mesa >= 21.3.7. */
@@ -23295,7 +23295,7 @@ static void test_atomic_instructions(void)
get_buffer_readback_with_command_list(cs_buffer2, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (j = 0; j < ARRAY_SIZE(instructions); ++j)
{
- unsigned int out_value = get_readback_uint(&rb, j, 0, 0);
+ unsigned int out_value = get_readback_uint(&rb.rb, j, 0, 0);
ok(out_value == test->input[j], "Got original value %u, expected %u for '%s'.\n",
out_value, test->input[j], imm_instructions[j]);
}
@@ -23338,9 +23338,9 @@ static void test_buffer_srv(void)
ID3D12DescriptorHeap *descriptor_heap;
const struct buffer *current_buffer;
unsigned int color, expected_color;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
ID3D12Resource *buffer;
ID3D12Device *device;
@@ -23599,7 +23599,7 @@ static void test_buffer_srv(void)
{
for (x = 0; x < 4; ++x)
{
- color = get_readback_uint(&rb, 80 + x * 160, 60 + y * 120, 0);
+ color = get_readback_uint(&rb.rb, 80 + x * 160, 60 + y * 120, 0);
expected_color = test->expected_colors[y * 4 + x];
ok(compare_color(color, expected_color, 1),
"Test %u: Got 0x%08x, expected 0x%08x at (%u, %u).\n",
@@ -23676,10 +23676,10 @@ static void test_query_timestamp(void)
{
uint64_t timestamps[4], timestamp_frequency, timestamp_diff, time_diff;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
D3D12_QUERY_HEAP_DESC heap_desc;
struct test_context_desc desc;
ID3D12QueryHeap *query_heap;
- struct resource_readback rb;
struct test_context context;
time_t time_start, time_end;
ID3D12CommandQueue *queue;
@@ -23722,7 +23722,7 @@ static void test_query_timestamp(void)
time_end = time(NULL) + 1;
for (i = 0; i < ARRAY_SIZE(timestamps); ++i)
- timestamps[i] = get_readback_uint64(&rb, i, 0);
+ timestamps[i] = get_readback_uint64(&rb.rb, i, 0);
for (i = 0; i < ARRAY_SIZE(timestamps) - 1; ++i)
{
@@ -23747,13 +23747,13 @@ static void test_query_pipeline_statistics(void)
D3D12_QUERY_DATA_PIPELINE_STATISTICS *pipeline_statistics;
static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Device *device;
D3D12_QUERY_HEAP_DESC heap_desc;
ID3D12QueryHeap *query_heap;
ID3D12Resource *resource;
- struct resource_readback rb;
unsigned int pixel_count, i;
HRESULT hr;
@@ -23798,11 +23798,11 @@ static void test_query_pipeline_statistics(void)
for (i = 0; i < sizeof(struct D3D12_QUERY_DATA_PIPELINE_STATISTICS) / sizeof(uint64_t); ++i)
{
- uint64_t value = get_readback_uint64(&rb, i, 0);
+ uint64_t value = get_readback_uint64(&rb.rb, i, 0);
ok(!value, "Element %d: Got %"PRIu64", expected 0.\n", i, value);
}
- pipeline_statistics = get_readback_data(&rb, 1, 0, 0, sizeof(*pipeline_statistics));
+ pipeline_statistics = get_readback_data(&rb.rb, 1, 0, 0, sizeof(*pipeline_statistics));
/* We read 3 vertices that formed one primitive. */
ok(pipeline_statistics->IAVertices == 3, "IAVertices: Got %"PRIu64", expected 3.\n",
@@ -23847,6 +23847,7 @@ static void test_query_occlusion(void)
{
struct test_context_desc desc;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Device *device;
@@ -23855,7 +23856,6 @@ static void test_query_occlusion(void)
D3D12_QUERY_HEAP_DESC heap_desc;
ID3D12QueryHeap *query_heap;
ID3D12Resource *resource;
- struct resource_readback rb;
unsigned int i;
HRESULT hr;
@@ -23960,7 +23960,7 @@ static void test_query_occlusion(void)
for (i = 0; i < ARRAY_SIZE(tests); ++i)
{
const bool samples_passed = tests[i].draw && tests[i].clear_depth > tests[i].depth;
- const uint64_t result = get_readback_uint64(&rb, i, 0);
+ const uint64_t result = get_readback_uint64(&rb.rb, i, 0);
uint64_t expected_result;
if (tests[i].type == D3D12_QUERY_TYPE_BINARY_OCCLUSION)
@@ -23984,10 +23984,10 @@ static void test_resolve_non_issued_query_data(void)
static const uint64_t initial_data[] = {0xdeadbeef, 0xdeadbeef, 0xdeadbabe, 0xdeadbeef};
ID3D12Resource *readback_buffer, *upload_buffer;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
D3D12_QUERY_HEAP_DESC heap_desc;
struct test_context_desc desc;
ID3D12QueryHeap *query_heap;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Device *device;
@@ -24018,7 +24018,7 @@ static void test_resolve_non_issued_query_data(void)
D3D12_QUERY_TYPE_TIMESTAMP, 0, 4, readback_buffer, 0);
get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
- timestamps = get_readback_data(&rb, 0, 0, 0, sizeof(*timestamps));
+ timestamps = get_readback_data(&rb.rb, 0, 0, 0, sizeof(*timestamps));
ok(timestamps[0] != initial_data[0] && timestamps[0] > 0,
"Got unexpected timestamp %#"PRIx64".\n", timestamps[0]);
ok(!timestamps[1], "Got unexpected timestamp %#"PRIx64".\n", timestamps[1]);
@@ -24036,9 +24036,9 @@ static void test_resolve_non_issued_query_data(void)
static void test_resolve_query_data_in_different_command_list(void)
{
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
D3D12_QUERY_HEAP_DESC heap_desc;
ID3D12Resource *readback_buffer;
- struct resource_readback rb;
ID3D12QueryHeap *query_heap;
struct test_context context;
ID3D12CommandQueue *queue;
@@ -24102,7 +24102,7 @@ static void test_resolve_query_data_in_different_command_list(void)
for (i = 0; i < readback_buffer_capacity; ++i)
{
uint64_t expected_result = context.render_target_desc.Width * context.render_target_desc.Height;
- uint64_t result = get_readback_uint64(&rb, i, 0);
+ uint64_t result = get_readback_uint64(&rb.rb, i, 0);
ok(result == expected_result, "Got unexpected result %"PRIu64" at %u.\n", result, i);
}
@@ -24117,9 +24117,9 @@ static void test_resolve_query_data_in_reordered_command_list(void)
{
ID3D12GraphicsCommandList *command_lists[2];
ID3D12CommandAllocator *command_allocator;
+ struct d3d12_resource_readback rb;
D3D12_QUERY_HEAP_DESC heap_desc;
ID3D12Resource *readback_buffer;
- struct resource_readback rb;
ID3D12QueryHeap *query_heap;
struct test_context context;
ID3D12CommandQueue *queue;
@@ -24173,7 +24173,7 @@ static void test_resolve_query_data_in_reordered_command_list(void)
reset_command_list(command_lists[0], context.allocator);
get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_lists[0]);
- result = get_readback_uint64(&rb, 0, 0);
+ result = get_readback_uint64(&rb.rb, 0, 0);
todo ok(result == context.render_target_desc.Width * context.render_target_desc.Height,
"Got unexpected result %"PRIu64".\n", result);
release_resource_readback(&rb);
@@ -24195,10 +24195,10 @@ static void test_execute_indirect(void)
D3D12_ROOT_PARAMETER root_parameter;
ID3D12PipelineState *pipeline_state;
ID3D12RootSignature *root_signature;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
D3D12_INDEX_BUFFER_VIEW ibv;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *vb, *ib;
@@ -24418,9 +24418,9 @@ static void test_execute_indirect(void)
transition_sub_resource_state(command_list, uav, 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(uav, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- for (i = 0; i < rb.width; ++i)
+ for (i = 0; i < rb.rb.width; ++i)
{
- unsigned int ret = get_readback_uint(&rb, i, 0, 0);
+ unsigned int ret = get_readback_uint(&rb.rb, i, 0, 0);
ok(ret == i, "Got unexpected result %#x at index %u.\n", ret, i);
}
release_resource_readback(&rb);
@@ -24450,11 +24450,11 @@ static void test_execute_indirect(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
set_box(&box, 0, 0, 0, 32, 8, 1);
- check_readback_data_uint(&rb, &box, 0xffffff00, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xffffff00, 0);
set_box(&box, 24, 8, 0, 32, 32, 1);
- check_readback_data_uint(&rb, &box, 0xffffff00, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xffffff00, 0);
set_box(&box, 0, 8, 0, 24, 32, 1);
- check_readback_data_uint(&rb, &box, 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xff00ff00, 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -24497,7 +24497,7 @@ static void test_dispatch_zero_thread_groups(void)
ID3D12GraphicsCommandList *command_list;
D3D12_ROOT_PARAMETER root_parameters[2];
ID3D12Resource *argument_buffer, *uav;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
unsigned int ret, i;
@@ -24595,9 +24595,9 @@ static void test_dispatch_zero_thread_groups(void)
transition_sub_resource_state(command_list, uav, 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(uav, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- ret = get_readback_uint(&rb, 0, 0, 0);
+ ret = get_readback_uint(&rb.rb, 0, 0, 0);
ok(ret == 10, "Got unexpected result %#x.\n", ret);
- ret = get_readback_uint(&rb, 64, 0, 0);
+ ret = get_readback_uint(&rb.rb, 64, 0, 0);
ok(ret == 50, "Got unexpected result %#x.\n", ret);
release_resource_readback(&rb);
@@ -24784,12 +24784,12 @@ static void test_instance_id(void)
ID3D12GraphicsCommandList *command_list;
D3D12_INPUT_LAYOUT_DESC input_layout;
D3D12_CPU_DESCRIPTOR_HANDLE rtvs[2];
+ struct d3d12_resource_readback rb;
D3D12_VERTEX_BUFFER_VIEW vbv[3];
ID3D12Resource *argument_buffer;
ID3D12Resource *render_target;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
ID3D12Resource *vb[3];
unsigned int i, j;
@@ -25036,14 +25036,14 @@ static void test_instance_id(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
for (j = 0; j < ARRAY_SIZE(expected_results); ++j)
- check_readback_data_uint(&rb, &expected_results[j].box, tests[i].expected_colors[j], 1);
+ check_readback_data_uint(&rb.rb, &expected_results[j].box, tests[i].expected_colors[j], 1);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
transition_resource_state(command_list, render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(render_target, 0, &rb, queue, command_list);
for (j = 0; j < ARRAY_SIZE(expected_results); ++j)
- check_readback_data_uint(&rb, &expected_results[j].box, expected_results[j].instance_id, 0);
+ check_readback_data_uint(&rb.rb, &expected_results[j].box, expected_results[j].instance_id, 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -25203,11 +25203,11 @@ static void test_vertex_id(void)
ID3D12GraphicsCommandList *command_list;
D3D12_INPUT_LAYOUT_DESC input_layout;
D3D12_STREAM_OUTPUT_BUFFER_VIEW sobv;
+ struct d3d12_resource_readback rb;
ID3D12Resource *upload_buffer;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
D3D12_INDEX_BUFFER_VIEW ibv;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *vb, *ib;
@@ -25312,7 +25312,7 @@ static void test_vertex_id(void)
D3D12_RESOURCE_STATE_STREAM_OUT, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(counter_buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- count = get_readback_uint(&rb, 0, 0, 0);
+ count = get_readback_uint(&rb.rb, 0, 0, 0);
ok(count == ARRAY_SIZE(expected_values) * sizeof(struct vec4), "Got counter value %u, expected %uu.\n",
count, (unsigned int)(ARRAY_SIZE(expected_values) * sizeof(struct vec4)));
release_resource_readback(&rb);
@@ -25325,7 +25325,7 @@ static void test_vertex_id(void)
{
for (j = 0; j < count; ++j)
{
- if (!used_values[j] && compare_uvec4(get_readback_uvec4(&rb, j, 0), &expected_values[i]))
+ if (!used_values[j] && compare_uvec4(get_readback_uvec4(&rb.rb, j, 0), &expected_values[i]))
{
found_values[i] = true;
used_values[j] = true;
@@ -25336,7 +25336,7 @@ static void test_vertex_id(void)
for (i = 0; i < count; ++i)
{
- const struct uvec4 *v = get_readback_uvec4(&rb, i, 0);
+ const struct uvec4 *v = get_readback_uvec4(&rb.rb, i, 0);
ok(used_values[i], "Found unexpected value {0x%08x, 0x%08x, 0x%08x, 0x%08x}.\n", v->x, v->y, v->z, v->w);
}
release_resource_readback(&rb);
@@ -25365,10 +25365,10 @@ static void test_copy_texture(void)
ID3D12Resource *src_texture, *dst_texture;
ID3D12GraphicsCommandList *command_list;
D3D12_SUBRESOURCE_DATA texture_data;
+ struct d3d12_resource_readback rb;
struct depth_stencil_resource ds;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
ID3D12Device *device;
@@ -25472,7 +25472,7 @@ static void test_copy_texture(void)
{
for (x = 0; x < 4; ++x)
{
- unsigned int color = get_readback_uint(&rb, x, y, 0);
+ unsigned int color = get_readback_uint(&rb.rb, x, y, 0);
unsigned int expected = result_data[y * 4 + x];
ok(color == expected,
@@ -25554,10 +25554,10 @@ static void test_copy_texture_buffer(void)
D3D12_TEXTURE_COPY_LOCATION src_location, dst_location;
ID3D12GraphicsCommandList *command_list;
D3D12_SUBRESOURCE_DATA texture_data;
+ struct d3d12_resource_readback rb;
ID3D12Resource *dst_buffers[4];
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12Resource *src_texture;
unsigned int got, expected;
ID3D12CommandQueue *queue;
@@ -25653,7 +25653,7 @@ static void test_copy_texture_buffer(void)
get_buffer_readback_with_command_list(dst_buffers[0], DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
for (i = 0; i < 64 * 32; ++i)
{
- got = get_readback_uint(&rb, i, 0, 0);
+ got = get_readback_uint(&rb.rb, i, 0, 0);
expected = i;
if (got != expected)
@@ -25669,7 +25669,7 @@ static void test_copy_texture_buffer(void)
{
for (x = 0; x < 64; ++x)
{
- got = get_readback_uint(&rb, 64 * y + x, 0, 0);
+ got = get_readback_uint(&rb.rb, 64 * y + x, 0, 0);
expected = 64 * (31 - y) + x;
if (got != expected)
@@ -25688,7 +25688,7 @@ static void test_copy_texture_buffer(void)
{
for (x = 0; x < 64; ++x)
{
- got = get_readback_uint(&rb, 64 * y + x, 0, 0);
+ got = get_readback_uint(&rb.rb, 64 * y + x, 0, 0);
expected = 64 * y + 63 - x;
if (got != expected)
@@ -25707,7 +25707,7 @@ static void test_copy_texture_buffer(void)
{
for (x = 0; x < 64; ++x)
{
- got = get_readback_uint(&rb, 64 * y + x, 0, 0);
+ got = get_readback_uint(&rb.rb, 64 * y + x, 0, 0);
expected = 64 * y + x % 32;
if (got != expected)
@@ -25729,9 +25729,9 @@ static void test_copy_buffer_texture(void)
{
D3D12_TEXTURE_COPY_LOCATION src_location, dst_location;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12Resource *zero_buffer;
ID3D12Resource *dst_texture;
ID3D12Resource *src_buffer;
@@ -25844,7 +25844,7 @@ static void test_copy_buffer_texture(void)
{
for (x = 0; x < 128; ++x)
{
- got = get_readback_uint(&rb, x, y, z);
+ got = get_readback_uint(&rb.rb, x, y, z);
if (2 <= x && x < 6 && 2 <= y && y < 6 && 2 <= z && z < 6)
expected = (z - 1) << 16 | (y - 1) << 8 | (x - 1); /* copy region 1 */
@@ -25876,7 +25876,7 @@ static void test_copy_buffer_texture(void)
{
for (x = 0; x < 64; ++x)
{
- got = get_readback_uint(&rb, x, y, z);
+ got = get_readback_uint(&rb.rb, x, y, z);
expected = (z + 1) << 16 | (y + 1) << 8 | (x + 1);
if (got != expected)
@@ -25904,10 +25904,10 @@ static void test_copy_block_compressed_texture(void)
D3D12_TEXTURE_COPY_LOCATION src_location, dst_location;
ID3D12Resource *dst_buffer, *src_buffer;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
unsigned int x, y, block_id;
struct test_context context;
- struct resource_readback rb;
struct uvec4 got, expected;
ID3D12CommandQueue *queue;
ID3D12Resource *texture;
@@ -26030,7 +26030,7 @@ static void test_copy_block_compressed_texture(void)
expected.y = block_id << 8 | 1;
expected.z = block_id << 8 | 2;
expected.w = block_id << 8 | 3;
- got = *get_readback_uvec4(&rb, x, y);
+ got = *get_readback_uvec4(&rb.rb, x, y);
if (!compare_uvec4(&got, &expected))
break;
@@ -26050,7 +26050,7 @@ static void test_copy_block_compressed_texture(void)
expected.y = block_id << 8 | 1;
expected.z = block_id << 8 | 2;
expected.w = block_id << 8 | 3;
- got = *get_readback_uvec4(&rb, 0, 0);
+ got = *get_readback_uvec4(&rb.rb, 0, 0);
release_resource_readback(&rb);
ok(compare_uvec4(&got, &expected),
"Got {0x%08x, 0x%08x, 0x%08x, 0x%08x}, expected {0x%08x, 0x%08x, 0x%08x, 0x%08x}.\n",
@@ -26063,7 +26063,7 @@ static void test_copy_block_compressed_texture(void)
expected.y = block_id << 8 | 1;
expected.z = block_id << 8 | 2;
expected.w = block_id << 8 | 3;
- got = *get_readback_uvec4(&rb, 0, 0);
+ got = *get_readback_uvec4(&rb.rb, 0, 0);
release_resource_readback(&rb);
ok(compare_uvec4(&got, &expected),
"Got {0x%08x, 0x%08x, 0x%08x, 0x%08x}, expected {0x%08x, 0x%08x, 0x%08x, 0x%08x}.\n",
@@ -26090,7 +26090,7 @@ static void test_copy_block_compressed_texture(void)
expected.y = block_id << 8 | 1;
expected.z = block_id << 8 | 2;
expected.w = block_id << 8 | 3;
- got = *get_readback_uvec4(&rb, x + row_offset, 0);
+ got = *get_readback_uvec4(&rb.rb, x + row_offset, 0);
if (!compare_uvec4(&got, &expected))
break;
@@ -26118,10 +26118,10 @@ static void test_separate_bindings(void)
D3D12_DESCRIPTOR_RANGE descriptor_ranges[2];
ID3D12GraphicsCommandList *command_list;
D3D12_ROOT_PARAMETER root_parameters[4];
+ struct d3d12_resource_readback rb;
ID3D12PipelineState *compute_pso;
ID3D12Resource *cs_cb, *ps_cb;
struct test_context_desc desc;
- struct resource_readback rb;
D3D12_SUBRESOURCE_DATA data;
struct test_context context;
ID3D12DescriptorHeap *heap;
@@ -26409,7 +26409,7 @@ static void test_separate_bindings(void)
transition_resource_state(command_list, cs_raw_uav_buffer,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(cs_raw_uav_buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- check_readback_data_uint(&rb, NULL, 0xffffffff, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xffffffff, 0);
release_resource_readback(&rb);
ID3D12Resource_Release(cs_cb);
@@ -26796,9 +26796,9 @@ static void test_geometry_shader(void)
D3D12_INPUT_LAYOUT_DESC input_layout;
D3D12_CPU_DESCRIPTOR_HANDLE rtvs[2];
ID3D12PipelineState *pso_5_0, *pso;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *texture;
@@ -27023,29 +27023,29 @@ static void test_geometry_shader(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- color = get_readback_uint(&rb, 320, 190, 0);
+ color = get_readback_uint(&rb.rb, 320, 190, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 255, 240, 0);
+ color = get_readback_uint(&rb.rb, 255, 240, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 320, 240, 0);
+ color = get_readback_uint(&rb.rb, 320, 240, 0);
ok(compare_color(color, 0xffffff00, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 385, 240, 0);
+ color = get_readback_uint(&rb.rb, 385, 240, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 320, 290, 0);
+ color = get_readback_uint(&rb.rb, 320, 290, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
get_texture_readback_with_command_list(texture, 0, &rb, queue, command_list);
- color = get_readback_uint(&rb, 320, 190, 0);
+ color = get_readback_uint(&rb.rb, 320, 190, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 255, 240, 0);
+ color = get_readback_uint(&rb.rb, 255, 240, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 320, 240, 0);
+ color = get_readback_uint(&rb.rb, 320, 240, 0);
ok(compare_color(color, 0xffffff00, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 385, 240, 0);
+ color = get_readback_uint(&rb.rb, 385, 240, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 320, 290, 0);
+ color = get_readback_uint(&rb.rb, 320, 290, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
@@ -27938,9 +27938,9 @@ static void test_quad_tessellation(void)
D3D12_QUERY_HEAP_DESC query_heap_desc;
D3D12_STREAM_OUTPUT_BUFFER_VIEW sobv;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
- struct resource_readback rb;
ID3D12QueryHeap *query_heap;
struct test_context context;
ID3D12CommandQueue *queue;
@@ -28042,7 +28042,7 @@ static void test_quad_tessellation(void)
transition_resource_state(command_list, so_buffer,
D3D12_RESOURCE_STATE_STREAM_OUT, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(so_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
- check_triangles(&rb, expected_quad_ccw, ARRAY_SIZE(expected_quad_ccw));
+ check_triangles(&rb.rb, expected_quad_ccw, ARRAY_SIZE(expected_quad_ccw));
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -28083,7 +28083,7 @@ static void test_quad_tessellation(void)
transition_resource_state(command_list, so_buffer,
D3D12_RESOURCE_STATE_STREAM_OUT, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(so_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
- check_triangles(&rb, expected_quad_cw, ARRAY_SIZE(expected_quad_cw));
+ check_triangles(&rb.rb, expected_quad_cw, ARRAY_SIZE(expected_quad_cw));
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -28129,7 +28129,7 @@ static void test_quad_tessellation(void)
query_heap, D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0, 0, 2, readback_buffer, 0);
get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
- so_statistics = get_readback_data(&rb, 0, 0, 0, sizeof(*so_statistics));
+ so_statistics = get_readback_data(&rb.rb, 0, 0, 0, sizeof(*so_statistics));
ok(so_statistics[0].NumPrimitivesWritten == 8, "Got unexpected primitives written %u.\n",
(unsigned int)so_statistics[0].NumPrimitivesWritten);
ok(so_statistics[0].PrimitivesStorageNeeded == 8, "Got unexpected primitives storage needed %u.\n",
@@ -28730,9 +28730,9 @@ static void test_line_tessellation(void)
D3D12_QUERY_HEAP_DESC query_heap_desc;
D3D12_STREAM_OUTPUT_BUFFER_VIEW sobv[2];
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
- struct resource_readback rb;
ID3D12QueryHeap *query_heap;
struct test_context context;
const struct vec4 *expected;
@@ -29011,7 +29011,7 @@ static void test_line_tessellation(void)
query_heap, D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0, 0, 1, readback_buffer, 0);
get_buffer_readback_with_command_list(readback_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
- so_statistics = get_readback_data(&rb, 0, 0, 0, sizeof(*so_statistics));
+ so_statistics = get_readback_data(&rb.rb, 0, 0, 0, sizeof(*so_statistics));
broken_warp = broken_on_warp(so_statistics[0].NumPrimitivesWritten != 9);
ok(so_statistics[0].NumPrimitivesWritten == 9 || broken_warp, "Got unexpected primitives written %u.\n",
(unsigned int)so_statistics[0].NumPrimitivesWritten);
@@ -29031,12 +29031,12 @@ static void test_line_tessellation(void)
get_buffer_readback_with_command_list(so_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
for (i = 0; i < ARRAY_SIZE(expected_data) / 3 ; ++i)
{
- data = get_readback_data(&rb, i, 0, 0, sizeof(*data));
+ data = get_readback_data(&rb.rb, i, 0, 0, sizeof(*data));
expected = &expected_data[3 * i + 0];
ok(compare_vec4(data, expected, 1),
"Got position {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e} at %u.\n",
data->x, data->y, data->z, data->w, expected->x, expected->y, expected->z, expected->w, i);
- data = get_readback_data(&rb, i + 2048 / (2 * sizeof(*data)), 0, 0, 2 * sizeof(*data));
+ data = get_readback_data(&rb.rb, i + 2048 / (2 * sizeof(*data)), 0, 0, 2 * sizeof(*data));
expected = &expected_data[3 * i + 1];
bug_if(is_nvidia_device(context.device))
ok(compare_vec4(data, expected, 1),
@@ -29387,8 +29387,8 @@ static void test_domain_shader_inputs(void)
ID3D12GraphicsCommandList *command_list;
D3D12_STREAM_OUTPUT_BUFFER_VIEW sobv;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12Resource *so_buffer;
ID3D12CommandQueue *queue;
@@ -29573,7 +29573,7 @@ static void test_domain_shader_inputs(void)
get_buffer_readback_with_command_list(so_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
for (y = 0; y < ARRAY_SIZE(reference); ++y)
{
- const float *elems = get_readback_data(&rb, y, 0, 0, stride);
+ const float *elems = get_readback_data(&rb.rb, y, 0, 0, stride);
for (x = 0; x < ARRAY_SIZE(*reference); ++x)
{
ok(compare_float(reference[y][x], elems[x], 0),
@@ -29592,8 +29592,8 @@ static void test_domain_shader_one_patch_constant_input(void)
ID3D12GraphicsCommandList *command_list;
D3D12_STREAM_OUTPUT_BUFFER_VIEW sobv;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12Resource *so_buffer;
ID3D12CommandQueue *queue;
@@ -29747,7 +29747,7 @@ static void test_domain_shader_one_patch_constant_input(void)
get_buffer_readback_with_command_list(so_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
for (y = 0; y < ARRAY_SIZE(reference); ++y)
{
- const float *elems = get_readback_data(&rb, y, 0, 0, stride);
+ const float *elems = get_readback_data(&rb.rb, y, 0, 0, stride);
for (x = 0; x < ARRAY_SIZE(*reference); ++x)
{
ok(compare_float(reference[y][x], elems[x], 0),
@@ -29951,7 +29951,7 @@ static void check_clip_distance(struct test_context *context, ID3D12PipelineStat
ID3D12GraphicsCommandList *command_list = context->list;
ID3D12CommandQueue *queue = context->queue;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct vertex vertices[4];
unsigned int i;
D3D12_BOX box;
@@ -30064,9 +30064,9 @@ static void check_clip_distance(struct test_context *context, ID3D12PipelineStat
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context->render_target, 0, &rb, queue, command_list);
set_box(&box, 0, 0, 0, 320, 480, 1);
- check_readback_data_uint(&rb, &box, 0xff00ff00, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xff00ff00, 1);
set_box(&box, 320, 0, 0, 320, 480, 1);
- check_readback_data_uint(&rb, &box, 0xffffffff, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xffffffff, 1);
release_resource_readback(&rb);
reset_command_list(command_list, context->allocator);
@@ -30097,9 +30097,9 @@ static void check_clip_distance(struct test_context *context, ID3D12PipelineStat
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context->render_target, 0, &rb, queue, command_list);
set_box(&box, 0, 0, 0, 640, 240, 1);
- check_readback_data_uint(&rb, &box, 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xff00ff00, 0);
set_box(&box, 0, 240, 0, 640, 240, 1);
- check_readback_data_uint(&rb, &box, 0xffffffff, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xffffffff, 0);
release_resource_readback(&rb);
reset_command_list(command_list, context->allocator);
@@ -30115,9 +30115,9 @@ static void test_clip_distance(void)
D3D12_ROOT_PARAMETER root_parameters[4];
ID3D12GraphicsCommandList *command_list;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
D3D12_VERTEX_BUFFER_VIEW vbv[2];
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12PipelineState *pso;
@@ -30738,11 +30738,11 @@ static void test_clip_distance(void)
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
set_box(&box, 0, 0, 0, 320, 240, 1);
- check_readback_data_uint(&rb, &box, 0xff00ff00, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xff00ff00, 1);
set_box(&box, 0, 240, 0, 320, 480, 1);
- check_readback_data_uint(&rb, &box, 0xffffffff, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xffffffff, 1);
set_box(&box, 320, 0, 0, 640, 480, 1);
- check_readback_data_uint(&rb, &box, 0xffffffff, 1);
+ check_readback_data_uint(&rb.rb, &box, 0xffffffff, 1);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -30787,10 +30787,10 @@ static void test_combined_clip_and_cull_distances(void)
{
ID3D12GraphicsCommandList *command_list;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
D3D12_VERTEX_BUFFER_VIEW vbv[2];
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
ID3D12Resource *vb[2];
ID3D12Device *device;
@@ -30996,9 +30996,9 @@ static void test_combined_clip_and_cull_distances(void)
else
{
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- color = get_readback_uint(&rb, 160, 240, 0);
+ color = get_readback_uint(&rb.rb, 160, 240, 0);
ok(color == expected_color[0], "Got unexpected color 0x%08x.\n", color);
- color = get_readback_uint(&rb, 480, 240, 0);
+ color = get_readback_uint(&rb.rb, 480, 240, 0);
ok(color == expected_color[1], "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
}
@@ -31203,9 +31203,9 @@ static void test_64kb_texture_alignment(void)
ID3D12GraphicsCommandList *command_list;
D3D12_RESOURCE_ALLOCATION_INFO info;
D3D12_SUBRESOURCE_DATA texture_data;
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
struct test_context context;
- struct resource_readback rb;
ID3D12Resource *textures[2];
D3D12_HEAP_DESC heap_desc;
ID3D12CommandQueue *queue;
@@ -31283,7 +31283,7 @@ static void test_64kb_texture_alignment(void)
D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(textures[1], 0, &rb, queue, command_list);
set_box(&box, 0, 0, 0, resource_desc.Width, resource_desc.Height, 1);
- check_readback_data_uint(&rb, &box, 0xcafef00d, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xcafef00d, 0);
release_resource_readback(&rb);
ID3D12Resource_Release(textures[1]);
@@ -31295,7 +31295,7 @@ static void test_64kb_texture_alignment(void)
/* If the heap could not be used, the texture is not aliased. */
reset_command_list(command_list, context.allocator);
get_texture_readback_with_command_list(textures[1], 0, &rb, queue, command_list);
- check_readback_data_uint(&rb, &box, 0xdeadbeef, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xdeadbeef, 0);
release_resource_readback(&rb);
free(upload_buffer);
@@ -32277,9 +32277,9 @@ static void test_shader_sample_position(void)
ID3D12Resource *texture, *readback_texture;
ID3D12GraphicsCommandList *command_list;
D3D12_HEAP_PROPERTIES heap_properties;
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
@@ -32378,7 +32378,7 @@ static void test_shader_sample_position(void)
get_texture_readback_with_command_list(readback_texture, 0, &rb, queue, command_list);
for (i = 0; i < resource_desc.SampleDesc.Count; ++i)
{
- const struct vec4 *position = get_readback_vec4(&rb, i, 0);
+ const struct vec4 *position = get_readback_vec4(&rb.rb, i, 0);
vkd3d_test_set_context("Sample %u", i);
@@ -32589,11 +32589,11 @@ static void test_primitive_restart(void)
D3D12_GRAPHICS_PIPELINE_STATE_DESC pso_desc;
ID3D12GraphicsCommandList *command_list;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
struct test_context context;
D3D12_INDEX_BUFFER_VIEW ibv;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
unsigned int index_count;
ID3D12Resource *ib, *vb;
@@ -32731,15 +32731,15 @@ static void test_primitive_restart(void)
if (tests[i].full_quad)
{
todo_if(tests[i].is_todo)
- check_readback_data_uint(&rb, NULL, 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xff00ff00, 0);
}
else
{
set_box(&box, 16, 0, 0, 32, 10, 1);
todo_if(tests[i].is_todo)
- check_readback_data_uint(&rb, &box, 0xffffffff, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xffffffff, 0);
set_box(&box, 0, 16, 0, 16, 32, 1);
- check_readback_data_uint(&rb, &box, 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, &box, 0xff00ff00, 0);
}
release_resource_readback(&rb);
@@ -32763,9 +32763,9 @@ static void test_vertex_shader_stream_output(void)
ID3D12Resource *counter_buffer, *so_buffer;
ID3D12GraphicsCommandList *command_list;
D3D12_STREAM_OUTPUT_BUFFER_VIEW sobv;
+ struct d3d12_resource_readback rb;
ID3D12Resource *upload_buffer;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
unsigned int counter, i;
@@ -32841,7 +32841,7 @@ static void test_vertex_shader_stream_output(void)
D3D12_RESOURCE_STATE_STREAM_OUT, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(counter_buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- counter = get_readback_uint(&rb, 0, 0, 0);
+ counter = get_readback_uint(&rb.rb, 0, 0, 0);
ok(counter == 3 * sizeof(struct vec4), "Got unexpected counter %u.\n", counter);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -32849,7 +32849,7 @@ static void test_vertex_shader_stream_output(void)
for (i = 0; i < ARRAY_SIZE(expected_output); ++i)
{
const struct vec4 *expected = &expected_output[i];
- data = get_readback_vec4(&rb, i, 0);
+ data = get_readback_vec4(&rb.rb, i, 0);
ok(compare_vec4(data, expected, 1),
"Got {%.8e, %.8e, %.8e, %.8e}, expected {%.8e, %.8e, %.8e, %.8e}.\n",
data->x, data->y, data->z, data->w, expected->x, expected->y, expected->z, expected->w);
@@ -32869,10 +32869,10 @@ static void test_read_write_subresource(void)
ID3D12GraphicsCommandList *command_list;
D3D12_HEAP_PROPERTIES heap_properties;
D3D12_SUBRESOURCE_DATA texture_data;
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
struct test_context_desc desc;
struct test_context context;
- struct resource_readback rb;
ID3D12Resource *src_texture;
ID3D12Resource *dst_texture;
ID3D12CommandQueue *queue;
@@ -33106,7 +33106,7 @@ static void test_read_write_subresource(void)
else /* Untouched */
expected = 0;
- got = get_readback_uint(&rb, x, y, z);
+ got = get_readback_uint(&rb.rb, x, y, z);
if (got != expected)
break;
}
@@ -33180,10 +33180,10 @@ static void test_queue_wait(void)
ID3D12GraphicsCommandList *command_list;
ID3D12Resource *readback_buffer, *cb;
ID3D12CommandQueue *queue, *queue2;
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
uint64_t row_pitch, buffer_size;
struct test_context_desc desc;
- struct resource_readback rb;
ID3D12Fence *fence, *fence2;
struct test_context context;
ID3D12Device *device;
@@ -33286,7 +33286,7 @@ static void test_queue_wait(void)
exec_command_list(queue, command_list);
wait_queue_idle(device, queue);
init_readback(&rb, readback_buffer, buffer_size, resource_desc.Width, resource_desc.Height, 1, row_pitch);
- check_readback_data_uint(&rb, NULL, 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xff00ff00, 0);
release_resource_readback(&rb);
/* Wait() before CPU signal */
@@ -33299,7 +33299,7 @@ static void test_queue_wait(void)
ret = wait_event(event, 0);
ok(ret == WAIT_TIMEOUT, "Got unexpected return value %#x.\n", ret);
init_readback(&rb, readback_buffer, buffer_size, resource_desc.Width, resource_desc.Height, 1, row_pitch);
- check_readback_data_uint(&rb, NULL, 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xff00ff00, 0);
release_resource_readback(&rb);
value = ID3D12Fence_GetCompletedValue(fence2);
ok(value == 0, "Got unexpected value %"PRIu64".\n", value);
@@ -33311,7 +33311,7 @@ static void test_queue_wait(void)
ret = wait_event(event, 0);
ok(ret == WAIT_TIMEOUT, "Got unexpected return value %#x.\n", ret);
init_readback(&rb, readback_buffer, buffer_size, resource_desc.Width, resource_desc.Height, 1, row_pitch);
- check_readback_data_uint(&rb, NULL, 0xffff0000, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xffff0000, 0);
release_resource_readback(&rb);
value = ID3D12Fence_GetCompletedValue(fence2);
ok(value == 1, "Got unexpected value %"PRIu64".\n", value);
@@ -33326,7 +33326,7 @@ static void test_queue_wait(void)
ret = wait_event(event, 0);
ok(ret == WAIT_TIMEOUT, "Got unexpected return value %#x.\n", ret);
init_readback(&rb, readback_buffer, buffer_size, resource_desc.Width, resource_desc.Height, 1, row_pitch);
- check_readback_data_uint(&rb, NULL, 0xffff0000, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xffff0000, 0);
release_resource_readback(&rb);
value = ID3D12Fence_GetCompletedValue(fence2);
ok(value == 1, "Got unexpected value %"PRIu64".\n", value);
@@ -33337,7 +33337,7 @@ static void test_queue_wait(void)
ret = wait_event(event, 0);
ok(ret == WAIT_TIMEOUT, "Got unexpected return value %#x.\n", ret);
init_readback(&rb, readback_buffer, buffer_size, resource_desc.Width, resource_desc.Height, 1, row_pitch);
- check_readback_data_uint(&rb, NULL, 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xff00ff00, 0);
release_resource_readback(&rb);
value = ID3D12Fence_GetCompletedValue(fence2);
ok(value == 2, "Got unexpected value %"PRIu64".\n", value);
@@ -33352,7 +33352,7 @@ static void test_queue_wait(void)
ok(hr == S_OK, "Failed to signal fence, hr %#x.\n", hr);
wait_queue_idle(device, queue);
init_readback(&rb, readback_buffer, buffer_size, resource_desc.Width, resource_desc.Height, 1, row_pitch);
- check_readback_data_uint(&rb, NULL, 0xffff0000, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xffff0000, 0);
release_resource_readback(&rb);
/* signal to a lower value after a GPU wait was used (test timeline semaphore replacement) */
@@ -33367,7 +33367,7 @@ static void test_queue_wait(void)
exec_command_list(queue, command_list);
wait_queue_idle(device, queue);
init_readback(&rb, readback_buffer, buffer_size, resource_desc.Width, resource_desc.Height, 1, row_pitch);
- check_readback_data_uint(&rb, NULL, 0xff00ff00, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xff00ff00, 0);
release_resource_readback(&rb);
/* Signal() and Wait() in the same command queue */
@@ -33377,7 +33377,7 @@ static void test_queue_wait(void)
exec_command_list(queue, command_list);
wait_queue_idle(device, queue);
init_readback(&rb, readback_buffer, buffer_size, resource_desc.Width, resource_desc.Height, 1, row_pitch);
- check_readback_data_uint(&rb, NULL, 0xffff0000, 0);
+ check_readback_data_uint(&rb.rb, NULL, 0xffff0000, 0);
release_resource_readback(&rb);
value = ID3D12Fence_GetCompletedValue(fence);
@@ -33403,8 +33403,8 @@ static void test_graphics_compute_queue_synchronization(void)
ID3D12GraphicsCommandList *command_list;
D3D12_ROOT_PARAMETER root_parameters[2];
ID3D12CommandAllocator *allocators[3];
+ struct d3d12_resource_readback rb;
struct test_context_desc desc;
- struct resource_readback rb;
struct test_context context;
ID3D12Fence *fence, *fence2;
ID3D12Resource *buffer;
@@ -33590,7 +33590,7 @@ static void test_graphics_compute_queue_synchronization(void)
transition_resource_state(command_list, buffer,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- value = get_readback_uint(&rb, 0, 0, 0);
+ value = get_readback_uint(&rb.rb, 0, 0, 0);
ok(value == 24, "Got unexpected value %u.\n", value);
release_resource_readback(&rb);
@@ -33787,10 +33787,10 @@ static void test_conditional_rendering(void)
D3D12_HEAP_PROPERTIES heap_properties;
ID3D12PipelineState *pipeline_state;
ID3D12RootSignature *root_signature;
+ struct d3d12_resource_readback rb;
D3D12_RESOURCE_DESC resource_desc;
struct test_context context;
ID3D12Resource *buffer, *cb;
- struct resource_readback rb;
ID3D12CommandQueue *queue;
unsigned int i;
uint32_t value;
@@ -33906,7 +33906,7 @@ static void test_conditional_rendering(void)
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
bug_if(is_radv_device(context.device))
- todo check_readback_data_uint(&rb, NULL, 0xffffffff, 0);
+ todo check_readback_data_uint(&rb.rb, NULL, 0xffffffff, 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -33958,7 +33958,7 @@ static void test_conditional_rendering(void)
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(context.render_target, 0, &rb, queue, command_list);
- todo check_readback_data_uint(&rb, NULL, 0xffffffff, 0);
+ todo check_readback_data_uint(&rb.rb, NULL, 0xffffffff, 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
transition_resource_state(command_list, context.render_target,
@@ -34075,7 +34075,7 @@ static void test_conditional_rendering(void)
D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(texture_copy, 0, &rb, queue, command_list);
- todo check_readback_data_uint(&rb, NULL, r8g8b8a8_data[1], 0);
+ todo check_readback_data_uint(&rb.rb, NULL, r8g8b8a8_data[1], 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -34141,7 +34141,7 @@ static void test_conditional_rendering(void)
get_texture_readback_with_command_list(texture_copy, 0, &rb, queue, command_list);
bug_if(is_radv_device(context.device))
- todo check_readback_data_uint(&rb, NULL, r8g8b8a8_data[1], 0);
+ todo check_readback_data_uint(&rb.rb, NULL, r8g8b8a8_data[1], 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -34205,7 +34205,7 @@ static void test_conditional_rendering(void)
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- value = get_readback_uint(&rb, 0, 0, 0);
+ value = get_readback_uint(&rb.rb, 0, 0, 0);
ok(value == (!i ? init_value : input.value), "Got %#x, expected %#x.\n", value, input.value);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -34596,7 +34596,7 @@ static void test_write_buffer_immediate(void)
ID3D12GraphicsCommandList2 *command_list2;
D3D12_WRITEBUFFERIMMEDIATE_MODE modes[2];
ID3D12GraphicsCommandList *command_list;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Resource *buffer;
@@ -34637,9 +34637,9 @@ static void test_write_buffer_immediate(void)
reset_command_list(command_list, context.allocator);
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- value = get_readback_uint(&rb, 0, 0, 0);
+ value = get_readback_uint(&rb.rb, 0, 0, 0);
todo ok(value == parameters[0].Value, "Got unexpected value %#x, expected %#x.\n", value, parameters[0].Value);
- value = get_readback_uint(&rb, 1, 0, 0);
+ value = get_readback_uint(&rb.rb, 1, 0, 0);
todo ok(value == parameters[1].Value, "Got unexpected value %#x, expected %#x.\n", value, parameters[1].Value);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -34656,9 +34656,9 @@ static void test_write_buffer_immediate(void)
reset_command_list(command_list, context.allocator);
get_buffer_readback_with_command_list(buffer, DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- value = get_readback_uint(&rb, 0, 0, 0);
+ value = get_readback_uint(&rb.rb, 0, 0, 0);
todo ok(value == parameters[0].Value, "Got unexpected value %#x, expected %#x.\n", value, parameters[0].Value);
- value = get_readback_uint(&rb, 1, 0, 0);
+ value = get_readback_uint(&rb.rb, 1, 0, 0);
todo ok(value == parameters[1].Value, "Got unexpected value %#x, expected %#x.\n", value, parameters[1].Value);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
@@ -35037,10 +35037,10 @@ static void test_hull_shader_relative_addressing(void)
D3D12_ROOT_PARAMETER root_parameters[1];
D3D12_STREAM_OUTPUT_BUFFER_VIEW sobv;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
ID3D12Resource *vb, *so_buffer;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
HRESULT hr;
@@ -35261,7 +35261,7 @@ static void test_hull_shader_relative_addressing(void)
transition_resource_state(command_list, so_buffer,
D3D12_RESOURCE_STATE_STREAM_OUT, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(so_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
- check_triangles(&rb, &expected_triangle, 1);
+ check_triangles(&rb.rb, &expected_triangle, 1);
release_resource_readback(&rb);
ID3D12Resource_Release(so_buffer);
@@ -35275,10 +35275,10 @@ static void test_hull_shader_patch_constant_inputs(void)
ID3D12GraphicsCommandList *command_list;
D3D12_STREAM_OUTPUT_BUFFER_VIEW sobv;
D3D12_INPUT_LAYOUT_DESC input_layout;
+ struct d3d12_resource_readback rb;
ID3D12Resource *vb, *so_buffer;
struct test_context_desc desc;
D3D12_VERTEX_BUFFER_VIEW vbv;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
HRESULT hr;
@@ -35493,7 +35493,7 @@ static void test_hull_shader_patch_constant_inputs(void)
transition_resource_state(command_list, so_buffer,
D3D12_RESOURCE_STATE_STREAM_OUT, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(so_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
- check_triangles(&rb, &expected_triangle, 1);
+ check_triangles(&rb.rb, &expected_triangle, 1);
release_resource_readback(&rb);
ID3D12Resource_Release(so_buffer);
@@ -35508,8 +35508,8 @@ static void test_resource_arrays(void)
D3D12_UNORDERED_ACCESS_VIEW_DESC uav_desc;
D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
unsigned int descriptor_count;
- struct resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
@@ -35682,7 +35682,7 @@ static void test_resource_arrays(void)
transition_sub_resource_state(command_list, output_buffers[i], 0,
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(output_buffers[i], DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
- check_readback_data_uint(&rb, NULL, uav_data[i], 0);
+ check_readback_data_uint(&rb.rb, NULL, uav_data[i], 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
}
@@ -35704,7 +35704,7 @@ static void test_unbounded_resource_arrays(void)
D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc;
D3D12_CONSTANT_BUFFER_VIEW_DESC cbv_desc;
ID3D12GraphicsCommandList *command_list;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
struct test_context context;
ID3D12DescriptorHeap *heap;
ID3D12CommandQueue *queue;
@@ -35861,7 +35861,7 @@ static void test_unbounded_resource_arrays(void)
D3D12_RESOURCE_STATE_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_buffer_readback_with_command_list(output_buffers[i], DXGI_FORMAT_R32_UINT, &rb, queue, command_list);
/* Buffers at index >= 64 are aliased. */
- check_readback_data_uint(&rb, NULL, (i < 64 ? 63 - i : 127 - i) ^ 0x35, 0);
+ check_readback_data_uint(&rb.rb, NULL, (i < 64 ? 63 - i : 127 - i) ^ 0x35, 0);
release_resource_readback(&rb);
reset_command_list(command_list, context.allocator);
}
@@ -35884,9 +35884,9 @@ static void test_unbounded_samplers(void)
D3D12_ROOT_SIGNATURE_DESC root_signature_desc;
D3D12_SHADER_RESOURCE_VIEW_DESC srv_desc;
ID3D12GraphicsCommandList *command_list;
+ struct d3d12_resource_readback rb;
D3D12_SAMPLER_DESC sampler_desc;
D3D12_SUBRESOURCE_DATA data;
- struct resource_readback rb;
struct test_context context;
ID3D12CommandQueue *queue;
ID3D12Device *device;
@@ -36005,7 +36005,7 @@ static void test_unbounded_samplers(void)
get_buffer_readback_with_command_list(output_buffer, DXGI_FORMAT_UNKNOWN, &rb, queue, command_list);
for (i = 0; i < 64; ++i)
{
- unsigned int value = get_readback_uint(&rb, i, 0, 0);
+ unsigned int value = get_readback_uint(&rb.rb, i, 0, 0);
unsigned int expected = (i & 1) ? 100 : 10;
ok(value == expected, "Got %u, expected %u at %u.\n", value, expected, i);
}
diff --git a/tests/d3d12_test_utils.h b/tests/d3d12_test_utils.h
index bb298082..061931c2 100644
--- a/tests/d3d12_test_utils.h
+++ b/tests/d3d12_test_utils.h
@@ -416,13 +416,18 @@ struct resource_readback
uint64_t width;
unsigned int height;
unsigned int depth;
- ID3D12Resource *resource;
uint64_t row_pitch;
void *data;
};
+struct d3d12_resource_readback
+{
+ struct resource_readback rb;
+ ID3D12Resource *resource;
+};
+
static void get_texture_readback_with_command_list(ID3D12Resource *texture, unsigned int sub_resource,
- struct resource_readback *rb, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list)
+ struct d3d12_resource_readback *rb, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list)
{
D3D12_TEXTURE_COPY_LOCATION dst_location, src_location;
D3D12_HEAP_PROPERTIES heap_properties;
@@ -442,14 +447,14 @@ static void get_texture_readback_with_command_list(ID3D12Resource *texture, unsi
"Resource %p is not texture.\n", texture);
miplevel = sub_resource % resource_desc.MipLevels;
- rb->width = max(1, resource_desc.Width >> miplevel);
- rb->width = align(rb->width, format_block_width(resource_desc.Format));
- rb->height = max(1, resource_desc.Height >> miplevel);
- rb->height = align(rb->height, format_block_height(resource_desc.Format));
- rb->depth = resource_desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D
+ rb->rb.width = max(1, resource_desc.Width >> miplevel);
+ rb->rb.width = align(rb->rb.width, format_block_width(resource_desc.Format));
+ rb->rb.height = max(1, resource_desc.Height >> miplevel);
+ rb->rb.height = align(rb->rb.height, format_block_height(resource_desc.Format));
+ rb->rb.depth = resource_desc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D
? max(1, resource_desc.DepthOrArraySize >> miplevel) : 1;
- rb->row_pitch = align(rb->width * format_size(resource_desc.Format), D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
- rb->data = NULL;
+ rb->rb.row_pitch = align(rb->rb.width * format_size(resource_desc.Format), D3D12_TEXTURE_DATA_PITCH_ALIGNMENT);
+ rb->rb.data = NULL;
if (resource_desc.SampleDesc.Count > 1)
{
@@ -477,17 +482,17 @@ static void get_texture_readback_with_command_list(ID3D12Resource *texture, unsi
src_resource = texture;
}
- buffer_size = rb->row_pitch * rb->height * rb->depth;
+ buffer_size = rb->rb.row_pitch * rb->rb.height * rb->rb.depth;
rb->resource = create_readback_buffer(device, buffer_size);
dst_location.pResource = rb->resource;
dst_location.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;
dst_location.PlacedFootprint.Offset = 0;
dst_location.PlacedFootprint.Footprint.Format = resource_desc.Format;
- dst_location.PlacedFootprint.Footprint.Width = rb->width;
- dst_location.PlacedFootprint.Footprint.Height = rb->height;
- dst_location.PlacedFootprint.Footprint.Depth = rb->depth;
- dst_location.PlacedFootprint.Footprint.RowPitch = rb->row_pitch;
+ dst_location.PlacedFootprint.Footprint.Width = rb->rb.width;
+ dst_location.PlacedFootprint.Footprint.Height = rb->rb.height;
+ dst_location.PlacedFootprint.Footprint.Depth = rb->rb.depth;
+ dst_location.PlacedFootprint.Footprint.RowPitch = rb->rb.row_pitch;
src_location.pResource = src_resource;
src_location.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
@@ -506,7 +511,7 @@ static void get_texture_readback_with_command_list(ID3D12Resource *texture, unsi
read_range.Begin = 0;
read_range.End = buffer_size;
- hr = ID3D12Resource_Map(rb->resource, 0, &read_range, &rb->data);
+ hr = ID3D12Resource_Map(rb->resource, 0, &read_range, &rb->rb.data);
assert_that(hr == S_OK, "Failed to map readback buffer, hr %#x.\n", hr);
}
@@ -528,7 +533,7 @@ static const struct vec4 *get_readback_vec4(struct resource_readback *rb, unsign
return get_readback_data(rb, x, y, 0, sizeof(struct vec4));
}
-static void release_resource_readback(struct resource_readback *rb)
+static void release_resource_readback(struct d3d12_resource_readback *rb)
{
D3D12_RANGE range = {0, 0};
ID3D12Resource_Unmap(rb->resource, 0, &range);
@@ -604,10 +609,10 @@ static inline void check_sub_resource_uint_(unsigned int line, ID3D12Resource *t
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
unsigned int expected, unsigned int max_diff)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
get_texture_readback_with_command_list(texture, sub_resource_idx, &rb, queue, command_list);
- check_readback_data_uint_(line, &rb, NULL, expected, max_diff);
+ check_readback_data_uint_(line, &rb.rb, NULL, expected, max_diff);
release_resource_readback(&rb);
}
@@ -616,10 +621,10 @@ static inline void check_sub_resource_vec4_(unsigned int line, ID3D12Resource *t
unsigned int sub_resource_idx, ID3D12CommandQueue *queue, ID3D12GraphicsCommandList *command_list,
const struct vec4 *expected, unsigned int max_diff)
{
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
get_texture_readback_with_command_list(texture, sub_resource_idx, &rb, queue, command_list);
- check_readback_data_vec4_(line, &rb, NULL, expected, max_diff);
+ check_readback_data_vec4_(line, &rb.rb, NULL, expected, max_diff);
release_resource_readback(&rb);
}
diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c
index 1fa2a461..1a546f21 100644
--- a/tests/shader_runner_d3d12.c
+++ b/tests/shader_runner_d3d12.c
@@ -314,13 +314,13 @@ static void d3d12_runner_probe_vec4(struct shader_runner *r,
{
struct d3d12_shader_runner *runner = d3d12_shader_runner(r);
struct test_context *test_context = &runner->test_context;
- struct resource_readback rb;
+ struct d3d12_resource_readback rb;
transition_resource_state(test_context->list, test_context->render_target,
D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_COPY_SOURCE);
get_texture_readback_with_command_list(test_context->render_target, 0, &rb,
test_context->queue, test_context->list);
- todo_if (runner->r.is_todo) check_readback_data_vec4(&rb, rect, v, ulps);
+ todo_if (runner->r.is_todo) check_readback_data_vec4(&rb.rb, rect, v, ulps);
release_resource_readback(&rb);
reset_command_list(test_context->list, test_context->allocator);
transition_resource_state(test_context->list, test_context->render_target,
--
2.36.1
2
11
Andew, thanks for the build.
Here is the patch with Signed-off-by line.
Signed-off-by: Akihiro Sagawa <sagawa.aki(a)gmail.com>
---
dlls/winecoreaudio.drv/coremidi.c | 29 ++++++++++++++++++++++++++---
1 file changed, 26 insertions(+), 3 deletions(-)
2
1
This seems to work for me on Linux.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/160
3
13
v2: Support only D2D1_MAP_OPTIONS_READ and always use staging resource.
v3: Handle texture creation failure, fix staging resource leak.
Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru>
---
dlls/d2d1/bitmap.c | 53 ++++++++++++++++++++++++++++++++++++++--
dlls/d2d1/d2d1_private.h | 1 +
2 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/dlls/d2d1/bitmap.c b/dlls/d2d1/bitmap.c
index 971e3c7ff6b..a75a9be62be 100644
--- a/dlls/d2d1/bitmap.c
+++ b/dlls/d2d1/bitmap.c
@@ -66,6 +66,8 @@ static ULONG STDMETHODCALLTYPE d2d_bitmap_Release(ID2D1Bitmap1 *iface)
if (!refcount)
{
+ if (bitmap->staging_resource)
+ ID3D11Resource_Release(bitmap->staging_resource);
if (bitmap->srv)
ID3D11ShaderResourceView_Release(bitmap->srv);
if (bitmap->rtv)
@@ -229,9 +231,56 @@ static HRESULT STDMETHODCALLTYPE d2d_bitmap_GetSurface(ID2D1Bitmap1 *iface, IDXG
static HRESULT STDMETHODCALLTYPE d2d_bitmap_Map(ID2D1Bitmap1 *iface, D2D1_MAP_OPTIONS options,
D2D1_MAPPED_RECT *mapped_rect)
{
- FIXME("iface %p, options %#x, mapped_rect %p stub!\n", iface, options, mapped_rect);
+ struct d2d_bitmap *bitmap = impl_from_ID2D1Bitmap1(iface);
+ ID3D11Device *device;
+ ID3D11DeviceContext *context;
+ D3D11_TEXTURE2D_DESC texture_desc;
+ ID3D11Texture2D *staging_texture;
+ D3D11_MAPPED_SUBRESOURCE mapped_subresource;
+ HRESULT hr;
- return E_NOTIMPL;
+ TRACE("iface %p, options %#x, mapped_rect %p.\n", iface, options, mapped_rect);
+
+ if (options != D2D1_MAP_OPTIONS_READ)
+ {
+ FIXME("Unhandled map options %#x.\n", options);
+ return E_INVALIDARG;
+ }
+
+ if (!(bitmap->options & D2D1_BITMAP_OPTIONS_CPU_READ))
+ return E_INVALIDARG;
+
+ if (bitmap->staging_resource)
+ return D2DERR_WRONG_STATE;
+
+ ID3D11Resource_GetDevice(bitmap->resource, &device);
+ ID3D11Device_GetImmediateContext(device, &context);
+ ID3D11Texture2D_GetDesc((ID3D11Texture2D *)bitmap->resource, &texture_desc);
+
+ texture_desc.Usage = D3D11_USAGE_STAGING;
+ texture_desc.BindFlags = 0;
+ texture_desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
+ if (SUCCEEDED(hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &staging_texture)))
+ {
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)staging_texture, bitmap->resource);
+ if (SUCCEEDED(hr = ID3D11DeviceContext_Map(context, (ID3D11Resource *)staging_texture, 0,
+ D3D11_MAP_READ, 0, &mapped_subresource)))
+ {
+ mapped_rect->pitch = mapped_subresource.RowPitch;
+ mapped_rect->bits = mapped_subresource.pData;
+ bitmap->staging_resource = (ID3D11Resource *)staging_texture;
+ }
+ else
+ {
+ WARN("Failed to map resource, hr %#lx.\n", hr);
+ ID3D11Texture2D_Release(staging_texture);
+ }
+ }
+
+ ID3D11DeviceContext_Release(context);
+ ID3D11Device_Release(device);
+
+ return hr;
}
static HRESULT STDMETHODCALLTYPE d2d_bitmap_Unmap(ID2D1Bitmap1 *iface)
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h
index 8edfa030ee1..b886ac52dd9 100644
--- a/dlls/d2d1/d2d1_private.h
+++ b/dlls/d2d1/d2d1_private.h
@@ -395,6 +395,7 @@ struct d2d_bitmap
ID3D11RenderTargetView *rtv;
IDXGISurface *surface;
ID3D11Resource *resource;
+ ID3D11Resource *staging_resource;
D2D1_SIZE_U pixel_size;
D2D1_PIXEL_FORMAT format;
float dpi_x;
--
2.36.1
3
8
31 May '22