Unbind the SRVs an ore D3D11 pass bound when it finishes
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 61/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- cpp
- Área
- backend-api-design
Línea de trabajo
The change belongs in source/renderer/ore/d3d11/ore_render_pass_d3d11.cpp, in RenderPassD3D11::finish(). Read how the pass tracks its bound groups and pipeline slots, then check how finish releases bound resources. Done means the pass unbinds the SRVs it bound so the next pass can render to a sampled texture without D3D11 debug layer hazard warnings.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Unbind the SRVs an ore D3D11 pass bound when it finishes.
- source/renderer/ore/d3d11/ore_render_pass_d3d11.cpp: Ore D3D11 pass finish: unbind the shader resource views the pass bound, so the next pass can render into a texture this one sampled without tripping the D3D11 debug layer hazards (STATE_SETTING WARNING #9 and #7)
diff --git a/source/renderer/ore/d3d11/ore_render_pass_d3d11.cpp b/source/renderer/ore/d3d11/ore_render_pass_d3d11.cpp
index be997baaf1a3ae6485d7c51d3a0b7dc23de078b7..247a668fb3b783ec58c6b17ae4f05f22db963110 100644
--- a/source/renderer/ore/d3d11/ore_render_pass_d3d11.cpp
+++ b/source/renderer/ore/d3d11/ore_render_pass_d3d11.cpp
@@ -484,7 +484,37 @@ void RenderPassD3D11::finish()
if (m_finished)
return;
m_finished = true;
+
+ if (m_d3d11Context != nullptr && m_currentPipeline != nullptr)
+ {
+ ID3D11ShaderResourceView* nullView = nullptr;
+ const Pipeline* pipeline = m_currentPipeline.get();
+ const auto unbindView =
+ [&](uint32_t groupIndex, uint32_t binding, SlotSpace space)
+ {
+ const Pipeline::StageSlots slots =
+ pipeline->slots(groupIndex, binding, space);
+ if (slots.vs != BindingMap::kAbsent)
+ m_d3d11Context->VSSetShaderResources(slots.vs, 1, &nullView);
+ if (slots.fs != BindingMap::kAbsent)
+ m_d3d11Context->PSSetShaderResources(slots.fs, 1, &nullView);
+ };
+
+ for (uint32_t g = 0; g < kMaxBindGroups; ++g)
+ {
+ const auto* bg = static_cast<const BindGroupD3D11*>(m_boundGroups[g].get());
+ if (bg == nullptr)
+ continue;
+
+ for (const auto& texture : bg->m_d3d11Textures)
+ unbindView(g, texture.binding, SlotSpace::texture);
+ for (const auto& storage : bg->m_d3d11StorageBuffers)
+ unbindView(g, storage.binding, SlotSpace::buffer);
+ }
+ }
+
releaseBoundResources();
+
if (m_d3d11Context != nullptr)
{
// Unbind render targets so attached textures can be used as SRVs.
- Lenguaje dominante
- C++
- Estrellas
- 1.2k
- Forks
- 133
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de rive-app/rive-runtime
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 83/100
rive-app/rive-runtime#143 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
rive-app/rive-runtime#141 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
rive-app/rive-runtime#140 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
rive-app/rive-runtime#137 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
rive-app/rive-runtime#134 ·
Todos los issues de rive-app/rive-runtime
Issues similares
-
zq prints a raw SQL 'no such table: index_default' error when the index has no default indexAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
mattgodbolt/zindex#67 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
NKI-AI/fastslide#105 · 2 comentarios ·
Los mantenedores suelen responder en 3 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
DarkCastleMUD/DarkCastle#283 ·
-
Toggle state is unclearAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100