[PATCH v4 0/10] MR79: wined3d: Refactor format flags into two groups.

Zebediah Figura zfigura at codeweavers.com
Mon May 23 12:04:26 CDT 2022


On 5/20/22 19:25, Chip Davis (@cdavis5e) wrote:
> On Fri May 20 17:13:12 2022 +0000, **** wrote:
>> Zebediah Figura replied on the mailing list:
>> ```
>> On 5/20/22 04:06, Jan Sikorski (@jsikorski) wrote:
>>> On Fri May 20 09:06:20 2022 +0000, Chip Davis wrote:
>>>> @jsikorski, I have no way of verifying that I didn't break the tests on
>>>> Vulkan again. They crash on me at this moment.
>>> I get the same result. Do you get a crash in test_texture() and
>> test_compressed_format_compatibility() specifically? Those are the ones
>> that regress.
>>>
>> I'm getting the same errors with GL too, actually. They seem to be
>> triggered by patch 6/10 (the one moving BLOCKS etc.)
>> ```
>> I get the same result. Do you get a crash in test_texture() and test_compressed_format_compatibility() specifically? Those are the ones that regress.
> 
> I don't see those failures. With Vulkan, I see different crashes that have a lot to do with a) MoltenVK not implementing stuff that b) wined3d blindly assumes that a Vulkan implementation will have. I see crashes in `test_so_statistics_query()` and `test_clear_state()`. With OpenGL, it doesn't even actually run any tests.
> 
> This is supposed to be NFC. I don't see anything in the patch itself that would cause problems, yet clearly something is lurking there. Exactly what failures do you see?
> 

I get signs of memory corruption and GL_INVALID_OPERATION errors like 
the following:

0104:err:d3d:wined3d_debug_callback 000000000039BC80: "GL_INVALID_VALUE 
in glCompressedTexSubImage2D(size=512)".

I did a bit of debugging, and the following diff fixes things for me:

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 37846d980b7..50ccde057f0 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -3835,7 +3835,7 @@ static BOOL init_typeless_formats(const struct 
wined3d_adapter *adapter)
          attrs = typeless_format->attrs;
          memcpy(flags, typeless_format->flags, sizeof(flags));
          copy_format(adapter, typeless_format, format);
-        typeless_format->attrs = attrs;
+        typeless_format->attrs |= attrs;
          for (j = 0; j < ARRAY_SIZE(typeless_format->flags); ++j)
              typeless_format->flags[j] |= flags[j];
      }



More information about the wine-devel mailing list