From 56077977438bd1df3710c7e2e177bd8ac77d65b4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 30 May 2025 13:02:39 -0400 Subject: [PATCH] d3d10umd: update to latest pipe_surface changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit does it work? nobody knows! Reviewed-by: Marek Olšák Part-of: --- src/gallium/frontends/d3d10umd/Device.cpp | 6 ++-- .../frontends/d3d10umd/OutputMerger.cpp | 29 +++++++++++-------- src/gallium/frontends/d3d10umd/State.h | 9 +++--- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/gallium/frontends/d3d10umd/Device.cpp b/src/gallium/frontends/d3d10umd/Device.cpp index e055989b856..0ec9f88da38 100644 --- a/src/gallium/frontends/d3d10umd/Device.cpp +++ b/src/gallium/frontends/d3d10umd/Device.cpp @@ -45,6 +45,7 @@ #include "Debug.h" #include "util/u_sampler.h" +#include "util/u_framebuffer.h" static void APIENTRY DestroyDevice(D3D10DDI_HDEVICE hDevice); @@ -340,10 +341,7 @@ DestroyDevice(D3D10DDI_HDEVICE hDevice) // IN DeleteEmptyShader(pDevice, PIPE_SHADER_FRAGMENT, pDevice->empty_fs); DeleteEmptyShader(pDevice, PIPE_SHADER_VERTEX, pDevice->empty_vs); - pipe_surface_reference(&pDevice->fb.zsbuf, NULL); - for (i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) { - pipe_surface_reference(&pDevice->fb.cbufs[i], NULL); - } + util_unreference_framebuffer_state(&pDevice->fb); for (i = 0; i < PIPE_MAX_ATTRIBS; ++i) { if (!pDevice->vertex_buffers[i].is_user_buffer) { diff --git a/src/gallium/frontends/d3d10umd/OutputMerger.cpp b/src/gallium/frontends/d3d10umd/OutputMerger.cpp index c85a853b35c..daedc37be92 100644 --- a/src/gallium/frontends/d3d10umd/OutputMerger.cpp +++ b/src/gallium/frontends/d3d10umd/OutputMerger.cpp @@ -90,6 +90,7 @@ CreateRenderTargetView( struct pipe_surface desc; memset(&desc, 0, sizeof desc); + pipe_resource_reference(&desc.texture, resource); desc.format = FormatTranslate(pCreateRenderTargetView->Format, false); switch (pCreateRenderTargetView->ResourceDimension) { @@ -130,8 +131,7 @@ CreateRenderTargetView( return; } - pRTView->surface = pipe->create_surface(pipe, resource, &desc); - assert(pRTView->surface); + pRTView->surface = desc; } @@ -155,7 +155,7 @@ DestroyRenderTargetView(D3D10DDI_HDEVICE hDevice, // IN RenderTargetView *pRTView = CastRenderTargetView(hRenderTargetView); - pipe_surface_reference(&pRTView->surface, NULL); + pipe_resource_reference(&pRTView->surface.texture, NULL); } @@ -290,6 +290,7 @@ CreateDepthStencilView( struct pipe_surface desc; memset(&desc, 0, sizeof desc); + pipe_resource_reference(&desc.texture, resource); desc.format = FormatTranslate(pCreateDepthStencilView->Format, true); switch (pCreateDepthStencilView->ResourceDimension) { @@ -319,8 +320,7 @@ CreateDepthStencilView( return; } - pDSView->surface = pipe->create_surface(pipe, resource, &desc); - assert(pDSView->surface); + pDSView->surface = desc; } @@ -344,7 +344,7 @@ DestroyDepthStencilView(D3D10DDI_HDEVICE hDevice, // IN DepthStencilView *pDSView = CastDepthStencilView(hDepthStencilView); - pipe_surface_reference(&pDSView->surface, NULL); + pipe_resource_reference(&pDSView->surface.texture, NULL); } @@ -753,19 +753,24 @@ SetRenderTargets(D3D10DDI_HDEVICE hDevice, // IN pDevice->fb.nr_cbufs = 0; for (unsigned i = 0; i < RTargets; ++i) { - pipe_surface_reference(&pDevice->fb.cbufs[i], - CastPipeRenderTargetView(phRenderTargetView[i])); - if (pDevice->fb.cbufs[i]) { + struct pipe_surface *psurf = CastPipeRenderTargetView(phRenderTargetView[i]); + pipe_resource_reference(&pDevice->fb.cbufs[i].texture, + psurf && psurf->texture ? psurf->texture : NULL); + if (psurf && psurf->texture) { pDevice->fb.nr_cbufs = i + 1; + pDevice->fb.cbufs[i] = *psurf; } } for (unsigned i = RTargets; i < PIPE_MAX_COLOR_BUFS; ++i) { - pipe_surface_reference(&pDevice->fb.cbufs[i], NULL); + pipe_resource_reference(&pDevice->fb.cbufs[i].texture, NULL); } - pipe_surface_reference(&pDevice->fb.zsbuf, - CastPipeDepthStencilView(hDepthStencilView)); + struct pipe_surface *zsbuf = CastPipeDepthStencilView(hDepthStencilView); + pipe_resource_reference(&pDevice->fb.zsbuf.texture, zsbuf && zsbuf->texture ? zsbuf->texture : NULL); + if(zsbuf && zsbuf->texture) { + pDevice->fb.zsbuf = *zsbuf; + } /* * Calculate the width/height fields for this framebuffer. D3D10 diff --git a/src/gallium/frontends/d3d10umd/State.h b/src/gallium/frontends/d3d10umd/State.h index 6a05c3cde0f..a710ae0c9ec 100644 --- a/src/gallium/frontends/d3d10umd/State.h +++ b/src/gallium/frontends/d3d10umd/State.h @@ -207,7 +207,7 @@ CastPipeBuffer(D3D10DDI_HRESOURCE hResource) struct RenderTargetView { - struct pipe_surface *surface; + struct pipe_surface surface; D3D10DDI_HRTRENDERTARGETVIEW hRTRenderTargetView; }; @@ -223,13 +223,13 @@ static inline struct pipe_surface * CastPipeRenderTargetView(D3D10DDI_HRENDERTARGETVIEW hRenderTargetView) { RenderTargetView *pRenderTargetView = CastRenderTargetView(hRenderTargetView); - return pRenderTargetView ? pRenderTargetView->surface : NULL; + return pRenderTargetView ? &pRenderTargetView->surface : NULL; } struct DepthStencilView { - struct pipe_surface *surface; + struct pipe_surface surface; D3D10DDI_HRTDEPTHSTENCILVIEW hRTDepthStencilView; }; @@ -245,7 +245,7 @@ static inline struct pipe_surface * CastPipeDepthStencilView(D3D10DDI_HDEPTHSTENCILVIEW hDepthStencilView) { DepthStencilView *pDepthStencilView = CastDepthStencilView(hDepthStencilView); - return pDepthStencilView ? pDepthStencilView->surface : NULL; + return pDepthStencilView ? &pDepthStencilView->surface : NULL; } @@ -408,4 +408,3 @@ CastPipeQuery(D3D10DDI_HQUERY hQuery) Query *pQuery = CastQuery(hQuery); return pQuery ? pQuery->handle : NULL; } -