I think I have a reasonable repro case to start plumbing: if I use this yaml file... ``` root: items: - type: "stacking-context" perspective: 100 perspective-origin: 100 100 items: - type: "stacking-context" filters: blur(2) transform: rotate-x(15) items: - image: checkerboard(2, 8, 64); bounds: [40, 40, 516, 516] - image: checkerboard(2, 32, 2); bounds: [700, 40, 68, 68] ``` ... and artifically lower `MAX_SURFACE_SIZE: f32 = 256.0` then it's interesting to see what happens in RenderDoc: * first we do the perspective warp into a render target; * then we ping-pong 2 passes to do the blur; * and that goes into a tile cache. The order of operations is thus different from what we get with regular "establishes a raster root": * first blit into a (larger) rendertarget, without perspective; * ping-pong 2 passes for blur; * apply the perspective warp when rasterizing into the tilecache. The latter sounds more correct based on guessing what the yaml's order of operations is supposed to be. Thus I think I can start the plumbing by using the order of operations as a test case: lower `MAX_SURFACE_SIZE` and hack away until it manages to do the latter set of renderpasses?
Bug 1613260 Comment 4 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
I think I have a reasonable repro case to start plumbing: if I use this yaml file... ``` root: items: - type: "stacking-context" perspective: 100 perspective-origin: 100 100 items: - type: "stacking-context" filters: blur(2) transform: rotate-x(15) items: - image: checkerboard(2, 8, 64); bounds: [40, 40, 516, 516] - image: checkerboard(2, 32, 2); bounds: [700, 40, 68, 68] ``` ... and artifically lower `MAX_SURFACE_SIZE: f32 = 256.0` (nested picture no longer establishes a root), then it's interesting to see what happens in RenderDoc: * first we do the perspective warp into a render target; * then we ping-pong 2 passes to do the blur; * and that goes into a tile cache. The order of operations is thus different from what we get with regular "establishes a raster root": * first blit into a (larger) rendertarget, without perspective; * ping-pong 2 passes for blur; * apply the perspective warp when rasterizing into the tilecache. The latter sounds more correct based on guessing what the yaml's order of operations is supposed to be. Thus I think I can start the plumbing by using the order of operations as a test case: lower `MAX_SURFACE_SIZE` and hack away until it manages to do the latter set of renderpasses?
I think I have a reasonable repro case to start plumbing: if I use this yaml file... ``` root: items: - type: "stacking-context" perspective: 100 perspective-origin: 100 100 items: - type: "stacking-context" filters: blur(2) transform: rotate-x(15) items: - image: checkerboard(2, 8, 64); bounds: [40, 40, 516, 516] - image: checkerboard(2, 32, 2); bounds: [700, 40, 68, 68] ``` ... and artifically lower `MAX_SURFACE_SIZE: f32 = 256.0` (nested picture no longer establishes a root), then it's interesting to see what happens in RenderDoc: * first we do the perspective warp into a render target; * then we ping-pong 2 passes to do blur the result of step 1; * and that goes into a tile cache. The order of operations is thus different from what we get with regular "establishes a raster root": * first blit into a (larger) rendertarget, without perspective; * ping-pong 2 passes to blur this flat output of step 1; * apply the perspective warp when rasterizing into the tilecache. The latter sounds more correct based on guessing what the yaml's order of operations is supposed to be. Thus I think I can start the plumbing by using the order of operations as a test case: lower `MAX_SURFACE_SIZE` and hack away until it manages to do the latter set of renderpasses?
I think I have a reasonable repro case to start plumbing: if I use this yaml file... ``` root: items: - type: "stacking-context" perspective: 100 perspective-origin: 100 100 items: - type: "stacking-context" filters: blur(2) transform: rotate-x(15) items: - image: checkerboard(2, 8, 64); bounds: [40, 40, 516, 516] - image: checkerboard(2, 32, 2); bounds: [700, 40, 68, 68] ``` ... and artifically lower `MAX_SURFACE_SIZE: f32 = 256.0` (nested picture no longer establishes a root), then it's interesting to see what happens in RenderDoc: * first we do the perspective warp into a render target; * then we ping-pong 2 passes to blur the result of step 1; * and that goes into a tile cache. The order of operations is thus different from what we get with regular "establishes a raster root": * first blit into a (larger) rendertarget, without perspective; * ping-pong 2 passes to blur this flat output of step 1; * apply the perspective warp when rasterizing into the tilecache. The latter sounds more correct based on guessing what the yaml's order of operations is supposed to be. Thus I think I can start the plumbing by using the order of operations as a test case: lower `MAX_SURFACE_SIZE` and hack away until it manages to do the latter set of renderpasses?